import { DraftMark } from './NavigationGuard.jsx'; import { useEffect, useId, useRef } from 'react'; export function Tabs({ tabs, active, onChange }) { const id = useId(); const listRef = useRef(null); const tabRefs = useRef({}); useEffect(() => { const panel = listRef.current?.nextElementSibling; if (!panel) return; panel.id = `${id}-panel`; panel.setAttribute('role', 'tabpanel'); panel.setAttribute('aria-labelledby', `${id}-${active}`); }, [active, id]); function onKeyDown(event, index) { const delta = event.key === 'ArrowRight' ? 1 : event.key === 'ArrowLeft' ? -1 : 0; const next = event.key === 'Home' ? 0 : event.key === 'End' ? tabs.length - 1 : delta ? (index + delta + tabs.length) % tabs.length : null; if (next === null) return; event.preventDefault(); onChange(tabs[next].key); tabRefs.current[tabs[next].key]?.focus(); } return (
{tabs.map((tab, index) => ( ))}
); }