Description
The project already invests in a11y (see app/(dashboard)/settings/ACCESSIBILITY.md and its __tests__/settings.a11y.test.tsx), but coverage is uneven elsewhere. components/navbar/MobileDrawer.tsx implements an ad-hoc focus trap and ESC handler in raw useEffects, components/navbar/Navbar.tsx and SearchInput.tsx need an aria/label review, and category status in components/events/events-table.tsx is conveyed largely through color badges. This issue runs a focused audit of those surfaces and lands fixes plus regression tests.
Requirements and context
- Audit and fix the dashboard
Navbar, MobileDrawer, SearchInput, and EventsTable for: accessible names on icon-only controls, correct focus management (the drawer should reliably trap focus and restore it to the trigger on close), and status conveyed by more than color.
- Ensure the mobile drawer's focus trap covers Shift+Tab wrap-around and returns focus to the opener; prefer the existing
components/ui/sheet.tsx/dialog.tsx Radix primitives if they simplify correct behavior.
- Add
aria-labels/roles where missing and ensure the events status/category indicators include a text or icon cue, not color alone.
- Non-functional: no visual redesign; changes must be keyboard- and screen-reader-verified; meet WCAG 2.1 AA for the touched components.
- Extend the existing a11y test approach used in the settings folder to the audited components.
Acceptance criteria
Suggested execution
1. Fork the repo and create a branch — git checkout -b feature/a11y-navbar-events.
2. Implement changes — components/navbar/MobileDrawer.tsx, components/navbar/Navbar.tsx, components/navbar/SearchInput.tsx, components/events/events-table.tsx.
3. Write/extend tests — Jest + React Testing Library + @testing-library/user-event with pnpm; add a11y tests modeled on app/(dashboard)/settings/__tests__/settings.a11y.test.tsx (role/label queries, focus assertions).
4. Test and commit —
pnpm install
pnpm test
pnpm test:coverage
pnpm lint
Example commit message
fix(a11y): label navbar controls, harden drawer focus trap, and de-color-only event status
Guidelines
- Aim for >=85% coverage on changed logic and document findings in the settings
ACCESSIBILITY.md or a new a11y doc.
- Verify with keyboard and a screen reader; target WCAG 2.1 AA for the touched surfaces.
- Timeframe: 96 hours.
Description
The project already invests in a11y (see
app/(dashboard)/settings/ACCESSIBILITY.mdand its__tests__/settings.a11y.test.tsx), but coverage is uneven elsewhere.components/navbar/MobileDrawer.tsximplements an ad-hoc focus trap and ESC handler in rawuseEffects,components/navbar/Navbar.tsxandSearchInput.tsxneed an aria/label review, and category status incomponents/events/events-table.tsxis conveyed largely through color badges. This issue runs a focused audit of those surfaces and lands fixes plus regression tests.Requirements and context
Navbar,MobileDrawer,SearchInput, andEventsTablefor: accessible names on icon-only controls, correct focus management (the drawer should reliably trap focus and restore it to the trigger on close), and status conveyed by more than color.components/ui/sheet.tsx/dialog.tsxRadix primitives if they simplify correct behavior.aria-labels/roles where missing and ensure the events status/category indicators include a text or icon cue, not color alone.Acceptance criteria
Suggested execution
1. Fork the repo and create a branch —
git checkout -b feature/a11y-navbar-events.2. Implement changes —
components/navbar/MobileDrawer.tsx,components/navbar/Navbar.tsx,components/navbar/SearchInput.tsx,components/events/events-table.tsx.3. Write/extend tests — Jest + React Testing Library +
@testing-library/user-eventwith pnpm; add a11y tests modeled onapp/(dashboard)/settings/__tests__/settings.a11y.test.tsx(role/label queries, focus assertions).4. Test and commit —
pnpm install pnpm test pnpm test:coverage pnpm lintExample commit message
Guidelines
ACCESSIBILITY.mdor a new a11y doc.