Radio group
Choisit une option dans un ensemble, avec un point qui passe d'un choix à l'autre et des cartes dont l'anneau de sélection glisse vers le nouveau choix.
pnpm dlx shadcn@latest add https://hextaui.com/r/radio-group.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 cnCopiez et collez le code suivant dans votre projet.
components/ui/radio-group.tsx lib/motion.ts Mettez à jour les chemins d’import selon la configuration de votre projet.
Quand le choix change, l'ancien point rétrécit pendant que le nouveau jaillit, pour que l'œil suive le choix au lieu de deux éléments qui clignotent. Entourez chaque élément d'un <label> pour que toute la ligne soit cliquable.
Cartes
Avec variant="card", utilisez RadioGroupCard pour des options qui ont plus à dire. L'anneau de sélection glisse vers la nouvelle carte pendant que sa surface apparaît en fondu.
Horizontal
Les cartes peuvent former une ligne ou n'importe quelle grille. L'anneau les suit où qu'elles soient.
Form
Dans Field et FieldSet, le groupe reçoit une légende, une validation d'obligation et un message d'erreur.
Désactivé et en lecture seule
Désactivez une seule option, ou passez tout le groupe en readOnly pour montrer une valeur non modifiable.
Contrôlé
Passez value et onValueChange. Les changements extérieurs s'animent comme les clics.
De droite à gauche
Les radios et les cartes suivent le sens de lecture.
| Touche | Action |
|---|---|
| Tab | Place le focus dans le groupe, sur l'option choisie ou la première. |
| ↑↓←→ | Passe à l'option précédente ou suivante et la choisit, en bouclant aux extrémités. |
| Space | Choisit l'option qui a le focus. |
- Nommez le groupe avec
aria-label,aria-labelledbyou uneFieldLegend. - Chaque radio a une zone de clic de 36px, et de 44px sur écran tactile, tout en restant à 16px à l'écran.
- Le point et l'anneau de la carte ne bougent pas avec la réduction des animations.
| Prop | Type | Par défaut |
|---|---|---|
variantcard ajoute l'anneau de sélection glissant. | "default" | "card" | "default" |
value | Value | – |
defaultValue | Value | – |
onValueChange | (value, details) => void | – |
name | string | – |
required | boolean | false |
disabled | boolean | false |
readOnly | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Description |
|---|---|
data-slot="radio-group" | Le groupe, avec data-variant. |
data-slot="radio-group-highlight" | L'anneau qui glisse entre les cartes. |
data-disabled | Le groupe est désactivé. |
| Prop | Type | Par défaut |
|---|---|---|
value | Value | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <span> |
| Attribut | Description |
|---|---|
data-slot="radio-group-item" | Le radio. |
data-checked / data-unchecked | Indique s'il s'agit de l'option choisie. |
data-disabled / data-readonly | Présent quand il ne peut pas être modifié. |
| Prop | Type | Par défaut |
|---|---|---|
value | Value | – |
disabled | boolean | false |
radioClassNameClasses pour le radio à l'intérieur de la carte. | string | – |
Un <label> avec le radio intégré. Placez dedans RadioGroupCardTitle et RadioGroupCardDescription, ou tout autre contenu.
- MotionLes courbes d’easing, les durées et la vérification de réduction des animations utilisées par chaque composant, ainsi que des hooks pour les morphs de taille et les surlignages glissants.
- 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.
- CheckboxUne case à cocher dont la coche se dessine, avec des parents indéterminés, des groupes et des libellés qui partagent son survol.
- 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.