// Board — kanban over inferred lifecycle, with Gantt/Dependencies stubs function BoardScreen({ onOpenIssue }) { const DS = window.CommiTeaDesignSystem_20e63b; const { Card, Tag, Badge, Tabs, IconButton, Input, Icon } = DS; const d = window.CT_DATA; const [tab, setTab] = React.useState('board'); const [query, setQuery] = React.useState(''); const q = query.trim().toLowerCase(); const filtered = d.columns.map((c) => ({ ...c, issues: q ? c.issues.filter((i) => (i.title + ' #' + i.id).toLowerCase().includes(q)) : c.issues })); const anyMatch = filtered.some((c) => c.issues.length > 0); const openCount = d.columns.reduce((n, c) => n + (c.id === 'done' ? 0 : c.issues.length), 0); const IssueCard = ({ issue }) => (
onOpenIssue(issue)} style={{ background: 'var(--surface-card)', border: '1px solid var(--line-1)', borderRadius: 'var(--radius-2)', padding: '10px 12px', cursor: 'pointer', boxShadow: 'var(--shadow-1)', display: 'flex', flexDirection: 'column', gap: 8, }} onMouseEnter={(e) => { e.currentTarget.style.borderColor = 'var(--line-2)'; }} onMouseLeave={(e) => { e.currentTarget.style.borderColor = 'var(--line-1)'; }} >
{issue.title}
#{issue.id} {issue.labels.map((l) => )} {issue.days ? {issue.days} : null} {issue.pr ? {issue.pr} : null} {issue.who}
); return (

The pot

setQuery(e.target.value)} />
{tab === 'board' ? ( anyMatch ? (
{filtered.map((col) => (
{col.label} {col.issues.length}
{col.issues.map((i) => )}
))}
) : (
n + c.issues.length, 0)} issues; none of them answer to “${query.trim()}”.`} />
) ) : tab === 'deps' ? ( ) : ( )}
); } Object.assign(window, { BoardScreen });