چکباکس
یک کلید دودویی برای کادرهای رضایت، فیلترهای چندگزینهای و انتخاب دستهای ردیفها — با طراحی نئوبروتالیست مبتنی بر مرزها و سایهها.
"use client"
import { Checkbox } from "@/components/ui/checkbox"چکباکس کنترل استاندارد برای انتخابهای دودویی است — checked، unchecked یا indeterminate برای انتخاب جزئی. بر پایهٔ Base UI Checkbox ساخته شده و با دستور پخت نئوبروتالیستی استایل شده: حاشیههای ضخیم، سایههای سخت و تایپوگرافی پررنگ.
برای این موارد از آن استفاده کنید:
- شرایط و رضایت — کادر «موافقم» در ثبتنام و checkout که با فرم submit میشود.
- فیلتر چندانتخابی — دسته، تگ یا بازهٔ قیمت در sidebar که هر ترکیبی معتبر است.
- انتخاب گروهی در جدول — چکباکس هر ردیف بههمراه select-allِ indeterminate در header.
نصب#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/checkbox.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/checkbox.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/checkbox.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/checkbox.json
وابستگیهای زیر را نصب کنید:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
کد زیر را کپی کرده و در پروژهٔ خود جایگذاری کنید.
"use client"
import * as React from "react"
import { CheckIcon } from "lucide-react"
import { Checkbox as CheckboxPrimitive } from "radix-ui"
import { cn } from "@/lib/utils"
function Checkbox({
className,
...props
}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {
return (
<CheckboxPrimitive.Root
data-slot="checkbox"
className={cn(
"peer relative flex size-5 shrink-0 items-center justify-center rounded border-2 bg-input shadow-sm transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive data-checked:border-border data-checked:bg-primary data-checked:text-primary-foreground",
className
)}
{...props}
>
<CheckboxPrimitive.Indicator
data-slot="checkbox-indicator"
className="grid place-content-center text-current transition-none [&>svg]:size-3.5"
>
<CheckIcon />
</CheckboxPrimitive.Indicator>
</CheckboxPrimitive.Root>
)
}
export { Checkbox }
مسیرهای import را مطابق با پیکربندی پروژهٔ خود بهروزرسانی کنید.
استفاده#
import { Checkbox } from "@/components/ui/checkbox"<Checkbox />حالت انتخابشده#
برای چکباکسهای کنترلنشده از defaultChecked و برای کنترل حالت از checked و
onCheckedChange استفاده کنید.
import * as React from "react"
export function Example() {
const [checked, setChecked] = React.useState(false)
return <Checkbox checked={checked} onCheckedChange={setChecked} />
}حالت نامعتبر#
برای نمایش استایلهای نامعتبر، aria-invalid را روی چکباکس و data-invalid را
روی wrapper فیلد تنظیم کنید.
import { Checkbox } from "@/components/ui/checkbox"
import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"
نمونهها#
پایه#
برای چیدمان و برچسبگذاری درست، چکباکس را با Field و FieldLabel همراه کنید.
import { Checkbox } from "@/components/ui/checkbox"
import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"
توضیحات#
برای متن راهنما از FieldContent و FieldDescription استفاده کنید.
import { Checkbox } from "@/components/ui/checkbox"
import {
Field,غیرفعال#
برای جلوگیری از تعامل از prop disabled استفاده کنید و برای استایلهای غیرفعال، ویژگی data-disabled را به کامپوننت <Field> اضافه کنید.
import { Checkbox } from "@/components/ui/checkbox"
import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"
گروه#
برای ایجاد یک فهرست چکباکس از چند فیلد استفاده کنید.
import { Checkbox } from "@/components/ui/checkbox"
import {
Field,جدول#
"use client"
import * as React from "react"RTL#
برای فعالسازی پشتیبانی RTL در Neobrutalism، راهنمای پیکربندی RTL را ببینید.
"use client"
import * as React from "react"دسترسیپذیری#
چکباکس از الگوی WAI-ARIA Checkbox پیروی میکند: primitive یک عنصر role="checkbox" با aria-checked (از جمله "mixed" برای وضعیت indeterminate) رندر میکند و یک input بومی پنهان را همگام میکند تا مقدار با فرم submit شود.
تعاملات صفحهکلید:
| کلید | عمل |
|---|---|
Tab / Shift + Tab | انتقال فوکوس به یا از چکباکس |
Space | تغییر وضعیت checked (indeterminate → checked) |
Enter چکباکس را toggle نمیکند — این مطابق الگوی ARIA است، نه باگ.
مرجع API#
برای اطلاعات بیشتر، مستندات Base UI را ببینید.