چکباکسی که با تیکخوردن پر میشود، تیک میزند و متنش را با یک حرکت خط میکشد.
ورودیها · کلیک / صفحهکلید
با هر کلیک، خانهی چکباکس از وسط پر میشود، کمی ورم میکند و تیک با کشیدهشدن مینشیند؛ همزمان متنش کمرنگ و با یک خط از سرِ خواندن خط میخورد. هرچه بکشید تا از حالت میانی رد شود، فنر مقدار را به نزدیکترین سر میبرد. کلید Space و Enter هم همین کار را میکنند، ولی بیانیمیشن میپرند تا در حرکتِ Tab تاخیر حس نشود.
پراپهایی که برای تغییر این کامپوننت میتوانید بدهید. ستارهدارها الزامیاند.
labelReactNodeپیشفرض: "انجام شد"متن کنار خانه. هر گرهای میتواند باشد، نه فقط رشته.
checkedbooleanمقدار کنترلشده. برای حالت uncontrolled این را ندهید.
defaultCheckedbooleanپیشفرض: falseوضعیت اولیه در حالت uncontrolled.
onChange(checked: boolean) => voidبا هر تغییر، وضعیت تازه را برمیگرداند.
disabledbooleanپیشفرض: falseکمرنگ و غیرقابلکلیک میکند.
colorstringپیشفرض: #ffffff (تیره) · #18181b (روشن)رنگِ جوهر: قابِ خانه، متن و خطِ روی متن همه از همیناند. پیشفرضش با تم عوض میشود.
fillColorstringپیشفرض: #ffffff (تیره) · #18181b (روشن)رنگ پرشدنِ خانه در حالت تیکخورده.
checkColorstringپیشفرض: #0b0b0f (تیره) · #ffffff (روشن)رنگ خودِ تیک. باید با fillColor کنتراست داشته باشد.
boxSizenumberپیشفرض: 28ضلعِ خانه بر حسب پیکسل. زیر ۲۴ ضخامتِ قاب از ۲ به ۱.۵ کم میشود.
boxRadiusnumberپیشفرض: 9شعاعِ گوشهی خانه. با نصفِ boxSize خانه کاملاً گرد میشود.
fontSizenumberپیشفرض: 18اندازهی قلمِ متن. ضخامتِ خطِ روی متن هم از همین حساب میشود.
bouncenumberپیشفرض: 0.2جهندگیِ فنر، بین ۰ و ۱. صفر میراِ کامل است؛ بیشتر از ۰.۴ بیش از حد لرزان دیده میشود.
strikeLagnumberپیشفرض: 0.12چقدر از پیشرفتِ حرکت بگذرد تا خط شروع شود. صفر یعنی همزمان با پرشدن.
doneOpacitynumberپیشفرض: 0.42شفافیتِ نهاییِ متن در حالت انجامشده. یک یعنی متن اصلاً کمرنگ نشود.
strikeleft | center | right | noneپیشفرض: rightخط از کدام سمت کشیده شود. پیشفرض برای متن فارسی از **راست** است (سرِ خواندن)؛ در مرجع چون متنش انگلیسی است از چپ بود.
ariaLabelstringبرچسبِ صفحهخوان. اگر `label` متنِ خوانا دارد لازم نیست، ولی وقتی کنارِ آن آیکن میگذارید حتماً بدهید.
classNamestringکلاسِ اضافه روی خودِ دکمه.
فایل کامپوننت داخل پروژهی خودتان مینشیند؛ فقط وابستگیهای بالا اضافه میشود.
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"
/>