Capítulo 26 de 108
Controle que alterna entre marcado e não marcado. Use para aceitar termos, opções de configuração e seleção múltipla em listas ou tabelas (select-all + linha a linha).
checked / onCheckedChange: par controlado; onCheckedChange recebe o novo estado (boolean).defaultChecked: define estado inicial em uso não controlado (uncontrolled).disabled: desabilita interação com o checkbox.aria-invalid: marca o checkbox como inválido (usar junto com data-invalid no Field).Field: Checkbox normalmente é pareado com Field/FieldLabel/FieldContent/FieldDescription para layout e acessibilidade corretos, não com <label> solto.@base-ui/react (Base UI Checkbox).import { Checkbox } from "@/components/ui/checkbox"
import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"
export function CheckboxBasic() {
return (
<FieldGroup className="mx-auto w-56">
<Field orientation="horizontal">
<Checkbox id="terms-checkbox-basic" name="terms-checkbox-basic" />
<FieldLabel htmlFor="terms-checkbox-basic">
Accept terms and conditions
</FieldLabel>
</Field>
</FieldGroup>
)
}
Field + FieldLabel (orientação horizontal).import * as React from "react"
export function Example() {
const [checked, setChecked] = React.useState(false)
return <Checkbox checked={checked} onCheckedChange={setChecked} />
}
checked/onCheckedChange.const handleSelectAll = (checked: boolean) => {
if (checked) setSelectedRows(new Set(tableData.map((row) => row.id)))
else setSelectedRows(new Set())
}
// <Checkbox checked={selectAll} onCheckedChange={handleSelectAll} />
Field/FieldLabel: perde o acoplamento label-input e os estilos de estado disabled/invalid (data-disabled, data-invalid) que dependem do wrapper Field.checked junto com defaultChecked no mesmo componente.onCheckedChange já entrega o boolean, não um evento — use direto como setter de estado.aria-invalid no Checkbox + data-invalid no Field pai, para acessibilidade e estilo coexistirem.disabled no Checkbox + data-disabled no Field.FieldSet/FieldLegend/FieldGroup compõem listas de checkboxes (grupos de opções não exclusivas).dir nos componentes de layout, sem lógica extra no Checkbox.FieldLabel quando não há necessidade de FieldDescription/FieldTitle.