Summary
PageTransition.tsx modal wrappers do not trap focus, do not restore focus on close, and have inconsistent ARIA roles across modal types.
Affected area
src/components/PageTransition.tsx
src/components/ui/dialog.tsx
- Modals:
WalletModal, TransactionProgress, TransactionDetailsModal, TransactionConfirmation, etc.
Steps to reproduce / impact
Keyboard users get trapped or, conversely, exit the modal without focus returning. Inconsistent ARIA roles means screen readers intermittently ignore the dialog.
Expected behaviour
Adopt a single <Dialog> primitive (Radix UI is already a dependency) for every modal. Disable body scroll, trap focus, return focus on close, expose aria-modal and aria-labelledby.
Acceptance criteria
Summary
PageTransition.tsxmodal wrappers do not trap focus, do not restore focus on close, and have inconsistent ARIA roles across modal types.Affected area
src/components/PageTransition.tsxsrc/components/ui/dialog.tsxWalletModal,TransactionProgress,TransactionDetailsModal,TransactionConfirmation, etc.Steps to reproduce / impact
Keyboard users get trapped or, conversely, exit the modal without focus returning. Inconsistent ARIA roles means screen readers intermittently ignore the dialog.
Expected behaviour
Adopt a single
<Dialog>primitive (Radix UI is already a dependency) for every modal. Disable body scroll, trap focus, return focus on close, exposearia-modalandaria-labelledby.Acceptance criteria
Dialogacross the app.