پرتوپرتو

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

جدول تصمیم جامع — کدام کامپوننت پرتو برای کدام سناریو؟

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

این صفحه به سوال «کدام کامپوننت؟» در تمام دسته‌بندی‌ها پاسخ می‌دهد.


ورودی‌ها

سناریوکامپوننت
متن کوتاه تک‌خطی (نام، ایمیل، عدد)Input
متن چند خطی (توضیحات، بیوگرافی)Textarea
انتخاب از لیست کوچک ثابت (۳-۱۵ گزینه)Select
انتخاب از لیست بزرگ با جستجوAutocomplete
انتخاب چند گزینهMultiSelect
انتخاب از ۲-۵ گزینه قابل رویتRadioGroup
انتخاب visual از گزینه‌هاRadioCard
گزینه بله/خیر در فرمCheckbox
تنظیم روشن/خاموش با اثر فوریSwitch
جستجو با clear buttonSearchInput
جستجو با نتایج dropdownCommand
انتخاب تاریخ دقیق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
فرم یا محتوای کوچک در desktopDialog
فرم بلند یا panel در desktopSheet
محتوای کشویی از پایین در موبایلDrawer
تأیید ساده بدون محتوای پیچیدهConfirmDialog
محتوای hover preview غنیHoverCard
محتوای interactive در floatingPopover
اطلاعات کوتاه tooltipTooltip

راهنمای تفصیلی 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)
خطای سطح صفحه با retryErrorState
خطای runtime ReactErrorBoundary
راهنمای اطلاعاتی در محتوا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 بدون sparklineStatDisplay
اطلاعات پروفایل اینفلوئنسر کاملProfileCard
پروفایل فشرده برای جدول/لیستProfileInfo
محتوای عمومی با headerCard
مقایسه دو آیتمComparisonCard
داده‌ای با sorting/filteringDataTable
داده ساده بدون قابلیت‌های پیشرفتهTable
درصد تغییرTrendIndicator
نرخ تعامل اینفلوئنسر با تمام جزئیاتEngagementRate
نوار نرخ تعامل سادهEngagementRateBar
احساس یک آیتمSentimentBadge
توزیع درصدی احساساتSentimentDistribution
نشان پلتفرم اجتماعیSocialPlatformBadge

Layout و ساختار

سناریوکامپوننت
چند بخش تاشوAccordion
یک بخش تاشو منفردCollapsible
ناوبری بین view های موازیTabs
flow مرحله‌به‌مرحلهStepper
panel با قابلیت resizeResizable
اسکرول سفارشیScrollArea
حالت خالیEmpty
header صفحه با عنوان و actionPageHeader

ناوبری

سناریوکامپوننت
navigation اصلی عمودیSidebar
navigation افقی سطح بالاNavigationMenu
مسیریاب breadcrumbBreadcrumb
منو با کلیکDropdownMenu
منو با کلیک راستContextMenu
منوی application-styleMenubar
صفحه‌بندیPagination / PaginationControlled

بارگذاری

سناریوکامپوننت
بارگذاری اولیه محتواSkeleton
عملیات کوتاه در دکمهButton isLoading
بارگذاری صفحه‌ایPageLoader
نمودار در حال بارگذاریPartoXxxChart isLoading

→ الگوهای کامل: الگوهای بارگذاری


نمودارها

سناریوکامپوننت
روند زمانیPartoLineChart
روند زمانی با تأکید روی areaPartoAreaChart
مقایسه categoricalPartoBarChart
سهم‌ها و توزیعPartoPieChart
داده دو بُعدی (ماتریس)PartoHeatMap
مقایسه چند بُعدیPartoRadarChart
تکرار کلماتPartoWordCloud
متریک کوچک در کارتMetricCardSparkline
توزیع احساسات (مخصوص)SentimentDistribution

→ راهنمای کامل: داده‌نمایی