Toast
رسالة قصيرة تظهر عند حافة الشاشة وتزول وحدها (في DGA: Notification Toast). خمسة أنواع وإجراء وزر إغلاق، وتُعلَن لقارئ الشاشة.
الإصدار 0.4.1 ·
التثبيت
bunx --bun shadcn@latest add @dga/toastالاستخدام
import { Button } from "@/components/ui/button";
import { Toaster, toast } from "@/components/ui/toast";
// Once, at the root of the app (for example in layout.tsx).
export function Providers({ children }: { children: React.ReactNode }) {
return (
<>
{children}
<Toaster closeLabel="إغلاق" regionLabel="الإشعارات" />
</>
);
}
export function SubmitButton() {
return (
<Button
onClick={() =>
toast.add({
type: "success",
title: "تم إرسال الطلب",
description: "رقمك المرجعي ٢٤٨١٠.",
})
}
>
إرسال
</Button>
);
}استخدم Toast لتأكيد أمر حدث للتو ولا يحتاج ردًا: أُرسل طلب أو حُفظت مسودة. ولا تستخدمه لخطأ يعيق الشخص (اعرضه بجانب الحقل أو في Inline Alert) ولا لشيء يجب أن يتصرف حياله قبل أن يختفي. ضع Toaster واحدًا في الجذر واستدعِ toast.add({ title, description, type }) من أي مكان، حتى خارج React. قيمة type هي neutral أو info أو success أو warning أو error. ويزول الإشعار بعد 6 ثوانٍ؛ ومرّر timeout: 0 ليبقى حتى يُغلق، واستخدمه للأخطاء التي يحتاج الناس إلى قراءتها. أبقِ الرسالة في جملة قصيرة؛ ويتيح زر actionProps إجراءً سريعًا واحدًا (مثل «تراجع»).
البنية
- Toaster (
role="region"ومنطقة حية): القائمة عند نهاية أسفل الشاشة. تحمل ثلاثة إشعارات على الأكثر. - الإشعار: بعرض 484px (وعرض كامل على الجوال)، وانحناء radius-md و
shadow-3xl، علىbackground-notification-white. - الشريط: 8px في جهة البداية، بلون النوع (الدرجة 400).
- الأيقونة والعنوان والوصف، وإجراء اختياري وزر إغلاق.
أمثلة
الأنواع
اضغط زرًا لإضافة إشعار. يُعلَن error وwarning فورًا (priority: "high") وغيرهما بأدب. وللنجاح هنا إجراء.
المهلة والأولوية والإجراءات
يُغلق الإشعار تلقائيًا بعد ست ثوانٍ. مرّر timeout: 0 إلى toast.add ليبقى حتى يغلقه الشخص، وactionProps لإضافة زر. التحذيرات والأخطاء تستخدم priority: "high" فيعلنها قارئ الشاشة فورًا، وغيرها ينتظر دوره. يظهر ثلاثة إشعارات فقط في وقت واحد (limit على Toaster)، ويصطف الباقي خلفها.
RTL
تظهر الإشعارات عند نهاية أسفل الشاشة: أسفل اليمين بالإنجليزية وأسفل اليسار بالعربية. والشريط في جهة البداية، ويزيلها السحب نحو الحافة التي جاءت منها.
إمكانية الوصول
| المفتاح | الإجراء |
|---|---|
| F6 | ينقل التركيز إلى منطقة الإشعارات (عند وجود إشعارات). ويعيده Escape أو النقر في مكان آخر. |
| Tab | ينتقل بين زرَّي الإجراء والإغلاق في الإشعارات. |
| Enter | يضغط زر الإجراء أو الإغلاق المركَّز. |
| Escape | يغلق الإشعار المركَّز. |
- مبنية على Base UI Toast. والإطار منطقة حية: تُعلَن الإشعارات الجديدة دون تحريك التركيز (
politeأوassertiveعندpriority: "high"). اكتب جملًا قصيرة كاملة. - لا يزول الإشعار ما دام المؤشر فوقه أو التركيز داخله، ويعاد المؤقت بعد ذلك (WCAG 2.2.1). واستخدم
timeout: 0لما قد يحتاج الناس وقتًا أطول لقراءته. - يظهر النوع من الأيقونة والعنوان إضافة إلى الشريط، لا من اللون وحده. والنص بنسبة 4.5:1 والأيقونات 3:1 أو أفضل، فاتحًا وداكنًا. ولزر الإغلاق اسم (
closeLabel). - ومع تقليل الحركة يظهر الإشعار ويزول دون انزلاق.
مرجع API
Toaster
ضع Toaster واحدًا في جذر التطبيق (في DGA: Notification Toast). يعرض الإشعارات في نهاية أسفل الشاشة: أسفل اليمين في الصفحات الإنجليزية وأسفل اليسار في العربية. يُعلَن كل إشعار لقارئ الشاشة عند ظهوره (منطقة حية مهذبة، وعاجلة للأخطاء والتنبيهات)، ويبقى ما دام عليه المؤشر أو التركيز، ويمكن سحبه لإزالته.
| الخاصية | النوع | القيمة الافتراضية |
|---|---|---|
numberأكثر عدد من الإشعارات يُعرض معًا. الافتراضي 3. | 3 | |
| ||
numberمدة بقاء الإشعار بالملّي ثانية. القيمة `0` تُبقيه حتى يُغلق. | 6000 | |
| ||
stringالاسم الذي يقرؤه قارئ الشاشة لزر الإغلاق. ترجمه في الصفحات العربية. | "Close" | |
| ||
stringالاسم الذي يقرؤه قارئ الشاشة للمنطقة التي تحمل الإشعارات. ترجمه في الصفحات العربية. | "Notifications" | |
| ||
يقبل أيضًا جميع خصائص Base UI Toast (يفتح في نافذة جديدة).
الاختلافات عن DGA
- الشريط المحايد هو
border-neutral-primary: بينما ترسمه DGA أبيض فلا يُرى على البطاقة البيضاء. والشريط منطقي (جهة البداية). - لا تحدد DGA أي توقيت أو إعلان. وتتوقف الإشعارات مؤقتًا أثناء التمرير أو التركيز، ويمكن سحبها لإزالتها، وتُعلَن، ويقع Toaster عند نهاية أسفل الشاشة.
| التغيير | السبب |
|---|---|
Toast: neutral bar, timing and live region | A message that disappears must be announced and must not vanish while someone is reading it (WCAG 4.1.3, 2.2.1). |
عرض جميع الاختلافات (1) لهذا المكوّن أسباب الاختلافات مكتوبة بالإنجليزية.
التباين
24 زوجًا لونيًا فُحص · جميعها تجتاز WCAG 2.1 AAعرض 12 حالةإخفاء
| النمط / الحالة | الفاتح | الداكن |
|---|---|---|
| title | 14.53:1 AAA | 14.42:1 AAA |
| description | 10.17:1 AAA | 10.95:1 AAA |
| icon / neutral | 18.09:1 3:1 | 14.42:1 3:1 |
| icon / info | 5.98:1 3:1 | 8.98:1 3:1 |
| icon / success | 5.69:1 3:1 | 9.82:1 3:1 |
| icon / warning | 5.42:1 3:1 | 10.27:1 3:1 |
| icon / error | 6.57:1 3:1 | 8.18:1 3:1 |
| action text | 16.44:1 AAA | 12.71:1 AAA |
| action text, hovered | 14.61:1 AAA | 6.95:1 AA |
| close icon | 18.09:1 3:1 | 14.42:1 3:1 |
| close icon, hovered | 16.44:1 3:1 | 9.59:1 3:1 |
| focus ring | 18.09:1 3:1 | 15.89:1 3:1 |
يحتاج النص إلى تباين 4.5:1، والأيقونات وحلقات التركيز إلى 3:1. الحالات المعطّلة مستثناة. تقرير التباين الكامل