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

Checkbox

مربع لاختيار نعم/لا، أو لاختيار عدة خيارات. أساسي ومحايد، وثلاثة أحجام، ومحدد وجزئي وللقراءة فقط ومعطّل وخطأ.

الإصدار 0.4.1 ·

حالات مربع الاختيار

التثبيت

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

ويثبّت Field أيضًا.

الاستخدام

page.tsx
tsx
import { Checkbox } from "@/components/ui/checkbox";
import { Field, FieldContent, FieldLabel } from "@/components/ui/field";

export function ConsentField() {
  return (
    <Field orientation="horizontal" name="consent">
      <Checkbox required />
      <FieldContent>
        <FieldLabel>أقرّ بأن المعلومات صحيحة</FieldLabel>
      </FieldContent>
    </Field>
  );
}

استخدم Checkbox عندما يمكن للمستخدم ألا يختار شيئًا أو يختار خيارًا أو عدة خيارات، أو يقرّ بشيء قبل الإرسال. يُطبَّق الاختيار عند إرسال النموذج؛ وللإعداد الذي يسري فورًا استخدم Switch. ولاختيار واحد فقط من عدة خيارات استخدم Radio.

البنية

  • المربع (<span role="checkbox"> مع <input> مخفي): الحد والتعبئة.
  • العلامة: علامة صح، أو شرطة عند الحالة الجزئية.
  • التسمية والنص المساعد والخطأ: من Field، بجانب المربع.

أمثلة

الحالات

غير محدد ومحدد وجزئي وللقراءة فقط ومعطّل وخطأ والنمط المحايد.

الحالات

الأحجام

md بحجم 24px (الافتراضي)، وsm بحجم 20px، وxs بحجم 16px. والتسمية، لا المربع، هي هدف النقر، فيبقى مريحًا في كل الأحجام.

الأحجام

مجموعة مع عنصر أب

اضبط indeterminate على العنصر الأب عندما يكون بعض الأبناء فقط محددًا. ويحدد الأب كل الأبناء أو يلغي تحديدهم.

مجموعة مع عنصر أب

RTL

يقع المربع على يمين (بداية) تسميته، ويصطف النص المساعد تحت التسمية. وعلامة الصح غير اتجاهية فلا تُعكس.

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

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

المفتاحالإجراء
Tabينقل التركيز إلى مربع الاختيار.
Spaceيحدده أو يلغي تحديده.
  • الدور checkbox مع aria-checked (true أو false أو mixed)، وحقل أصلي مخفي للنماذج.
  • تأتي التسمية من Field؛ والنقر عليها يبدّل المربع.
  • حد المربع غير المحدد بنسبة 3:1 أو أفضل على كل سطح؛ وتعبئة المربع المحدد وعلامته بنسبة 3:1 مقابل السطح ومقابل بعضهما (WCAG 1.4.11).
  • التركيز حد بسمك 2px على بعد 2px خارج المربع. وللقراءة فقط حد بنسبة 3:1.
  • يعرض الخطأ أيقونة ونصًا مع aria-invalid، لا تغيّر لون وحده.

مرجع API

Checkbox

مربع لاختيار نعم/لا، أو لاختيار واحد من عدة خيارات. `indeterminate` يعرض شرطة لعنصر أب اختير بعض أبنائه فقط. سمّه بـ Field (`orientation="horizontal"`) أو بتسمية تحيط به.

خصائص Checkbox
الخاصيةالنوعالقيمة الافتراضية
"xs" | "sm" | "md"

حجم المربع: `md` ‏24px، و`sm` ‏20px، و`xs` ‏16px.

"md"
"primary" | "neutral"

`primary` (أخضر) أو `neutral` (أسود في الوضع الفاتح).

"primary"
boolean

يعرض شرطة ويُبلّغ بـ `aria-checked=mixed`، لعنصر أب اختير بعض أبنائه فقط.

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

حالة متحكَّم بها.

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

الحالة الابتدائية عند عدم التحكم.

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

يعطّل المربع.

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

اسم الحقل عند إرسال النموذج.

لا توجد قيمة افتراضية
(checked: boolean, details) => void

تُستدعى عند تبديل المستخدم المربع. من Base UI.

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

يعرض الحالة دون إمكانية تغييرها.

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

لا يمكن إرسال النموذج قبل تحديده.

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

القيمة التي تُرسل عند التحديد.

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

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

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

  • في الوضع الداكن تبقى تعبئة المربع المحدد green-600 عند التمرير والضغط، لأن الخضرة الأفتح في Figma تعطي العلامة البيضاء 1.4–2.1:1.
  • تنقلب علامة الصح المحايدة مع التعبئة (رمز جديد control-icon-neutral).
  • للقراءة فقط حد بنسبة 3:1 (في Figma: 1.5:1).
التغييرالسبب
--control-primary-hovered (dark) و1 غيرهاFigma Dark lightens the checked fill on hover and press (green-300/400). The white check mark on it is 1.4–2.1:1. The fill stays green-600 and hover and press show on the ring and background instead.
--control-icon-neutral (new)The check mark on a neutral checkbox. The neutral fill is near-black in light mode and light grey in dark mode (control-neutral-checked), so the mark needs to flip too. Figma's control-icon-* tokens stay white (1.8:1 on the dark-mode fill).
Checkbox, Radio: hover and pressed fill in dark modeA white mark on the lighter fill is 1.4–2.1:1 (see the control-primary-hovered and -pressed fixes).
Checkbox, Radio, Switch: read-onlyThe pale border is 1.5:1 on white. A read-only control keeps a 3:1 boundary.

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

التباين

108 زوجًا لونيًا فُحص · جميعها تجتاز WCAG 2.1 AAعرض 20 حالة
النمط / الحالةالفاتحالداكن
unchecked border4.57:1 3:13.80:1 3:1
unchecked border, hovered7.04:1 3:112.04:1 3:1
border, error4.62:1 3:14.65:1 3:1
border, read-only4.57:1 3:13.80:1 3:1
focus ring17.31:1 3:117.49:1 3:1
primary / checked (fill)4.54:1 3:13.68:1 3:1
primary / checked (check mark)4.74:1 3:14.74:1 3:1
primary / hovered (fill)8.18:1 3:13.68:1 3:1
primary / hovered (check mark)8.55:1 3:14.74:1 3:1
primary / pressed (fill)10.34:1 3:13.68:1 3:1
primary / pressed (check mark)10.81:1 3:14.74:1 3:1
neutral / checked (fill)17.93:1 3:19.38:1 3:1
neutral / checked (check mark)18.74:1 3:110.07:1 3:1
neutral / hovered (fill)7.04:1 3:112.04:1 3:1
neutral / hovered (check mark)7.36:1 3:112.93:1 3:1
neutral / pressed (fill)4.57:1 3:16.32:1 3:1
neutral / pressed (check mark)4.77:1 3:16.79:1 3:1
read-only mark4.77:1 3:19.38:1 3:1
label14.53:1 AAA15.87:1 AAA
helper text4.77:1 AA6.32:1 AA

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