import { useEffect, 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(); useEffect(() => { if (project) { document.documentElement.style.overflow = 'hidden'; document.body.style.overflow = 'hidden'; } return () => { document.documentElement.style.overflow = ''; document.body.style.overflow = ''; }; }, [project]); if (!project) return null; return (
e.stopPropagation()} > {/* Image header */}
{project.title}
{/* Close button — dark bg so icon always visible on any image */} {/* Category badge */} {project.category && project.category.length > 0 && (
{project.category.map((cat, i) => ( {cat} ))}
)}
{/* Content */}

{project.title}

{project.category && project.category.length > 0 && (
{project.year} • {project.category.join(', ')}
)}

{project.description}

{/* Info grid */}

Mahasiswa

{project.studentName}

{project.nim && (

NIM

{project.nim}

)}
{/* Members list */} {project.members && project.members.length > 0 && (

Anggota Tim

{project.members.map((m, i) => ( {m.nama}{m.nim ? ` (${m.nim})` : ''} ))}
)} {project.catatan && (

Catatan Tambahan

{project.catatan}

)} {/* Project link */} {project.link && ( {t.project.visitLink} )}
); }