diff --git a/src/components/docs/VersionSelector.tsx b/src/components/docs/VersionSelector.tsx index c6f47736..ff02a023 100644 --- a/src/components/docs/VersionSelector.tsx +++ b/src/components/docs/VersionSelector.tsx @@ -58,6 +58,34 @@ export function VersionSelector({ className = '', isMobile = false }: VersionSel return () => document.removeEventListener('keydown', handleEscape); }, []); + // Keyboard navigation + const [focusedIndex, setFocusedIndex] = useState(-1); + + // Reset focus when closed + useEffect(() => { + if (!isOpen) setFocusedIndex(-1); + }, [isOpen]); + + useEffect(() => { + if (!isOpen) return; + + function handleKeyDown(event: KeyboardEvent) { + if (event.key === 'ArrowDown') { + event.preventDefault(); + setFocusedIndex(i => (i + 1) % versions.length); + } else if (event.key === 'ArrowUp') { + event.preventDefault(); + setFocusedIndex(i => (i - 1 + versions.length) % versions.length); + } else if (event.key === 'Enter' && focusedIndex >= 0) { + event.preventDefault(); + handleVersionChange(versions[focusedIndex].key); + } + } + + document.addEventListener('keydown', handleKeyDown); + return () => document.removeEventListener('keydown', handleKeyDown); + }, [isOpen, versions.length, focusedIndex]); + const handleVersionChange = (versionKey: string) => { setIsOpen(false); @@ -74,11 +102,10 @@ export function VersionSelector({ className = '', isMobile = false }: VersionSel