Прапорець
Двопозиційний перемикач для полів згоди, фільтрів з можливістю множинного вибору та масового виділення рядків — з необруталістичним оформленням у вигляді рамок і тіней.
"use client"
import { Checkbox } from "@/components/ui/checkbox"Чекбокс — стандартний контроль для бінарного вибору: позначено, не позначено або indeterminate для часткового вибору. Побудований на примітиві Base UI Checkbox і оформлений за рецептом необруталізму: товсті рамки, різкі тіні та масивний шрифт.
Коли це стане в пригоді:
- Умови та згода — прапорець «Я погоджуюсь» у реєстрації та оформленні замовлення, що відправляється з формою.
- Фільтри з множинним вибором — категорії, теги чи діапазони цін у бічній панелі, де допустима будь-яка комбінація.
- Масовий вибір у таблицях — чекбокси в рядках плюс indeterminate «вибрати все» у заголовку.
Встановлення#
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 { 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 на обгортці поля, щоб
показати недійсні стилі.
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,Вимкнено#
Використовуйте проп 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: примітив рендерить елемент із role="checkbox" і aria-checked (включно з "mixed" для indeterminate) і синхронізує приховане нативне поле, щоб значення відправлялося з формою.
Клавіатурні взаємодії:
| Клавіша | Дія |
|---|---|
Tab / Shift + Tab | Переносить фокус на чекбокс або з нього |
Space | Перемикає стан (indeterminate → позначено) |
Enter чекбокс не перемикає — так задумано в ARIA-патерні, це не помилка.
Довідник API#
Докладніше див. у документації Base UI.