diff --git a/packages/ui/src/components/FocusHandler.svelte b/packages/ui/src/components/FocusHandler.svelte index 12aa768ef2..e31bb1f286 100644 --- a/packages/ui/src/components/FocusHandler.svelte +++ b/packages/ui/src/components/FocusHandler.svelte @@ -6,11 +6,9 @@ function handleKey (evt: KeyboardEvent): void { if (evt.code === 'Tab' && isEnabled) { - const result = manager.next(evt.shiftKey ? -1 : 1) - if (result) { - evt.preventDefault() - evt.stopPropagation() - } + evt.preventDefault() + evt.stopPropagation() + manager.next(evt.shiftKey ? -1 : 1) } } diff --git a/packages/ui/src/focus.ts b/packages/ui/src/focus.ts index c8daf4d1cd..3aedb5fd24 100644 --- a/packages/ui/src/focus.ts +++ b/packages/ui/src/focus.ts @@ -4,7 +4,7 @@ import { getContext, onDestroy, setContext } from 'svelte' * @public */ export interface FocusManager { - next: (inc?: 1 | -1) => boolean + next: (inc?: 1 | -1) => void setFocus: (idx: number) => void setFocusPos: (order: number) => void updateFocus: (idx: number, order: number) => void @@ -43,15 +43,15 @@ class FocusManagerImpl implements FocusManager { }) } - next (inc?: 1 | -1): boolean { + next (inc?: 1 | -1): void { const current = this.elements[this.current] - if (!(current?.canBlur?.() ?? false)) { - return false + if (!(current?.canBlur?.() ?? true)) { + return } while (true) { this.current = this.current + (inc ?? 1) if (this.elements[Math.abs(this.current) % this.elements.length].focus()) { - return true + return } } }