Summary
The invoice marketplace modal doesn't trap focus, close on escape, or restore focus, so keyboard and screen-reader users get lost. Make it fully accessible.
Why this matters
An inaccessible modal locks out keyboard/AT users entirely. Focus management is a hard WCAG requirement, not a nicety.
Requirements
- Trap focus within the open invoice marketplace modal; Tab/Shift+Tab cycle inside it.
- Close on Escape and on overlay click; restore focus to the trigger on close.
- Correct ARIA (
role=dialog, aria-modal, labelled title).
- No visual regression.
Technical guidance
- Move focus to the first focusable element (or the dialog) on open.
- Remember and restore the previously-focused element.
Edge cases — each must have a test
Acceptance criteria
Out of scope
- Nested modals
- Animation polish
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 invoice marketplace modal doesn't trap focus, close on escape, or restore focus, so keyboard and screen-reader users get lost. Make it fully accessible.
Why this matters
An inaccessible modal locks out keyboard/AT users entirely. Focus management is a hard WCAG requirement, not a nicety.
Requirements
role=dialog,aria-modal, labelled title).Technical guidance
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.