Skip to Content

Tabs

Tabs organize content into separate views with multiple style variants and orientations.

Build with an agent

Copy component guidance grounded in this release of Citrionus.

Loading component guidance…

Import

import { Tabs, Tab } from "@raydenui/ui";

Usage

Basic

Preview
<Tabs defaultValue="overview"> <Tab value="overview">Overview</Tab> <Tab value="settings">Settings</Tab> <Tab value="billing">Billing</Tab> </Tabs>

Variants

Preview
// Line variant (default) <Tabs variant="line" defaultValue="tab1"> <Tab value="tab1">Tab 1</Tab> <Tab value="tab2">Tab 2</Tab> </Tabs> // Pill variant <Tabs variant="pill" defaultValue="tab1"> <Tab value="tab1">Tab 1</Tab> <Tab value="tab2">Tab 2</Tab> </Tabs> // Segmented variant <Tabs variant="segmented" defaultValue="tab1"> <Tab value="tab1">Tab 1</Tab> <Tab value="tab2">Tab 2</Tab> </Tabs>

Sizes

Preview
<Tabs size="sm" defaultValue="tab1">...</Tabs> <Tabs size="md" defaultValue="tab1">...</Tabs> <Tabs size="lg" defaultValue="tab1">...</Tabs>

With Icons

Preview
<Tabs defaultValue="home"> <Tab value="home" icon="home">Home</Tab> <Tab value="settings" icon="settings">Settings</Tab> <Tab value="users" icon="users">Users</Tab> </Tabs>

With Badges

Preview
<Tabs defaultValue="inbox"> <Tab value="inbox" badge={12}>Inbox</Tab> <Tab value="drafts" badge={3}>Drafts</Tab> <Tab value="sent">Sent</Tab> </Tabs>

Disabled Tab

Preview
<Tabs defaultValue="active"> <Tab value="active">Active</Tab> <Tab value="disabled" disabled>Disabled</Tab> <Tab value="another">Another</Tab> </Tabs>

Controlled

const [activeTab, setActiveTab] = useState("first"); <Tabs value={activeTab} onValueChange={setActiveTab}> <Tab value="first">First</Tab> <Tab value="second">Second</Tab> <Tab value="third">Third</Tab> </Tabs>

Props

Tabs

PropTypeDefaultDescription
variant"line" | "pill" | "segmented""line"Visual style
size"sm" | "md" | "lg""sm"Tab size
orientation"horizontal" | "vertical""horizontal"Layout direction
valuestring—Controlled active tab value
defaultValuestring""Default active tab (uncontrolled)
onValueChange(value: string) => void—Tab change handler
classNamestring—Additional CSS classes

Tab

PropTypeDefaultDescription
valuestring—Unique tab identifier (required)
childrenReactNode—Tab label content (required)
iconReactNode | IconName—Leading icon
badgenumber | string—Badge content
disabledbooleanfalseDisables the tab
classNamestring—Additional CSS classes

Keyboard Navigation

  • Arrow Right/Down: Move to next tab
  • Arrow Left/Up: Move to previous tab
  • Home: Move to first tab
  • End: Move to last tab

Accessibility

  • Uses proper ARIA tabs pattern (role="tablist")
  • Keyboard navigation with arrow keys
  • Focus management between tabs
  • Disabled tabs are skipped in navigation
  • aria-orientation set based on orientation prop
Last updated on