import { type ReactElement } from "react"; import * as React from "react"; import { cva, type VariantProps } from "class-variance-authority"; import { Tabs as TabsPrimitive } from "@base-ui/react/tabs"; import { cn } from "@/lib/utils"; export type TabsProps = React.ComponentProps & { orientation?: "horizontal" | "vertical"; }; function Tabs({ className, orientation = "horizontal", ...props }: TabsProps): ReactElement { return ( ); } const tabsListVariants = cva( "group/tabs-list inline-flex items-center gap-1 rounded-none p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col", { variants: { variant: { default: "bg-muted", line: "bg-transparent p-0", }, // How the list sizes itself and lays out its triggers: // - fit (default): hugs its content, centred (natural trigger widths). // - fill: spans the full width and stretches triggers equally (flex-1). // - scroll: spans the full width but keeps triggers at natural width and // scrolls horizontally when they overflow — for more tabs than // fit (e.g. budget-bucket tabs on a narrow card). Scrollbar hidden. width: { fit: "w-fit justify-center", fill: "w-full justify-center", scroll: "w-full justify-start overflow-x-auto [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden", }, }, defaultVariants: { variant: "default", width: "fit", }, }, ); export type TabsListProps = React.ComponentProps & VariantProps; function TabsList({ className, variant = "default", width = "fit", ...props }: TabsListProps): ReactElement { return ( ); } export type TabsTriggerProps = React.ComponentProps; function TabsTrigger({ className, ...props }: TabsTriggerProps): ReactElement { return ( ); } export type TabsContentProps = React.ComponentProps; function TabsContent({ className, ...props }: TabsContentProps): ReactElement { return ( ); } export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants };