From a504dbfd3ff328f4ff0e3ca5dba5039585ff92a6 Mon Sep 17 00:00:00 2001 From: AAdIprog Date: Wed, 14 Jan 2026 17:53:28 +0530 Subject: [PATCH 1/2] fix(a11y): add keyboard navigation support for UseCases and VersionSelector Signed-off-by: AAdIprog --- src/components/docs/VersionSelector.tsx | 87 +++++++++++++------ .../master-page/UseCasesSection.tsx | 12 ++- 2 files changed, 71 insertions(+), 28 deletions(-) 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