Repository navigation
Accessibility: axe CI gates, overlay primitives, live-region announcer, and accessible DataTable - #560
Merged
james2177 merged 5 commits intoSep 30, 2026
Conversation
…and remediation with axe a Closes stellar-vortex-protocol#488
… and Menu primitives with Closes stellar-vortex-protocol#489
…egion strategy for real-ti Closes stellar-vortex-protocol#490
…ards fully keyboard-access Closes stellar-vortex-protocol#491
|
@meetestherpeter Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
# Conflicts: # .storybook/preview.tsx # playwright.config.ts # src/components/ConnectivityBanner.tsx # src/components/ToastViewport.tsx # src/hooks/useDismissableOverlay.ts
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.
Summary
Accessibility: axe CI gates, overlay primitives, live-region announcer, and accessible DataTable
What was solved
#488 — [High] Run a full WCAG 2.2 AA audit and remediation with axe automation in Playwright and Storybook gates
Add automated WCAG 2.2 AA accessibility gates: axe-core scans in Playwright across all README routes in light/dark palettes at 400px and 1280px with a documented allowlist, Storybook a11y enforcement, and a manual audit checklist recorded in docs/accessibility.md, fixing discovered violations (including contrast tokens in globals.css).
Addressed:
#489 — [High] Create shared Dialog, Popover and Menu primitives with a single focus-management implementation
Build shared accessible overlay primitives (Dialog, Popover, Menu/Listbox helpers) with a single focus-management implementation, then migrate SwapCard pickers, SettingsPanel, CommandPalette, Tooltip and onboarding hints onto them, folding useDismissableOverlay into the primitives. Includes overlay stack context for nested overlays (LIFO focus restore), scroll lock without layout shift, background inert, portal rendering, reduced-motion transitions, docs in docs/components.md, and Storybook interaction tests.
Addressed:
#490 — [High] Design a screen-reader live-region strategy for real-time updates, toasts and quote changes
Introduce a central accessibility announcer for real-time updates: an
AnnouncerProviderwith auseAnnounce()API that renders persistent polite/assertive live regions with throttling, batching, coalescing keys, deduplication, and clearing semantics, then integrate it into toasts, quote deltas, feed inserts, connectivity changes, wallet connect/disconnect, and submission stepper transitions, with a documented policy table and tests.Addressed:
AnnouncerProvider+useAnnounce()API:announce(message, {politeness, key, coalesceMs})#491 — [High] Make data tables and leaderboards fully keyboard-accessible with grid semantics and roving tabindex
Implement an accessible DataTable/DataGrid pattern with roving tabindex, arrow-key navigation, sortable headers, and ARIA grid/table semantics, then apply it to the solver leaderboard, My Intents list, and analytics route table. Includes a headless useGridNavigation hook, responsive stacked-card rendering below 640px, focus/selection persistence by row key across live updates and virtualisation, and updated tests.
Addressed:
Changes
.storybook/preview.tsx(modify)src/hooks/useDismissableOverlay.ts(modify)src/components/ConnectivityBanner.tsx(modify)playwright.config.ts(modify)src/components/ui/Popover.tsx(create)src/components/ToastViewport.tsx(modify)e2e/command-palette.spec.ts(modify)src/components/ui/Dialog.tsx(create)src/components/Announcer.tsx(create)src/components/ui/DataTable.tsx(create)Approach
Issues
Closes #488
Closes #489
Closes #490
Closes #491