You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Settings, onboarding, KeyboardSheet, WorkflowsModal, AddProjectPathModal, and EditProjectModal now use useModalFocus from src/useModalFocus.ts (same pattern as ProviderQuotaDialog). Nested confirm dialogs still declare role=dialog aria-modal=true without the hook: Sidebar remove-project confirm (src/components/Sidebar.tsx around data-remove-confirm) and AgentsPanel restore-checkpoint confirm (src/components/AgentsPanel.tsx around data-restore-confirm). ThreadView also has a few role=dialog overlays. Wire useModalFocus the same way: dialog ref, tabIndex=-1, initial focus, Tab cycle, restore on close. Add a mounted test that opening the confirm moves document.activeElement inside it and Tab stays inside. Do not change the confirm copy or the delete/restore logic.
Done: useModalFocus is wired into the nested confirm dialogs (Sidebar remove-project, AgentsPanel restore, ThreadView dialogs). Closing in the 2026-10-09 board cleanup (#1532).
Activity
fix(a11y): trap keyboard focus in remaining top-level dialogs (#1255)
currentbits commentedon Oct 9, 2026
Done:
useModalFocusis wired into the nested confirm dialogs (Sidebar remove-project, AgentsPanel restore, ThreadView dialogs). Closing in the 2026-10-09 board cleanup (#1532).