دیالوگ تأیید — AlertDialog
کپی کد برای تأیید یک کنش مهم یا بازگشتناپذیر است، مثل حذف یا ارسال نهایی. نقش آن کپی کد است و صفحهخوان بلافاصله عنوان و توضیح را میخواند. کلیک روی پرده آن را نمیبندد تا تصمیم آگاهانه باشد؛ Escape معادل انصراف است و فوکوس اولیه روی «انصراف» مینشیند، یعنی کمخطرترین گزینه. دکمهٔ بستن مرئی ندارد. برای فرم یا محتوای غنی از کپی کد استفاده کنید.
وضعیت: beta · لایه: ۳ (کپی کد) · کد: کپی کد
import { AlertDialog } from '@tokapps/tuk';نمونهٔ زنده
کد قابل کپی
پایه: تأیید ساده
import { AlertDialog, Button } from '@tokapps/tuk';export function SubmitIdeaConfirm() { return ( <AlertDialog trigger={<Button variant="secondary">ارسال برای بررسی</Button>} title="ارسال ایده برای بررسی؟" description="پس از ارسال، ویرایش تا پایان بررسی ممکن نیست." confirmLabel="ارسال" /> );}مخرب با تأیید ناهمگام
import { AlertDialog, Button } from '@tokapps/tuk';import { deleteCampaign } from './api'; // تابع حذف خود اپexport function DeleteCampaignConfirm() { return ( <AlertDialog tone="danger" trigger={<Button variant="ghost">حذف کمپین</Button>} title="کمپین حذف شود؟" description="همهٔ حمایتها و نظرها برای همیشه حذف میشود." confirmLabel="حذف کمپین" cancelLabel="نگهداشتن کمپین" toneLabel="این کنش بازگشتپذیر نیست" onConfirm={() => deleteCampaign()} onCancel={() => console.log('انصراف')} /> );}کنترلشده با محتوای اضافه و تأیید ناهمگام
import { useState } from 'react';import { AlertDialog, Button } from '@tokapps/tuk';export function LeaveWithoutSaving() { const [open, setOpen] = useState(false); return ( <> <Button variant="secondary" onClick={() => setOpen(true)}>خروج از ویرایش</Button> <AlertDialog open={open} onOpenChange={setOpen} tone="danger" title="تغییرات ذخیره نشده" description="اگر خارج شوید، تغییرات این صفحه از بین میرود." confirmLabel="خروج بدون ذخیره" onConfirm={() => new Promise((resolve) => setTimeout(resolve, 800))} > <p>میتوانید ابتدا ذخیره کنید و سپس خارج شوید.</p> </AlertDialog> </> );}همهٔ پیکربندیها
کپی کد پراپها را از کپی کد با حذف کپی کد، کپی کد، کپی کد و کپی کد میگیرد (در کپی کد). پیشفرضها از پارامترهای تابع کپی کد در کپی کد خوانده شدهاند.
| پراپ | نوع | پیشفرض | توضیح |
|---|---|---|---|
| کپی کد | کپی کد | — | محرک باز کردن؛ با کپی کد وصل میشود. |
| کپی کد | کپی کد | — | حالت کنترلشده. |
| کپی کد | کپی کد | — | حالت کنترلنشدهٔ اولیه. |
| کپی کد | کپی کد | — | با هر تغییر باز یا بسته صدا میخورد (از جمله Escape). |
| کپی کد | کپی کد | بدون پیشفرض (الزامی) | عنوان؛ نام دسترسی از آن گرفته میشود. |
| کپی کد | کپی کد | — | توضیح پیامد تصمیم؛ کپی کد. |
| کپی کد | کپی کد | کپی کد | کپی کد آیکون هشدار، برچسب متنی لحن و رنگ دکمهٔ تأیید را فعال میکند. |
| کپی کد | کپی کد | کپی کد | متن دکمهٔ تأیید. |
| کپی کد | کپی کد | کپی کد | متن دکمهٔ انصراف. |
| کپی کد | کپی کد | کپی کد | برچسب متنی لحن مخرب؛ فقط وقتی کپی کد. |
| کپی کد | کپی کد | — | اجرای تأیید. با Promise، دکمه تا پایان در حالت انتظار میماند و سپس پوشش بسته میشود. |
| کپی کد | کپی کد | — | بعد از کلیک روی «انصراف» صدا میخورد. در Escape صدا نمیخورد؛ Escape فقط کپی کد را صدا میزند. |
| کپی کد | کپی کد | — | محتوای اضافه زیر توضیح. |
| کپی کد | کپی کد | — | مقدار کپی کد روی ریشه. |
| کپی کد | کپی کد | — | نام دسترسی وقتی عنوان مرئی ندارید. |
| کپی کد | کپی کد | — | مقصد اختصاصی صدا (opt-in). |
| کپی کد | کپی کد | کپی کد | رفتار چاپ؛ با کپی کد فوتر چاپ نمیشود. |
| کپی کد | کپی کد | از کپی کد | جهت صریح؛ پیشفرض RTL است. |
| کپی کد | کپی کد | — | کلاس اضافه روی ریشهٔ پوشش. |
کپی کد در کد تعریف نشده است؛ عرض پنل با CSS ثابت است (کپی کد).
ساختار و اسلاتها
ModalOverlay [data-tds="alert-dialog"][data-overlay="modal"][data-tone][data-print]└── Modal [data-part="panel"] └── RacDialog [data-part="dialog"][role="alertdialog"] ├── header [data-part="header"] │ ├── span [data-part="icon"][data-tone] (آیکون status.warning یا status.info) │ └── div [data-part="heading"] │ ├── Heading [data-part="title"] │ └── p [data-part="description"] └── div [data-part="body"] ├── p [data-part="tone-label"] (فقط tone="danger") └── children └── footer [data-part="footer"] ├── Button variant="secondary" (انصراف، autoFocus) └── Button با data-tone (تأیید)- بنیان ثابت: نبود دکمهٔ بستن مرئی، نقش کپی کد، ترتیب فوتر (انصراف سپس تأیید)، و کپی کد روی انصراف.
- قابل تغییر: متنها، کپی کد، محتوای کپی کد، و کپی کد. رنگها فقط از توکنهای معنایی میآیند.
همهٔ حالتها
| حالت | نشانه (data-attribute یا prop) | نمایش |
|---|---|---|
| بسته (closed) | پوشش در DOM نیست | — |
| باز، لحن پیشفرض | کپی کد روی ریشه | آیکون کپی کد با رنگ کپی کد |
| باز، لحن مخرب | کپی کد روی ریشه و کپی کد روی آیکون | آیکون کپی کد، برچسب متنی لحن، دکمهٔ تأیید با کپی کد و متن کپی کد |
| در حال انتظار تأیید | کپی کد و کپی کد روی دکمهٔ تأیید (از کپی کد) | حلقهٔ پردازش روی دکمه؛ کلیک مجدد نادیده گرفته میشود |
| hover و pressed | کپی کد، کپی کد روی دکمهها | از استایل کپی کد |
| focus-visible | کپی کد روی دکمهها | حلقهٔ کپی کد |
| کلیک روی پرده | کپی کد | پوشش بسته نمیشود |
| چاپ | کپی کد | پنل بدون فوتر چاپ میشود |
| غیرفعال، خطا، فقطخواندنی | در کد تعریف نشده | — |
رفتار پوشش (از قرارداد کپی کد و تنظیمات این کامپوننت)
- دام فوکوس: فوکوس درون پنل حبس میشود؛ با باز شدن روی «انصراف» و با بسته شدن به محرک برمیگردد.
- Escape: پوشش را میبندد و کپی کد صدا میخورد. کپی کد در این مسیر صدا زده نمیشود.
- پسزمینه: کلیک روی پرده نمیبندد؛ فقط «انصراف»، «تأیید» یا Escape.
- قفل اسکرول: اسکرول صفحهٔ زیرین قفل است؛ بدنهٔ پنل اسکرول میخورد.
- بستن با دکمهٔ بستن: ندارد. کپی کد عمداً حذف شده و جایگزین آن «انصراف» و Escape است.
- کشیدن برای بستن: ندارد.
- در حین انتظار تأیید: دکمهٔ انصراف و Escape غیرفعال نمیشوند؛ در کد، فقط دکمهٔ تأیید وضعیت انتظار دارد.
تغییرات مجاز برای توسعهدهنده
- لحن (کپی کد): کپی کد یا کپی کد.
- برچسبها: کپی کد، کپی کد، کپی کد (قابل ترجمه).
- تأیید: کپی کد همگام یا Promise؛ Promise باعث حالت انتظار و سپس بسته شدن میشود.
- انصراف: کپی کد برای اقدام جانبی دکمهٔ انصراف.
- کنترل حالت: کپی کد و کپی کد، یا کپی کد و کپی کد.
- محتوا: کپی کد، کپی کد و کپی کد.
- نقاط توسعه: کپی کد روی ریشه، کپی کد، کپی کد، کپی کد، و متغیرهای کپی کد در سطح پوشش.
تغییرات ممنوع (بنیان ثابت)
- افزودن دکمهٔ بستن مرئی یا بستن با کلیک روی پرده. این رفتار بخشی از قرارداد است.
- تغییر نقش به کپی کد یا حذف کپی کد وقتی توضیح هست.
- حذف کپی کد از «انصراف» یا قرار دادن فوکوس اولیه روی تأیید.
- حذف برچسب متنی لحن مخرب. رنگ تنها نشانه نیست؛ آیکون و برچسب متنی همیشه باید باشند.
- کوچکتر از ۴۴px کردن دکمهها (دکمهها از کپی کد میآیند).
RTL، کیبورد و صفحهخوان
- RTL: ویژگیهای منطقی استفاده شدهاند. در RTL، فوتر و آیکون از سمت راست شروع میشوند؛ آیکونهای جهتدار در صورت وجود mirror میشوند.
- کلیدها: کپی کد و کپی کد فوکوس را درون پنل میچرخانند؛ کپی کد انصراف است؛ کپی کد دکمهٔ فوکوسدار را فعال میکند (پیشفرض: انصراف).
- صفحهخوان: کپی کد است؛ عنوان و توضیح بلافاصله خوانده میشوند. لحن مخرب با برچسب متنی هم اعلام میشود.
- هدف لمسی: دکمهها حداقل ۴۴px هستند.
- کنتراست: روشن، تیره و کنتراست بالا با کپی کد بررسی میشوند.
صدا، حرکت، چاپ و کاهش حرکت
- صدا: پیشفرض بیصداست (opt-in). باز شدن با لحن پیشفرض کپی کد؛ باز شدن با لحن مخرب کپی کد؛ تأیید کپی کد؛ بسته شدن کپی کد. هیچ صدایی روی hover پخش نمیشود. معادل بصری: آیکون هشدار و برچسب متنی لحن.
- حرکت: پنل با کپی کد (opacity و scale) وارد میشود. دکمهٔ تأیید در حالت انتظار از کپی کد (حلقهٔ پردازش) استفاده میکند.
- کاهش حرکت: با کپی کد یا کپی کد انیمیشن حذف میشود و پوشش فوری ظاهر میشود.
- چاپ: پیشفرض کپی کد. با کپی کد پنل چاپ میشود و فوتر (دکمهها) حذف میشود.
توکنها
فایل توکنهای مصرفی: کپی کد. استایلها در کپی کد و ساختار مشترک در کپی کد. مقدار مرجع کپی کد در کپی کد.
- معنایی: کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد.
- کامپوننتی: کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد.
- تایپوگرافی، کنترل و مقیاس: کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد.
قرارداد ARCH
- آیکونهای هشدار و اطلاع فقط با کپی کد و کپی کد (نام معنایی) هستند؛ مسیر asset در کد وجود ندارد.
- تم فقط حرکت و توکن را تغییر میدهد؛ نقش، ترتیب DOM و رفتار انصراف ثابتاند.
- این کامپوننت gesture ندارد؛ معادل کیبوردی تأیید و انصراف دکمهها و Escape هستند.
نکات
- برای فرم یا محتوای غنی: Dialog.
- برای اطلاعرسانی غیرمسدودکننده: Toast.
- برای هشدار درون صفحه بدون تعامل: Toast.
- برای پیامهای خروج یا حذف با نمای موبایل: ResponsiveDialog.