کلیدی که دستگیرهاش با کشیدن کش میآید و با رهاکردن، فنر آن را به یک سر میاندازد.
ورودیها · کلیک / کشیدن / صفحهکلید
میتوانید مثل هر کلیدی رویش کلیک کنید، یا دستگیره را بگیرید و بکشید — همانطور که میکشید، دستگیره بهاندازهی سرعتِ حرکتتان کشیده میشود ولی پهنتر نمیشود، و وضعیت همان لحظهی عبور از وسط عوض میشود. با رهاکردن، فنر آن را به نزدیکترین سر میاندازد. روی هاور کمی بزرگ میشود و Escape وسطِ کشیدن، همهچیز را به حالت قبل برمیگرداند.
پراپهایی که برای تغییر این کامپوننت میتوانید بدهید. ستارهدارها الزامیاند.
checkedbooleanمقدار کنترلشده. برای حالت uncontrolled این را ندهید.
defaultCheckedbooleanپیشفرض: falseوضعیت اولیه در حالت uncontrolled.
onChange(checked: boolean) => voidبا هر تغییر، وضعیت تازه را برمیگرداند.
labelstringمتن کنار کلید. اگر بدهید، کلیک روی آن هم کلید را عوض میکند (با `htmlFor`).
disabledbooleanپیشفرض: falseکمرنگ و غیرقابلتعامل میکند.
trackColorstringپیشفرض: #27272a (تیره) · #d4d4d8 (روشن)رنگ نوار در حالت خاموش.
trackOnColorstringپیشفرض: #f5f5f5 (تیره) · #18181b (روشن)رنگ نوار در حالت روشن.
thumbColorstringپیشفرض: ترکیبِ دو رنگ نواررنگ دستگیره در حالت خاموش. خالی بگذارید تا از ترکیبِ `trackOnColor` و `trackColor` ساخته شود.
thumbOnColorstringپیشفرض: همان trackColorرنگ دستگیره در حالت روشن. خالی بگذارید تا خودِ `trackColor` بیاید.
widthnumberپیشفرض: 76عرض نوار بر حسب پیکسل.
heightnumberپیشفرض: 38بلندی نوار. فاصلهی دستگیره از لبه و اندازهی خودِ دستگیره از همین حساب میشوند.
radiusnumberپیشفرض: 19شعاع گوشهی نوار. بیشتر از نصفِ بلندی، به نصف بریده میشود (کلید قرصی).
speednumberپیشفرض: 50سرعت رسیدن دستگیره به سرِ دیگر، بین ۰ و ۱۰۰. عددِ بالاتر یعنی حرکتِ نرمتر و کشیدهتر.
stretchnumberپیشفرض: 36شدت کشآمدن دستگیره، بین ۰ و ۱۰۰. صفر یعنی دستگیره اصلاً تغییر شکل نمیدهد.
hoverScalenumberپیشفرض: 1.035مقیاس دستگیره روی هاور. ۱ یعنی بدون واکنش (فقط ماوس).
colorDurationnumberپیشفرض: 320مدت گذارِ رنگ نوار و دستگیره، بر حسب میلیثانیه.
ariaLabelstringبرچسب صفحهخوان. اگر `label` متنی دارد لازم نیست.
idstringشناسهی دکمه. اگر ندهید، یک شناسهی یکتا ساخته میشود.
classNamestringکلاس اضافه روی ریشهی کامپوننت.
فایل کامپوننت داخل پروژهی خودتان مینشیند؛ فقط وابستگیهای بالا اضافه میشود.
npx shadcn@latest add farsify/squish-switch"use client";
import { useState } from "react";
import { SquishSwitch } from "@/components/farsify/squish-switch";
export function AutoSave() {
const [on, setOn] = useState(false);
return (
<SquishSwitch
checked={on}
onChange={setOn}
ariaLabel="ذخیرهی خودکار"
/>
);
}
// بدون کنترل — روشن از اول
<SquishSwitch label="اعلانها" defaultChecked />
// رنگ برند و کشش بیشتر
<SquishSwitch
label="همگامسازی خودکار"
trackOnColor="var(--color-brand)"
thumbOnColor="#ffffff"
stretch={60}
speed={70}
/>