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

Radio

اختيار خيار واحد بالضبط من مجموعة. Radio وRadio Group، أساسي ومحايد، مع كل الحالات.

الإصدار 0.4.1 ·

مجموعة أزرار الاختيار

التثبيت

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

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

الاستخدام

page.tsx
tsx
import { Field, FieldItem, FieldLabel, FieldLegend, FieldSet } from "@/components/ui/field";
import { Radio, RadioGroup } from "@/components/ui/radio";

export function ContactField() {
  return (
    <Field name="contact">
      <FieldSet render={<RadioGroup defaultValue="sms" />}>
        <FieldLegend>وسيلة التواصل المفضلة</FieldLegend>
        <FieldItem>
          <FieldLabel>
            <Radio value="sms" />
            رسالة نصية
          </FieldLabel>
        </FieldItem>
        <FieldItem>
          <FieldLabel>
            <Radio value="email" />
            البريد الإلكتروني
          </FieldLabel>
        </FieldItem>
      </FieldSet>
    </Field>
  );
}

استخدم Radio عندما يجب اختيار خيار واحد من اثنين إلى خمسة ورؤيتها كلها تفيد. ابدأ باختيار الخيار الأشيع محددًا فقط إن كان افتراضيًا آمنًا. وللخيارات الأكثر استخدم Select؛ ولاختيارات متعددة استخدم Checkbox.

البنية

  • RadioGroup: المجموعة؛ قيمة واحدة في كل مرة.
  • العنوان (FieldLegend): اسم المجموعة.
  • Radio: العنصر الدائري وفيه نقطة عند اختياره.
  • التسمية والنص المساعد لكل خيار، من FieldItem.

أمثلة

مجموعة أزرار الاختيار

لفّ المجموعة في Field ثم FieldSet الذي يعرض RadioGroup، فيسمّي العنوان المجموعة ويسمّي كل FieldItem زره.

مجموعة أزرار الاختيار

الحالات

غير محدد ومحدد، بالنغمتين الأساسية والمحايدة، وللقراءة فقط ومعطّل.

الحالات

RTL

يقع زر الاختيار على يمين (بداية) تسميته. استخدم ArrowDown وArrowUp في المجموعة العمودية: يعملان بالطريقة نفسها في الاتجاهين. وينتقل ArrowRight إلى الخيار التالي وArrowLeft إلى السابق في الاتجاهين أيضًا (لا تعكسهما Base UI).

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

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

المفتاحالإجراء
Tabينقل التركيز إلى المجموعة (إلى الزر المختار، أو الأول) وإلى خارجها.
ArrowDown / ArrowRightينتقل إلى الخيار التالي ويختاره.
ArrowUp / ArrowLeftينتقل إلى الخيار السابق ويختاره.
Spaceيختار الزر المركَّز عليه.
  • الدور radiogroup للمجموعة وradio مع aria-checked لكل خيار. ويسمّي FieldSet وعنوانه المجموعة.
  • زر اختيار واحد فقط في ترتيب Tab، فالمجموعة محطة واحدة.
  • حلقة الزر غير المختار وحلقة المختار ونقطته بنسبة 3:1 أو أفضل على كل سطح (WCAG 1.4.11).
  • التركيز حد بسمك 2px على بعد 2px خارج الدائرة. وتبقى تسمية الأزرار المعطّلة وللقراءة فقط مقروءة.

مرجع API

Radio

زر اختيار دائري واحد في RadioGroup. أعطِ كل Radio قيمة `value`.

خصائص Radio
الخاصيةالنوعالقيمة الافتراضية
"primary" | "neutral"

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

"primary"
string

قيمة المجموعة عند اختيار هذا الزر.

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

يعطّل هذا الزر.

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

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

RadioGroup

مجموعة أزرار اختيار لا يمكن اختيار أكثر من زر واحد فيها. تنقل مفاتيح الأسهم وتختار، ويدخل Tab المجموعة ويخرج منها. لفّها بـ Field مع FieldSet لتعطيها عنوانًا.

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

قيمة متحكَّم بها.

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

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

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

يعطّل كل أزرار الاختيار في المجموعة.

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

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

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

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

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

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

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

لا يمكن إرسال النموذج دون اختيار.

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

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

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

  • تعبئة التمرير والضغط في الوضع الداكن كما في Checkbox: تبقى النقطة green-600.
  • للقراءة فقط حلقة بنسبة 3:1 (في Figma: 1.5:1).

لا شيء. يطابق هذا المكوّن ملف DGA في Figma.

التباين

72 زوجًا لونيًا فُحص · جميعها تجتاز WCAG 2.1 AAعرض 14 حالة
النمط / الحالةالفاتحالداكن
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 (dot and border)4.54:1 3:13.68:1 3:1
primary / hovered (dot and border)8.18:1 3:13.68:1 3:1
primary / pressed (dot and border)10.34:1 3:13.68:1 3:1
neutral / checked (dot and border)17.93:1 3:19.38:1 3:1
neutral / hovered (dot and border)7.04:1 3:112.04:1 3:1
neutral / pressed (dot and border)4.57:1 3:16.32: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. الحالات المعطّلة مستثناة. تقرير التباين الكامل