Native select
Le select natif du navigateur, stylé pour s’accorder à Input, avec un placeholder discret, la prise en charge de Field et le sélecteur du système sur chaque appareil.
pnpm dlx shadcn@latest add https://hextaui.com/r/native-select.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 class-variance-authority cnCopiez et collez le code suivant dans votre projet.
components/ui/native-select.tsx components/ui/input.tsx components/ui/number-flow.tsx lib/motion.ts Mettez à jour les chemins d’import selon la configuration de votre projet.
Une option avec une value vide sert de placeholder : elle s'affiche en texte atténué tant que rien n'est choisi. Mettez className sur le select pour dimensionner son wrapper, par exemple w-full.
Groupes
<NativeSelectOptGroup /> organise les options sous des intitulés dans le sélecteur du système.
Tailles
Les tailles, bordures, anneaux de focus et styles invalides correspondent exactement à ceux d'Input, si bien que les deux s'alignent sur une même ligne.
Field
Dans un <Field />, le label et la description se relient d'eux-mêmes et les erreurs s'affichent quand la valeur change. Soumettez sans choisir de plan : le select devient rouge, tremble une fois, et le navigateur le désigne.
Invalide
Définissez aria-invalid et reliez le message avec aria-describedby.
Désactivé
Désactivez tout le select, ou seulement les options indisponibles.
Contrôlé
Passez value et onChange comme pour un select ordinaire.
Contenu long
Les longs labels sélectionnés se terminent par des points de suspension au lieu de passer sous le chevron.
De droite à gauche
Le chevron et le padding passent de l'autre côté.
- Utilisez Native select pour les listes simples, surtout sur mobile, où le sélecteur du système est la façon la plus rapide et la plus familière de choisir.
- Utilisez Combobox quand il faut pouvoir rechercher, ou quand les options ont besoin d'icônes, de descriptions ou de mises en page personnalisées.
| Touche | Action |
|---|---|
| Tab | Donne le focus au select. |
| SpaceEnter | Ouvre le sélecteur du système. |
| ↑↓ | Modifie la sélection, ou se déplace dans le sélecteur ouvert. |
| A–Z | Saute à l'option qui commence par le texte saisi. |
<NativeSelect /> accepte tous les attributs de select. Les parties option acceptent les attributs de leur élément.
| Prop | Type | Par défaut |
|---|---|---|
size | "sm" | "default" | "lg" | "default" |
htmlSizeL’attribut size natif, renommé car size est la variante. | number | – |
shakeTremble une fois quand l'envoi d'un formulaire le trouve invalide. | boolean | true |
classNameAppliqué au wrapper, il dimensionne donc tout le contrôle. | string | – |
value | string | – |
defaultValue | string | – |
disabled | boolean | false |
required | boolean | false |
| Attribut | Description |
|---|---|
data-slot="native-select-wrapper" | Le wrapper, avec data-size. |
data-slot="native-select" | L'élément select. |
data-slot="native-select-icon" | Le chevron. Il fonce au survol et au focus. |
data-invalid | Présent quand un Field englobant est invalide. |
| Attribut | Description |
|---|---|
data-slot="native-select-option" | Une option. |
data-slot="native-select-optgroup" | Un groupe d'options avec un label. |
- 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.
- useComposedRefConserve une ref vers votre propre élément tout en la transmettant à la ref passée par le parent.
- useInvalidShakeFait vibrer un contrôle de formulaire lorsqu’une tentative d’envoi le trouve invalide, et jamais pendant que quelqu’un tape encore.
- 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.
Utilisé dans les blocks
Des blocks qui s’appuient sur Native select.