Checkbox
Une case à cocher dont la coche se dessine, avec des parents indéterminés, des groupes et des libellés qui partagent son survol.
pnpm dlx shadcn@latest add https://hextaui.com/r/checkbox.jsonAjoute le composant, les tokens de thème HextaUI et les composants HextaUI dont il dépend.
Ajoutez les tokens de thème à votre CSS global, si ce n’est pas déjà fait.
Installez les dépendances.
pnpm add @base-ui/react @tabler/icons-react cnCopiez et collez le code suivant dans votre projet.
components/ui/checkbox.tsx Mettez à jour les chemins d’import selon la configuration de votre projet.
États
disabled, readOnly, indeterminate et aria-invalid. Une case en lecture seule garde sa valeur et reste focusable, mais ignore les clics et les touches.
Tout sélectionner
Dans un <CheckboxGroup />, une case à cocher avec parent coche toutes les valeurs de allValues. Elle devient indéterminée lorsque seules certaines sont cochées.
Groupes imbriqués
Les groupes s’imbriquent. Chaque parent reflète l’état du groupe situé juste en dessous, et le parent de plus haut niveau couvre tout.
Contrôlé
Passez checked et onCheckedChange pour garder l’état dans votre propre code.
Form
Un champ masqué soumet name et value comme une case à cocher native, et required bloque la soumission tant qu’elle n’est pas cochée.
Libellé adjacent
Lorsque le libellé ne peut pas envelopper la case, rendez la case à cocher comme un <button> avec nativeButton et pointez le libellé vers elle avec htmlFor.
Cartes
Enveloppez toute une carte dans le libellé pour que la carte serve de zone de clic, et stylisez-la avec has-data-checked.
Contenu long
La case reste sur la première ligne tandis qu’un long libellé et du texte sans coupure passent à la ligne à côté.
De droite à gauche
La case se place du côté du début de la ligne et le libellé suit le sens de lecture.
| Touche | Action |
|---|---|
| Space | Coche ou décoche la case. |
| Enter | Soumet le formulaire auquel appartient la case à cocher, comme une case native. Ne la bascule jamais. |
| Tab | Déplace le focus vers la case à cocher suivante. |
- Enveloppez la case à cocher et son texte dans un
<label>. Le libellé nomme la case, et le survoler ou l’appuyer donne à la case le même retour que le survol de la case elle-même. - Donnez à chaque
<CheckboxGroup />unaria-labelouaria-labelledbypour que les lecteurs d’écran annoncent à quoi sert le groupe. - La zone de clic dépasse la case de 16 px, et grandit sur écran tactile.
- La coche se dessine lorsqu’elle est cochée. Avec la réduction des animations, elle apparaît sans animation du tracé.
Construit sur la case à cocher et le groupe de cases à cocher de Base UI. Les deux acceptent les props de la primitive qu’ils enveloppent.
| Prop | Type | Par défaut |
|---|---|---|
checked | boolean | – |
defaultChecked | boolean | false |
onCheckedChange | (checked: boolean, details) => void | – |
indeterminateAffiche un tiret : ni cochée ni décochée. | boolean | false |
disabled | boolean | false |
readOnlyFocusable, mais la valeur ne peut pas changer. | boolean | false |
required | boolean | false |
nameSoumis avec le formulaire lorsqu’elle est cochée. | string | – |
valueIdentifie la case dans un groupe et correspond à ce que le formulaire soumet. Se rabat sur name, puis sur « on ». | string | – |
uncheckedValueSoumis lorsqu’elle est décochée. Rien par défaut. | string | – |
parentContrôle toutes les valeurs de allValues du groupe. Uniquement dans un CheckboxGroup. | boolean | false |
inputRef | Ref<HTMLInputElement> | – |
nativeButtonÀ définir sur true lorsque render est un <button>. | boolean | false |
render | ReactElement | (props, state) => ReactElement | <span> |
| Attribut | Description |
|---|---|
data-slot="checkbox" | Ciblez la boîte en CSS. |
data-checked | Présent lorsqu’elle est cochée. |
data-unchecked | Présent lorsqu’elle est décochée. |
data-indeterminate | Présent lorsque l’état est indéterminé. |
data-disabled | Présent lorsque l’élément est désactivé. |
data-readonly | Présent en lecture seule. |
data-required | Présent lorsqu’elle est requise. |
data-invalid | Présent lorsqu’elle est invalide dans un Field de Base UI. |
| Prop | Type | Par défaut |
|---|---|---|
valueValeurs des cases cochées. | string[] | – |
defaultValue | string[] | – |
onValueChange | (value: string[], details) => void | – |
allValuesToutes les valeurs du groupe. Requis pour une case à cocher parente. | string[] | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Description |
|---|---|
data-slot="checkbox-group" | Ciblez le groupe en CSS. |
data-disabled | Présent lorsque le groupe est désactivé. |
- CalendarUne grille de dates pour la sélection simple, de plage et multiple, avec des mois qui défilent, des aperçus de plage et des jours à taille tactile.
- ComboboxUn select filtrable avec chips, groupes et résultats asynchrones, dans un popup qui se redimensionne pendant la saisie.
- Date pickerUn bouton qui ouvre un calendrier dans un popover, ou une bottom sheet sur mobile, pour des dates simples et des plages.
- FieldDes libellés, descriptions et erreurs reliés à leur contrôle, avec états de validation et mises en page pour les formulaires.
- InputUn champ de saisie texte en trois tailles, avec états invalide et lecture seule, style de validation natif et police tactile de 16px pour que les téléphones ne zooment jamais.
- Input groupUn champ de saisie avec icônes, texte, boutons ou indice clavier attachés, partageant une même bordure et un même anneau de focus.
Utilisé dans les blocks
Des blocks qui s’appuient sur Checkbox.
- API keysLa page des clés d’API d’un produit d’IA, comme les consoles d’OpenAI et d’Anthropic. Créez des clés avec des permissions limitées et une expiration, voyez le secret une seule fois avec une copie qui confirme, révoquez avec annulation, renommez sur place, effectuez une rotation avec période de grâce et consultez l’utilisation par clé.
- MarkdownDu Markdown conçu pour les réponses d’IA. Il s’affiche en streaming de façon fluide et ne montre jamais de syntaxe à moitié saisie, avec des titres que l’on peut lier, des tableaux copiables en Markdown ou CSV, des callouts GitHub, des listes de tâches, des notes de bas de page, des images, des citations en ligne et des blocs de code complets.
- NotificationsLa section Notifications des paramètres d’un produit d’IA. Une grille canal par événement avec bascules par ligne, par colonne et globale, des heures calmes avec une ligne « prochain calme » en direct, un résumé par e-mail, de vrais envois de test pour le bureau, l’e-mail, le push et Slack, la gestion des permissions du navigateur et un flux de connexion à Slack. S’intègre dans n’importe quelle section Settings.
- SecuritySessions et sécurité pour un produit d’IA. Appareils actifs avec déconnexion qui fait disparaître les lignes en animation, changement de mot de passe avec jauge de robustesse en direct, configuration de l’authentification à deux facteurs avec un vrai code QR, une vérification à 6 chiffres et des codes de récupération téléchargeables, des passkeys via WebAuthn, et la suppression du compte derrière une confirmation saisie.