چیپ‌های ژله‌ایJelly Radio

یه ردیف چیپ برای انتخاب؛ چیپی که می‌زنی ورم می‌کنه و بقیه با یه حرکتِ فنری کنار می‌رن.

محمدجواد

ساخته شده توسط محمدجواد

سازنده فارسی‌فای، بچه دولوپر

وابستگی‌ها

motion

نوع تعامل

هر چیپی رو بزنی، خودش بزرگ‌تر می‌شه و بقیه کمی جمع می‌شن و کنار می‌رن؛ هرچی دورتر، دیرتر. با کلیدهای جهت هم بین گزینه‌ها جابه‌جا می‌شی و Home/End می‌رن به دو سر. انتخاب با کلیک و کیبورد یک‌جوره، پس هر دو حسِ یکسانی می‌دن.

پراپ‌ها

گزینه‌هایی که می‌تونی به کامپوننت بدی؛ ستاره‌دارها اجباری‌اند.

items
JellyRadioItem[]پیش‌فرض: ["خاموش", "کم", "متوسط", "زیاد", "بیشینه"]

گزینه‌ها؛ می‌تونی رشته بدی، یا شیءی با value و label و icon و disabled.

value
string

مقدارِ controlled. اگه uncontrolled می‌خوای، این رو نده و به‌جاش defaultValue بده.

defaultValue
string

گزینه‌ی انتخاب‌شده توی حالتِ uncontrolled؛ پیش‌فرض اولین گزینه‌ست.

onChange
(value: string, index: number) => void

با هر انتخاب، مقدار و index گزینه‌ی تازه رو برمی‌گردونه.

size
sm | md | lgپیش‌فرض: mdsm · md · lg

اندازه‌ی چیپ‌ها: sm ۲۸، md ۳۶ و lg ۴۴ پیکسل.

chipColor
stringپیش‌فرض: #27272a

رنگِ پس‌زمینه‌ی چیپ‌های غیرفعال.

نصب

۱. این آدرس رو یک‌بار توی components.json بذار تا shadcn مخزن فارسی‌فای رو بشناسه.

components.jsonjson
{
  "registries": {
    "@farsify": "https://farsify.ir/r/{name}.json"
  }
}

۲. بعد با دستورِ زیر کامپوننت رو نصب کن.

npx shadcn@latest add @farsify/jelly-radio

پیش‌نیاز: Tailwind CSS v4 و صفحهٔ راست‌به‌چپ dir="rtl".

نمونه

jelly-radio.tsxtsx
"use client";

import { JellyRadio } from "@/components/farsify/jelly-radio";

export function VolumeLevel() {
  return (
    <JellyRadio
      ariaLabel="سطح صدا"
      items={["خاموش", "کم", "متوسط", "زیاد", "بیشینه"]}
      defaultValue="متوسط"
      onChange={(value) => console.log(value)}
    />
  );
}

// با رنگ‌های برند و اندازه‌ی بزرگ
<JellyRadio
  size="lg"
  chipColor="var(--color-brand)"
  activeColor="#ffffff"
  textColor="#ffffff"
  activeTextColor="var(--brand)"
/>

نکته‌ها

  • برای انتخاب‌های پرتکرار `bounce` رو حدود ۰.۱۵ بذار؛ جهشِ کمتر، آروم‌تر.
  • اگه متنِ چیپ‌ها بلنده، `size` رو بزرگ کن نه `gap` رو؛ فاصله‌ی زیاد گروه رو می‌پاشه.
  • رنگ‌ها رو با متغیرِ CSS هم می‌تونی بدی، مثل `var(--color-brand)`.

مجوز

کد بعد از نصب مالِ خودته؛ هر تغییری خواستی بده و توی پروژه‌ی خودت نگهش دار. برای پروژه‌های شخصی و تجاری آزاده، حتی اگه کدت بسته باشه. فقط اسم و لینک فارسی‌فای رو یه جا توی پروژه نگه دار.