تخطَّ إلى المحتوى

Toast

رسالة قصيرة تظهر عند حافة الشاشة وتزول وحدها (في DGA: Notification Toast). خمسة أنواع وإجراء وزر إغلاق، وتُعلَن لقارئ الشاشة.

الإصدار 0.4.1 ·

إشعار منبثق

التثبيت

bunx --bun shadcn@latest add @dga/toast

الاستخدام

page.tsx
tsx
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

تظهر الإشعارات عند نهاية أسفل الشاشة: أسفل اليمين بالإنجليزية وأسفل اليسار بالعربية. والشريط في جهة البداية، ويزيلها السحب نحو الحافة التي جاءت منها.

LTR (الإنجليزية)
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). يعرض الإشعارات في نهاية أسفل الشاشة: أسفل اليمين في الصفحات الإنجليزية وأسفل اليسار في العربية. يُعلَن كل إشعار لقارئ الشاشة عند ظهوره (منطقة حية مهذبة، وعاجلة للأخطاء والتنبيهات)، ويبقى ما دام عليه المؤشر أو التركيز، ويمكن سحبه لإزالته.

خصائص Toaster
الخاصيةالنوعالقيمة الافتراضية
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 regionA 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 حالة
النمط / الحالةالفاتحالداكن
title14.53:1 AAA14.42:1 AAA
description10.17:1 AAA10.95:1 AAA
icon / neutral18.09:1 3:114.42:1 3:1
icon / info5.98:1 3:18.98:1 3:1
icon / success5.69:1 3:19.82:1 3:1
icon / warning5.42:1 3:110.27:1 3:1
icon / error6.57:1 3:18.18:1 3:1
action text16.44:1 AAA12.71:1 AAA
action text, hovered14.61:1 AAA6.95:1 AA
close icon18.09:1 3:114.42:1 3:1
close icon, hovered16.44:1 3:19.59:1 3:1
focus ring18.09:1 3:115.89:1 3:1

يحتاج النص إلى تباين 4.5:1، والأيقونات وحلقات التركيز إلى 3:1. الحالات المعطّلة مستثناة. تقرير التباين الكامل