Construit sur l’UI SDK 0.1.0-beta.2 de Vercel. Son API peut changer.
Password input
Un champ de mot de passe sur l’UI SDK de Vercel avec un bouton pour afficher ou masquer, un avertissement Verr. Maj, une jauge de robustesse et le bon autocomplete pour les gestionnaires de mots de passe.
- Composants de formulaire
- 6 parties
- 10 exemples
@tabler/icons-react@ui-sdk/core@ui-sdk/react
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-password-input.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 @ui-sdk/react@0.1.0-beta.2 @ui-sdk/core@0.1.0-beta.2 @tabler/icons-react cnCopiez et collez le code suivant dans votre projet.
components/ui/ui-sdk-password-input.tsx Mettez à jour les chemins d’import selon la configuration de votre projet.
UI SDK ajoute un peu de CSS dans une couche de cascade nommée ui-sdk. Déclarez cette couche en haut de votre feuille de style globale, au-dessus de l’import Tailwind, pour que vos classes l’emportent.
Le contrôle reste un champ de mot de passe natif : gestionnaires de mots de passe, remplissage automatique et envoi de formulaire fonctionnent comme partout. Placez les options de formulaire comme name, required et autoComplete sur PasswordInput, et les attributs d’input comme id et placeholder sur PasswordInputControl.
autoComplete vaut current-password par défaut, pour se connecter. Utilisez new-password pour créer ou changer un mot de passe, afin que le navigateur en propose un solide, et off pour les secrets qui ne sont pas des mots de passe de compte.
PasswordInputStrength note le mot de passe de 0 à 4 pendant la saisie. La liste lit la même valeur avec usePasswordInputValue(). Les règles appartiennent à l’exemple, le composant n’imposant aucune politique de mot de passe.
Associez-le à un champ e-mail avec autoComplete="username". Entrée dans le mot de passe envoie le formulaire, et l’envoi masque à nouveau un mot de passe affiché pour que le navigateur propose de l’enregistrer.
defaultVisible démarre avec le texte affiché, pour un secret qu’il faut lire, comme un mot de passe Wi-Fi.
Un contrôleur issu de createPasswordInputController() remplit, affiche, masque, vide et cible le champ depuis n’importe quel bouton. Les écritures passent par onValueChange comme la saisie.
Passez visible et onVisibleChange. La raison distingue un appui sur le bouton d’un envoi, d’une réinitialisation ou de la page masquée.
invalid marque le champ et pose aria-invalid sur l’input. Faites pointer son aria-describedby vers votre message. Un champ requis devient aussi rouge quand on le quitte vide.
Un champ en lecture seule peut être ciblé, affiché et copié, mais pas modifié, et il est quand même envoyé.
Tab saute un champ désactivé et son bouton, et la valeur n’est pas envoyée.
Le bouton est à gauche, et la jauge se remplit depuis la droite. Passez les libellés dans votre langue.
| Touche | Action |
|---|---|
| Tab | Passe du champ au bouton. |
| SpaceEnter | Affiche ou masque le mot de passe depuis le bouton, et garde le focus dessus. |
| Enter | Envoie le formulaire depuis le champ. N’actionne jamais le bouton. |
Le bouton est un bouton bascule au nom fixe, « Show password », et aria-pressed indique aux lecteurs d’écran si le mot de passe est affiché. Renommez-le pour d’autres secrets et d’autres langues. Un appui au pointeur sur le bouton laisse le curseur où il était dans le champ.
PasswordInputCapsLock s’ouvre sous le champ tant que Verr. Maj est actif et que le champ a le focus, et le signale par une région de statut. PasswordInputStrength est une jauge dont le texte de valeur est le libellé de robustesse, lu à la demande plutôt qu’annoncé à chaque touche. Les mots de passe affichés échappent au correcteur, à la correction automatique et aux majuscules automatiques.
Aucune partie n’écrit le mot de passe dans un attribut data-*. La racine et le contrôle ne portent que des booléens comme data-filled, et la jauge porte le score. Un value contrôlé fait en revanche garder à React un attribut value dans le DOM, alors lisez le mot de passe avec onValueChange ou usePasswordInputValue().
Chaque partie enveloppe la partie UI SDK du même nom et accepte toutes ses props, y compris render et un className qui peut être une fonction de son état.
| Prop | Type | Par défaut |
|---|---|---|
value | string | – |
defaultValue | string | – |
onValueChange | (value: string, details) => void | – |
visible | boolean | – |
defaultVisible | boolean | false |
onVisibleChangedetails.reason vaut toggle-press, form-submit, reset, page-hide ou imperative. | (visible: boolean, details) => void | – |
autoComplete | "current-password" | "new-password" | "off" | string | "current-password" |
invalid | boolean | false |
disabled | boolean | false |
readOnly | boolean | false |
required | boolean | false |
name | string | – |
form | string | – |
controllerIssu de createPasswordInputController(). | PasswordInputController | – |
| Attribut | Description |
|---|---|
data-slot="password-input" | Cible le champ de mot de passe en CSS. |
data-visible | Présent tant que le mot de passe est affiché. |
data-capslock | Présent tant que Verr. Maj est actif et que le champ a le focus. |
data-filled | Présent tant que le champ contient du texte. |
data-invalid | Présent quand il est invalide. |
data-disabled | Présent lorsque l’élément est désactivé. |
data-readonly | Présent en lecture seule. |
data-required | Présent quand un mot de passe est requis. |
La boîte autour du champ et du bouton. Elle dessine l’anneau de focus quand le champ a le focus.
| Prop | Type | Par défaut |
|---|---|---|
id | string | – |
placeholder | string | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Description |
|---|---|
data-slot="password-input-control" | Cible l’input natif en CSS. |
data-visible | Présent tant que c’est un champ texte. |
| Prop | Type | Par défaut |
|---|---|---|
aria-label | string | "Show password" |
childrenPar défaut, un œil qui se fond en œil fermé. | ReactNode | (state) => ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Description |
|---|---|
data-slot="password-input-toggle" | Ciblez le bouton d’affichage en CSS. |
aria-pressed | true tant que le mot de passe est affiché. |
| Prop | Type | Par défaut |
|---|---|---|
children | ReactNode | "Caps Lock is on" |
| Attribut | Description |
|---|---|
data-slot="password-input-capslock" | Cible l’indication en CSS. |
data-active | Présent tant que Verr. Maj est actif. |
| Prop | Type | Par défaut |
|---|---|---|
getStrengthNote le mot de passe. La fonction par défaut pèse la longueur, la variété des caractères, les répétitions et les mots de passe courants. Pour une vraie politique, utilisez un estimateur plus solide comme zxcvbn. | (password: string) => 0 | 1 | 2 | 3 | 4 | scorePassword |
labels | [string, string, string, string, string] | ["", "Weak", "Fair", "Good", "Strong"] |
label | string | "Password strength" |
| Attribut | Description |
|---|---|
data-slot="password-input-strength" | Cible la jauge en CSS. |
data-score | Le score, de 0 pour vide à 4. |
- 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.