diff --git a/src/components/kanban/kanban-controls.tsx b/src/components/kanban/kanban-controls.tsx index 9cb9d4c..a0bf0b7 100644 --- a/src/components/kanban/kanban-controls.tsx +++ b/src/components/kanban/kanban-controls.tsx @@ -5,6 +5,7 @@ import { motion } from 'framer-motion'; import type { KanbanFilterOptions, KanbanStats } from '../../lib/kanban'; import type { BeadIssue } from '../../lib/types'; +import { EpicChipStrip } from '../shared/epic-chip-strip'; import { StatPill } from '../shared/stat-pill'; interface KanbanControlsProps { @@ -27,8 +28,25 @@ export function KanbanControls({ const inputClass = 'ui-field rounded-xl px-3 py-2.5 text-sm outline-none transition'; + // Build bead counts map for EpicChipStrip + const beadCounts = new Map(); + for (const epic of epics) { + // Count non-epic issues that belong to this epic + const count = epic.dependencies?.filter(d => d.type === 'parent' && d.target === epic.id).length ?? 0; + beadCounts.set(epic.id, count); + } + return (
+ {/* Epic selector - full width like /graph page */} + + (filters.showClosed ? true : epic.status !== 'closed'))} + selectedEpicId={filters.epicId ?? null} + beadCounts={beadCounts} + onSelect={(epicId) => onFiltersChange({ ...filters, epicId: epicId || undefined })} + /> + -