feat(board): multiselect combobox for milestone + label filters #587
No reviewers
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks!587
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/583"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Replace text-filter inputs with
<MultiselectCombobox>(Base UI Combobox, multiple mode) for milestone and label facets. Values are derived from loaded cards; OR within a facet, AND across facets. URL switches to repeatable arrays.Test plan
×clears a facet; chip turnsbg-accent/10while active?label=a&label=bform; old?label=foolinks still work if verbatim matchjust qapasses — all 541 web tests greenCloses #583
a11y
apps/web/src/components/multiselect-combobox.tsx~line 91: the label<span>hasaria-hidden="true"but itsidis referenced byaria-labelledbyonCombobox.Trigger. Per the accname spec, traversal of a referencedaria-hiddenelement yields empty string, andaria-labelis not consulted as a fallback oncearia-labelledbyis present — the trigger ends up with no accessible name. Fix: removearia-hidden="true"from the label span (it is a visible label, no reason to hide it from AT), or droparia-labelledbyand rely solely onaria-label.behavior
apps/web/src/components/multiselect-combobox.tsx: AC requires⌘A selects all visible matches— not implemented. Base UI does not provide this natively; add anonKeyDownhandler onCombobox.InputorCombobox.Popup: whenmetaKey && key === "a", merge visible unselected items into the current selection.a11y
apps/web/src/components/multiselect-combobox.tsx~line 91: the label<span>hasaria-hidden="true"but itsidis referenced byaria-labelledbyonCombobox.Trigger. Per the accname spec, traversal of a referencedaria-hiddenelement yields empty string, andaria-labelis not consulted as a fallback oncearia-labelledbyis present - the trigger ends up with no accessible name. Fix: removearia-hidden="true"from the label span, or droparia-labelledbyand rely solely onaria-label.behavior
apps/web/src/components/multiselect-combobox.tsx: AC requires cmd+A to select all visible matches - not implemented. Add anonKeyDownonCombobox.InputorCombobox.Popup: whenmetaKey && key === "a", merge visible unselected items into the current selection.Both findings fixed in the latest commit.
aria-hidden="true"from the label<span>— it is a visible label with no reason to hide from AT, and the accname spec drops referenced aria-hidden nodes from the computed name.onKeyDownonCombobox.Input; whenmetaKey && key === "a", filtersitemsby the current input value (case-insensitive substring, mirroring Base UI built-in filtering) and merges all visible matches into the selection viaArray.from(new Set([...value, ...visible])).e.preventDefault()suppresses browser select-all on the input text.Both findings fixed in the latest commit.
aria-hidden="true"from the label span -- it is a visible label, and the accname spec drops aria-hidden nodes from the computed name of a referencing aria-labelledby.onKeyDownonCombobox.Input; whenmetaKey && key === "a", filters items by the current search query (case-insensitive substring) and merges visible matches into the selection viaArray.from(new Set([...value, ...visible])).e.preventDefault()suppresses browser select-all on the input text.Both prior findings addressed. CI green.
aria-hiddenremoved from the label span — accessible name now resolves correctly viaaria-labelledby.handleInputKeyDownonCombobox.Inputimplements ⌘A correctly: filters visible items by current query, merges into selection, prevents default.