diff --git a/src/components/SidebarControls.tsx b/src/components/SidebarControls.tsx index 6a438b4..ab57a62 100644 --- a/src/components/SidebarControls.tsx +++ b/src/components/SidebarControls.tsx @@ -104,12 +104,26 @@ function CheckList({ ); } -function FilterSection({ title, activeCount, children, dataFor, open = false }: { title: string; activeCount: number; children: ReactNode; dataFor?: string; open?: boolean }) { +function FilterSection({ title, activeCount, children, dataFor, open = false, onClear }: { title: string; activeCount: number; children: ReactNode; dataFor?: string; open?: boolean; onClear?: () => void }) { + const clearable = activeCount > 0 && Boolean(onClear); return (
0}> - {title} {activeCount} + {title} + {clearable ? ( + + ) : ( + {activeCount} + )}
{children}
@@ -202,7 +216,14 @@ export function SidebarControls({ - + ticketMode + ? onActiveFiltersChange({ ...activeFilters, orgs: new Set() }) + : onRepoFiltersChange({ ...repoFilters, orgs: new Set() })} + > - + onActiveFiltersChange({ ...activeFilters, repos: new Set() })}> onActiveFiltersChange({ ...activeFilters, repos: toggleSetValue(activeFilters.repos, value) })} /> - + onActiveFiltersChange({ ...activeFilters, labels: new Set() })}> onActiveFiltersChange({ ...activeFilters, labels: toggleSetValue(activeFilters.labels, value) })} /> - + onActiveFiltersChange({ ...activeFilters, authors: new Set() })}> onActiveFiltersChange({ ...activeFilters, authors: toggleSetValue(activeFilters.authors, value) })} /> - + onActiveFiltersChange({ ...activeFilters, assignees: new Set() })}> onActiveFiltersChange({ ...activeFilters, assignees: toggleSetValue(activeFilters.assignees, value) })} /> ) : ( <> - + onRepoFiltersChange({ ...repoFilters, languages: new Set() })}> onRepoFiltersChange({ ...repoFilters, languages: toggleSetValue(repoFilters.languages, value) })} /> - + onRepoFiltersChange({ ...repoFilters, visibility: "all" })}>
{(["all", "public", "private"] as const).map((value) => ( ))}
- + onRepoFiltersChange({ ...repoFilters, includeForks: true, includeArchived: false })}>
Include forks
Include archived
diff --git a/src/styles/layout-sidebar.css b/src/styles/layout-sidebar.css index 5271f32..72de1f7 100644 --- a/src/styles/layout-sidebar.css +++ b/src/styles/layout-sidebar.css @@ -82,6 +82,15 @@ padding: 1px 7px; border-radius: 10px; } .section .count.active { color: var(--text); background: var(--panel-3); border-color: var(--border); } + button.count.clearable { + font: inherit; line-height: 1; cursor: pointer; + display: inline-flex; align-items: center; justify-content: center; + min-width: 28px; + } + button.count.clearable .count-clear { display: none; } + button.count.clearable:hover { color: var(--accent); border-color: var(--accent); background: var(--accent-soft, var(--panel-3)); } + button.count.clearable:hover .count-num { display: none; } + button.count.clearable:hover .count-clear { display: inline; font-weight: 600; } .section-body { padding: 2px 10px 12px; } /* Tab-scoped sidebar sections */