nili/ui
همه‌ی کامپوننت‌ها

Tabs

نمای کلی
۱۹ اکسپورت۶ محور واریانت۳۲ پراپ۴ فایل
import { Tabs, TabsContent, TabsDivider, TabsList, TabsTrigger } from '@nili/ui';

این همان صفحه‌ی نمای کلیِ خود کتابخانه است که زنده رندر می‌شود. زبان یا تم را از هدر عوض کنید، همراهش می‌آید.

افقی

حالت پیش‌فرض. label مجموعهٔ تب‌ها را نام‌گذاری می‌کند — بدون آن صفحه‌خوان فقط «فهرست تب» را اعلام می‌کند و بس، که در صفحه‌ای با سه‌تا از این‌ها بی‌فایده است.

نام، عکس و معرفی شما.

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>
  )
}

آیکون‌ها و بَج‌ها

startIcon و endIcon منطقی‌اند، پس در هر دو جهت جلو می‌افتند. badge هر نودی را می‌گیرد — یک عدد خالی یا یک Badge کامل.

نام، عکس و معرفی شما.

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>
  )
}

کشیده

stretch باعث می‌شود تب‌ها عرض را بین خودشان تقسیم کنند به‌جای اینکه اندازهٔ برچسبشان بمانند — برای یک کنترل بخش‌بندی‌شده داخل کارت یا شیت موبایل مناسب است.

هفت روز گذشته.

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>
  )
}

عمودی

appearance فقط روی تب‌های عمودی اثر دارد — منوی افقی در طراحی محور سبک ندارد. TabsDivider یک گروه از تب‌ها را با خط جدا می‌کند.

card

نام، عکس و معرفی شما.

list

نام، عکس و معرفی شما.

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>
  )
}

حالت فعال‌سازی و keepMounted

automatic تب را همین که فوکوس به آن برسد انتخاب می‌کند — پیش‌فرض ARIA، و وقتی پنل‌ها ارزان‌اند درست است. اگر تبی داده بارگیری می‌کند از manual استفاده کنید: عبور با کلید جهت از کنار چهار تب نباید چهار درخواست بفرستد. keepMounted موقعیت اسکرول و وضعیت فرم را در پنل پنهان نگه می‌دارد.

با کلید جهت بین تب‌ها حرکت کنید — با `manual` تا Enter یا Space نزنید چیزی عوض نمی‌شود.

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>
  )
}