[Design] Listbox typeahead: naming, placement, and full APG parity
Open
@johnleider is already working on this.
Since Aug 24, 2026.
C: Select
T: feature
- Dominant language
- TypeScript
- Stars
- 735
- Forks
- 10
- Avg merge
- 10h 47m
- Merged PRs (30d)
- 72
Description
Ask
Printable-character typeahead navigation for Select — and eventually any listbox-pattern surface — so keyboard users can jump the highlight to items by their leading character, matching native <select> behavior. Originates from the #543 WS4 accessibility audit; a working prototype was built in #635 and split out pending this design pass.
Open questions
- Name. The prototype exposed it as
typeahead(char)onVirtualFocusReturn, which breaks the composable's imperative verb family (highlight/clear/next/prev/first/last). Candidates:find,match. - Home.
useVirtualFocusowns the cursor and the item registry, so it is the natural host — but the feature embeds DOMtextContentreads into an otherwise DOM-light composable, anduseRovingFocuswill eventually want identical behavior. Options: keep it onuseVirtualFocus, or extract a shared text-matching seam both focus composables consume. - Scope / APG parity. The prototype was single-character only. Full APG listbox typeahead needs a timed multi-character buffer (
useTimeris the obvious substrate) and a decision on closed-state semantics — native<select>responds to typeahead while closed (changing the value), whereas the prototype was inert unless the listbox was open.
Prototype
The removed implementation (composable method, SelectActivator keydown wiring, unit + browser tests) is recoverable at the pre-split head of #635: bdb78da8e.
Refs #543, #635.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.