کارت رادیو (Radio Card)
مجموعه کارتهای تعاملی که فقط یک مورد قابل انتخاب است
معرفی
کامپوننت Radio Card برای انتخاب یک گزینه از بین چند گزینه استفاده میشود، اما به صورت کارتهای بزرگ و بصری. این کامپوننت زمانی مناسب است که میخواهید اطلاعات بیشتری درباره هر گزینه نمایش دهید.
چه زمانی استفاده نکنیم:
- وقتی گزینهها فقط متن هستند — از
RadioGroupاستفاده کنید - برای بیش از ۶ گزینه — صفحه شلوغ میشود، از
Selectاستفاده کنید
استفاده پایه (RTL)
به صورت پیشفرض، کامپوننت در حالت RTL (راست به چپ) است:
import { RadioCards, RadioCardItem, RadioCardTitle, RadioCardDescription } from '@parto-system-design/ui'
export default function MyComponent() {
return (
<RadioCards defaultValue="1" dir="rtl" className="grid-cols-1 sm:grid-cols-3 gap-3">
<RadioCardItem value="1">
<div className="flex flex-col gap-1 text-start">
<RadioCardTitle>پردازنده ۸ هستهای</RadioCardTitle>
<RadioCardDescription>۳۲ گیگابایت رم</RadioCardDescription>
</div>
</RadioCardItem>
<RadioCardItem value="2">
<div className="flex flex-col gap-1 text-start">
<RadioCardTitle>پردازنده ۶ هستهای</RadioCardTitle>
<RadioCardDescription>۲۴ گیگابایت رم</RadioCardDescription>
</div>
</RadioCardItem>
<RadioCardItem value="3">
<div className="flex flex-col gap-1 text-start">
<RadioCardTitle>پردازنده ۴ هستهای</RadioCardTitle>
<RadioCardDescription>۱۶ گیگابایت رم</RadioCardDescription>
</div>
</RadioCardItem>
</RadioCards>
)
}حالت LTR (چپ به راست)
برای متنهای انگلیسی یا زبانهای چپ به راست، میتوانید dir="ltr" را تنظیم کنید:
<RadioCards defaultValue="1" dir="ltr" className="grid-cols-1 sm:grid-cols-3 gap-3">
<RadioCardItem value="1">
<div className="flex flex-col gap-1 text-start">
<RadioCardTitle>8-core CPU</RadioCardTitle>
<RadioCardDescription>32 GB RAM</RadioCardDescription>
</div>
</RadioCardItem>
<RadioCardItem value="2">
<div className="flex flex-col gap-1 text-start">
<RadioCardTitle>6-core CPU</RadioCardTitle>
<RadioCardDescription>24 GB RAM</RadioCardDescription>
</div>
</RadioCardItem>
<RadioCardItem value="3">
<div className="flex flex-col gap-1 text-start">
<RadioCardTitle>4-core CPU</RadioCardTitle>
<RadioCardDescription>16 GB RAM</RadioCardDescription>
</div>
</RadioCardItem>
</RadioCards>حالت ساده
برای موارد سادهتر، میتوانید بدون توضیحات استفاده کنید. برای وسطچین کردن محتوا از justify-center items-center استفاده کنید:
نمونه فارسی (RTL)
<RadioCards defaultValue="yearly" dir="rtl" className="grid-cols-2 gap-3">
<RadioCardItem value="monthly" className="justify-center items-center min-h-[60px]">
<RadioCardTitle>ماهانه</RadioCardTitle>
</RadioCardItem>
<RadioCardItem value="yearly" className="justify-center items-center min-h-[60px]">
<RadioCardTitle>سالانه</RadioCardTitle>
</RadioCardItem>
</RadioCards>نمونه انگلیسی (LTR)
<RadioCards defaultValue="yearly" dir="ltr" className="grid-cols-2 gap-3">
<RadioCardItem value="monthly" className="justify-center items-center min-h-[60px]">
<RadioCardTitle>Monthly</RadioCardTitle>
</RadioCardItem>
<RadioCardItem value="yearly" className="justify-center items-center min-h-[60px]">
<RadioCardTitle>Yearly</RadioCardTitle>
</RadioCardItem>
</RadioCards>با آیکون و توضیحات
برای نمایش اطلاعات بیشتر، میتوانید آیکون و توضیحات اضافه کنید:
import { Icons } from '@parto-system-design/ui'
;<RadioCards defaultValue="team" dir="rtl" className="grid-cols-1 sm:grid-cols-3 gap-3">
<RadioCardItem value="starter">
<div className="flex flex-col gap-1.5 text-start">
<div className="flex items-center gap-2">
<Icons.user className="h-4 w-4 text-brand shrink-0" />
<RadioCardTitle>پایه</RadioCardTitle>
</div>
<RadioCardDescription>مناسب برای افراد و پروژههای کوچک</RadioCardDescription>
</div>
</RadioCardItem>
<RadioCardItem value="team">
<div className="flex flex-col gap-1.5 text-start">
<div className="flex items-center gap-2">
<Icons.users className="h-4 w-4 text-brand shrink-0" />
<RadioCardTitle>تیمی</RadioCardTitle>
</div>
<RadioCardDescription>مناسب برای تیمهای کوچک تا متوسط</RadioCardDescription>
</div>
</RadioCardItem>
<RadioCardItem value="enterprise">
<div className="flex flex-col gap-1.5 text-start">
<div className="flex items-center gap-2">
<Icons.building className="h-4 w-4 text-brand shrink-0" />
<RadioCardTitle>سازمانی</RadioCardTitle>
</div>
<RadioCardDescription>مناسب برای سازمانها و شرکتهای بزرگ</RadioCardDescription>
</div>
</RadioCardItem>
</RadioCards>کنترل شده
const [plan, setPlan] = React.useState('team')
;<RadioCards value={plan} onValueChange={setPlan}>
<RadioCardItem value="starter">
<RadioCardTitle>پایه</RadioCardTitle>
</RadioCardItem>
<RadioCardItem value="team">
<RadioCardTitle>تیمی</RadioCardTitle>
</RadioCardItem>
<RadioCardItem value="enterprise">
<RadioCardTitle>سازمانی</RadioCardTitle>
</RadioCardItem>
</RadioCards>غیرفعال
<RadioCards defaultValue="1" dir="rtl" className="grid-cols-2 gap-3">
<RadioCardItem value="1" className="justify-center items-center min-h-[60px]">
<RadioCardTitle>فعال</RadioCardTitle>
</RadioCardItem>
<RadioCardItem value="2" disabled className="justify-center items-center min-h-[60px]">
<RadioCardTitle>غیرفعال</RadioCardTitle>
</RadioCardItem>
</RadioCards>چیدمان Responsive
از Tailwind classes برای چیدمان responsive استفاده کنید:
<RadioCards defaultValue="1" className="grid-cols-1 sm:grid-cols-2 lg:grid-cols-3">
{/* items */}
</RadioCards>حالتها و انواع
با آیکون
ساده
راهنمای استفاده
بکنید
- از RadioCard زمانی استفاده کنید که هر گزینه نیاز به نمایش اطلاعات بیشتری دارد (آیکون، توضیحات، قیمت) - از چیدمان
responsive با
grid-colsاستفاده کنید تا در موبایل و دسکتاپ بهدرستی نمایش داده شود - برای محتوای چندخطی ازtext-startاستفاده کنید
نکنید
- برای بیش از ۶ گزینه از RadioCard استفاده نکنید — صفحه شلوغ میشود، از
Selectاستفاده کنید - وقتی گزینهها فقط متن کوتاه هستند از RadioCard استفاده نکنید — ازRadioGroupساده استفاده کنید - کارتها را بدونRadioCardTitleرها نکنید
Props
RadioCards
RadioCardItem
RadioCardTitle
RadioCardDescription
دسترسیپذیری
- پیمایش با کیبورد (Arrow keys)
- از
role="radiogroup"استفاده میشود - هر کارت دارای
role="radio"است aria-checkedبرای وضعیت انتخاب- پشتیبانی کامل از screen readers
- Focus ring واضح برای کاربران کیبورد
ملاحظات RTL و LTR
- کامپوننت به صورت پیشفرض در حالت RTL (راست به چپ) است
- برای تغییر به LTR از prop
dir="ltr"استفاده کنید - چیدمان بهصورت خودکار با استفاده از
text-startتنظیم میشود - از logical properties استفاده میشود (
end,start) - رنگ border انتخاب شده: رنگ brand (primary)
- Hover و Focus states بهدرستی در هر دو حالت RTL و LTR کار میکنند
- برای محتوای چند خطی از کلاس
text-startاستفاده کنید - برای محتوای تک خطی وسطچین از
justify-center items-centerاستفاده کنید
موارد استفاده
- انتخاب پلن قیمتگذاری (Pricing Plans)
- انتخاب پیکربندی سرور
- انتخاب نوع اکانت
- هر موردی که نیاز به نمایش بصری گزینهها دارد
- زمانی که میخواهید اطلاعات بیشتری درباره هر گزینه نمایش دهید
کامپوننتهای مرتبط
- RadioGroup — اگر گزینهها فقط متن هستند و نیاز به نمایش بصری ندارید، از RadioGroup استفاده کنید
- Select — اگر تعداد گزینهها زیاد است (بیش از ۶ مورد)، از Select استفاده کنید
- ToggleGroup — اگر نیاز به انتخاب سریع در نوار ابزار دارید، ToggleGroup مناسبتر است