Files
shadcn-ui/apps/v4/registry/bases/base/examples/tabs-example.tsx
Dominik K. 137b1c12b7 feat(ui): add support for phosphor icons (#9044)
* feat: add phosphor icons to base ui

* feat_ add phosphor to blocks

* feat: add phosphor to radix blocks

* feat: add phosphor to radix ui

* feat: add phosphor to radix example

* feat: add missing phosphor icons

* fix: rename broken icons

* chore: format files

* fix: add missing phosphor icons

* chore: build registry

---------

Co-authored-by: shadcn <m@shadcn.com>
2025-12-17 21:36:46 +04:00

354 lines
11 KiB
TypeScript

import {
Example,
ExampleWrapper,
} from "@/registry/bases/base/components/example"
import { Button } from "@/registry/bases/base/ui/button"
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@/registry/bases/base/ui/dropdown-menu"
import { Input } from "@/registry/bases/base/ui/input"
import {
Tabs,
TabsContent,
TabsList,
TabsTrigger,
} from "@/registry/bases/base/ui/tabs"
import { IconPlaceholder } from "@/app/(create)/components/icon-placeholder"
export default function TabsExample() {
return (
<ExampleWrapper>
<TabsBasic />
<TabsLine />
<TabsVariantsComparison />
<TabsDisabled />
<TabsWithIcons />
<TabsIconOnly />
<TabsMultiple />
<TabsWithContent />
<TabsLineWithContent />
<TabsLineDisabled />
<TabsWithDropdown />
<TabsVertical />
<TabsWithInputAndButton />
</ExampleWrapper>
)
}
function TabsBasic() {
return (
<Example title="Basic">
<Tabs defaultValue="home">
<TabsList>
<TabsTrigger value="home">Home</TabsTrigger>
<TabsTrigger value="settings">Settings</TabsTrigger>
</TabsList>
</Tabs>
</Example>
)
}
function TabsLine() {
return (
<Example title="Line">
<Tabs defaultValue="overview">
<TabsList variant="line">
<TabsTrigger value="overview">Overview</TabsTrigger>
<TabsTrigger value="analytics">Analytics</TabsTrigger>
<TabsTrigger value="reports">Reports</TabsTrigger>
</TabsList>
</Tabs>
</Example>
)
}
function TabsVariantsComparison() {
return (
<Example title="Variants Alignment">
<div className="flex gap-4">
<Tabs defaultValue="overview">
<TabsList>
<TabsTrigger value="overview">Overview</TabsTrigger>
<TabsTrigger value="analytics">Analytics</TabsTrigger>
</TabsList>
</Tabs>
<Tabs defaultValue="overview">
<TabsList variant="line">
<TabsTrigger value="overview">Overview</TabsTrigger>
<TabsTrigger value="analytics">Analytics</TabsTrigger>
</TabsList>
</Tabs>
</div>
</Example>
)
}
function TabsDisabled() {
return (
<Example title="Disabled">
<Tabs defaultValue="home">
<TabsList>
<TabsTrigger value="home">Home</TabsTrigger>
<TabsTrigger value="settings" disabled>
Disabled
</TabsTrigger>
</TabsList>
</Tabs>
</Example>
)
}
function TabsWithIcons() {
return (
<Example title="With Icons">
<Tabs defaultValue="preview">
<TabsList>
<TabsTrigger value="preview">
<IconPlaceholder
lucide="AppWindowIcon"
tabler="IconAppWindow"
hugeicons="CursorInWindowIcon"
phosphor="AppWindowIcon"
/>
Preview
</TabsTrigger>
<TabsTrigger value="code">
<IconPlaceholder
lucide="CodeIcon"
tabler="IconCode"
hugeicons="CodeIcon"
phosphor="CodeIcon"
/>
Code
</TabsTrigger>
</TabsList>
</Tabs>
</Example>
)
}
function TabsIconOnly() {
return (
<Example title="Icon Only">
<Tabs defaultValue="home">
<TabsList>
<TabsTrigger value="home">
<IconPlaceholder
lucide="HomeIcon"
tabler="IconHome"
hugeicons="HomeIcon"
phosphor="HouseIcon"
/>
</TabsTrigger>
<TabsTrigger value="search">
<IconPlaceholder
lucide="SearchIcon"
tabler="IconSearch"
hugeicons="SearchIcon"
phosphor="MagnifyingGlassIcon"
/>
</TabsTrigger>
<TabsTrigger value="settings">
<IconPlaceholder
lucide="SettingsIcon"
tabler="IconSettings"
hugeicons="SettingsIcon"
phosphor="GearIcon"
/>
</TabsTrigger>
</TabsList>
</Tabs>
</Example>
)
}
function TabsMultiple() {
return (
<Example title="Multiple">
<Tabs defaultValue="overview">
<TabsList>
<TabsTrigger value="overview">Overview</TabsTrigger>
<TabsTrigger value="analytics">Analytics</TabsTrigger>
<TabsTrigger value="reports">Reports</TabsTrigger>
<TabsTrigger value="settings">Settings</TabsTrigger>
</TabsList>
</Tabs>
</Example>
)
}
function TabsWithContent() {
return (
<Example title="With Content">
<Tabs defaultValue="account">
<TabsList>
<TabsTrigger value="account">Account</TabsTrigger>
<TabsTrigger value="password">Password</TabsTrigger>
<TabsTrigger value="notifications">Notifications</TabsTrigger>
</TabsList>
<div className="style-nova:p-4 style-vega:p-6 style-maia:p-6 style-mira:p-4 style-lyra:p-4 style-nova:rounded-lg style-vega:rounded-lg style-maia:rounded-xl style-mira:rounded-md style-lyra:rounded-none border">
<TabsContent value="account">
Manage your account preferences and profile information.
</TabsContent>
<TabsContent value="password">
Update your password to keep your account secure.
</TabsContent>
<TabsContent value="notifications">
Configure how you receive notifications and alerts.
</TabsContent>
</div>
</Tabs>
</Example>
)
}
function TabsLineWithContent() {
return (
<Example title="Line With Content">
<Tabs defaultValue="account">
<TabsList variant="line">
<TabsTrigger value="account">Account</TabsTrigger>
<TabsTrigger value="password">Password</TabsTrigger>
<TabsTrigger value="notifications">Notifications</TabsTrigger>
</TabsList>
<div className="style-nova:p-4 style-vega:p-6 style-maia:p-6 style-mira:p-4 style-lyra:p-4 style-nova:rounded-lg style-vega:rounded-lg style-maia:rounded-xl style-mira:rounded-md style-lyra:rounded-none border">
<TabsContent value="account">
Manage your account preferences and profile information.
</TabsContent>
<TabsContent value="password">
Update your password to keep your account secure.
</TabsContent>
<TabsContent value="notifications">
Configure how you receive notifications and alerts.
</TabsContent>
</div>
</Tabs>
</Example>
)
}
function TabsLineDisabled() {
return (
<Example title="Line Disabled">
<Tabs defaultValue="overview">
<TabsList variant="line">
<TabsTrigger value="overview">Overview</TabsTrigger>
<TabsTrigger value="analytics">Analytics</TabsTrigger>
<TabsTrigger value="reports" disabled>
Reports
</TabsTrigger>
</TabsList>
</Tabs>
</Example>
)
}
function TabsWithDropdown() {
return (
<Example title="With Dropdown">
<Tabs defaultValue="overview">
<div className="flex items-center justify-between">
<TabsList>
<TabsTrigger value="overview">Overview</TabsTrigger>
<TabsTrigger value="analytics">Analytics</TabsTrigger>
<TabsTrigger value="reports">Reports</TabsTrigger>
</TabsList>
<DropdownMenu>
<DropdownMenuTrigger
render={<Button variant="ghost" size="icon" className="size-8" />}
>
<IconPlaceholder
lucide="MoreHorizontalIcon"
tabler="IconDots"
hugeicons="MoreHorizontalCircle01Icon"
phosphor="DotsThreeOutlineIcon"
/>
<span className="sr-only">More options</span>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem>Settings</DropdownMenuItem>
<DropdownMenuItem>Export</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem>Archive</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</div>
<div className="style-nova:p-4 style-vega:p-6 style-maia:p-6 style-mira:p-4 style-lyra:p-4 style-nova:rounded-lg style-vega:rounded-lg style-maia:rounded-xl style-mira:rounded-md style-lyra:rounded-none border">
<TabsContent value="overview">
View your dashboard metrics and key performance indicators.
</TabsContent>
<TabsContent value="analytics">
Detailed analytics and insights about your data.
</TabsContent>
<TabsContent value="reports">
Generate and view custom reports.
</TabsContent>
</div>
</Tabs>
</Example>
)
}
function TabsVertical() {
return (
<Example title="Vertical">
<Tabs defaultValue="account" orientation="vertical">
<TabsList>
<TabsTrigger value="account">Account</TabsTrigger>
<TabsTrigger value="password">Password</TabsTrigger>
<TabsTrigger value="notifications">Notifications</TabsTrigger>
</TabsList>
<div className="style-nova:p-4 style-vega:p-6 style-maia:p-6 style-mira:p-4 style-lyra:p-4 style-nova:rounded-lg style-vega:rounded-lg style-maia:rounded-xl style-mira:rounded-md style-lyra:rounded-none border">
<TabsContent value="account">
Manage your account preferences and profile information.
</TabsContent>
<TabsContent value="password">
Update your password to keep your account secure. Use a strong
password with a mix of letters, numbers, and symbols.
</TabsContent>
<TabsContent value="notifications">
Configure how you receive notifications and alerts. Choose which
types of notifications you want to receive and how you want to
receive them.
</TabsContent>
</div>
</Tabs>
</Example>
)
}
function TabsWithInputAndButton() {
return (
<Example title="With Input and Button" containerClassName="col-span-full">
<Tabs defaultValue="overview" className="mx-auto w-full max-w-lg">
<div className="flex items-center gap-4">
<TabsList>
<TabsTrigger value="overview">Overview</TabsTrigger>
<TabsTrigger value="analytics">Analytics</TabsTrigger>
</TabsList>
<div className="ml-auto flex items-center gap-2">
<Input placeholder="Search..." className="w-44" />
<Button>Action</Button>
</div>
</div>
<div className="style-nova:p-4 style-vega:p-6 style-maia:p-6 style-mira:p-4 style-lyra:p-4 style-nova:rounded-lg style-vega:rounded-lg style-maia:rounded-xl style-mira:rounded-md style-lyra:rounded-none border">
<TabsContent value="overview">
View your dashboard metrics and key performance indicators.
</TabsContent>
<TabsContent value="analytics">
Detailed analytics and insights about your data.
</TabsContent>
<TabsContent value="reports">
Generate and view custom reports.
</TabsContent>
</div>
</Tabs>
</Example>
)
}