Field
يلفّ عنصر تحكم بتسميته ونصه المساعد ورسالة الخطأ، ويربطها لتقنيات المساعدة. علامتا المطلوب والاختياري، وتخطيطان عمودي وأفقي، ومجموعات.
الإصدار 0.4.1 ·
التثبيت
bunx --bun shadcn@latest add @dga/fieldField هو أساس كل عنصر تحكم في النماذج. وكل عنصر تضيفه من هذا القسم يثبّته معه.
الاستخدام
import { Field, FieldDescription, FieldError, FieldLabel } from "@/components/ui/field";
import { Input } from "@/components/ui/input";
export function NationalIdField({ error }: { error?: string }) {
return (
<Field name="nationalId" invalid={Boolean(error)}>
<FieldLabel required>رقم الهوية الوطنية</FieldLabel>
<Input required inputMode="numeric" />
<FieldDescription>١٠ أرقام تبدأ بالرقم ١ أو ٢.</FieldDescription>
<FieldError match={Boolean(error)}>{error}</FieldError>
</Field>
);
}ضع عنصر تحكم واحدًا في كل Field. تسمّي التسمية العنصر، ويُقرأ النص المساعد ورسالة الخطأ بعده عبر aria-describedby. استخدم Input أو Textarea أو Select أو Number Input أو Search Box أو Checkbox أو Radio أو Switch أو File Upload عنصرَ تحكم.
البنية
- Field (
<div>): يحمل الحالة (invalidوdisabled) التي تقرؤها كل الأجزاء. - FieldLabel (
<label>): الاسم الظاهر.requiredيضيف*أحمر، وoptionalيضيف النص «(اختياري)». - عنصر التحكم: أي مكوّن نموذج من هذا القسم.
- FieldDescription (
<p>): نص مساعد تحت عنصر التحكم. - FieldError: الرسالة مع أيقونة تنبيه.
- FieldContent وFieldGroup وFieldSet وFieldLegend وFieldItem ترتّب المجموعات وعناصر التحكم الأفقية.
أمثلة
المطلوب والاختياري
علّم الحقول المطلوبة بـ required على التسمية وعلى عنصر التحكم، فتُرى العلامة ويُعلَن الشرط. وفي نموذج أغلب حقوله مطلوبة، علّم الاستثناءات بـ optional وترجم النص عبر optionalLabel.
<FieldLabel required>الاسم الكامل</FieldLabel>
<FieldLabel optional optionalLabel="اختياري">المسمى الوظيفي</FieldLabel>رسائل الخطأ
اضبط invalid على Field وmatch على FieldError لتتحكم في الخطأ من حالتك. وبدون match تظهر الرسالة عند فشل تحقق المتصفح. ولها أيقونة دائمًا، فلا يعتمد الخطأ على اللون وحده.
نموذج كامل
طلب رخصة بناء مبني من عناصر تحكم داخل Field فقط. أرسله فارغًا لترى كل رسائل الخطأ.
المجموعات والعناصر الأفقية
استخدم orientation="horizontal" مع FieldContent لمربع اختيار أو مفتاح تبديل، وFieldSet مع FieldLegend لمجموعة أزرار اختيار أو عدة مربعات اختيار. ويعطي FieldItem كل زر اختيار تسميته ونصه المساعد.
<Field orientation="horizontal">
<Checkbox />
<FieldContent>
<FieldLabel>أوافق على الشروط</FieldLabel>
<FieldDescription>يمكنك سحب الموافقة لاحقًا.</FieldDescription>
</FieldContent>
</Field>RTL
تقع التسمية والنص المساعد والخطأ في جهة البداية، وتأتي أيقونة الخطأ أولًا في ترتيب القراءة. وتلي علامة المطلوب نص التسمية. وتضع الحقول الأفقية عنصر التحكم في جهة البداية.
إمكانية الوصول
| المفتاح | الإجراء |
|---|---|
| Tab | ينقل التركيز إلى عنصر التحكم. |
| النقر على التسمية | يركّز العنصر، أو يبدّل مربع الاختيار أو زر الاختيار أو مفتاح التبديل. |
- تربط Base UI التسمية بعنصر التحكم، فتكون اسمه المتاح لتقنيات المساعدة.
- يُضاف FieldDescription وFieldError إلى
aria-describedbyالخاص بالعنصر، فيُقرآن بعد التسمية. - لعنصر التحكم غير الصالح
aria-invalid="true". وللرسالة أيقونة ونص، ولا تعتمد على اللون وحده (WCAG 1.4.1). - علامة
*مخفية عن قارئات الشاشة؛ اضبطrequiredعلى العنصر ليُعلَن أنه مطلوب. - تستخدم المجموعات
<fieldset>و<legend>، فيُقرأ اسم المجموعة مع كل عنصر.
مرجع API
Field
يلفّ عنصر تحكم واحدًا مع تسميته ونصه المساعد ورسالة الخطأ. ويربطها لتقنيات المساعدة: التسمية تسمّي العنصر، ويُقرأ النص المساعد ورسالة الخطأ عبر `aria-describedby`.
| الخاصية | النوع | القيمة الافتراضية |
|---|---|---|
"vertical" | "horizontal"`vertical` يرتّب التسمية والعنصر والنص المساعد والخطأ عموديًا. و`horizontal` يضع العنصر (مربع الاختيار أو زر الاختيار أو مفتاح التبديل) بجانب تسميته ونصوصه. | "vertical" | |
| ||
stringاسم عنصر التحكم. يربطه بقيمة النموذج وبأخطاء الخادم. | لا توجد قيمة افتراضية | |
| ||
booleanيعلّم عنصر التحكم غير صالح بناءً على تحققك الخاص. اقرنه بـ `match` في FieldError. | لا توجد قيمة افتراضية | |
| ||
booleanيعطّل عنصر التحكم ويُخفِّت تسميته ونصه المساعد. | لا توجد قيمة افتراضية | |
| ||
يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).
FieldContent
يجمع التسمية والنص المساعد والخطأ بجانب عنصر تحكم أفقي.
يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).
FieldDescription
نص مساعد تحت عنصر التحكم. يرتبط بالعنصر عبر `aria-describedby`.
يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).
FieldError
رسالة الخطأ، مع أيقونة حتى لا يعتمد الخطأ على اللون وحده. تظهر عند فشل التحقق، أو دائمًا عندما تكون `match` تساوي `true`. اضبط `invalid` على Field و`match` هنا للتحكم فيها من حالتك.
| الخاصية | النوع | القيمة الافتراضية |
|---|---|---|
boolean | "valueMissing" | "typeMismatch" | …متى تظهر الرسالة. `true` تُظهرها دائمًا (استخدمها مع `invalid`)، ومفتاح صلاحية يُظهرها عند ذلك الفشل، وعند حذفها تظهر كلما فشل التحقق. | لا توجد قيمة افتراضية | |
| ||
يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).
FieldGroup
يرتّب عدة حقول عموديًا بالمسافة المعتمدة في DGA بينها.
يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).
FieldItem
مربع اختيار أو زر اختيار واحد داخل مجموعة، ليكون لكل منهما تسميته ونصه المساعد.
يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).
FieldLabel
الاسم الظاهر لعنصر التحكم. النقر عليه يركّز العنصر أو يبدّل حالته.
| الخاصية | النوع | القيمة الافتراضية |
|---|---|---|
booleanيعرض علامة المطلوب (*). اضبط `required` على عنصر التحكم أيضًا ليُعلَن للقارئ. | لا توجد قيمة افتراضية | |
| ||
booleanيعرض علامة الاختياري، للحقول غير المطلوبة في نموذج أغلب حقوله مطلوبة. | لا توجد قيمة افتراضية | |
| ||
stringنص علامة الاختياري. ترجمه في الصفحات العربية. | "Optional" | |
| ||
يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).
FieldLegend
اسم مجموعة عناصر التحكم. استخدمه بدل التسمية في FieldSet.
| الخاصية | النوع | القيمة الافتراضية |
|---|---|---|
booleanيعرض علامة المطلوب (*). | لا توجد قيمة افتراضية | |
| ||
booleanيعرض علامة الاختياري. | لا توجد قيمة افتراضية | |
| ||
stringنص علامة الاختياري. ترجمه في الصفحات العربية. | "Optional" | |
| ||
يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).
FieldSet
يجمع عناصر تحكم مترابطة (مجموعة أزرار اختيار، أو عدة مربعات اختيار) تحت عنوان.
يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).
الاختلافات عن DGA
- Field غير موجود في ملف Figma؛ استُخلص من أجزاء التسمية والنص المساعد والخطأ في صفحات الإدخال.
- لا يعتمد الخطأ على اللون وحده:
aria-invalidوحد أحمر ورسالة تبدأ بأيقونة.
| التغيير | السبب |
|---|---|
Field | The same three parts appear on every control page. One component keeps them consistent and wires the accessibility attributes once. |
Field: error is never colour alone | WCAG 1.4.1: colour must not be the only cue. A border colour change alone fails it. |
عرض جميع الاختلافات (2) لهذا المكوّن أسباب الاختلافات مكتوبة بالإنجليزية.
التباين
42 زوجًا لونيًا فُحص · جميعها تجتاز WCAG 2.1 AAعرض 7 حالةإخفاء
| النمط / الحالة | الفاتح | الداكن |
|---|---|---|
| label | 17.31:1 AAA | 15.87:1 AAA |
| label (horizontal) | 13.91:1 AAA | 15.87:1 AAA |
| helper text | 4.57:1 AA | 6.32:1 AA |
| optional marker | 4.57:1 AA | 6.32:1 AA |
| required marker | 4.62:1 AA | 4.65:1 AA |
| error text | 6.29:1 AA | 9.01:1 AAA |
| error icon | 6.29:1 3:1 | 9.01:1 3:1 |
يحتاج النص إلى تباين 4.5:1، والأيقونات وحلقات التركيز إلى 3:1. الحالات المعطّلة مستثناة. تقرير التباين الكامل