کاستومایز

جوهر
پر
تیک
اندازه‌ی خانه28px
شعاع خانه9px
اندازه‌ی قلم18px
جهش0.20
تأخیر خط0.12
کم‌رنگی انجام‌شده0.42

چک‌باکس فنریSpring Check

چک‌باکسی که با تیک‌خوردن پر می‌شود، تیک می‌زند و متنش را با یک حرکت خط می‌کشد.

ورودی‌ها · کلیک / صفحه‌کلید

وابستگی‌ها

motion

نوع تعامل

با هر کلیک، خانه‌ی چک‌باکس از وسط پر می‌شود، کمی ورم می‌کند و تیک با کشیده‌شدن می‌نشیند؛ هم‌زمان متنش کم‌رنگ و با یک خط از سرِ خواندن خط می‌خورد. هرچه بکشید تا از حالت میانی رد شود، فنر مقدار را به نزدیک‌ترین سر می‌برد. کلید Space و Enter هم همین کار را می‌کنند، ولی بی‌انیمیشن می‌پرند تا در حرکتِ Tab تاخیر حس نشود.

پراپ‌ها

پراپ‌هایی که برای تغییر این کامپوننت می‌توانید بدهید. ستاره‌دارها الزامی‌اند.

label
ReactNodeپیش‌فرض: "انجام شد"

متن کنار خانه. هر گره‌ای می‌تواند باشد، نه فقط رشته.

checked
boolean

مقدار کنترل‌شده. برای حالت uncontrolled این را ندهید.

defaultChecked
booleanپیش‌فرض: false

وضعیت اولیه در حالت uncontrolled.

onChange
(checked: boolean) => void

با هر تغییر، وضعیت تازه را برمی‌گرداند.

disabled
booleanپیش‌فرض: false

کم‌رنگ و غیرقابل‌کلیک می‌کند.

color
stringپیش‌فرض: #ffffff (تیره) · #18181b (روشن)

رنگِ جوهر: قابِ خانه، متن و خطِ روی متن همه از همین‌اند. پیش‌فرضش با تم عوض می‌شود.

fillColor
stringپیش‌فرض: #ffffff (تیره) · #18181b (روشن)

رنگ پر‌شدنِ خانه در حالت تیک‌خورده.

checkColor
stringپیش‌فرض: #0b0b0f (تیره) · #ffffff (روشن)

رنگ خودِ تیک. باید با fillColor کنتراست داشته باشد.

boxSize
numberپیش‌فرض: 28

ضلعِ خانه بر حسب پیکسل. زیر ۲۴ ضخامتِ قاب از ۲ به ۱.۵ کم می‌شود.

boxRadius
numberپیش‌فرض: 9

شعاعِ گوشه‌ی خانه. با نصفِ boxSize خانه کاملاً گرد می‌شود.

fontSize
numberپیش‌فرض: 18

اندازه‌ی قلمِ متن. ضخامتِ خطِ روی متن هم از همین حساب می‌شود.

bounce
numberپیش‌فرض: 0.2

جهندگیِ فنر، بین ۰ و ۱. صفر میراِ کامل است؛ بیشتر از ۰.۴ بیش از حد لرزان دیده می‌شود.

strikeLag
numberپیش‌فرض: 0.12

چقدر از پیشرفتِ حرکت بگذرد تا خط شروع شود. صفر یعنی هم‌زمان با پر‌شدن.

doneOpacity
numberپیش‌فرض: 0.42

شفافیتِ نهاییِ متن در حالت انجام‌شده. یک یعنی متن اصلاً کم‌رنگ نشود.

strike
left | center | right | noneپیش‌فرض: right
leftcenterrightnone

خط از کدام سمت کشیده شود. پیش‌فرض برای متن فارسی از **راست** است (سرِ خواندن)؛ در مرجع چون متنش انگلیسی است از چپ بود.

ariaLabel
string

برچسبِ صفحه‌خوان. اگر `label` متنِ خوانا دارد لازم نیست، ولی وقتی کنارِ آن آیکن می‌گذارید حتماً بدهید.

className
string

کلاسِ اضافه روی خودِ دکمه.

نصب

فایل کامپوننت داخل پروژه‌ی خودتان می‌نشیند؛ فقط وابستگی‌های بالا اضافه می‌شود.

npx shadcn@latest add farsify/spring-check

نحوه‌ی استفاده

"use client";

import { useState } from "react";
import { SpringCheck } from "@/components/farsify/spring-check";

export function TodoItem() {
  const [done, setDone] = useState(false);

  return (
    <SpringCheck
      label="ساخت بیلد"
      checked={done}
      onChange={setDone}
    />
  );
}

// بدون کنترل — مقدار اولیه‌ی تیک‌خورده
<SpringCheck label="هماهنگی جلسه" defaultChecked />

// رنگ برند، خانه‌ی بزرگ‌تر و خط از وسط
<SpringCheck
  label="به‌روزرسانی تغییرات"
  color="var(--color-brand)"
  fillColor="var(--color-brand)"
  checkColor="#ffffff"
  boxSize={34}
  strike="center"
/>

نکته‌های ریز

  • برای فهرست کارها `bounce` را حدود ۰.۱ و `strikeLag` را ۰ بگذارید؛ حرکتِ کمتر برای چیزی که پشتِ سر هم کلیک می‌شود بهتر است.
  • `color` هم متن و هم قاب را می‌کشد، پس اگر رنگ برند می‌دهید مطمئن شوید `fillColor` با آن کنتراست دارد، وگرنه تیک دیده نمی‌شود.
  • اگر `strike="none"` بدهید، متن فقط کم‌رنگ می‌شود. برای برچسب‌های بلند همین بهتر است چون خط روی متن‌های چندخطی وسط را می‌زند.

مالکیت کد

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