دیالوگ (Dialog)
کامپوننت نمایش پنجرههای مودال
معرفی
کامپوننت Dialog برای نمایش محتوا در یک پنجره مودال که روی صفحه اصلی قرار میگیرد استفاده میشود.
چه زمانی استفاده کنیم:
- برای عملیات کوتاه که نیاز به تمرکز کاربر دارند (ویرایش پروفایل، افزودن آیتم)
- برای فرمهای ساده (تا ۵ فیلد) که در context صفحه فعلی معنا دارند
- برای تأیید عملیات غیر مخرب
چه زمانی استفاده نکنیم:
- برای تأیید اعمال destructive — از
AlertDialogاستفاده کنید - برای محتوای بزرگ در موبایل — از
Drawerاستفاده کنید - برای منوهای کشویی ساده — از
DropdownMenuاستفاده کنید - برای فرمهای بلند (بیش از ۵ فیلد) — از
Sheetاستفاده کنید
استفاده
زمین بازی
با تغییر تنظیمات زیر، دیالوگ را به صورت زنده مشاهده کنید.
زمین بازی
تنظیمات
import { Dialog } from '@parto-system-design/ui'
<Dialog />import {
Dialog,
DialogTrigger,
DialogContent,
DialogHeader,
DialogTitle,
DialogDescription,
DialogFooter,
Button,
Input,
} from '@parto-system-design/ui'
;<Dialog>
<DialogTrigger asChild>
<Button>باز کردن دیالوگ</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>ویرایش پروفایل</DialogTitle>
<DialogDescription>اطلاعات خود را ویرایش کرده و ذخیره کنید.</DialogDescription>
</DialogHeader>
<div className="space-y-3">
<Input placeholder="نام کامل" defaultValue="مریم محمدی" />
<Input placeholder="ایمیل" type="email" defaultValue="maryam@example.com" />
</div>
<DialogFooter>
<Button variant="outline">لغو</Button>
<Button>ذخیره</Button>
</DialogFooter>
</DialogContent>
</Dialog>حالتها و انواع
دیالوگ پایه
ساختار کامپوننتها
<Dialog>
<DialogTrigger asChild>
<Button>باز کردن</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>عنوان</DialogTitle>
<DialogDescription>توضیحات</DialogDescription>
</DialogHeader>
{/* محتوا */}
<DialogFooter>
<Button>تأیید</Button>
</DialogFooter>
</DialogContent>
</Dialog>کنترل Programmatic
const [open, setOpen] = React.useState(false)
;<Dialog open={open} onOpenChange={setOpen}>
<DialogContent>
{/* محتوا */}
<Button onClick={() => setOpen(false)}>بستن</Button>
</DialogContent>
</Dialog>ترکیب کامپوننتها
Dialog از اجزای زیر تشکیل شده است:
- Dialog: کانتینر اصلی و مدیریت state
- DialogTrigger: المنت trigger کننده dialog
- DialogContent: محتوای اصلی dialog
- DialogHeader: هدر dialog
- DialogTitle: عنوان dialog
- DialogDescription: توضیحات dialog
- DialogFooter: فوتر با دکمههای عملیاتی
راهنمای استفاده
بکنید
- از
Dialogبرای عملیاتی که نیاز به تمرکز کاربر دارند استفاده کنید - ازAlertDialogبرای تأیید عملیات مخرب (حذف، خروج، پاکسازی) استفاده کنید - ازSheetبرای پنلهای کناری با محتوای بیشتر استفاده کنید
نکنید
- از دیالوگهای تودرتو پرهیز کنید — کاربر را گیج میکند - در دیالوگ فرمهای پیچیده قرار ندهید — بهجای آن از صفحه جداگانه استفاده کنید - دیالوگ را با کلیک روی پسزمینه نبندید اگر داده ذخیرهنشده وجود دارد
جدول ویژگیها
Dialog
DialogContent
دسترسیپذیری
- Focus بهطور خودکار به داخل dialog منتقل میشود
- با فشردن Escape بسته میشود
- Focus trap برای پیمایش کیبورد
- از
role="dialog"وaria-modalاستفاده میشود aria-labelledbyبرای عنوانaria-describedbyبرای توضیحات
ملاحظات RTL
- محتوا بهصورت خودکار راستچین میشود
- دکمه بستن در سمت راست بالا قرار میگیرد
- ترتیب دکمهها در DialogFooter از راست به چپ است
تعامل با کیبورد
Escape: بستن دیالوگ -Tab: حرکت بین عناصر داخل دیالوگ (فوکوس محبوس در دیالوگ) -Shift + Tab: حرکت معکوس فوکوس- فوکوس هنگام باز شدن به اولین عنصر تعاملی منتقل میشود
کامپوننتهای مرتبط
- AlertDialog — وقتی عمل مخرب است و کاربر باید حتماً تأیید کند (حذف، پاکسازی)
- ConfirmDialog — wrapper سادهتر برای تأییدهای رایج بدون نیاز به سفارشیسازی
- Sheet — وقتی محتوا بلندتر است یا فرم بیش از ۵ فیلد دارد
- Drawer — نسخه موبایلپسند که از پایین صفحه باز میشود