Label
Un label qui suit son contrôle, s'atténue quand il est désactivé et le marque tout seul comme obligatoire ou facultatif.
pnpm dlx shadcn@latest add https://hextaui.com/r/label.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/label.tsx Mettez à jour les chemins d’import selon la configuration de votre projet.
Faites pointer htmlFor vers l'id d'un contrôle, ou entourez le contrôle. Dans les deux cas, le label le retrouve et suit son état. Dans un <Field />, utilisez <FieldLabel />, qui câble l'id pour vous.
Suit son contrôle
Le label s'atténue et affiche un curseur not-allowed tant que son contrôle est désactivé, et expose data-required, data-invalid et data-readonly pour vos propres styles. Il reste synchronisé quand le contrôle change.
Requis et facultatif
indicator="optional" signale les contrôles sans required, et indicator="required" ajoute un astérisque à ceux qui l'ont. La marque est masquée aux lecteurs d'écran, qui annoncent déjà les champs obligatoires.
Checkbox
Entourez une case à cocher pour que tout le label la bascule, ou placez le label à côté avec htmlFor. Une case à cocher désactivée atténue son label dans les deux cas.
Icône
Les icônes dans un label sont dimensionnées et atténuées pour s'accorder au texte.
Contenu long
Les longs labels passent à la ligne, et les chaînes sans espace sont coupées au lieu d'élargir la mise en page.
De droite à gauche
Les espacements et l'indicateur suivent le sens de lecture.
- Cliquer sur le label met le focus sur son contrôle ou le bascule : la zone cliquable est donc plus grande que le contrôle seul.
- Un double-clic sur le texte du label ne le sélectionne pas. Les doubles-clics sur un contrôle à l'intérieur du label fonctionnent normalement.
- Chaque contrôle doit avoir un nom. Sans label visible, utilisez plutôt
aria-labelsur le contrôle.
Rend un <label> et accepte ses attributs.
| Prop | Type | Par défaut |
|---|---|---|
htmlForL'id du contrôle. Omettez-le quand le label entoure le contrôle. | string | – |
indicatorMarque le label d'après l'état obligatoire du contrôle. Désactivé par défaut. | "required" | "optional" | – |
optionalText | ReactNode | "Optional" |
render | ReactElement | (props, state) => ReactElement | <label> |
| Attribut | Description |
|---|---|
data-slot="label" | Cible les labels en CSS. |
data-disabled | Présent tant que le contrôle est désactivé. |
data-required | Présent tant que le contrôle est obligatoire. |
data-invalid | Présent tant que le contrôle est invalide, après une interaction de l'utilisateur ou quand aria-invalid est défini. |
data-readonly | Présent tant que le contrôle est en lecture seule. |
data-slot="label-indicator" | La marque obligatoire ou facultatif. |
- 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.
- 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.
Utilisé dans les blocks
Des blocks qui s’appuient sur Label.
- Agent TodosAffichez le plan d’un agent pendant son travail. Chaque étape passe de backlog à à faire, en cours puis terminé, avec des durées en direct, les échecs et les appels d’outils qui les sous-tendent. Une pastille de statut à placer au-dessus du champ de saisie, des changements de plan visibles et une étape de relecture pour modifier le plan avant son exécution.
- Chat SidebarLa barre latérale d’une application de chat. Logo, recherche et Nouveau chat en haut, vos propres liens en dessous, chats épinglés, projets qui se déploient pour montrer leurs chats, récents regroupés par jour, et des lignes avec menus au survol et au clic droit, renommage en ligne, suppression avec annulation et états de réponse en direct.
- TeamMembres d’équipe et invitations pour les paramètres d’espace de travail d’un produit d’IA. Un compteur de places qui prévisualise les invitations en cours de saisie, une zone d’invitation qui transforme une liste collée en chips vérifiées, des membres avec rôles, recherche, filtres et tri, des invitations en attente avec délais avant renvoi et liens copiables, le transfert de propriété avec confirmation saisie, et la suppression avec annulation.