Skip to content

[GEN-01] Search results listbox passes hardcoded selected=false #344

@intendednull

Description

@intendednull

Audit finding from #300 (commit 679f9fe)

Severity: medium
Category: a11y
File: crates/web/src/components/search/results.rs:96
Obvious fix: no

Description

Every ResultRow is rendered with selected=Signal::derive(|| false). There is no roving-tabindex / aria-activedescendant wiring, so keyboard users cannot tell which row would be activated by Enter, and screen readers never see a selected option in the listbox the spec calls out.

Impact / Threat

User-facing — keyboard / screen-reader navigation through search results is effectively broken.

Suggested fix

Track an active_index signal at the surface level, derive selected per row by comparing against active_index, drive Up/Down/Home/End from <SearchInput>'s on_keydown, and set aria-activedescendant on the input.

Verify

rg "Signal::derive\(\|\| false\)" crates/web/src/components/search

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions