Checkbox
Una casilla de verificación cuya marca se dibuja, con padres indeterminados, grupos y etiquetas que comparten su hover.
pnpm dlx shadcn@latest add https://hextaui.com/r/checkbox.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add @base-ui/react @tabler/icons-react cnCopia y pega el siguiente código en tu proyecto.
components/ui/checkbox.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Estados
disabled, readOnly, indeterminate y aria-invalid. Una casilla de solo lectura conserva su valor y puede recibir foco, pero ignora los clics y las teclas.
Seleccionar todo
Dentro de un <CheckboxGroup />, un checkbox con parent marca todos los valores de allValues. Pasa a indeterminado cuando solo algunos están marcados.
Grupos anidados
Los grupos se anidan. Cada padre refleja el estado del grupo inmediatamente inferior, y el padre superior abarca todo.
Controlado
Pasa checked y onCheckedChange para mantener el estado en tu propio código.
Form
Un input oculto envía name y value como un checkbox nativo, y required bloquea el envío hasta que se marque.
Etiqueta hermana
Cuando la etiqueta no puede envolver la casilla, renderiza el checkbox como un <button> con nativeButton y apunta la etiqueta a él con htmlFor.
Tarjetas
Envuelve una tarjeta completa en la etiqueta para que la tarjeta sea el área de clic, y dale estilo con has-data-checked.
Contenido largo
La casilla permanece en la primera línea mientras una etiqueta larga y el texto sin espacios se ajustan a su lado.
De derecha a izquierda
La casilla va en el lado inicial en línea y la etiqueta sigue la dirección de lectura.
| Key | Acción |
|---|---|
| Space | Marca o desmarca el checkbox. |
| Enter | Envía el formulario al que pertenece el checkbox, como un checkbox nativo. Nunca alterna la casilla. |
| Tab | Mueve el foco al siguiente checkbox. |
- Envuelve el checkbox y su texto en un
<label>. La etiqueta nombra el checkbox, y pasar el cursor o pulsarla le da a la casilla el mismo feedback que pasar el cursor sobre la propia casilla. - Dale a cada
<CheckboxGroup />unaria-labeloaria-labelledbypara que los lectores de pantalla anuncien para qué sirve el grupo. - El área de clic se extiende más allá de la casilla de 16px, y crece en pantallas táctiles.
- La marca se dibuja al marcarse. Con movimiento reducido aparece sin la animación del trazo.
Construido sobre el checkbox y el checkbox group de Base UI. Ambos aceptan las props de la primitiva que envuelven.
| Prop | Tipo | Predeterminado |
|---|---|---|
checked | boolean | – |
defaultChecked | boolean | false |
onCheckedChange | (checked: boolean, details) => void | – |
indeterminateMuestra un guion: ni marcado ni desmarcado. | boolean | false |
disabled | boolean | false |
readOnlyPuede recibir foco, pero el valor no puede cambiar. | boolean | false |
required | boolean | false |
nameSe envía con el formulario cuando está marcado. | string | – |
valueIdentifica la casilla dentro de un grupo y es lo que envía el formulario. Recurre a name y luego a “on”. | string | – |
uncheckedValueSe envía cuando está desmarcado. Nada por defecto. | string | – |
parentControla todos los valores de allValues del grupo. Solo dentro de un CheckboxGroup. | boolean | false |
inputRef | Ref<HTMLInputElement> | – |
nativeButtonPonlo en true cuando render sea un <button>. | boolean | false |
render | ReactElement | (props, state) => ReactElement | <span> |
| Atributo | Descripción |
|---|---|
data-slot="checkbox" | Selecciona la caja en CSS. |
data-checked | Presente cuando está marcado. |
data-unchecked | Presente cuando está desmarcado. |
data-indeterminate | Presente cuando es indeterminado. |
data-disabled | Presente cuando está deshabilitado. |
data-readonly | Presente cuando es de solo lectura. |
data-required | Presente cuando es obligatorio. |
data-invalid | Presente cuando no es válido dentro de un Field de Base UI. |
| Prop | Tipo | Predeterminado |
|---|---|---|
valueValores de los checkboxes marcados. | string[] | – |
defaultValue | string[] | – |
onValueChange | (value: string[], details) => void | – |
allValuesTodos los valores del grupo. Obligatorio para un checkbox padre. | string[] | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="checkbox-group" | Apunta al grupo en CSS. |
data-disabled | Presente cuando el grupo está deshabilitado. |
- CalendarUna cuadrícula de fechas para selección única, de rango y múltiple, con meses deslizantes, vistas previas de rango y días de tamaño táctil.
- ComboboxUn select filtrable con chips, grupos y resultados asíncronos, en un popup que cambia de tamaño mientras escribes.
- Date pickerUn botón que abre un calendario en un popover, o en una hoja inferior en móviles, para fechas únicas y rangos.
- FieldEtiquetas, descripciones y errores conectados a su control, con estados de validación y diseños para formularios.
- InputUn campo de texto con tres tamaños, estados inválido y de solo lectura, estilos de validación nativos y una fuente táctil de 16px para que los móviles nunca hagan zoom.
- Input groupUn input con iconos, texto, botones o una pista de teclado acoplados, que comparten un solo borde y anillo de foco.
Usado en bloques
Bloques que se construyen sobre Checkbox.
- API keysLa página de claves de API de un producto de IA, como las consolas de OpenAI y Anthropic. Crea claves con permisos acotados y caducidad, ve el secreto una sola vez con una copia que lo confirma, revoca con deshacer, renombra en el sitio, rota con un periodo de gracia y consulta el uso por clave.
- MarkdownMarkdown hecho para respuestas de IA. Se transmite con fluidez y nunca muestra sintaxis a medio escribir, con encabezados enlazables, tablas que puedes copiar como Markdown o CSV, callouts de GitHub, listas de tareas, notas al pie, imágenes, citas en línea y bloques de código completos.
- NotificationsLa sección Notificaciones de los ajustes de un producto de IA. Una cuadrícula de canal por evento con toggles por fila, por columna y para todo, horas de silencio con una línea en vivo del próximo silencio, un resumen por correo, envíos de prueba reales para escritorio, correo, push y Slack, gestión de permisos del navegador y un flujo para conectar Slack. Se integra en cualquier sección de Ajustes.
- SecuritySesiones y seguridad para un producto de IA. Dispositivos activos con cierre de sesión que anima la salida de las filas, cambio de contraseña con un medidor de fortaleza en vivo, configuración de dos factores con un código QR real, una verificación de 6 dígitos y códigos de recuperación descargables, passkeys mediante WebAuthn y eliminación de la cuenta tras una confirmación escrita.