Skip to content

Accessibility: Keyboard & ARIA #4892

@n-lark

Description

@n-lark

Accessibility: Keyboard & ARIA Tasks 2 & 3 - Changes

Changes

File What changed
src/_includes/migration.njk File drop zone: role="button", tabindex="0", aria-label, Enter/Space handler
src/integrations/index.njk Pagination <li onclick><button> with aria-label; fixed broken aria-labelledbyaria-label on <nav>
src/_includes/feature_lists/features-table-base.njk Feature info labels: role="button", tabindex="0", Enter/Space handler; dialog overlay: same; dialog containers: role="dialog", aria-modal, aria-labelledby with unique IDs
src/pricing/index.njk Escape key closes active feature dialogs
src/_includes/components/ai-expert-modal.njk role="dialog", aria-modal="true", aria-labelledby on modal; id on heading; aria-label on close button
src/js/ai-expert-modal.js Escape key closes modal; focus trap (Tab/Shift+Tab cycle); focus moves to textarea on open

Test Plan

Keyboard navigation

  • Migration page (/dashboard/migration/) - Tab to the drop zone, press Enter or Space, confirm file picker opens
  • Integrations page (/integrations/) - Tab to PREVIOUS/NEXT buttons, press Enter, confirm pagination works
  • Pricing page (/pricing/) - Tab to a feature info icon, press Enter, confirm dialog opens; press Escape to close
  • AI Expert modal - Open the modal, press Escape to close; reopen and Tab through all interactive elements, confirm focus stays trapped inside the modal

Screen reader (VoiceOver on Mac: Cmd+F5)

  • Migration drop zone announces as a button with its label
  • Pagination PREVIOUS/NEXT announce as buttons
  • Feature dialogs announce as "dialog" when opened
  • AI Expert modal announces as "dialog" with "Expert" as its label
  • Close buttons announce their labels ("Close dialog")

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions