import React from 'react'; interface TabComponentProps { activeValue: string; onValueChange: (value: string) => void; } export const Tabs = ({ children, value, onValueChange, className = '', }: { children?: React.ReactNode; value: string; onValueChange: (value: string) => void; className?: string; }) => { return (
{React.Children.map(children, (child) => { if (React.isValidElement(child)) { return React.cloneElement(child as React.ReactElement, { activeValue: value, onValueChange, }); } return child; })}
); }; export const TabsList = ({ children, className = '', activeValue, onValueChange, }: { children?: React.ReactNode; className?: string; activeValue?: string; onValueChange?: (value: string) => void; }) => { const handleKeyDown = (e: React.KeyboardEvent) => { const tabs = Array.from(e.currentTarget.querySelectorAll('[role="tab"]')) as HTMLElement[]; const currentIndex = tabs.findIndex((tab) => tab === e.target); let newIndex = currentIndex; if (e.key === 'ArrowLeft') { newIndex = currentIndex > 0 ? currentIndex - 1 : tabs.length - 1; } else if (e.key === 'ArrowRight') { newIndex = currentIndex < tabs.length - 1 ? currentIndex + 1 : 0; } else if (e.key === 'Home') { newIndex = 0; } else if (e.key === 'End') { newIndex = tabs.length - 1; } if (newIndex !== currentIndex) { e.preventDefault(); tabs[newIndex]?.focus(); tabs[newIndex]?.click(); } }; return (
{React.Children.map(children, (child) => { if (React.isValidElement(child)) { const childProps = child.props as { value: string }; return React.cloneElement(child, { isActive: childProps.value === activeValue, onClick: () => onValueChange?.(childProps.value), }); } return child; })}
); }; export const TabsTrigger = ({ children, value, isActive, onClick, className = '', }: { value: string; children?: React.ReactNode; isActive?: boolean; onClick?: () => void; className?: string; }) => { return ( ); }; TabsTrigger.displayName = 'TabsTrigger'; export const TabsContent = ({ children, value, className = '', activeValue, }: { value: string; children?: React.ReactNode; className?: string; activeValue?: string; }) => { const isHidden = value !== activeValue; return ( ); }; TabsContent.displayName = 'TabsContent';