پرتوپرتو

کارت رادیو (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

Prop

Type

RadioCardItem

Prop

Type

RadioCardTitle

Prop

Type

RadioCardDescription

Prop

Type

دسترسی‌پذیری

  • پیمایش با کیبورد (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)
  • انتخاب پیکربندی سرور
  • انتخاب نوع اکانت
  • هر موردی که نیاز به نمایش بصری گزینه‌ها دارد
  • زمانی که می‌خواهید اطلاعات بیشتری درباره هر گزینه نمایش دهید