المحتوى
التسمية جملة واحدة واضحة تسمّي المشكلة وتضيف خطوة تالية محددة، وليست وصفا وحده أبدا. الإجراء، عند وجوده، فعل أولا مثل راجع أو أرسل.
دائما إجراء أو خطوة تالية
المكونات
رسالة بارزة غير مشروطة تنقل معلومة مهمة أو إجراء مطلوبا أعلى الشاشة أو القسم.
تُستخدم اللافتة لمعلومات مهمة أو إجراءات مطلوبة تكون بارزة لكنها غير مشروطة (لا توقف تدفق الشاشة). اختر الصيغة حسب شدة الموقف.
| الصيغة | متى تستخدمها |
|---|---|
| info | أزرق. معلومة، لا يلزم إجراء فوري. مثال: عناصر غير مرتبطة في الطلبية تحتاج متابعة المكتب. |
| success | أخضر. تأكيد إجراء مكتمل. |
| warning | أصفر/كهرماني. يُنصح باتخاذ إجراء لتجنب مشكلة. مثال: الاقتراب من حد البونص أعلى مراجعة الطلبية، أو إعادة توجيه مطلوبة بعد إلغاء طلبية فرعية. |
| critical | أحمر. إجراء فوري مطلوب لمنع ضرر. |
خاصيتان أساسيتان: شدة اللافتة، وإمكانية إغلاقها. القيم المذكورة شاملة.
| الخاصية | النوع | الافتراضي |
|---|---|---|
| variant | info | success | warning | critical | info |
| dismissible | boolean | false |
تعرّف اللافتة حالتين: الافتراضية، والتركيز (عند التنقل إليها أو إلى عنصر تحكم الإغلاق بلوحة المفاتيح).
اللافتة ثابتة داخل التدفّق (inline) أعلى الشاشة أو القسم، تدفع المحتوى تحتها ولا تطفو فوقه ولا تحجبه. لا تختفي تلقائيا: تبقى ظاهرة ما دامت المشكلة قائمة، وتُزال فقط حين يحلّها المستخدم أو حين تكون المعلومة اختيارية حقا فيضغط زر الإغلاق. عند التنقّل بلوحة المفاتيح ينتقل التركيز إلى زر الإجراء ثم إلى زر الإغلاق، وضغط أيّ منهما يستجيب فورا دون أن يقفز باقي التخطيط.
لا اختفاء تلقائي
التسمية جملة واحدة واضحة تسمّي المشكلة وتضيف خطوة تالية محددة، وليست وصفا وحده أبدا. الإجراء، عند وجوده، فعل أولا مثل راجع أو أرسل.
دائما إجراء أو خطوة تالية
الاتجاه منطقي: صمّم بخصائص منطقية (الحشو والأيقونات من البداية والنهاية، لا اليسار واليمين الصريحين) والمنصة تعكس تلقائيا عند التبديل إلى العربية.
| الدور | الرمز |
|---|---|
| تأكيد المعلومة | brand.primary |
| تأكيد النجاح | brand.success |
| تأكيد التحذير | brand.warning-low-stock |
| تأكيد الحرج | brand.critical-expired |
| السطح | brand.surface |
| النص | brand.text-default |
<Banner variant="warning">تجاوزت حد البونص. قلّل الكمية أو تواصل مع المكتب.</Banner>اللافتة تُستورد من حزمة المكوّنات، ولونها وأيقونتها يأتيان من خريطة شدّة دلالية لا من قيم خام. الاستخدام في React أولا، ثم قلب التطبيق الذي يربط كل شدّة برمزها.
import { Banner } from "@mercato/components";
<Banner variant="warning" action="تواصل" dismissible>
تجاوزت حد البونص. قلّل الكمية أو تواصل مع المكتب.
</Banner>
<Banner variant="info">عناصر غير مرتبطة في الطلبية تحتاج متابعة المكتب.</Banner>
<Banner variant="success">تم حفظ التغييرات.</Banner>// Fill + icon color per intent, never a raw hex.
const BANNER_TONES = {
info: { bg: "var(--color-bg-intent-info-subtle)", fg: "var(--color-fg-intent-info)", icon: "info" },
success: { bg: "var(--color-bg-intent-positive-subtle)", fg: "var(--color-fg-intent-positive)", icon: "check_circle" },
warning: { bg: "var(--color-bg-intent-warning-subtle)", fg: "var(--color-fg-intent-warning)", icon: "warning" },
critical: { bg: "var(--color-bg-intent-negative-subtle)", fg: "var(--color-fg-intent-negative)", icon: "error" },
};
const t = BANNER_TONES[variant];
<div role="status" style={{ backgroundColor: t.bg, borderRadius: "var(--shape-surface-base)" }}>
{/* icon + color + label together carry the severity */}
<span className="material-symbol" style={{ color: t.fg }}>{t.icon}</span>
<div className="text-ink">{children}</div>
</div>لا تحمل اللافتة قيمة لون أو استدارة مباشرة: تبديل الوضع الداكن أو إعادة العلامة يسري تلقائيا لأن كل شدّة تمرّ عبر رمزها الدلالي.
| الخطأ | ما يفسد | الصواب |
|---|---|---|
| لون وحده بلا أيقونة ولا تسمية | يفشل مع ضعاف تمييز الألوان | اقرن اللون بأيقونة t.icon وتسمية نصية |
| تعبئة ثابتة (#FEF3C7) | يكسر الوضع الداكن وإعادة العلامة | var(--color-bg-intent-warning-subtle) |
| قابلة للإغلاق والمشكلة قائمة | يخفي المشكلة دون حلّها | dismissible بعد حلّ المشكلة فقط |
| تكديس عدة لافتات | يميّع التسلسل الهرمي | لافتة واحدة، واجمع المشكلات في قائمة |