"use client" import { cn } from "@/lib/utils" import * as TabsPrimitive from "@radix-ui/react-tabs" import { motion } from "framer-motion" import * as React from "react" const Tabs = TabsPrimitive.Root const TabsList = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => { const [activeIndex, setActiveIndex] = React.useState(0) const tabRefs = React.useRef<(HTMLButtonElement | null)[]>([]) const [activeStyle, setActiveStyle] = React.useState({ left: "0px", width: "0px", }) React.useEffect(() => { const activeElement = tabRefs.current[activeIndex] if (activeElement) { const { offsetLeft, offsetWidth } = activeElement setActiveStyle({ left: `${offsetLeft}px`, width: `${offsetWidth}px`, }) } }, [activeIndex]) return ( {React.Children.map(props.children, (child, index) => React.isValidElement(child) ? React.cloneElement(child, { ref: (el: HTMLButtonElement) => (tabRefs.current[index] = el), onClick: () => setActiveIndex(index), isActive: index === activeIndex, }) : child )} ) }) TabsList.displayName = TabsPrimitive.List.displayName const TabsTrigger = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { isActive?: boolean } >(({ className, isActive, ...props }, ref) => ( )) TabsTrigger.displayName = TabsPrimitive.Trigger.displayName const TabsContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( {props.children} )) TabsContent.displayName = TabsPrimitive.Content.displayName export { Tabs, TabsContent, TabsList, TabsTrigger }