import type { KeyboardEvent } from 'react'; interface TabItem { id: string; label: string; count?: number; disabled?: boolean; } interface TabsProps { items: TabItem[]; activeId: string; onChange: (id: string) => void; } export function Tabs({ items, activeId, onChange }: TabsProps): JSX.Element { function nextEnabled(from: number, direction: 1 | -1): string { const len = items.length; let i = (from + direction + len) % len; while (i !== from) { if (!items[i].disabled) return items[i].id; i = (i + direction + len) % len; } return items[from].id; } function handleKeyDown(e: KeyboardEvent, index: number) { if (e.key === 'ArrowRight') { e.preventDefault(); onChange(nextEnabled(index, 1)); } else if (e.key === 'ArrowLeft') { e.preventDefault(); onChange(nextEnabled(index, -1)); } } return (
{items.map((item, index) => { const isActive = item.id === activeId; const isDisabled = item.disabled ?? false; return ( ); })}
); }