chore(orbit): auto-focus first help accordion + visible keyboard-focus ring

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-24 19:47:10 +02:00
parent c9977a20e9
commit abbf6fc345
2 changed files with 16 additions and 2 deletions
+7 -2
View File
@@ -22,10 +22,15 @@ export default function OrbitHelpModal() {
useEffect(() => { useEffect(() => {
if (!isOpen) return; if (!isOpen) return;
// Focus the first accordion summary so arrow keys work immediately. // Focus the first accordion summary so arrow keys work immediately.
queueMicrotask(() => { // Uses a short setTimeout because the browser re-focuses the clicked
// trigger button after the click handler returns — our focus call has
// to happen *after* that, otherwise the browser silently overrides it
// and the user only gets keyboard nav after pressing Tab first.
const id = window.setTimeout(() => {
const first = bodyRef.current?.querySelector<HTMLElement>('summary'); const first = bodyRef.current?.querySelector<HTMLElement>('summary');
first?.focus(); first?.focus();
}); }, 60);
return () => window.clearTimeout(id);
}, [isOpen]); }, [isOpen]);
useEffect(() => { useEffect(() => {
+9
View File
@@ -11955,6 +11955,15 @@ html[data-psy-native-hidden="true"] *::after {
color: var(--text-secondary, var(--text-primary)); color: var(--text-secondary, var(--text-primary));
} }
.orbit-help-modal__body p:last-child { margin-bottom: 0; } .orbit-help-modal__body p:last-child { margin-bottom: 0; }
/* Keyboard focus indicator for accordion summaries the default outline
is too subtle against the modal's dark background. Uses focus-visible
so mouse clicks don't leave a lingering ring. */
.orbit-help-modal__body summary:focus-visible {
outline: none;
background: color-mix(in srgb, var(--accent) 14%, transparent);
box-shadow: inset 3px 0 0 var(--accent);
}
.orbit-help-modal__warn { .orbit-help-modal__warn {
display: flex; display: flex;
flex-direction: column; flex-direction: column;