تبها (Tabs)
کامپوننت سازماندهی محتوا در تبهای قابل تعویض
معرفی
کامپوننت Tabs برای سازماندهی محتوا در بخشهای جداگانه که قابل تعویض هستند استفاده میشود.
چه زمانی استفاده کنیم:
- وقتی محتوای مرتبط را در view های موازی سازماندهی میکنید
- برای جابجایی بین بخشهای مختلف بدون تغییر صفحه
- وقتی کاربر نیاز دارد بین ۲ تا ۵ بخش رفتوبرگشت کند
چه زمانی استفاده نکنیم:
- برای محتوای collapsible — از
Accordionاستفاده کنید - برای flow های step-by-step — از
Stepperاستفاده کنید - وقتی بیش از ۵-۶ تب دارید — از
DropdownMenuیا ناوبری دیگری استفاده کنید
استفاده
سفارشهای امروز
۲۳ سفارش جدید ثبت شد.
import {
Tabs,
TabsList,
TabsTrigger,
TabsContent,
Card,
CardHeader,
CardTitle,
CardDescription,
} from '@parto-system-design/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
TabsTrigger
دسترسیپذیری
- پیمایش با کیبورد (Arrow keys) پشتیبانی میشود
- از
role="tablist"وrole="tab"استفاده میشود aria-selectedبرای تب فعال تنظیم میشودaria-controlsبرای ارتباط تب با محتوا
تعامل با کیبورد
Arrow Right/Arrow Left: حرکت بین تبها (در RTL جهت معکوس) -Home: رفتن به اولین تب -End: رفتن به آخرین تبEnterیاSpace: فعالسازی تب انتخابشده
راهنمای استفاده
بکنید
- همیشه
defaultValueتعیین کنید تا تب اولیه مشخص باشد - عناوین تبها را کوتاه و گویا نگه دارید (حداکثر ۲-۳ کلمه) - محتوای هر تب را مستقل نگه دارید تا کاربر نیازی به رفتوبرگشت نداشته باشد
نکنید
- بیش از ۵-۶ تب نگذارید — از
DropdownMenuیا ناوبری دیگری استفاده کنید - از Tabs برای flow های ترتیبی استفاده نکنید — ازStepperاستفاده کنید - محتوای حیاتی را در تبهای غیرفعال پنهان نکنید — کاربر ممکن است آنها را نبیند
ملاحظات RTL
- TabsList بهصورت خودکار راستچین میشود
- کلیدهای پیمایش بهدرستی در RTL عمل میکنند
- فاصلهگذاری با Logical Properties
کامپوننتهای مرتبط
- Accordion — وقتی محتوا باید تاشو باشد و کاربر فقط یک بخش را در لحظه ببیند
- Stepper — وقتی مراحل ترتیبی دارید و کاربر باید گامبهگام پیش برود
- ToggleGroup — وقتی فقط انتخاب مهم است و محتوای مرتبط با هر گزینه ندارید