// screens-projects.jsx function Projects({ onOpenProject, navigate }) { const { PROJECTS: ALL_PROJECTS, ASSETS } = window.ZAMPP_DATA; const [search, setSearch] = React.useState(''); const [view, setView] = React.useState('grid'); let projects = ALL_PROJECTS; if (search) projects = projects.filter(p => p.name.toLowerCase().includes(search.toLowerCase())); return (

Projects

{projects.length} projects
setSearch(e.target.value)} placeholder="Search projects…" />
{projects.length === 0 ? (
No projects yet. Create one to get started.
) : view === 'grid' ? (
{projects.map(p => onOpenProject(p)} />)}
) : (
Project
Assets
Storage
Updated
{projects.map(p => (
onOpenProject(p)}>
{p.name}
{p.assets}
{p.updated}
))}
)}
); } function ProjectCard({ project, assets, onOpen }) { const thumbAssets = assets.filter(a => a.project_id === project.id).slice(0, 4); return (
{Array.from({ length: 4 }).map((_, i) => (
{thumbAssets[i] ? : }
))}
{project.name}
{project.assets} assets · updated {project.updated}
); } window.Projects = Projects;