Toggle
Un bouton qui reste activé ou désactivé, avec un remplissage qui se pose à l’appui, une étape claire entre survol et activation, et des icônes qui peuvent se remplir selon l’état.
pnpm dlx shadcn@latest add https://hextaui.com/r/toggle.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 class-variance-authority cnCopiez et collez le code suivant dans votre projet.
components/ui/toggle.tsx Mettez à jour les chemins d’import selon la configuration de votre projet.
Survoler un toggle désactivé montre une légère teinte ; l'activer installe un remplissage plus fort et amène le label au contraste maximal, si bien que l'état activé ne ressemble jamais à un survol.
Outline
variant="outline" ajoute une bordure et une surface, pour les toggles qui se tiennent seuls.
Avec du texte
Les icônes et les labels se placent côte à côte. Les toggles avec texte visible n'ont pas besoin d'aria-label.
Rempli quand activé
Ajoutez group-data-pressed/toggle:fill-current à une icône outline et elle se remplit quand le toggle s'active.
Tailles
sm, default et lg. Les toggles réduits à une icône restent carrés.
Pill
shape="pill" arrondit complètement les extrémités, pour les toggles placés dans des surfaces arrondies comme un compositeur de chat.
Désactivé
Un toggle désactivé continue d'indiquer s'il est activé, mais ne peut être ni pressé ni focalisé.
Contrôlé
Passez pressed et onPressedChange. Le label reste le même pendant que l'icône suit l'état.
De droite à gauche
Les icônes précèdent le label depuis la droite.
| Touche | Action |
|---|---|
| SpaceEnter | Active ou désactive le toggle qui a le focus. |
| Tab | Place le focus sur le toggle suivant. |
- Le toggle est un
buttonavecaria-pressed, si bien que les lecteurs d'écran annoncent s'il est activé. - Donnez aux toggles réduits à une icône un
aria-labelqui nomme l'action ("Couper le micro") et gardez-le identique dans les deux états. Le modifier en plus de l'état pressé se lit comme une double négation. - Sur écran tactile, la zone de clic passe à au moins 44px, sauf dans un toggle group où les voisins se chevaucheraient.
- Avec la réduction des animations, rien ne change d'échelle ; le remplissage apparaît seulement en fondu.
| Prop | Type | Par défaut |
|---|---|---|
variant | "default" | "outline" | "default" |
size | "default" | "sm" | "lg" | "default" |
shape | "default" | "pill" | "default" |
pressed | boolean | – |
defaultPressed | boolean | false |
onPressedChange | (pressed, details) => void | – |
disabled | boolean | false |
valueIdentifie le toggle dans un toggle group. | string | – |
className | string | (state) => string | – |
nativeButton | boolean | true |
render | ReactElement | (props, state) => ReactElement | <button> |
| Attribut | Description |
|---|---|
data-slot="toggle" | Le bouton, avec data-variant et data-size. |
data-pressed | Présent quand le toggle est activé. |
data-disabled | Présent quand le toggle est désactivé. |
- ButtonDes boutons dans toutes les variantes et tailles, avec un flux de chargement, de succès et d’erreur intégré qui évite le spinner pour les requêtes rapides.
- Button groupDes boutons réunis en un seul contrôle, avec jointures partagées, séparateurs, addons de texte, imbrication et piles verticales.
- Toggle groupUne rangée de boutons à bascule pour un choix unique ou multiple, avec un remplissage qui glisse vers l’élément choisi, des éléments joints ou espacés et un focus aux flèches du clavier.
Utilisé dans les blocks
Des blocks qui s’appuient sur Toggle.
- ArtifactLe panneau à côté d’un chat IA qui montre ce que le modèle a produit. Pages web, SVG, documents et code arrivent en direct, puis passent à un aperçu isolé en sandbox, avec des versions à comparer et à restaurer, une séparation redimensionnable et une bottom sheet sur mobile.
- Code BlockDes blocs de code conçus pour les réponses d’IA. Coloration syntaxique qui suit le streaming, copie, téléchargement et retour à la ligne, numéros de ligne et lignes surlignées, diffs avec accepter et rejeter, et un terminal pour les commandes.