// v2 Home — Claude-Design–style project picker (real backend) const V2HomeStage = ({ projects, user, onOpenProject, onNewProject }) => { const [recentTab, setRecentTab] = React.useState('Recent'); const [search, setSearch] = React.useState(''); const [name, setName] = React.useState(''); const [creating, setCreating] = React.useState(false); const list = (projects || []).map(p => ({ id: p.id, name: p.name, sub: `${p.client || ''} ${p.created_at ? '· ' + new Date(p.created_at).toLocaleDateString() : ''}`.trim(), when: p.created_at ? new Date(p.created_at).toLocaleDateString() : 'Recent', scope: p._scope || 'mine', isOwner: !!p._is_owner, fileCount: (p.folders || []).reduce((n,f) => n + (f.files||[]).length, 0), raw: p, })); const filtered = list.filter(p => { if (recentTab === 'Your Projects' && p.scope !== 'mine') return false; if (recentTab === 'Team' && p.scope !== 'team') return false; return !search || p.name.toLowerCase().includes(search.toLowerCase()); }); const showTutorial = recentTab === 'Recent' && !search; const create = async () => { if (!name.trim() || creating) return; setCreating(true); try { await onNewProject({client:'', name: name.trim(), brief:''}); setName(''); } finally { setCreating(false); } }; return (
{/* LEFT RAIL */} {/* RIGHT MAIN */}
setSearch(e.target.value)} placeholder="Search" style={{width:'100%', padding:'8px 12px 8px 32px', border:'1px solid var(--rule)', borderRadius:8, background:'var(--paper)', fontSize:12, fontFamily:'inherit', outline:'none'}}/>
{['Recent','Your Projects','Team'].map(t => ( ))}
{showTutorial && } {filtered.map(p => ( ))} {filtered.length===0 && !showTutorial && (
{recentTab === 'Team' ? '팀원이 공유한 프로젝트가 없습니다.' : (projects.length === 0 ? '아직 프로젝트가 없어요. 왼쪽에서 새 프로젝트를 만들어보세요.' : '검색 결과 없음')}
)}
); }; const V2TutorialCard = () => (
×
Learn about
Palette Mosaic
Quick tutorial →
); const V2DocStack = () => ( ); const V2LivePreview = () => (
{[0,1,2,3,4,5].map(i=>(
))}
); window.V2HomeStage = V2HomeStage;