diff --git a/tickets/006-collapse-via-title-bar-click.md b/tickets/006-collapse-via-title-bar-click.md
deleted file mode 100644
index d155273..0000000
--- a/tickets/006-collapse-via-title-bar-click.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Collapse sections by clicking title bar instead of a dedicated button
-
-Instead of having collapse buttons on the main view components/categories, clicking the title bars should collapse them.
-
-## Acceptance criteria
-- Clicking a section's title bar toggles its collapsed/expanded state.
-- Dedicated collapse buttons are removed (or repurposed as a visual indicator only, e.g. a chevron, without being the sole click target).
-- Title bar remains usable for any other existing interactions (if any) without conflicting with the collapse click.
diff --git a/webapp/src/components/Alerts.tsx b/webapp/src/components/Alerts.tsx
index 4dd4fcd..260bc45 100644
--- a/webapp/src/components/Alerts.tsx
+++ b/webapp/src/components/Alerts.tsx
@@ -9,7 +9,13 @@ import {
type AlertRule,
type CompareOp,
} from '../lib/api'
-import { CollapseToggle, sectionHeaderClassName, sectionHeaderLeftClassName, useSectionCollapsed } from './CollapsibleSection'
+import {
+ CollapseToggle,
+ handleSectionHeaderKeyDown,
+ sectionHeaderInteractiveClassName,
+ sectionHeaderLeftClassName,
+ useSectionCollapsed,
+} from './CollapsibleSection'
import { HelpIcon } from './HelpIcon'
import { queryInputClassName } from './FilterBar'
@@ -231,13 +237,20 @@ export function Alerts() {
return (
diff --git a/webapp/src/components/CollapsibleSection.tsx b/webapp/src/components/CollapsibleSection.tsx
index d3c3cfa..0c9fabc 100644
--- a/webapp/src/components/CollapsibleSection.tsx
+++ b/webapp/src/components/CollapsibleSection.tsx
@@ -3,9 +3,15 @@ import type { TimeRange } from './LogTimeline'
/// Shared look for a primary section's title bar: shaded so it reads as a
/// distinct band rather than blending into the section body below it.
+/// The bar itself is the collapse/expand click target (see `sectionHeaderInteractiveClassName`) —
+/// this className alone (no click handling) is for the rare header that stays static.
export const sectionHeaderClassName =
'flex items-center justify-between gap-2 border-b border-border-soft bg-surface-1 px-3 py-1.5'
+/// `sectionHeaderClassName` plus the affordance for a header row that toggles collapse on click:
+/// pointer cursor and a hover tint so the whole bar reads as clickable, not just the chevron.
+export const sectionHeaderInteractiveClassName = `${sectionHeaderClassName} cursor-pointer select-none hover:bg-surface-2`
+
/// Left-hand cluster of a section header: title text, help icon, collapse/pop-out controls.
export const sectionHeaderLeftClassName = 'flex items-center gap-1.5 text-sm font-medium text-text-secondary'
@@ -46,7 +52,24 @@ export function useSectionCollapsed(sectionId: string): [boolean, (next: boolean
return [collapsed, setCollapsed]
}
-export function CollapseToggle({ collapsed, onToggle }: { collapsed: boolean; onToggle: () => void }) {
+/// Chevron indicator for a section's collapsed/expanded state. For the title-bar sections
+/// (Alerts/Metrics/Params/Dashboards), the whole header row is the click target (see
+/// `sectionHeaderInteractiveClassName`) and `onToggle` is omitted — this renders as a
+/// non-interactive, decorative `span` rather than a nested `