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