Keep mobile Search and Preview focus-contained through Back navigation #1390

Closed
opened 2026-08-25 09:52:57 +00:00 by timmy · 0 comments
Owner

Evidence

#cmd-palette is presented as a dialog without aria-modal, and Search / Search Preview do not make the workspace chrome inert or contain Tab focus. frontend/dashboard.js opens Search and restores only the generic launcher; moving Search → Preview → Back has no shared modal owner. This is distinct from #317 (viewport geometry), #973 (preview navigation), and prior focus work for New Issue, Device Setup, and Security Center. A scan of all 698 historical issue titles and recent commits found no Search/Preview modal-lifecycle implementation.

User impact

Keyboard, switch-control, VoiceOver, and TalkBack users can move behind the visible Search workspace or lose their place while reviewing an issue/PR on a phone.

Scope

  • Add modal semantics to Search.
  • Introduce one reusable Search → Preview focus lifecycle that owns background inert state, dynamic focus containment, and exact opener restoration.
  • Keep containment active across Search → Preview → Back without exposing the underlying workspace.
  • Package the controller in the offline workspace bundle.

Acceptance tests

  • Opening Search focuses its input, marks header/main/mobile dock inert, and exposes an accessible modal.
  • Tab and Shift+Tab wrap across the visible enabled controls of the active Search or Preview surface.
  • Transitioning to Preview transfers containment without releasing background ownership.
  • Back to Search restores the Search input while retaining containment; final close restores the connected original launcher and every prior inert value.
  • Hidden/disabled controls are excluded and dynamically rendered Preview controls are included.
  • Source-level controller tests, packaged-bundle tests, focused UI tests, and the full suite pass.
## Evidence `#cmd-palette` is presented as a dialog without `aria-modal`, and Search / Search Preview do not make the workspace chrome inert or contain Tab focus. `frontend/dashboard.js` opens Search and restores only the generic launcher; moving Search → Preview → Back has no shared modal owner. This is distinct from #317 (viewport geometry), #973 (preview navigation), and prior focus work for New Issue, Device Setup, and Security Center. A scan of all 698 historical issue titles and recent commits found no Search/Preview modal-lifecycle implementation. ## User impact Keyboard, switch-control, VoiceOver, and TalkBack users can move behind the visible Search workspace or lose their place while reviewing an issue/PR on a phone. ## Scope - Add modal semantics to Search. - Introduce one reusable Search → Preview focus lifecycle that owns background inert state, dynamic focus containment, and exact opener restoration. - Keep containment active across Search → Preview → Back without exposing the underlying workspace. - Package the controller in the offline workspace bundle. ## Acceptance tests - Opening Search focuses its input, marks header/main/mobile dock inert, and exposes an accessible modal. - Tab and Shift+Tab wrap across the visible enabled controls of the active Search or Preview surface. - Transitioning to Preview transfers containment without releasing background ownership. - Back to Search restores the Search input while retaining containment; final close restores the connected original launcher and every prior inert value. - Hidden/disabled controls are excluded and dynamically rendered Preview controls are included. - Source-level controller tests, packaged-bundle tests, focused UI tests, and the full suite pass.
timmy self-assigned this 2026-08-25 09:52:57 +00:00
timmy closed this issue 2026-08-25 10:20:11 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stackchain/stackchain-dashboard#1390
No description provided.