feat(KB-048): add collapsible list sections to dashboard

- Add section expansion state management with localStorage persistence
- Update section headers with chevron toggle controls
- Implement conditional task row rendering based on section state
- Add Expand All / Collapse All toolbar controls
- Add CSS styles for chevron rotation animation and section headers
- Add comprehensive tests for collapsible section behavior
This commit is contained in:
gsxdsm
2026-03-29 19:51:41 -07:00
parent 2ad581d829
commit 3b71d032a6
111 changed files with 23013 additions and 2936 deletions

View File

@@ -10,6 +10,11 @@ interface WorktreeGroupProps {
onOpenDetail: (task: TaskDetail) => void;
addToast: (message: string, type?: ToastType) => void;
globalPaused?: boolean;
tasks?: Task[]; // All tasks for dependency lookup
onUpdateTask?: (
id: string,
updates: { title?: string; description?: string; dependencies?: string[] }
) => Promise<Task>;
}
export function WorktreeGroup({
@@ -19,6 +24,8 @@ export function WorktreeGroup({
onOpenDetail,
addToast,
globalPaused,
tasks = [],
onUpdateTask,
}: WorktreeGroupProps) {
return (
<div className="worktree-group">
@@ -29,7 +36,7 @@ export function WorktreeGroup({
<span className="worktree-label">{label}</span>
</div>
{activeTasks.map((task) => (
<TaskCard key={task.id} task={task} onOpenDetail={onOpenDetail} addToast={addToast} globalPaused={globalPaused} />
<TaskCard key={task.id} task={task} onOpenDetail={onOpenDetail} addToast={addToast} globalPaused={globalPaused} tasks={tasks} onUpdateTask={onUpdateTask} />
))}
{queuedTasks.map((task) => (
<TaskCard
@@ -39,6 +46,8 @@ export function WorktreeGroup({
onOpenDetail={onOpenDetail}
addToast={addToast}
globalPaused={globalPaused}
tasks={tasks}
onUpdateTask={onUpdateTask}
/>
))}
</div>