diff --git a/src/web-ui/src/main.tsx b/src/web-ui/src/main.tsx index 58685bf2fb..a727002af8 100644 --- a/src/web-ui/src/main.tsx +++ b/src/web-ui/src/main.tsx @@ -188,14 +188,21 @@ function registerGlobalErrorHandlers() { registerGlobalErrorHandlers(); -// Disable Tab-key focus traversal globally. -// Tab still works inside Monaco Editor and xterm terminal where it has semantic meaning. +// Disable Tab-key focus traversal globally (IDE-style chrome). +// Allow Tab where it has semantic meaning: Monaco, xterm, and modal/dialog forms +// (SSH connect, account login, settings dialogs, etc. — Modal focus trap keeps focus inside). document.addEventListener( 'keydown', (e: KeyboardEvent) => { if (e.key !== 'Tab') return; const target = e.target as Element | null; - if (target?.closest('.monaco-editor, .xterm')) return; + if ( + target?.closest( + '.monaco-editor, .xterm, [role="dialog"], [aria-modal="true"]' + ) + ) { + return; + } e.preventDefault(); }, true