---import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@bejamas/ui/components/card';import { Tabs, TabsContent, TabsList, TabsTrigger } from '@bejamas/ui/components/tabs';---
<Tabs defaultValue="overview" class="w-full max-w-[400px]"> <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> View key metrics and recent activity across active projects. </CardDescription> </CardHeader> <CardContent class="text-sm text-muted-foreground"> You have 12 active projects and 3 pending tasks. </CardContent> </Card> </TabsContent> <TabsContent value="analytics"> <Card> <CardHeader> <CardTitle>Analytics</CardTitle> <CardDescription> Track engagement trends and performance over time. </CardDescription> </CardHeader> <CardContent class="text-sm text-muted-foreground"> Page views are up 25% compared to last month. </CardContent> </Card> </TabsContent> <TabsContent value="reports"> <Card> <CardHeader> <CardTitle>Reports</CardTitle> <CardDescription> Generate detailed exports for sharing and analysis. </CardDescription> </CardHeader> <CardContent class="text-sm text-muted-foreground"> You have 5 reports ready to export. </CardContent> </Card> </TabsContent> <TabsContent value="settings"> <Card> <CardHeader> <CardTitle>Settings</CardTitle> <CardDescription> Manage account preferences and personalization options. </CardDescription> </CardHeader> <CardContent class="text-sm text-muted-foreground"> Configure notifications, security, and themes. </CardContent> </Card> </TabsContent></Tabs>Installation
Section titled “Installation”bunx bejamas add tabsnpx bejamas add tabspnpm dlx bejamas add tabsyarn dlx bejamas add tabs---import { Tabs, TabsList, TabsTrigger, TabsContent } from '@bejamas/ui/components/tabs';---
<Tabs defaultValue="overview"> <TabsList> <TabsTrigger value="overview">Overview</TabsTrigger> <TabsTrigger value="analytics">Analytics</TabsTrigger> </TabsList> <TabsContent value="overview">Overview content...</TabsContent> <TabsContent value="analytics">Analytics content...</TabsContent></Tabs>| Prop | Type | Default |
|---|---|---|
class | string | "" |
orientation | "horizontal" | "vertical" | "horizontal" |
defaultValue | string |
Examples
Section titled “Examples”Line Animated
Section titled “Line Animated”---import { Tabs, TabsContent, TabsList, TabsTrigger } from '@bejamas/ui/components/tabs';---
<Tabs defaultValue="overview"> <TabsList variant="line-animated" class="mb-4"> <TabsTrigger value="overview">Overview</TabsTrigger> <TabsTrigger value="analytics">Analytics</TabsTrigger> <TabsTrigger value="reports">Reports</TabsTrigger> </TabsList> <TabsContent value="overview">Line variant content.</TabsContent> <TabsContent value="analytics">Analytics content.</TabsContent> <TabsContent value="reports">Reports content.</TabsContent></Tabs>Vertical
Section titled “Vertical”---import { Tabs, TabsContent, TabsList, TabsTrigger } from '@bejamas/ui/components/tabs';---
<Tabs defaultValue="profile" orientation="vertical" class="w-full max-w-xl"> <TabsList class="min-w-40"> <TabsTrigger value="profile" class="justify-start px-3">Profile</TabsTrigger> <TabsTrigger value="billing" class="justify-start px-3">Billing</TabsTrigger> <TabsTrigger value="notifications" class="justify-start px-3">Notifications</TabsTrigger> </TabsList> <TabsContent value="profile" class="rounded-lg border p-4"> Profile settings content. </TabsContent> <TabsContent value="billing" class="rounded-lg border p-4"> Billing settings content. </TabsContent> <TabsContent value="notifications" class="rounded-lg border p-4"> Notifications settings content. </TabsContent></Tabs>Disabled
Section titled “Disabled”---import { Tabs, TabsContent, TabsList, TabsTrigger } from '@bejamas/ui/components/tabs';---
<Tabs defaultValue="active"> <TabsList> <TabsTrigger value="active">Active</TabsTrigger> <TabsTrigger value="disabled" disabled>Disabled</TabsTrigger> <TabsTrigger value="secondary">Secondary</TabsTrigger> </TabsList> <TabsContent value="active">Active tab content.</TabsContent> <TabsContent value="disabled">Disabled tab content.</TabsContent> <TabsContent value="secondary">Secondary tab content.</TabsContent></Tabs>Overflow
Section titled “Overflow”---import { Tabs, TabsContent, TabsList, TabsTrigger } from '@bejamas/ui/components/tabs';---
<Tabs defaultValue="monday"> <TabsList class="w-full max-w-[20rem] justify-start overflow-x-auto whitespace-nowrap"> <TabsTrigger value="monday" class="shrink-0">Monday</TabsTrigger> <TabsTrigger value="tuesday" class="shrink-0">Tuesday</TabsTrigger> <TabsTrigger value="wednesday" class="shrink-0">Wednesday</TabsTrigger> <TabsTrigger value="thursday" class="shrink-0">Thursday</TabsTrigger> <TabsTrigger value="friday" class="shrink-0">Friday</TabsTrigger> <TabsTrigger value="saturday" class="shrink-0">Saturday</TabsTrigger> <TabsTrigger value="sunday" class="shrink-0">Sunday</TabsTrigger> </TabsList> <TabsContent value="monday">Monday content.</TabsContent> <TabsContent value="tuesday">Tuesday content.</TabsContent> <TabsContent value="wednesday">Wednesday content.</TabsContent> <TabsContent value="thursday">Thursday content.</TabsContent> <TabsContent value="friday">Friday content.</TabsContent> <TabsContent value="saturday">Saturday content.</TabsContent> <TabsContent value="sunday">Sunday content.</TabsContent></Tabs>Direction Animation
Section titled “Direction Animation”---import { Tabs, TabsContent, TabsList, TabsTrigger } from '@bejamas/ui/components/tabs';---
<Tabs defaultValue="overview"> <TabsList> <TabsTrigger value="overview">Overview</TabsTrigger> <TabsTrigger value="analytics">Analytics</TabsTrigger> <TabsTrigger value="reports">Reports</TabsTrigger> </TabsList> <TabsContent value="overview" animation="direction">Direction-aware overview.</TabsContent> <TabsContent value="analytics" animation="direction">Direction-aware analytics.</TabsContent> <TabsContent value="reports" animation="direction">Direction-aware reports.</TabsContent></Tabs>---import { Tabs, TabsList, TabsTrigger } from '@bejamas/ui/components/tabs';---
<div class="space-y-4"> <Tabs defaultValue="sm-account"> <TabsList size="sm"> <TabsTrigger value="sm-account" class="text-xs px-2">Account</TabsTrigger> <TabsTrigger value="sm-password" class="text-xs px-2">Password</TabsTrigger> </TabsList> </Tabs>
<Tabs defaultValue="md-account"> <TabsList size="default"> <TabsTrigger value="md-account">Account</TabsTrigger> <TabsTrigger value="md-password">Password</TabsTrigger> </TabsList> </Tabs>
<Tabs defaultValue="lg-account"> <TabsList size="lg"> <TabsTrigger value="lg-account" class="text-base px-4">Account</TabsTrigger> <TabsTrigger value="lg-password" class="text-base px-4">Password</TabsTrigger> </TabsList> </Tabs></div>API Reference
Section titled “API Reference”Events
Section titled “Events”The tabs component emits custom events that you can listen to:
| Event | Detail | Description |
|---|---|---|
tabs:change | { value: string } | Fired when the selected tab changes |
Waiting for logs…
<Tabs id="my-tabs" defaultValue="tab1"> <TabsList> <TabsTrigger value="tab1">Tab 1</TabsTrigger> <TabsTrigger value="tab2">Tab 2</TabsTrigger> </TabsList> <TabsContent value="tab1">Content 1</TabsContent> <TabsContent value="tab2">Content 2</TabsContent></Tabs>
<script> const tabs = document.getElementById('my-tabs');
tabs.addEventListener('tabs:change', (e) => { console.log('Selected tab:', e.detail.value); });</script>Programmatic Control
Section titled “Programmatic Control”You can control the tabs programmatically by dispatching a tabs:set event:
const tabs = document.getElementById('my-tabs');
// Select a tabtabs.dispatchEvent(new CustomEvent('tabs:set', { detail: { value: 'tab2' }}));Variants
Section titled “Variants”| Prop | Element | Values | Default |
|---|---|---|---|
variant | tabs-list | indicator, default, line, line-animated | indicator |
size | tabs-list | sm, default, lg | default |
animation | tabs-content | none, fade, slide, direction | none |
Data Attributes
Section titled “Data Attributes”The tabs component sets these data attributes that you can use for styling or querying state:
| Attribute | Element | Description |
|---|---|---|
data-orientation | tabs | Current orientation (horizontal or vertical) |
data-variant | tabs-list | Current list variant (indicator, default, line, or line-animated) |
data-activation-direction | tabs-content | Last activation direction after tab change (left, right, up, or down, not set on initial mount) |
data-state | tabs-trigger | Current state (active or inactive) |
CSS Variables
Section titled “CSS Variables”The tabs indicator exposes CSS variables for animation:
| Variable | Element | Description |
|---|---|---|
--active-tab-left | tabs-indicator | Left position of active tab |
--active-tab-width | tabs-indicator | Width of active tab |
--active-tab-top | tabs-indicator | Top position of active tab |
--active-tab-height | tabs-indicator | Height of active tab |