import { useId, useState, type ReactNode, type KeyboardEvent } from 'react'; export interface ClientInfoTab { id: string; label: string; content?: ReactNode; } /** Shared attached-panel presentation for every Client Info tab. */ export function ClientInfoTabs({ tabs }: { tabs: readonly ClientInfoTab[] }) { const prefix = useId(); const [selected, setSelected] = useState(tabs[0]?.id); const active = tabs.some(tab => tab.id === selected) ? selected : tabs[0]?.id; const navigate = (event: KeyboardEvent, index: number) => { let next: number; if (event.key === 'ArrowRight') next = (index + 1) % tabs.length; else if (event.key === 'ArrowLeft') next = (index + tabs.length - 1) % tabs.length; else if (event.key === 'Home') next = 0; else if (event.key === 'End') next = tabs.length - 1; else return; event.preventDefault(); setSelected(tabs[next].id); document.getElementById(`${prefix}-tab-${tabs[next].id}`)?.focus(); }; return
{tabs.map((tab, index) => )}
{tabs.map(tab => )}
; }