Tabs
Genel görünümimport { Tabs, TabsContent, TabsDivider, TabsList, TabsTrigger } from '@nili/ui';Bu, kütüphanenin kendi genel görünüm sayfası — canlı olarak render ediliyor. Üstten dili veya temayı değiştirin, o da değişir.
Yatay
Varsayılan. label sekme kümesini adlandırır — o olmadan ekran okuyucu yalnızca “sekme listesi” der ki üç tanesinin olduğu bir sayfada bu işe yaramaz.
Adınız, fotoğrafınız ve biyografiniz.
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@nili/ui"
export function Example() {
return (
<Tabs defaultValue="profile">
<TabsList label={t('settings.label')}>
<TabsTrigger value="profile">{t('tab.profile')}</TabsTrigger>
<TabsTrigger value="security">{t('tab.security')}</TabsTrigger>
<TabsTrigger value="alerts">{t('tab.alerts')}</TabsTrigger>
</TabsList>
<TabsContent value="profile">Your name, photo and bio.</TabsContent>
<TabsContent value="security">Password and two-factor.</TabsContent>
<TabsContent value="alerts">What we email you about.</TabsContent>
</Tabs>
)
}Simgeler ve rozetler
startIcon ve endIcon mantıksaldır, iki yönde de önde gider. badge her düğümü alır — çıplak bir sayı ya da tam bir Badge.
Adınız, fotoğrafınız ve biyografiniz.
import { Tabs, TabsList, TabsTrigger, TabsContent, Badge, Icon } from "@nili/ui"
import { RiUser3Line, RiNotification3Line } from "@remixicon/react"
export function Example() {
return (
<Tabs defaultValue="profile">
<TabsList label="Account settings">
<TabsTrigger value="profile" startIcon={<Icon icon={RiUser3Line} />}>
{t('tab.profile')}
</TabsTrigger>
<TabsTrigger
value="alerts"
startIcon={<Icon icon={RiNotification3Line} />}
badge={<Badge size="small" color="red">3</Badge>}
>
{t('tab.alerts')}
</TabsTrigger>
</TabsList>
…
</Tabs>
)
}Genişleme
stretch sekmelerin etiketlerine yapışmak yerine genişliği paylaşmasını sağlar — bir kartın ya da mobil sayfanın içindeki bölümlü denetim için doğrudur.
Son yedi gün.
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@nili/ui"
export function Example() {
return (
<Tabs defaultValue="week">
<TabsList stretch label={t('range.label')}>
<TabsTrigger value="day">{t('range.day')}</TabsTrigger>
<TabsTrigger value="week">{t('range.week')}</TabsTrigger>
<TabsTrigger value="month">{t('range.month')}</TabsTrigger>
</TabsList>
…
</Tabs>
)
}Dikey
appearance yalnızca dikey sekmelere uygulanır — yatay menünün tasarımda stil ekseni yoktur. TabsDivider bir sekme grubunu çizgiyle ayırır.
Adınız, fotoğrafınız ve biyografiniz.
Adınız, fotoğrafınız ve biyografiniz.
import { Tabs, TabsList, TabsTrigger, TabsContent, TabsDivider } from "@nili/ui"
export function Example() {
return (
<Tabs defaultValue="profile" orientation="vertical" appearance="card">
<TabsList label="Settings">
<TabsTrigger value="profile">{t('tab.profile')}</TabsTrigger>
<TabsTrigger value="security">{t('tab.security')}</TabsTrigger>
<TabsDivider />
<TabsTrigger value="usage">Usage</TabsTrigger>
</TabsList>
…
</Tabs>
)
}Etkinleştirme kipi ve keepMounted
automatic odak ulaştığı anda sekmeyi seçer — ARIA varsayılanı; paneller ucuzken doğrudur. Bir sekme veri yüklüyorsa manual kullanın: dört sekmenin yanından ok tuşuyla geçmek dört istek tetiklememeli. keepMounted gizli bir panelde kaydırma konumunu ve form durumunu korur.
Sekmeler arasında ok tuşlarıyla gezin — `manual` ile Enter ya da Boşluk’a basana dek hiçbir şey değişmez.
Bu panel gizliyken de takılı kalır.
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@nili/ui"
export function Example() {
return (
<Tabs defaultValue="overview" activationMode="manual">
<TabsList label={t('report.label')}>
<TabsTrigger value="overview">{t('report.overview')}</TabsTrigger>
<TabsTrigger value="chart">{t('report.chart')}</TabsTrigger>
</TabsList>
<TabsContent value="overview">Cheap to render.</TabsContent>
{/* expensive to rebuild — keep it mounted */}
<TabsContent value="chart" keepMounted>
<RevenueChart />
</TabsContent>
</Tabs>
)
}Tabs
extends Omit< ComponentPropsWithoutRef<'div'>, 'onChange' | 'defaultValue' >
Diğer proplar
| Prop | Tip | Varsayılan | Notlar |
|---|---|---|---|
| children | ReactNode | — | |
| aria-label | string | — | |
| value | string | — | Selected tab. Controlled. |
| defaultValue | string | ||
| onValueChange | (value: string) => void | — | |
| orientation | horizontal | vertical | horizontal | |
| appearance | card | list | list | Figma's `Style (Card | List)`. Vertical only — the horizontal tab menu has no style axis in the design. |
| activationMode | automatic | manual | automatic |
TabsContent
extends ComponentPropsWithoutRef<'div'>
Diğer proplar
| Prop | Tip | Varsayılan | Notlar |
|---|---|---|---|
| children | ReactNode | — | |
| aria-label | string | — | |
| value* | string | — | |
| keepMounted | boolean | false | Keep the panel mounted while hidden. Off by default: an unmounted panel cannot run effects or hold stale data. Turn it on to preserve scroll position, form state or a chart that is expensive to rebuild. |
TabsDivider
TabsList
extends ComponentPropsWithoutRef<'div'>
Varyant eksenleri — bileşenin cva tanımından
| Prop | Tip | Varsayılan | Notlar |
|---|---|---|---|
| stretch | boolean | false | Tabs share the width instead of hugging their labels. |
| orientation | horizontal | vertical | horizontal | |
| appearance | card | list | list |
Diğer proplar
| Prop | Tip | Varsayılan | Notlar |
|---|---|---|---|
| children | ReactNode | — | |
| aria-label | string | — | |
| label | string | — | Accessible name for the tab set, e.g. `'Account settings'`. |
TabsTrigger
extends Omit< ComponentPropsWithoutRef<'button'>, 'value' >
Varyant eksenleri — bileşenin cva tanımından
| Prop | Tip | Varsayılan | Notlar |
|---|---|---|---|
| orientation | horizontal | vertical | horizontal | |
| appearance | card | list | list | |
| selected | 'true' | 'false' | false |
Diğer proplar
| Prop | Tip | Varsayılan | Notlar |
|---|---|---|---|
| children | ReactNode | — | |
| disabled | boolean | — | |
| required | boolean | — | |
| readOnly | boolean | — | |
| value* | string | — | Ties the tab to its panel. Must be unique within one `Tabs`. |
| defaultValue | string | — | |
| name | string | — | |
| aria-label | string | — | |
| startIcon | ReactNode | — | Figma's "Left Icon". Logical, so it leads in both directions. |
| endIcon | ReactNode | — | Figma's "Right Icon". |
| badge | ReactNode | — | Figma's "Number" — a count or a `<Badge>`, after the label. |