Tabs
muffled-ui-registry/tabsFreeComponent
Section switching with segmented and underline variants. Hairline borders, opacity hover, no shadows.
Live preview
live · rendered by the registry
Rendered by muffled-ui-registry on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://ui.muffled.studio/r/tabs.jsonSource
1import { Tabs as TabsPrimitive } from "@base-ui/react/tabs"2import { cva, type VariantProps } from "class-variance-authority"34import { cn, focusRingClasses } from "@/registry/lib/surface"56function Tabs({7 className,8 orientation = "horizontal",9 ...props10}: TabsPrimitive.Root.Props) {11 return (12 <TabsPrimitive.Root13 data-slot="tabs"14 data-orientation={orientation}15 orientation={orientation}16 className={cn(17 "group/tabs flex gap-2 data-horizontal:flex-col",18 className,19 )}20 {...props}21 />22 )23}2425const tabsListVariants = cva(26 "group/tabs-list inline-flex w-fit items-center justify-center rounded-md p-0.5 font-sans text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none data-[variant=line]:bg-transparent",27 {28 variants: {29 variant: {30 default: "bg-muted",31 line: "gap-1 bg-transparent",32 },33 },34 defaultVariants: {35 variant: "default",36 },37 },38)3940function TabsList({41 className,42 variant = "default",43 ...props44}: TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants>) {45 return (46 <TabsPrimitive.List47 data-slot="tabs-list"48 data-variant={variant}49 className={cn(tabsListVariants({ variant }), className)}50 {...props}51 />52 )53}5455function TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {56 return (57 <TabsPrimitive.Tab58 data-slot="tabs-trigger"59 className={cn(60 "relative inline-flex h-7 flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 font-sans text-sm font-medium whitespace-nowrap text-muted-foreground outline-none transition-opacity duration-[var(--d-drift)] ease-[var(--ease-drift)] group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:opacity-60 active:opacity-40 active:duration-[var(--d-snap)] active:ease-[var(--ease-snap)] disabled:pointer-events-none disabled:opacity-40 aria-disabled:pointer-events-none aria-disabled:opacity-40 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",61 focusRingClasses,62// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from muffled-ui-registry
All 55 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | muffled-ui-registry | Components | Free | 2 deps | |
| Alertalert | muffled-ui-registry | Components | Free | 1 dep | |
| Alert Dialogalert-dialog | muffled-ui-registry | Components | Free | 1 dep | |
| Avataravatar | muffled-ui-registry | Components | Free | 1 dep | |
| Badgebadge | muffled-ui-registry | Components | Free | 2 deps | |
| Breadcrumbbreadcrumb | muffled-ui-registry | Components | Free | 2 deps | |
| Buttonbutton | muffled-ui-registry | Components | Free | 2 deps | |
| Button Groupbutton-group | muffled-ui-registry | Components | Free | 2 deps |
