// App shell — left rail + content + agent panel, issue page, theme toggle function Shell() { const DS = window.CommiTeaDesignSystem_20e63b; const { Icon, Switch } = DS; const [view, setView] = React.useState('focus'); const [prevView, setPrevView] = React.useState('focus'); const [dark, setDark] = React.useState(false); const [issue, setIssue] = React.useState(null); const [offline, setOffline] = React.useState(false); const [readIds, setReadIds] = React.useState([]); const inboxUnread = window.CT_DATA.inbox.filter((n) => n.unread && !readIds.includes(n.id)).length; const openIssue = (i) => { setIssue(i); if (view !== 'issue') setPrevView(view); setView('issue'); }; React.useEffect(() => { document.documentElement.setAttribute('data-theme', dark ? 'dark' : 'light'); }, [dark]); if (view === 'firstrun') { return setView(dest)} />; } const NAV = [ { id: 'standup', label: 'Standup', icon: 'sun' }, { id: 'focus', label: 'Morning service', icon: 'coffee' }, { id: 'inbox', label: 'Inbox', icon: 'bell', count: inboxUnread || null }, { id: 'capture', label: 'Capture', icon: 'plus' }, { id: 'board', label: 'The pot', icon: 'square-kanban' }, { id: 'runway', label: 'Runway', icon: 'chart-line' }, { id: 'directives', label: 'Directives', icon: 'flag' }, ]; const NavItem = ({ item }) => { const active = view === item.id || (view === 'issue' && prevView === item.id) || ((view === 'calibration' || view === 'milestone') && item.id === 'runway'); return ( ); }; return (
{/* left rail */} {/* main */}
{offline ? : null} {view === 'focus' ? : null} {view === 'board' ? : null} {view === 'runway' ? setView('calibration')} onOpenMilestone={() => setView('milestone')} /> : null} {view === 'capture' ? setView('focus')} /> : null} {view === 'standup' ? setView('focus')} onOpenIssue={openIssue} /> : null} {view === 'settings' ? : null} {view === 'directives' ? : null} {view === 'issue' && issue ? setView(prevView)} onOpenIssue={openIssue} /> : null} {view === 'calibration' ? setView('runway')} /> : null} {view === 'milestone' ? setView('runway')} onOpenIssue={openIssue} /> : null} {view === 'states' ? setView('capture')} /> : null} {view === 'inbox' ? setView('directives')} readIds={readIds} setReadIds={setReadIds} /> : null}
setView('directives')} offline={offline} />
); } Object.assign(window, { Shell });