Primitive / Moleculestable

Tabs

Tabbed interface for switching between grouped content panels.

@glinui/uiComponent: tabs

Installation

Install from the package for shared ownership or from the registry for copy-paste control.

Package Manager

pnpm add @glinui/ui @glinui/tokens

Registry

pnpm dlx @glinui/cli@latest add tabs

Usage

Basic

Account settings.

TSX
1import { Tabs, TabsList, TabsTrigger, TabsContent } from "@glinui/ui"
2
3export function Demo() {
4 return (
5 <Tabs defaultValue="account">
6 <TabsList>
7 <TabsTrigger value="account">Account</TabsTrigger>
8 <TabsTrigger value="password">Password</TabsTrigger>
9 </TabsList>
10 <TabsContent value="account">
11 <p className="text-sm text-neutral-600 dark:text-neutral-400">Account settings.</p>
12 </TabsContent>
13 <TabsContent value="password">
14 <p className="text-sm text-neutral-600 dark:text-neutral-400">Password settings.</p>
15 </TabsContent>
16 </Tabs>
17 )
18}

Glass Variant

Glass tab content.
TSX
1import { Tabs, TabsList, TabsTrigger, TabsContent } from "@glinui/ui"
2
3export function Demo() {
4 return (
5 <Tabs defaultValue="first">
6 <TabsList variant="glass">
7 <TabsTrigger value="first" variant="glass">First</TabsTrigger>
8 <TabsTrigger value="second" variant="glass">Second</TabsTrigger>
9 </TabsList>
10 <TabsContent value="first" variant="glass">Glass tab content.</TabsContent>
11 <TabsContent value="second" variant="glass">Second panel.</TabsContent>
12 </Tabs>
13 )
14}

Liquid + Matte Variants

Liquid tab surface.
Matte tab surface.
TSX
1import { Tabs, TabsList, TabsTrigger, TabsContent } from "@glinui/ui"
2
3export function Demo() {
4 return (
5 <div className="grid gap-4 md:grid-cols-2">
6 <Tabs defaultValue="liquid-1">
7 <TabsList variant="liquid">
8 <TabsTrigger value="liquid-1" variant="liquid">Liquid A</TabsTrigger>
9 <TabsTrigger value="liquid-2" variant="liquid">Liquid B</TabsTrigger>
10 </TabsList>
11 <TabsContent value="liquid-1" variant="liquid">Liquid tab surface.</TabsContent>
12 <TabsContent value="liquid-2" variant="liquid">Second liquid panel.</TabsContent>
13 </Tabs>
14 <Tabs defaultValue="matte-1">
15 <TabsList variant="matte">
16 <TabsTrigger value="matte-1" variant="matte">Matte A</TabsTrigger>
17 <TabsTrigger value="matte-2" variant="matte">Matte B</TabsTrigger>
18 </TabsList>
19 <TabsContent value="matte-1" variant="matte">Matte tab surface.</TabsContent>
20 <TabsContent value="matte-2" variant="matte">Second matte panel.</TabsContent>
21 </Tabs>
22 </div>
23 )
24}

Accessibility

  • Built on Radix Tabs with full WAI-ARIA.
  • Content is associated via `aria-controls`.

Keyboard Interactions

KeyAction
Arrow Left / RightNavigate between tab triggers.
Enter / SpaceSelect the focused tab.

ARIA Attributes

  • `role="tablist"` on list
  • `role="tab"` on triggers
  • `role="tabpanel"` on content
  • `aria-selected`
  • `aria-controls`

Reduced Motion

Active indicator transitions respect `prefers-reduced-motion`.

Affected properties

transformopacity

API Reference

Tabs

PropTypeRequiredDefaultDescription
defaultValuestring--Initially active tab.
valuestring--Controlled active tab.
onValueChange(value: string) => void--Tab change handler.
orientation"horizontal" | "vertical"-horizontalLayout direction of the tab list.
size"sm" | "md" | "lg"No"md"Variant option from tabsContentVariants.
variant"default" | "glass" | "outline" | "ghost" | "liquid" | "matte"No"default"Variant option from tabsContentVariants.

TabsList

PropTypeRequiredDefaultDescription
variant"default" | "glass" | "outline" | "ghost" | "liquid" | "matte"NodefaultVisual treatment.
size"sm" | "md" | "lg"NomdDensity scale.

TabsTrigger

PropTypeRequiredDefaultDescription
valuestring--Unique value identifying this tab.
variant"default" | "glass" | "outline" | "ghost" | "liquid" | "matte"NodefaultVisual treatment.
size"sm" | "md" | "lg"NomdDensity scale.
disabledboolean-falsePrevents interaction.

TabsContent

PropTypeRequiredDefaultDescription
valuestring--Value matching the associated trigger.
variant"default" | "glass" | "outline" | "ghost" | "liquid" | "matte"NodefaultVisual treatment.
size"sm" | "md" | "lg"No"md"Variant option from tabsContentVariants.

Source

Import directly from the package or browse the source on GitHub. Click any file to view it.

Import

import { Tabs } from "@glinui/ui"

Source Files

Dependencies

@glinui/ui

Generated API Snapshot

Beta

Auto-extracted from TypeScript source in packages/ui/src/components/tabs.tsx. This section is in beta and may lag behind hand-curated docs. Regenerate with pnpm --filter @glinui/docs api:generate.

Generated: 2026-02-19T17:59:28.468Z · Full index: /docs/api-metadata

Primary Props Type

TabsProps

TabsContentProps

PropTypeRequiredDefaultDescription
size"sm" | "md" | "lg"No"md"Variant option from tabsContentVariants.
variant"default" | "glass" | "outline" | "ghost" | "liquid" | "matte"No"default"Variant option from tabsContentVariants.

TabsListProps

PropTypeRequiredDefaultDescription
size"sm" | "md" | "lg"No"md"Variant option from tabsListVariants.
variant"default" | "glass" | "outline" | "ghost" | "liquid" | "matte"No"default"Variant option from tabsListVariants.

TabsProps

No explicit fields extracted for this props type.

TabsTriggerProps

PropTypeRequiredDefaultDescription
size"sm" | "md" | "lg"No"md"Variant option from tabsTriggerVariants.
variant"default" | "glass" | "outline" | "ghost" | "liquid" | "matte"No"default"Variant option from tabsTriggerVariants.