These wrap Radix primitives, which generally handle focus trapping correctly out of the box, but this codebase layers custom content (forms, confirmation flows for send/receive) into them — audit for focus escaping to background content when async state changes happen mid-dialog (e.g. a loading spinner replacing form content while focused), and confirm Escape-to-close doesn't fire during an in-flight submission where it shouldn't.
Definition of done:
- Focus-trap behavior tested through at least one async-content-swap scenario per dialog usage (send confirmation, off-ramp confirmation)
- Escape-key behavior explicitly defined and tested during in-flight async operations
Before opening a PR for this issue, read CONTRIBUTING.md.
This is not a starter-issue. The Definition of done above is the full
acceptance criteria, not a subset to sample from — a PR that addresses part
of it is an unfinished issue, not a smaller one. Your PR must include, in
the PR description itself:
PRs missing these will be sent back before review, not reviewed and rejected — please do this up front.
These wrap Radix primitives, which generally handle focus trapping correctly out of the box, but this codebase layers custom content (forms, confirmation flows for send/receive) into them — audit for focus escaping to background content when async state changes happen mid-dialog (e.g. a loading spinner replacing form content while focused), and confirm Escape-to-close doesn't fire during an in-flight submission where it shouldn't.
Definition of done:
Before opening a PR for this issue, read CONTRIBUTING.md.
This is not a starter-issue. The Definition of done above is the full
acceptance criteria, not a subset to sample from — a PR that addresses part
of it is an unfinished issue, not a smaller one. Your PR must include, in
the PR description itself:
PRs missing these will be sent back before review, not reviewed and rejected — please do this up front.