import * as React from "react" import * as TabsPrimitive from "@radix-ui/react-tabs" import { TabsList as InnerTabsList, TabsTrigger as InnerTabsTrigger, tabsListVariants, tabsTriggerClassName } from "@/components/ui/tabs" import { cn } from "@/lib/utils" import { ProIndicator } from "@/components/pro/pro-indicator" export const FEATURE_TABS_SURFACE_CLASSNAME = "bg-[#f5f6f8] dark:bg-muted/20" export const FeatureTabs = TabsPrimitive.Root export function FeatureTabsNavigation({ activeValue, children, className, ...props }: React.ComponentPropsWithoutRef & { activeValue: string }) { const listRef = React.useRef(null) const [indicator, setIndicator] = React.useState({ left: 0, width: 0 }) React.useLayoutEffect(() => { const list = listRef.current if (!list) return const measure = () => { const active = list.querySelector('[role="tab"][data-state="active"]') if (active) setIndicator({ left: active.offsetLeft, width: active.offsetWidth }) } measure() const observer = new ResizeObserver(measure) observer.observe(list) const active = list.querySelector('[role="tab"][data-state="active"]') if (active) { observer.observe(active) const viewport = list.parentElement if (viewport) { if (active.offsetLeft < viewport.scrollLeft) viewport.scrollLeft = active.offsetLeft else if (active.offsetLeft + active.offsetWidth > viewport.scrollLeft + viewport.clientWidth) { viewport.scrollLeft = active.offsetLeft + active.offsetWidth - viewport.clientWidth } } } return () => observer.disconnect() }, [activeValue, children]) return (
{children}
) } export const FeatureTabsTrigger = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )) FeatureTabsTrigger.displayName = "FeatureTabsTrigger" export const FeatureTabsContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )) FeatureTabsContent.displayName = "FeatureTabsContent" /** Rounded inner tabs stay visually distinct from the primary underline row. */ export const FeatureSubTabsList = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => (
)) FeatureSubTabsList.displayName = "FeatureSubTabsList" export const FeatureSubTabsTrigger = InnerTabsTrigger /** A compact view switcher when the same preview changes, rather than tab panels. */ export function FeatureSubNavigation({ label, value, onValueChange, options }: { label: string value: string onValueChange: (value: string) => void options: { value: string; label: string; pro?: boolean }[] }) { return (
{options.map(option => ( ))}
) }