import { Tabs as TabsPrimitive } from "@base-ui/react/tabs";
import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "@/lib/utils";
orientation = "horizontal",
}: TabsPrimitive.Root.Props) {
data-orientation={orientation}
"group/tabs flex gap-2 data-horizontal:flex-col has-[[data-slot=tabs-list][data-variant=line]]:gap-0",
const tabsListVariants = cva(
"group/tabs-list items-center justify-center text-muted-foreground group-data-horizontal/tabs:grid group-data-horizontal/tabs:h-9 group-data-horizontal/tabs:w-fit group-data-horizontal/tabs:auto-cols-fr group-data-horizontal/tabs:grid-flow-col group-data-vertical/tabs:flex group-data-vertical/tabs:h-fit group-data-vertical/tabs:w-fit group-data-vertical/tabs:flex-col",
default: "pixel-rounded pixel-size-[3px] gap-1 bg-muted p-0.75",
line: "group-data-horizontal/tabs:w-full bg-transparent",
}: TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants>) {
className={cn(tabsListVariants({ variant }), className)}
}: TabsPrimitive.Tab.Props) {
"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 pixel-size-md pixel-color-[transparent] px-2 py-1 text-sm whitespace-nowrap text-foreground/60 [transition-property:color]! focus-visible:z-10 group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
// Default variant: a rounded pill that fills with the page background when active.
"group-data-[variant=default]/tabs-list:pixel-rounded group-data-[variant=default]/tabs-list:pixel-size-lg group-data-[variant=default]/tabs-list:data-active:bg-background group-data-[variant=default]/tabs-list:data-active:text-foreground dark:group-data-[variant=default]/tabs-list:data-active:bg-[color-mix(in_oklab,var(--input)_30%,transparent)]",
// Line variant: a flush, equal-width tab strip — only the outer edges round off, active fills with secondary.
// Inactive tabs blend the focus ring's face into the page background, so
// focus only ever shows as the thin ring border, not a solid fill.
function TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {
className={cn("flex-1 text-sm outline-none", className)}
export { Tabs, TabsContent, TabsList, TabsTrigger, tabsListVariants };