import { useState, type ReactNode } from "react"; import { cn } from "../../lib/cn"; export type TabsItem = { content?: ReactNode; label: string; value: string; }; export function Tabs({ contentClassName, defaultValue, items, listClassName, panelClassName, value, onValueChange, }: { contentClassName?: string; defaultValue?: string; items: TabsItem[]; listClassName?: string; panelClassName?: string; value?: string; onValueChange?: (value: string) => void; }) { const [internalValue, setInternalValue] = useState(defaultValue ?? items[0]?.value); const activeValue = value ?? internalValue ?? items[0]?.value; const activeItem = items.find((item) => item.value === activeValue) ?? items[0]; function handleChange(nextValue: string) { if (value === undefined) { setInternalValue(nextValue); } onValueChange?.(nextValue); } return (
{items.map((item) => { const active = item.value === activeValue; return ( ); })}
{activeItem?.content ? (
{activeItem.content}
) : null}
); }