Summary
The swap interface list isn't keyboard-navigable — every item is a tab stop and arrow keys do nothing. Implement roving-tabindex navigation with proper focus semantics.
Why this matters
A list that can't be driven by keyboard excludes power and AT users. Roving tabindex is the ARIA-correct, testable pattern.
Requirements
- One tab stop for the swap interface list; arrow keys move focus between items.
- Home/End jump to first/last; Enter/Space activate the focused item.
- Correct roles and
tabindex management (roving).
- Focus is always visible.
Technical guidance
- Only the active item has
tabindex=0; others -1.
- Keep focus in sync when the list changes.
Edge cases — each must have a test
Acceptance criteria
Out of scope
- Type-ahead search
- Drag-and-drop reordering
Rewards
Part of the GrantFox OSS / Official Campaign (FWC26) — this task may be rewarded. PR quality is assessed by AI: depth, correctness under edge cases, meaningful tests, and clean design are what earn the reward. Shallow changes (typos, formatting, trivial docs) do not qualify.
Summary
The swap interface list isn't keyboard-navigable — every item is a tab stop and arrow keys do nothing. Implement roving-tabindex navigation with proper focus semantics.
Why this matters
A list that can't be driven by keyboard excludes power and AT users. Roving tabindex is the ARIA-correct, testable pattern.
Requirements
tabindexmanagement (roving).Technical guidance
tabindex=0; others-1.Edge cases — each must have a test
Acceptance criteria
npm run lint,npm test, andnpm run buildall pass locallyCloses #<issue>Out of scope
Rewards
Part of the GrantFox OSS / Official Campaign (FWC26) — this task may be rewarded. PR quality is assessed by AI: depth, correctness under edge cases, meaningful tests, and clean design are what earn the reward. Shallow changes (typos, formatting, trivial docs) do not qualify.