Tabs

Switch between related sections in place.

Show one related panel at a time without navigating away from the page.

Overview
Key metrics and recent activity across your projects.
12 active projects and 3 tasks waiting on review.
tsx
import {  Card,  CardContent,  CardDescription,  CardHeader,  CardTitle,} from "@/components/ui/card"import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"export function Example() {  return (    <Tabs defaultValue="overview" className="w-full">      <TabsList>        <TabsTrigger value="overview">Overview</TabsTrigger>        <TabsTrigger value="analytics">Analytics</TabsTrigger>        <TabsTrigger value="reports">Reports</TabsTrigger>        <TabsTrigger value="settings">Settings</TabsTrigger>      </TabsList>      <TabsContent value="overview">        <Card>          <CardHeader>            <CardTitle>Overview</CardTitle>            <CardDescription>              Key metrics and recent activity across your projects.            </CardDescription>          </CardHeader>          <CardContent className="text-sm text-muted-foreground">            12 active projects and 3 tasks waiting on review.          </CardContent>        </Card>      </TabsContent>      <TabsContent value="analytics">        <Card>          <CardHeader>            <CardTitle>Analytics</CardTitle>            <CardDescription>              Traffic and conversion for the last 30 days.            </CardDescription>          </CardHeader>          <CardContent className="text-sm text-muted-foreground">            Sessions are up 8% week over week.          </CardContent>        </Card>      </TabsContent>      <TabsContent value="reports">        <Card>          <CardHeader>            <CardTitle>Reports</CardTitle>            <CardDescription>              Export ready summaries for your team.            </CardDescription>          </CardHeader>          <CardContent className="text-sm text-muted-foreground">            Weekly digest ships every Monday at 09:00.          </CardContent>        </Card>      </TabsContent>      <TabsContent value="settings">        <Card>          <CardHeader>            <CardTitle>Settings</CardTitle>            <CardDescription>              Preferences for this workspace.            </CardDescription>          </CardHeader>          <CardContent className="text-sm text-muted-foreground">            Notifications stay on for mention and review events.          </CardContent>        </Card>      </TabsContent>    </Tabs>  )}

Installation

npx @arctis-sh/@arctis-sh/ui@latest add tabs

Usage

import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
<Tabs defaultValue="account">  <TabsList>    <TabsTrigger value="account">Account</TabsTrigger>    <TabsTrigger value="password">Password</TabsTrigger>  </TabsList>  <TabsContent value="account">Account settings.</TabsContent>  <TabsContent value="password">Password settings.</TabsContent></Tabs>

Composition

Tabs
├── TabsList
│   ├── TabsTrigger
│   └── TabsTrigger
├── TabsContent
└── TabsContent

Line

Set variant="line" on TabsList for an underline instead of a filled pill.

tsx
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"export function Example() {  return (    <Tabs defaultValue="overview">      <TabsList variant="line">        <TabsTrigger value="overview">Overview</TabsTrigger>        <TabsTrigger value="analytics">Analytics</TabsTrigger>        <TabsTrigger value="reports">Reports</TabsTrigger>      </TabsList>    </Tabs>  )}

Vertical

Set orientation="vertical" on Tabs to stack the triggers beside their panels.

tsx
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"export function Example() {  return (    <Tabs defaultValue="account" orientation="vertical">      <TabsList>        <TabsTrigger value="account">Account</TabsTrigger>        <TabsTrigger value="password">Password</TabsTrigger>        <TabsTrigger value="notifications">Notifications</TabsTrigger>      </TabsList>    </Tabs>  )}

Disabled

Set disabled on a trigger so that tab cannot be selected.

tsx
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"export function Example() {  return (    <Tabs defaultValue="home">      <TabsList>        <TabsTrigger value="home">Home</TabsTrigger>        <TabsTrigger value="disabled" disabled>          Disabled        </TabsTrigger>      </TabsList>    </Tabs>  )}

Icons

Add an icon when the label benefits from a quick visual cue.

tsx
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"export function Example() {  return (    <Tabs defaultValue="preview">      <TabsList>        <TabsTrigger value="preview">          <AppWindowIcon />          Preview        </TabsTrigger>        <TabsTrigger value="code">          <CodeIcon />          Code        </TabsTrigger>      </TabsList>    </Tabs>  )}

API Reference

Tabs

PropTypeDefault
valuestring
defaultValuestring
onValueChange(value: string) => void
orientation"horizontal" | "vertical""horizontal"
classNamestring
<Tabs defaultValue="account">  <TabsList>    <TabsTrigger value="account">Account</TabsTrigger>  </TabsList>  <TabsContent value="account">Account panel</TabsContent></Tabs>

TabsList

PropTypeDefault
variant"default" | "line""default"
classNamestring
<TabsList>  <TabsTrigger value="account">Account</TabsTrigger></TabsList>

TabsTrigger

PropTypeDefault
valuestring
disabledbooleanfalse
classNamestring
<TabsTrigger value="account">Account</TabsTrigger>

TabsContent

PropTypeDefault
valuestring
forceMountbooleanfalse
classNamestring
<TabsContent value="account">Account panel</TabsContent>