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

Field

يلفّ عنصر تحكم بتسميته ونصه المساعد ورسالة الخطأ، ويربطها لتقنيات المساعدة. علامتا المطلوب والاختياري، وتخطيطان عمودي وأفقي، ومجموعات.

الإصدار 0.4.1 ·

التسمية والنص المساعد ورسالة الخطأ

التثبيت

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

Field هو أساس كل عنصر تحكم في النماذج. وكل عنصر تضيفه من هذا القسم يثبّته معه.

الاستخدام

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

page.tsx
tsx
<FieldLabel required>الاسم الكامل</FieldLabel>
<FieldLabel optional optionalLabel="اختياري">المسمى الوظيفي</FieldLabel>

رسائل الخطأ

اضبط invalid على Field وmatch على FieldError لتتحكم في الخطأ من حالتك. وبدون match تظهر الرسالة عند فشل تحقق المتصفح. ولها أيقونة دائمًا، فلا يعتمد الخطأ على اللون وحده.

نموذج كامل

طلب رخصة بناء مبني من عناصر تحكم داخل Field فقط. أرسله فارغًا لترى كل رسائل الخطأ.

نموذج كامل

المجموعات والعناصر الأفقية

استخدم orientation="horizontal" مع FieldContent لمربع اختيار أو مفتاح تبديل، وFieldSet مع FieldLegend لمجموعة أزرار اختيار أو عدة مربعات اختيار. ويعطي FieldItem كل زر اختيار تسميته ونصه المساعد.

page.tsx
tsx
<Field orientation="horizontal">
  <Checkbox />
  <FieldContent>
    <FieldLabel>أوافق على الشروط</FieldLabel>
    <FieldDescription>يمكنك سحب الموافقة لاحقًا.</FieldDescription>
  </FieldContent>
</Field>

RTL

تقع التسمية والنص المساعد والخطأ في جهة البداية، وتأتي أيقونة الخطأ أولًا في ترتيب القراءة. وتلي علامة المطلوب نص التسمية. وتضع الحقول الأفقية عنصر التحكم في جهة البداية.

LTR (الإنجليزية)
RTL (العربية)

إمكانية الوصول

المفتاحالإجراء
Tabينقل التركيز إلى عنصر التحكم.
النقر على التسميةيركّز العنصر، أو يبدّل مربع الاختيار أو زر الاختيار أو مفتاح التبديل.
  • تربط Base UI التسمية بعنصر التحكم، فتكون اسمه المتاح لتقنيات المساعدة.
  • يُضاف FieldDescription وFieldError إلى aria-describedby الخاص بالعنصر، فيُقرآن بعد التسمية.
  • لعنصر التحكم غير الصالح aria-invalid="true". وللرسالة أيقونة ونص، ولا تعتمد على اللون وحده (WCAG 1.4.1).
  • علامة * مخفية عن قارئات الشاشة؛ اضبط required على العنصر ليُعلَن أنه مطلوب.
  • تستخدم المجموعات <fieldset> و<legend>، فيُقرأ اسم المجموعة مع كل عنصر.

مرجع API

Field

يلفّ عنصر تحكم واحدًا مع تسميته ونصه المساعد ورسالة الخطأ. ويربطها لتقنيات المساعدة: التسمية تسمّي العنصر، ويُقرأ النص المساعد ورسالة الخطأ عبر `aria-describedby`.

خصائص Field
الخاصيةالنوعالقيمة الافتراضية
"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` هنا للتحكم فيها من حالتك.

خصائص FieldError
الخاصيةالنوعالقيمة الافتراضية
boolean | "valueMissing" | "typeMismatch" | …

متى تظهر الرسالة. `true` تُظهرها دائمًا (استخدمها مع `invalid`)، ومفتاح صلاحية يُظهرها عند ذلك الفشل، وعند حذفها تظهر كلما فشل التحقق.

لا توجد قيمة افتراضية

يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).

FieldGroup

يرتّب عدة حقول عموديًا بالمسافة المعتمدة في DGA بينها.

يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).

FieldItem

مربع اختيار أو زر اختيار واحد داخل مجموعة، ليكون لكل منهما تسميته ونصه المساعد.

يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).

FieldLabel

الاسم الظاهر لعنصر التحكم. النقر عليه يركّز العنصر أو يبدّل حالته.

خصائص FieldLabel
الخاصيةالنوعالقيمة الافتراضية
boolean

يعرض علامة المطلوب (*). اضبط `required` على عنصر التحكم أيضًا ليُعلَن للقارئ.

لا توجد قيمة افتراضية
boolean

يعرض علامة الاختياري، للحقول غير المطلوبة في نموذج أغلب حقوله مطلوبة.

لا توجد قيمة افتراضية
string

نص علامة الاختياري. ترجمه في الصفحات العربية.

"Optional"

يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).

FieldLegend

اسم مجموعة عناصر التحكم. استخدمه بدل التسمية في FieldSet.

خصائص FieldLegend
الخاصيةالنوعالقيمة الافتراضية
boolean

يعرض علامة المطلوب (*).

لا توجد قيمة افتراضية
boolean

يعرض علامة الاختياري.

لا توجد قيمة افتراضية
string

نص علامة الاختياري. ترجمه في الصفحات العربية.

"Optional"

يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).

FieldSet

يجمع عناصر تحكم مترابطة (مجموعة أزرار اختيار، أو عدة مربعات اختيار) تحت عنوان.

يقبل أيضًا جميع خصائص Base UI Field (يفتح في نافذة جديدة).

الاختلافات عن DGA

  • Field غير موجود في ملف Figma؛ استُخلص من أجزاء التسمية والنص المساعد والخطأ في صفحات الإدخال.
  • لا يعتمد الخطأ على اللون وحده: aria-invalid وحد أحمر ورسالة تبدأ بأيقونة.
التغييرالسبب
FieldThe same three parts appear on every control page. One component keeps them consistent and wires the accessibility attributes once.
Field: error is never colour aloneWCAG 1.4.1: colour must not be the only cue. A border colour change alone fails it.

عرض جميع الاختلافات (2) لهذا المكوّن أسباب الاختلافات مكتوبة بالإنجليزية.

التباين

42 زوجًا لونيًا فُحص · جميعها تجتاز WCAG 2.1 AAعرض 7 حالة
النمط / الحالةالفاتحالداكن
label17.31:1 AAA15.87:1 AAA
label (horizontal)13.91:1 AAA15.87:1 AAA
helper text4.57:1 AA6.32:1 AA
optional marker4.57:1 AA6.32:1 AA
required marker4.62:1 AA4.65:1 AA
error text6.29:1 AA9.01:1 AAA
error icon6.29:1 3:19.01:1 3:1

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