راهنمای انتخاب کامپوننت
جدول تصمیم جامع — کدام کامپوننت پرتو برای کدام سناریو؟
راهنمای انتخاب کامپوننت
این صفحه به سوال «کدام کامپوننت؟» در تمام دستهبندیها پاسخ میدهد.
ورودیها
| سناریو | کامپوننت |
|---|---|
| متن کوتاه تکخطی (نام، ایمیل، عدد) | Input |
| متن چند خطی (توضیحات، بیوگرافی) | Textarea |
| انتخاب از لیست کوچک ثابت (۳-۱۵ گزینه) | Select |
| انتخاب از لیست بزرگ با جستجو | Autocomplete |
| انتخاب چند گزینه | MultiSelect |
| انتخاب از ۲-۵ گزینه قابل رویت | RadioGroup |
| انتخاب visual از گزینهها | RadioCard |
| گزینه بله/خیر در فرم | Checkbox |
| تنظیم روشن/خاموش با اثر فوری | Switch |
| جستجو با clear button | SearchInput |
| جستجو با نتایج dropdown | Command |
| انتخاب تاریخ دقیق | DatePicker |
| انتخاب بازه تاریخی | DateRangePicker |
| انتخاب دورههای از پیش تعریفشده | PeriodSelector |
| tag های آزاد | TagInput |
| هشتگ | HashtagInput |
| فیلتر با قابلیت حذف | FilterChip / FilterBar |
راهنمای تفصیلی ورودیها
Input — برای هر نوع ورودی متن کوتاه و تکخطی. انواع type مفید: text، email، tel، number، password، search.
// ✅ مناسب
<Input type="email" placeholder="ایمیل خود را وارد کنید" />
// ❌ نامناسب — از Textarea استفاده کنید
<Input placeholder="توضیحات کامل پروژه..." />Select در مقابل Autocomplete — اگر گزینهها ثابت و کمتر از ۱۵ عدد هستند از Select، در غیر این صورت از Autocomplete با قابلیت جستجو استفاده کنید.
Checkbox در مقابل Switch:
| سناریو | انتخاب |
|---|---|
| تأیید شرایط ("موافقم با...") | Checkbox |
| تنظیم روشن/خاموش فوری | Switch |
| چند گزینه قابل انتخاب در فرم | Checkbox Group |
| تنظیمات با اثر فوری | Switch |
Overlay و Modal
| سناریو | کامپوننت |
|---|---|
| تأیید عمل destructive (حذف) | AlertDialog |
| فرم یا محتوای کوچک در desktop | Dialog |
| فرم بلند یا panel در desktop | Sheet |
| محتوای کشویی از پایین در موبایل | Drawer |
| تأیید ساده بدون محتوای پیچیده | ConfirmDialog |
| محتوای hover preview غنی | HoverCard |
| محتوای interactive در floating | Popover |
| اطلاعات کوتاه tooltip | Tooltip |
راهنمای تفصیلی Overlay ها
Dialog — برای محتوای مختصر و تعاملات کوتاه (فرمهای ۱ تا ۳ فیلد، نمایش جزئیات). برای فرم طولانی یا محتوای اسکرولدار زیاد مناسب نیست — Sheet استفاده کنید.
Alert Dialog — فقط برای عملیاتی که غیرقابل بازگشت هستند (حذف داده، خروج از حساب). اگر عملیات قابل لغو است، Dialog معمولی کافی است.
Sheet — برای محتوای بیشتر که از کنار صفحه باز میشود (فرمهای ۵+ فیلد، پنل تنظیمات، فیلترهای پیچیده). در موبایل Drawer بهتر است.
Drawer — نسخه موبایلپسند که از پایین صفحه باز میشود. مناسب برای اپلیکیشنهای touch-first و اکشنشیت.
// Dialog — فرم کوتاه
<Dialog>
<DialogContent>
<DialogHeader><DialogTitle>ویرایش نام</DialogTitle></DialogHeader>
<Input placeholder="نام جدید" />
<DialogFooter><Button variant="primary">ذخیره</Button></DialogFooter>
</DialogContent>
</Dialog>
// Alert Dialog — عملیات مخرب
<AlertDialog>
<AlertDialogContent>
<AlertDialogHeader>
<AlertDialogTitle>حذف کاربر؟</AlertDialogTitle>
<AlertDialogDescription>این عملیات قابل بازگشت نیست.</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogCancel>انصراف</AlertDialogCancel>
<AlertDialogAction>حذف</AlertDialogAction>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>Feedback و اعلان
| سناریو | کامپوننت |
|---|---|
| پیام دائمی مهم در صفحه | Alert |
| اعلان گذرا بعد از عمل | Sonner (toast) |
| خطای سطح صفحه با retry | ErrorState |
| خطای runtime React | ErrorBoundary |
| راهنمای اطلاعاتی در محتوا | Callout |
راهنمای تفصیلی بازخورد
Toast (Sonner) — برای اعلانهای موقت پس از انجام عملیات. برای اطلاعات مهمی که کاربر باید بخواند مناسب نیست.
import { toast } from 'sonner'
toast.success('تغییرات با موفقیت ذخیره شد')
toast.error('خطا در ارتباط با سرور')
toast('فایل حذف شد', {
action: { label: 'بازگردانی', onClick: () => restoreFile() },
})Alert — برای پیامهای مهم که در صفحه میمانند (هشدار انقضای اشتراک، خطای کلی فرم). واریانتها: default، destructive، warning، success.
Callout — فقط برای صفحات مستندات و راهنما، نه UI اپلیکیشن.
Badge — برای نمایش وضعیت یک آیتم (فعال، در انتظار)، نه برای پیام به کاربر.
نمایش داده
| سناریو | کامپوننت |
|---|---|
| عدد کلیدی با sparkline و روند | MetricCard |
| عدد با label بدون sparkline | StatDisplay |
| اطلاعات پروفایل اینفلوئنسر کامل | ProfileCard |
| پروفایل فشرده برای جدول/لیست | ProfileInfo |
| محتوای عمومی با header | Card |
| مقایسه دو آیتم | ComparisonCard |
| دادهای با sorting/filtering | DataTable |
| داده ساده بدون قابلیتهای پیشرفته | Table |
| درصد تغییر | TrendIndicator |
| نرخ تعامل اینفلوئنسر با تمام جزئیات | EngagementRate |
| نوار نرخ تعامل ساده | EngagementRateBar |
| احساس یک آیتم | SentimentBadge |
| توزیع درصدی احساسات | SentimentDistribution |
| نشان پلتفرم اجتماعی | SocialPlatformBadge |
Layout و ساختار
| سناریو | کامپوننت |
|---|---|
| چند بخش تاشو | Accordion |
| یک بخش تاشو منفرد | Collapsible |
| ناوبری بین view های موازی | Tabs |
| flow مرحلهبهمرحله | Stepper |
| panel با قابلیت resize | Resizable |
| اسکرول سفارشی | ScrollArea |
| حالت خالی | Empty |
| header صفحه با عنوان و action | PageHeader |
ناوبری
| سناریو | کامپوننت |
|---|---|
| navigation اصلی عمودی | Sidebar |
| navigation افقی سطح بالا | NavigationMenu |
| مسیریاب breadcrumb | Breadcrumb |
| منو با کلیک | DropdownMenu |
| منو با کلیک راست | ContextMenu |
| منوی application-style | Menubar |
| صفحهبندی | Pagination / PaginationControlled |
بارگذاری
| سناریو | کامپوننت |
|---|---|
| بارگذاری اولیه محتوا | Skeleton |
| عملیات کوتاه در دکمه | Button isLoading |
| بارگذاری صفحهای | PageLoader |
| نمودار در حال بارگذاری | PartoXxxChart isLoading |
→ الگوهای کامل: الگوهای بارگذاری
نمودارها
| سناریو | کامپوننت |
|---|---|
| روند زمانی | PartoLineChart |
| روند زمانی با تأکید روی area | PartoAreaChart |
| مقایسه categorical | PartoBarChart |
| سهمها و توزیع | PartoPieChart |
| داده دو بُعدی (ماتریس) | PartoHeatMap |
| مقایسه چند بُعدی | PartoRadarChart |
| تکرار کلمات | PartoWordCloud |
| متریک کوچک در کارت | MetricCardSparkline |
| توزیع احساسات (مخصوص) | SentimentDistribution |
→ راهنمای کامل: دادهنمایی