'use client'; import { Tab } from '@headlessui/react'; import { ReactNode } from 'react'; function classNames(...classes: string[]) { return classes.filter(Boolean).join(' '); } export interface TabItem { name: string; icon?: React.ComponentType<{ className?: string }>; content: ReactNode; } interface TabsProps { tabs: TabItem[]; defaultIndex?: number; onChange?: (index: number) => void; variant?: 'card' | 'modal'; // Novo: variante para diferentes contextos } export default function Tabs({ tabs, defaultIndex = 0, onChange, variant = 'card' }: TabsProps) { if (variant === 'modal') { // Versão para modais - sem card wrapper return ( {tabs.map((tab) => ( classNames( 'px-4 py-3 text-sm font-medium border-b-2 transition-colors focus:outline-none whitespace-nowrap', selected ? 'border-[var(--brand-color)] text-[var(--brand-color)]' : 'border-transparent text-zinc-500 hover:text-zinc-700 dark:hover:text-zinc-300' ) } >
{tab.icon && } {tab.name}
))}
{tabs.map((tab, idx) => ( {tab.content} ))}
); } // Versão padrão para páginas - com card wrapper return (
{tabs.map((tab) => ( classNames( 'w-full rounded-lg py-2 sm:py-2.5 px-3 sm:px-4 text-xs sm:text-sm font-medium leading-5 transition-all duration-200 whitespace-nowrap', 'focus:outline-none', selected ? 'bg-white dark:bg-zinc-800 text-zinc-900 dark:text-white shadow' : 'text-zinc-500 hover:bg-white/[0.12] hover:text-zinc-700 dark:hover:text-zinc-300' ) } >
{tab.icon && } {tab.name}
))}
{tabs.map((tab, idx) => ( {tab.content} ))}
); }