دیالوگ (Dialog)
کامپوننت نمایش پنجرههای مودال
معرفی
کامپوننت Dialog برای نمایش محتوا در یک پنجره مودال که روی صفحه اصلی قرار میگیرد استفاده میشود.
استفاده
import {
Dialog,
DialogTrigger,
DialogContent,
DialogHeader,
DialogTitle,
DialogDescription,
DialogFooter,
Button,
Input,
} from '@parto/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 variant="outline">ویرایش پروفایل</Button>
</DialogTrigger>
<DialogContent className="sm:max-w-[425px]">
<DialogHeader>
<DialogTitle>ویرایش پروفایل</DialogTitle>
<DialogDescription>
تغییرات خود را اعمال کنید و سپس ذخیره کنید.
</DialogDescription>
</DialogHeader>
<div className="grid gap-4 py-4">
<div className="grid grid-cols-4 items-center gap-4">
<label htmlFor="name" className="text-end">
نام
</label>
<Input
id="name"
defaultValue="علی احمدی"
className="col-span-3"
/>
</div>
<div className="grid grid-cols-4 items-center gap-4">
<label htmlFor="username" className="text-end">
نام کاربری
</label>
<Input
id="username"
defaultValue="@ali_ahmadi"
className="col-span-3"
/>
</div>
</div>
<DialogFooter>
<Button type="submit">ذخیره تغییرات</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: فوتر با دکمههای عملیاتی
Props
Dialog
| Prop | Type | Default | Description |
|---|---|---|---|
open | boolean | - | کنترل وضعیت باز/بسته |
onOpenChange | (open: boolean) => void | - | callback تغییر وضعیت |
defaultOpen | boolean | false | وضعیت پیشفرض |
DialogContent
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | کلاسهای CSS اضافی |
onEscapeKeyDown | (event) => void | - | رویداد فشردن Escape |
onInteractOutside | (event) => void | - | رویداد کلیک خارج dialog |
دسترسیپذیری
- Focus بهطور خودکار به داخل dialog منتقل میشود
- با فشردن Escape بسته میشود
- Focus trap برای پیمایش کیبورد
- از
role="dialog"وaria-modalاستفاده میشود aria-labelledbyبرای عنوانaria-describedbyبرای توضیحات
ملاحظات RTL
- محتوا بهصورت خودکار راستچین میشود
- دکمه بستن در سمت راست بالا قرار میگیرد
- ترتیب دکمهها در DialogFooter از راست به چپ است