Gallery has no keyboard navigation — user who can't use a mouse (or prefers keyboard) has no way to move between design cards, no Tab/Enter pattern, no Arrow keys #240
Labels
No labels
blocked:commit-ready-failed
blocked:gate-fetch
blocked:gate-lint
blocked:gate-plan
blocked:gate-research
blocked:needs-attention
blocked:needs-decision
blocked:needs-human
blocked:no-changes
blocked:verify-failed
bug
deferred
feature-request
in-progress
needs-decompose
needs-triage
quickfix
security/medium
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/Kimi_Agent_Brother_10_Digitizing_App#240
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Finding
src/pages/Gallery.tsxhas nouseEffectwith akeydownlistener and noonKeyDownon the design cards.grep -n 'Arrow' src/pages/Gallery.tsxreturns 0 hits.A user with a keyboard-only setup (or screen reader) opens the Gallery:
The Gallery is a grid of cards. Standard grid keyboard navigation is:
Where
src/pages/Gallery.tsx(no keyboard listener)src/components/gallery/DesignCard.tsx(noonKeyDownon the card itself)grep -n 'tabIndex' src/components/gallery/DesignCard.tsxreturns 0 hitsSuggested fix shape
Add a keyboard listener to the Gallery's grid container:
Add
tabIndex={0}anddata-card-index={i}to the design card:The card's focus is managed by the global listener; only the active card has
tabIndex={0}, the rest are -1. This is the "roving tabindex" pattern, used in most grid UIs (file managers, photo galleries, etc.).Severity
Medium. Keyboard-only users can't use the Gallery effectively. Power users with trackpad issues notice.
Discovered by
Gap analysis (2026-10-02) of gallery accessibility.
Related
Closed in commit
6dc99c2—feat(#240): Gallery keyboard navigation.Behavior added:
tabIndex={0}; the rest are -1.role="listbox", each card isrole="option"witharia-selected, listbox hasaria-activedescendantpointing at the active card so screen readers announce selection changes.Files:
src/pages/Gallery.tsx,src/components/gallery/DesignCard.tsx, new tests insrc/pages/issue-240.test.tsx. Full suite: 1234 passing.