From ad7a7b9b00ba98da5dcfd40c8e91f695ec4ca17a Mon Sep 17 00:00:00 2001 From: zenchantlive Date: Fri, 13 Feb 2026 12:51:48 -0800 Subject: [PATCH] Add EpicChipStrip to kanban page with All Epics option and hide closed epics - Move EpicChipStrip to shared components - Use EpicChipStrip in kanban controls (full width) - Add 'All Epics' option to show all tasks - Filter closed epics from selector when 'Show closed' is unchecked - Update imports in dependency-graph-page.tsx --- src/components/kanban/kanban-controls.tsx | 31 +++++++++++++--------- src/components/shared/epic-chip-strip.tsx | 32 ++++++++++++++++++++++- 2 files changed, 49 insertions(+), 14 deletions(-) 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 })} + /> + -