Tuimorphic

Tabs

Organize content into selectable panels with terminal-style borders.

Import

import { Tabs, TabsList, TabsTrigger, TabsContent } from 'tuimorphic';

Usage

The Tabs component organizes content into selectable panels with terminal aesthetics.

Welcome to the overview panel. This tab displays general information about the system.

<Tabs defaultValue="tab1">
  <TabsList>
    <TabsTrigger value="tab1">Overview</TabsTrigger>
    <TabsTrigger value="tab2">Details</TabsTrigger>
  </TabsList>
  <TabsContent value="tab1">
    <p>Overview content goes here.</p>
  </TabsContent>
  <TabsContent value="tab2">
    <p>Details content goes here.</p>
  </TabsContent>
</Tabs>

Props

Tabs

PropTypeDefaultDescription
valuestring | number | null-Selected tab value (controlled)
defaultValuestring | number | null-Default selected tab value (uncontrolled)
onValueChange(value: string | number | null) => void-Callback when selected tab changes
childrenReact.ReactNode-Tab list and content panels
classNamestring-Additional CSS class names

TabsList

PropTypeDefaultDescription
childrenReact.ReactNode-Tab triggers
classNamestring-Additional CSS class names

TabsTrigger

PropTypeDefaultDescription
valuestring | number | null-Value that identifies this tab (required)
childrenReact.ReactNode-Tab label content
disabledboolean-Whether this tab is disabled
classNamestring-Additional CSS class names

TabsContent

PropTypeDefaultDescription
valuestring | number | null-Value that identifies this panel (required)
childrenReact.ReactNode-Panel content
classNamestring-Additional CSS class names

Variants

Basic

Welcome to the overview panel. This tab displays general information about the system.

<Tabs defaultValue="tab1">
  <TabsList>
    <TabsTrigger value="tab1">Overview</TabsTrigger>
    <TabsTrigger value="tab2">Details</TabsTrigger>
    <TabsTrigger value="tab3">Settings</TabsTrigger>
  </TabsList>
  <TabsContent value="tab1">
    <p>Overview content goes here.</p>
  </TabsContent>
  <TabsContent value="tab2">
    <p>Details content goes here.</p>
  </TabsContent>
  <TabsContent value="tab3">
    <p>Settings content goes here.</p>
  </TabsContent>
</Tabs>

Controlled

Current tab:tab1
Content for the first tab.
const [activeTab, setActiveTab] = useState<string | number | null>('tab1');
 
<Tabs value={activeTab} onValueChange={setActiveTab}>
  <TabsList>
    <TabsTrigger value="tab1">First</TabsTrigger>
    <TabsTrigger value="tab2">Second</TabsTrigger>
  </TabsList>
  <TabsContent value="tab1">First panel</TabsContent>
  <TabsContent value="tab2">Second panel</TabsContent>
</Tabs>

With Disabled Tab

<Tabs defaultValue="tab1">
  <TabsList>
    <TabsTrigger value="tab1">Active</TabsTrigger>
    <TabsTrigger value="tab2">Also Active</TabsTrigger>
    <TabsTrigger value="tab3" disabled>Disabled</TabsTrigger>
  </TabsList>
  <TabsContent value="tab1">Content 1</TabsContent>
  <TabsContent value="tab2">Content 2</TabsContent>
  <TabsContent value="tab3">Content 3</TabsContent>
</Tabs>

Numeric Values

<Tabs defaultValue={0}>
  <TabsList>
    <TabsTrigger value={0}>Tab 0</TabsTrigger>
    <TabsTrigger value={1}>Tab 1</TabsTrigger>
    <TabsTrigger value={2}>Tab 2</TabsTrigger>
  </TabsList>
  <TabsContent value={0}>Content 0</TabsContent>
  <TabsContent value={1}>Content 1</TabsContent>
  <TabsContent value={2}>Content 2</TabsContent>
</Tabs>

On this page