Casella di spunta
Un pulsante binario per le caselle di consenso, i filtri a selezione multipla e la selezione di più righe contemporaneamente — con lo stile neobrutalista fatto di bordi e ombre.
"use client"
import { Checkbox } from "@/components/ui/checkbox"La checkbox è il controllo standard per le scelte binarie — selezionata, deselezionata o indeterminata per le selezioni parziali. Costruita sulla primitiva Base UI Checkbox e rifinita secondo la ricetta neobrutalista: bordi spessi, ombre nette e tipografia in grassetto.
Quando usarlo:
- Termini e consenso — la casella “Accetto” nei flussi di registrazione e checkout, inviata insieme al modulo.
- Filtri a selezione multipla — categorie, tag o fasce di prezzo in una barra laterale dove qualsiasi combinazione è valida.
- Selezione in blocco nelle tabelle — checkbox per ogni riga più un seleziona-tutto indeterminato nell’intestazione.
Installazione#
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
Installa le seguenti dipendenze:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Copia e incolla il seguente codice nel tuo progetto.
"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 }
Aggiorna i percorsi di importazione in base alla configurazione del tuo progetto.
Utilizzo#
import { Checkbox } from "@/components/ui/checkbox"<Checkbox />Stato selezionato#
Usa defaultChecked per le checkbox non controllate, oppure checked e
onCheckedChange per controllare lo stato.
import * as React from "react"
export function Example() {
const [checked, setChecked] = React.useState(false)
return <Checkbox checked={checked} onCheckedChange={setChecked} />
}Stato non valido#
Imposta aria-invalid sulla checkbox e data-invalid sul wrapper del campo per
mostrare gli stili di errore.
import { Checkbox } from "@/components/ui/checkbox"
import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"
Esempi#
Base#
Abbina la checkbox a Field e FieldLabel per un layout e un'etichettatura corretti.
import { Checkbox } from "@/components/ui/checkbox"
import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"
Descrizione#
Usa FieldContent e FieldDescription per il testo di aiuto.
import { Checkbox } from "@/components/ui/checkbox"
import {
Field,Disabilitato#
Usa la prop disabled per impedire l'interazione e aggiungi l'attributo data-disabled al componente <Field> per gli stili disabilitati.
import { Checkbox } from "@/components/ui/checkbox"
import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"
Gruppo#
Usa più campi per creare un elenco di checkbox.
import { Checkbox } from "@/components/ui/checkbox"
import {
Field,Tabella#
"use client"
import * as React from "react"RTL#
Per abilitare il supporto RTL in Neobrutalism, consulta la guida alla configurazione RTL.
"use client"
import * as React from "react"Accessibilità#
La checkbox segue il pattern WAI-ARIA Checkbox: la primitiva rende un elemento role="checkbox" con aria-checked (compreso "mixed" per lo stato indeterminato) e tiene sincronizzato un input nativo nascosto così che il valore venga inviato con i moduli.
Interazioni da tastiera:
| Tasto | Azione |
|---|---|
Tab / Shift + Tab | Sposta il focus sulla checkbox o via da essa |
Space | Commuta lo stato di selezione (indeterminata → selezionata) |
Enter non commuta una checkbox — lo prevede il pattern ARIA, non è un bug.
Riferimento API#
Consulta la documentazione di Base UI per maggiori informazioni.