// 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 (
{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 });