import type { ReactNode } from 'react'; import { X, ExternalLink, Users, BookOpen, Calendar, Tag, FileText } from 'lucide-react'; import type { Project } from '../data'; import { useLang } from '../context/LanguageContext'; interface ProjectModalProps { project: Project | null; onClose: () => void; } function InfoRow({ icon, label, value }: { icon: ReactNode; label: string; value: string }) { return (
{icon}

{label}

{value}

); } export default function ProjectModal({ project, onClose }: ProjectModalProps) { const { t } = useLang(); if (!project) return null; return (
e.stopPropagation()} > {/* Image header */}
{project.title}
{/* Close button */} {/* Category badge */} {project.category && project.category.length > 0 && (
{project.category.map((cat, i) => ( {cat} ))}
)}
{/* Content */}

{project.title}

{/* Info grid */}
{project.studentName && ( } label={t.modal.mahasiswa} value={project.studentName} /> )} {project.nim && ( } label={t.modal.nim} value={project.nim} /> )} {project.year && ( } label={t.modal.tahun} value={String(project.year)} /> )} {project.category && project.category.length > 0 && ( } label={t.modal.bidang} value={project.category.join(', ')} /> )}
{/* Members list */} {project.members && project.members.length > 0 && (

Anggota Tim

    {project.members.map((m, i) => (
  • {m.nama.charAt(0).toUpperCase()}
    {m.nama} {m.nim && {m.nim}}
  • ))}
)} {/* Description */}

{t.modal.deskripsi}

{project.description}

{project.catatan && (

Catatan Tambahan

{project.catatan}

)}
{/* Project link */} {project.link ? ( {t.project.visitLink} ) : (
{t.project.noLink}
)}
); }