Generate and export Tailwind color patterns.
A fully accessible and customizable tabs component with multiple variants and styles.
The Tabs component provides an accessible way to switch between different views within the same context, supporting various styles and customizations.
npx pixelblock-cli add Tabs
This will copy the Tabs
component files to your project's components/PixelBlock
directory.
your-project/
├── components/
│ └── PixelBlock/
│ └── Tabs.tsx
└── ...
import { Tabs, TabsList, TabsTrigger, TabsContent } from "./components/PixelBlock/Tabs";
function App() {
return (
<Tabs defaultValue="account">
<TabsList>
<TabsTrigger value="account">Account</TabsTrigger>
<TabsTrigger value="password">Password</TabsTrigger>
<TabsTrigger value="settings">Settings</TabsTrigger>
</TabsList>
<TabsContent value="account">Account settings here.</TabsContent>
<TabsContent value="password">Change your password here.</TabsContent>
<TabsContent value="settings">Other settings here.</TabsContent>
</Tabs>
);
}
The Tabs component supports two variants: solid
and underline
.
// Solid Variant
<Tabs defaultValue="tab1" variant="solid">
<TabsList>
<TabsTrigger value="tab1">Solid Tab 1</TabsTrigger>
<TabsTrigger value="tab2">Solid Tab 2</TabsTrigger>
</TabsList>
<TabsContent value="tab1">Content 1</TabsContent>
<TabsContent value="tab2">Content 2</TabsContent>
</Tabs>
// Underline Variant
<Tabs defaultValue="tab1" variant="underline">
<TabsList>
<TabsTrigger value="tab1">Underline Tab 1</TabsTrigger>
<TabsTrigger value="tab2">Underline Tab 2</TabsTrigger>
</TabsList>
<TabsContent value="tab1">Content 1</TabsContent>
<TabsContent value="tab2">Content 2</TabsContent>
</Tabs>
The component supports different border radius options: full
, lg
, md
, and sm
.
<Tabs defaultValue="tab1" variant="solid" radius="full">
<TabsList>
<TabsTrigger value="tab1">Rounded Tab</TabsTrigger>
<TabsTrigger value="tab2">Tab 2</TabsTrigger>
</TabsList>
<TabsContent value="tab1">Content 1</TabsContent>
<TabsContent value="tab2">Content 2</TabsContent>
</Tabs>
<Tabs defaultValue="tab1">
<TabsList>
<TabsTrigger value="tab1">Enabled Tab</TabsTrigger>
<TabsTrigger value="tab2" disabled>Disabled Tab</TabsTrigger>
</TabsList>
<TabsContent value="tab1">Content 1</TabsContent>
<TabsContent value="tab2">Content 2</TabsContent>
</Tabs>
Prop | Type | Default | Description |
---|---|---|---|
defaultValue | string | - | The initial active tab value |
className | string | "" | Additional CSS classes |
variant | "solid" | "underline" | "underline" | The visual style variant |
radius | "full" | "lg" | "md" | "sm" | "sm" | Border radius size |
children | React.ReactNode | - | Tab components |
Prop | Type | Default | Description |
---|---|---|---|
className | string | "" | Additional CSS classes |
children | React.ReactNode | - | TabsTrigger components |
Prop | Type | Default | Description |
---|---|---|---|
value | string | - | Unique identifier for the tab |
className | string | "" | Additional CSS classes |
disabled | boolean | false | Whether the tab is disabled |
children | React.ReactNode | - | Tab content |
Prop | Type | Default | Description |
---|---|---|---|
value | string | - | Matching identifier for the tab |
className | string | "" | Additional CSS classes |
children | React.ReactNode | - | Tab panel content |
The component implements the following accessibility features:
WAI-ARIA Roles:
tablist
for the containertab
for triggerstabpanel
for contentKeyboard Navigation:
ARIA Attributes:
aria-selected
for active statearia-controls
for panel associationaria-orientation
for layout directionaria-disabled
for disabled states<Tabs defaultValue="tab1" className="custom-tabs">
<TabsList className="custom-list">
<TabsTrigger value="tab1" className="custom-trigger">
Custom Tab
</TabsTrigger>
</TabsList>
<TabsContent value="tab1" className="custom-content">
Custom styled content
</TabsContent>
</Tabs>
The component automatically handles dark mode through Tailwind CSS classes:
// Dark mode styles are automatically applied when dark mode is enabled
<Tabs defaultValue="tab1">
<TabsList className="dark:bg-gray-800">
<TabsTrigger value="tab1">Dark Mode Tab</TabsTrigger>
</TabsList>
<TabsContent value="tab1">Dark mode content</TabsContent>
</Tabs>
Unique Values:
value
propPerformance:
Accessibility: