Radio
اختيار خيار واحد بالضبط من مجموعة. Radio وRadio Group، أساسي ومحايد، مع كل الحالات.
الإصدار 0.4.1 ·
التثبيت
bunx --bun shadcn@latest add @dga/radioويثبّت Field أيضًا.
الاستخدام
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).
إمكانية الوصول
| المفتاح | الإجراء |
|---|---|
| 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`.
| الخاصية | النوع | القيمة الافتراضية |
|---|---|---|
"primary" | "neutral"`primary` (أخضر) أو `neutral` (أسود في الوضع الفاتح). | "primary" | |
| ||
stringقيمة المجموعة عند اختيار هذا الزر. | لا توجد قيمة افتراضية | |
| ||
booleanيعطّل هذا الزر. | لا توجد قيمة افتراضية | |
| ||
يقبل أيضًا جميع خصائص Base UI Radio (يفتح في نافذة جديدة).
RadioGroup
مجموعة أزرار اختيار لا يمكن اختيار أكثر من زر واحد فيها. تنقل مفاتيح الأسهم وتختار، ويدخل Tab المجموعة ويخرج منها. لفّها بـ Field مع FieldSet لتعطيها عنوانًا.
| الخاصية | النوع | القيمة الافتراضية |
|---|---|---|
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 border | 4.57:1 3:1 | 3.80:1 3:1 |
| unchecked border, hovered | 7.04:1 3:1 | 12.04:1 3:1 |
| border, error | 4.62:1 3:1 | 4.65:1 3:1 |
| border, read-only | 4.57:1 3:1 | 3.80:1 3:1 |
| focus ring | 17.31:1 3:1 | 17.49:1 3:1 |
| primary / checked (dot and border) | 4.54:1 3:1 | 3.68:1 3:1 |
| primary / hovered (dot and border) | 8.18:1 3:1 | 3.68:1 3:1 |
| primary / pressed (dot and border) | 10.34:1 3:1 | 3.68:1 3:1 |
| neutral / checked (dot and border) | 17.93:1 3:1 | 9.38:1 3:1 |
| neutral / hovered (dot and border) | 7.04:1 3:1 | 12.04:1 3:1 |
| neutral / pressed (dot and border) | 4.57:1 3:1 | 6.32:1 3:1 |
| read-only mark | 4.77:1 3:1 | 9.38:1 3:1 |
| label | 14.53:1 AAA | 15.87:1 AAA |
| helper text | 4.77:1 AA | 6.32:1 AA |
يحتاج النص إلى تباين 4.5:1، والأيقونات وحلقات التركيز إلى 3:1. الحالات المعطّلة مستثناة. تقرير التباين الكامل