import * as React from 'react'; import { cn } from '@/lib/utils'; interface TabsContextValue { value: string; onValueChange: (value: string) => void; } const TabsContext = React.createContext(undefined); function useTabs() { const context = React.useContext(TabsContext); if (!context) { throw new Error('useTabs must be used within a Tabs'); } return context; } interface TabsProps { defaultValue?: string; value?: string; onValueChange?: (value: string) => void; children: React.ReactNode; className?: string; } const Tabs: React.FC = ({ defaultValue, value: controlledValue, onValueChange, children, className, }) => { const [internalValue, setInternalValue] = React.useState(defaultValue || ''); const value = controlledValue !== undefined ? controlledValue : internalValue; const handleValueChange = (newValue: string) => { if (controlledValue === undefined) { setInternalValue(newValue); } onValueChange?.(newValue); }; return (
{children}
); }; const TabsList = React.forwardRef>( ({ className, ...props }, ref) => (
) ); TabsList.displayName = 'TabsList'; interface TabsTriggerProps extends React.ButtonHTMLAttributes { value: string; } const TabsTrigger = React.forwardRef( ({ className, value: triggerValue, onClick, ...props }, ref) => { const { value, onValueChange } = useTabs(); const isActive = value === triggerValue; return (