پرتوپرتو

تب‌ها (Tabs)

کامپوننت سازماندهی محتوا در تب‌های قابل تعویض

معرفی

کامپوننت Tabs برای سازماندهی محتوا در بخش‌های جداگانه که قابل تعویض هستند استفاده می‌شود.

استفاده

سفارش‌های امروز

۲۳ سفارش جدید ثبت شد.

import {
  Tabs,
  TabsList,
  TabsTrigger,
  TabsContent,
  Card,
  CardHeader,
  CardTitle,
  CardDescription,
} from '@parto/ui';

<Tabs defaultValue="tab1" className="w-full max-w-xl">
  <TabsList className="grid grid-cols-3">
    <TabsTrigger value="tab1">تب اول</TabsTrigger>
    <TabsTrigger value="tab2">تب دوم</TabsTrigger>
    <TabsTrigger value="tab3">تب سوم</TabsTrigger>
  </TabsList>
  <TabsContent value="tab1">
    <Card>
      <CardHeader>
        <CardTitle>مرور کلی</CardTitle>
        <CardDescription>آمار امروز را مشاهده کنید.</CardDescription>
      </CardHeader>
    </Card>
  </TabsContent>
  <TabsContent value="tab2">
    <Card>
      <CardHeader>
        <CardTitle>فروش</CardTitle>
        <CardDescription>گزارش فروش هفتگی.</CardDescription>
      </CardHeader>
    </Card>
  </TabsContent>
  <TabsContent value="tab3">
    <Card>
      <CardHeader>
        <CardTitle>اعلان‌ها</CardTitle>
        <CardDescription>سه اعلان جدید دارید.</CardDescription>
      </CardHeader>
    </Card>
  </TabsContent>
</Tabs>

مثال کامل

<Tabs defaultValue="account" className="w-[400px]">
  <TabsList className="grid w-full grid-cols-2">
    <TabsTrigger value="account">حساب کاربری</TabsTrigger>
    <TabsTrigger value="password">رمز عبور</TabsTrigger>
  </TabsList>
  <TabsContent value="account">
    <Card>
      <CardHeader>
        <CardTitle>حساب کاربری</CardTitle>
        <CardDescription>
          تغییرات حساب کاربری خود را اینجا اعمال کنید.
        </CardDescription>
      </CardHeader>
      <CardContent className="space-y-2">
        <div className="space-y-1">
          <label htmlFor="name">نام</label>
          <Input id="name" defaultValue="علی احمدی" />
        </div>
      </CardContent>
      <CardFooter>
        <Button>ذخیره تغییرات</Button>
      </CardFooter>
    </Card>
  </TabsContent>
  <TabsContent value="password">
    <Card>
      <CardHeader>
        <CardTitle>رمز عبور</CardTitle>
        <CardDescription>
          رمز عبور خود را تغییر دهید.
        </CardDescription>
      </CardHeader>
      <CardContent className="space-y-2">
        <div className="space-y-1">
          <label htmlFor="current">رمز فعلی</label>
          <Input id="current" type="password" />
        </div>
        <div className="space-y-1">
          <label htmlFor="new">رمز جدید</label>
          <Input id="new" type="password" />
        </div>
      </CardContent>
      <CardFooter>
        <Button>ذخیره رمز عبور</Button>
      </CardFooter>
    </Card>
  </TabsContent>
</Tabs>

ترکیب کامپوننت‌ها

Tabs از چهار جزء اصلی تشکیل شده است:

  • Tabs: کانتینر اصلی و مدیریت state
  • TabsList: کانتینر دکمه‌های تب
  • TabsTrigger: دکمه انتخاب تب
  • TabsContent: محتوای هر تب

Props

Tabs

PropTypeDefaultDescription
defaultValuestring-مقدار پیش‌فرض تب انتخاب شده
valuestring-مقدار کنترل شده تب فعال
onValueChange(value: string) => void-callback تغییر تب
orientation'horizontal' | 'vertical''horizontal'جهت نمایش تب‌ها

TabsTrigger

PropTypeDefaultDescription
valuestring-مقدار شناسایی تب
disabledbooleanfalseغیرفعال کردن تب

دسترسی‌پذیری

  • پیمایش با کیبورد (Arrow keys) پشتیبانی می‌شود
  • از role="tablist" و role="tab" استفاده می‌شود
  • aria-selected برای تب فعال تنظیم می‌شود
  • aria-controls برای ارتباط تب با محتوا

ملاحظات RTL

  • TabsList به‌صورت خودکار راست‌چین می‌شود
  • کلیدهای پیمایش به‌درستی در RTL عمل می‌کنند
  • فاصله‌گذاری با Logical Properties