fix: add command palette keyboard navigation - #50
Merged
Conversation
Contributor
Author
|
Post-merge production proof is complete. Deploy run 31915463739 succeeded at squash-merged main |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #49.
Summary
0.1.2TDD evidence
1674a687bfcbca9ca119c804465933409121050a: a real Chromium test opened the palette, typedcreateSPA, and pressed ArrowDown; focus remained in the input butaria-activedescendantstayed absent and no result became active.71de82cbb91f8f15cb81998f45564ce39eb1a1df: the same real-keyboard flow selects the first result, wraps ArrowUp to the last result and ArrowDown back to the first, then Enter performs a real route navigation to the selected destination.972133d18bb2dbad02d28ac33c958755791a81fe: browser regressions are excluded from the unit worker pool by a quoted cross-platform glob and run only through the browser-mode configuration.e64880e132a3417ca5bf4e3e48c975160e4af4c9: hosted run31915052863proved the dependency scanner could transform JSX in the test before the Askr plugin was active. The destination fixture now uses Askr's publicjsxruntime without JSX syntax, and the browser regression passes after moving the entire local Vite optimizer cache aside.843c4fe7c3809090323190595209c8979c9c883f: format, lint, types, 37 unit tests, the Chromium interaction regression, production client build, 276 generated Markdown pages, 286/286 successful SSG routes, and static-output contracts all passed;npm audit --omit=devreported 0 vulnerabilities.Root cause and permanent guardrails
aria-activedescendant, and invokes only that live result on Enter.role="option",aria-selected, and a visibledata-activestate; the surrounding input/list use the combobox/listbox relationship while DOM focus remains in the input for uninterrupted typing.userEventkeyboard input, and an actual registered destination. It asserts focus ownership, active-result semantics, visual state, wrapping in both directions, and final URL navigation.npm testincludes browser mode, and both CI and deployment workflows install Chromium before validation. Quoted pool exclusion prevents the browser file from silently falling into a non-browser worker on any shell; the JSX-free test fixture makes the dependency scan cold-cache safe instead of depending on a prior local optimization pass.Acceptance audit