کارت رادیو (Radio Card)
مجموعه کارتهای تعاملی که فقط یک مورد قابل انتخاب است
معرفی
کامپوننت Radio Card برای انتخاب یک گزینه از بین چند گزینه استفاده میشود، اما به صورت کارتهای بزرگ و بصری. این کامپوننت زمانی مناسب است که میخواهید اطلاعات بیشتری درباره هر گزینه نمایش دهید.
استفاده پایه (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>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)
- انتخاب پیکربندی سرور
- انتخاب نوع اکانت
- هر موردی که نیاز به نمایش بصری گزینهها دارد
- زمانی که میخواهید اطلاعات بیشتری درباره هر گزینه نمایش دهید