Skip to Content

Tabs

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

Import

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

Usage

Basic

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

Variants

// 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

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

With Icons

<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

<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

<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