تستهدف SDAIA UI المستوى AA من معايير WCAG 2.1. تتولّى المكوّنات الأجزاء الصعبة (الأدوار، ودعم لوحة المفاتيح، والتركيز، والتسميات)، لكن الصفحة لا تكون قابلة للوصول إلا إذا كان محتواها وطريقة تركيب المكوّنات فيها قابلين للوصول أيضًا. تعرض هذه الصفحة ما تقدّمه المكوّنات وما يقع على عاتقك.
| المكوّن | السلوك المدمج |
|---|---|
| إدخال النص، منطقة النص | التسمية مرتبطة بالحقل، والنص المساعد ورسالة الخطأ مرتبطان عبر aria-describedby. الخطأ يضبط aria-invalid ويُعلَن لقارئ الشاشة. نجمة الحقل المطلوب مخفية عن قارئ الشاشة، والحقل نفسه معلَّم بأنه مطلوب. |
| القائمة المنسدلة للاختيار | نمط combobox مع listbox وفق WAI-ARIA. تتنقّل الأسهم وHome وEnd وPage Up وPage Down بين الخيارات، ويختار Enter والمسافة، ويغلق Escape، والكتابة تنقل إلى الخيار المطابق. في الاختيار المتعدد لكل شريحة زر إزالة له اسم. |
| النافذة المنبثقة | role="dialog" مع aria-modal، واسمها عنوانها. ينتقل التركيز إلى داخلها ويبقى Tab داخلها، ويغلقها Escape ويعود التركيز إلى الزر الذي فتحها. لا تتمرّر الصفحة خلفها. |
| منتقي التاريخ | الشهر شبكة (grid). تنتقل الأسهم بين الأيام والأسابيع، وHome وEnd إلى بداية الأسبوع ونهايته، وPage Up وPage Down بين الأشهر (ومع Shift بين السنوات). اليوم الحالي معلَّم بـ aria-current، وتغيير الشهر يُعلَن. |
| مربع الاختيار، زر الاختيار، المفتاح | عناصر إدخال أصلية، فتعمل مع لوحة المفاتيح والنماذج. يستخدم المفتاح role="switch"، ويحقّق مساره تباين 3:1 في وضع الإيقاف. |
| شريط التقدّم، دائرة التقدّم، رفع الملف | role="progressbar" مع القيمة الحالية. يسمّي مكوّن رفع الملف كل شريط تقدّم باسم الملف وحالته. |
| الشريحة، أيقونة المساعدة | لا عناصر تفاعلية متداخلة. لزر المساعدة اسم (الافتراضي "Help") ويُغلق تلميحه بـ Escape. |
| DgaIcon | مخفية عن قارئ الشاشة ما لم تعطها عنوانًا. |
تُفحص هذه السلوكيات آليًا: يُفحص كل عرض توضيحي للمكوّنات بأداة axe في السمتين الفاتحة والداكنة وفي اتجاه RTL، وتغطي اختبارات لوحة المفاتيح القائمة المنسدلة والنافذة المنبثقة ومنتقي التاريخ وحقول النص.
label). النص التوضيحي داخل الحقل ليس تسمية.aria-label، فمكوّن الزر لا يضيفه تلقائيًا.aria-label أو aria-labelledby حين لا توجد تسمية ظاهرة بجانبهما.title) ولو قصيرًا، ليكون للنافذة اسم.h1 واحدًا في الصفحة، وحافظ على تسلسل مستويات العناوين.labels لترجمة الأسماء المدمجة للأزرار والمناطق. كثير من المكوّنات تملك هذه الخاصية (مثل القائمة المنسدلة ومنتقي التاريخ ورفع الملف والجدول ومشغّلات الوسائط والرسوم البيانية)، وبدونها تبقى هذه الأسماء بالإنجليزية.<TextInput dir="rtl" label="رقم الهوية الوطنية" helperText="10 أرقام، يبدأ بالرقم 1 أو 2" error={idError} required labels={{ clear: 'مسح' }} // localized names for built-in buttons />
| المحتوى | الحد الأدنى للتباين |
|---|---|
| النص الأساسي والتسميات | 4.5:1 |
| النص الكبير (24px، أو 18.66px بخط عريض، فأكبر) | 3:1 |
| الأيقونات وحدود الحقول وحلقات التركيز وسائر عناصر الواجهة التي يلزم رؤيتها | 3:1 |
| العناصر المعطَّلة والزخرفية | لا حد أدنى، لكن لا تُخفِ فيها معلومات |
text-* وbg-* وborder-*)، فهي مضبوطة لتحقيق هذه النسب في السمتين الفاتحة والداكنة وفي كل الهويات.tabIndex، واستخدم tabIndex={0} فقط في عناصر التحكم المخصّصة التي تحتاجه.focus-visible).button للإجراءات، وa للتنقّل، وinput للبيانات.lang="ar" للصفحات العربية وlang="en" للإنجليزية.تحترم المكوّنات المتحرّكة إعداد "تقليل الحركة" في نظام التشغيل (prefers-reduced-motion)، فتُزال الحركات والانتقالات أو تُختصر. التزم بذلك في شيفرتك أيضًا:
motion-safe: أو أزِلها بـ motion-reduce:.يجب أن تبقى إمكانية الوصول متحقّقة في كل مزيج من السمة والاتجاه. بدّلهما على العنصر <html>:
<!-- السمة الداكنة: أضف theme-dark إلى <html> --> <html lang="en" class="theme-dark"> <!-- العربية: اضبط dir وlang معًا على <html> --> <html lang="ar" dir="rtl">
theme-dark إلى <html>، فتتبدّل كل المكوّنات ورموز الألوان الدلالية.dir="rtl" وlang="ar" على <html>، واضبطهما معًا. تعكس dir التخطيط، وتعطي lang قارئَ الشاشة الصوت العربي وتتيح لأنماط CSS تطبيق قواعد العربية.تنقّل في الصفحة بـ Tab: كل عنصر تحكّم يمكن الوصول إليه بالترتيب ومع حلقة تركيز ظاهرة.
لكل حقل وزر وعنصر تحكّم بأيقونة فقط اسم.
رسائل الخطأ تُعلَن ومرتبطة بحقولها.
لا تُظهر أداة axe (أو Lighthouse) أي مخالفات.
تباين النص وعناصر الواجهة مقبول في السمتين الفاتحة والداكنة.
الصفحة تعمل بالعربية مع dir="rtl" وlang="ar".
الصفحة تعمل عند التكبير 200% ومع تفعيل تقليل الحركة.
تمت المراجعة بقارئ شاشة.
وجدت مشكلة في إمكانية الوصول داخل أحد المكوّنات؟ أبلغ عنها مع اسم المكوّن والمتصفح والتقنية المساعدة وخطوات إعادة إنتاج المشكلة.