Radio Cardv1.0.0
وقتی هر گزینهٔ یک انتخابِ تکی بیش از یک برچسب است (لوگوی بانک، توضیحِ سقف، قیمتِ ارسال، یا محتوای اضافه مثل تعدادِ قسط)، RadioCard کلِ گزینه را یک کارتِ لمسی میکند. دایرهٔ داخلش همان RadioGroupItem است، پس صفحهکلید، فرم و حالتهای invalid و readOnly از RadioGroup میآیند.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی digdesign کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
npx digdesign@latest add https://docs.digdesign.ir/r/radio-card.jsonpnpm dlx digdesign@latest add https://docs.digdesign.ir/r/radio-card.jsonyarn dlx digdesign@latest add https://docs.digdesign.ir/r/radio-card.jsonbunx --bun digdesign@latest add https://docs.digdesign.ir/r/radio-card.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
استفاده
import { RadioGroup } from "@/components/ui/radio-group"
import { RadioCard } from "@/components/ui/radio-card"این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
ترکیب اجزا
RadioCard فرزندِ RadioGroup است و مقدار، فرم (name) و ناوبریِ فلشها را از آن میگیرد. کارت یک label است که به دکمهٔ رادیوی داخلش وصل است؛ کلیک روی هر جای کارت همان کلیک روی رادیو است.
layout="row" رسانه، متن و aside را در یک ردیف میچیند و دایره در انتهای ردیف است؛ layout="tile" رسانه را بالا و متن را وسطچین میکند و دایره در گوشه مینشیند، برای گرید. محتوای children تمامعرض زیرِ ردیف میآید (مثلاً انتخابِ تعدادِ قسط).
دسترسپذیری
- هر کارت یک label برای رادیوی داخلش است؛ صفحهخوان عنوان را نامِ گزینه و description را با aria-describedby توضیحش میخواند.
- ناوبری با فلشها در RTL درست است (فلشِ چپ یعنی گزینهٔ بعد) و فقط گزینهٔ انتخابشده در چرخهٔ Tab است.
- حلقهٔ فوکوس روی کلِ کارت دیده میشود، نه فقط روی دایرهٔ کوچک.
- گزینهٔ غیرفعال زمینهٔ muted و متنِ کمرنگ میگیرد، بیopacity، و دلیلش در description نوشته میشود.
مرجع API
RadioCard
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| value | string | — | مقدارِ این گزینه در RadioGroup. |
| title | React.ReactNode | — | عنوانِ گزینه؛ نامِ دسترسپذیرِ رادیو. |
| description | React.ReactNode | — | توضیحِ کوتاه زیرِ عنوان؛ با aria-describedby به رادیو وصل است. |
| media | React.ReactNode | — | آیکون، لوگو یا تصویرِ گزینه. |
| aside | React.ReactNode | — | قیمت، زمان یا برچسب در انتهای ردیف (فقط row). |
| layout | "row" | "tile" | "row" | ردیفی برای فهرست، کاشی برای گرید. |
| disabled | boolean | false | گزینه انتخابپذیر نیست؛ زمینهٔ muted بیopacity. |
| children | React.ReactNode | — | محتوای تمامعرض زیرِ گزینه. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
نمونهها
روشِ ارسال با قیمت
aside قیمت یا زمان را در انتهای ردیف نشان میدهد.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
گریدِ کاشی
layout="tile" در گریدِ دو یا سهستونه؛ رسانه بالا و دایره در گوشه.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
محتوای اضافه و گزینهٔ غیرفعال
children فقط برای گزینهٔ انتخابشده نمایش داده میشود؛ گزینهٔ غیرفعال دلیلش را میگوید.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| روشِ ارسال با قیمت | تسویهحساب |
| گریدِ کاشی | نوعِ کالا، پلن، فلز |
| محتوای اضافه و گزینهٔ غیرفعال | پرداختِ اعتباری با انتخابِ قسط |
دستورالعمل استفاده
کلِ گزینه لمسپذیر، نه فقط دایره
انجام بده
گزینهای که لوگو، توضیح یا قیمت دارد RadioCard باشد تا کلِ کارت ناحیهٔ لمس و حالتِ انتخاب واضح باشد.
انجام نده
دایرهٔ رادیوی کوچک کنارِ یک بلوکِ متنی که فقط خودِ دایره کلیک میخورد و حالتِ انتخاب فقط یک نقطه است.