Gebaut auf Vercels UI SDK 0.1.0-beta.2. Die API kann sich ändern.
Password input
Ein Passwortfeld auf Vercels UI SDK mit Ein-/Ausblenden-Schalter, Feststelltasten-Hinweis, Stärkeanzeige und dem passenden Autocomplete für Passwortmanager.
- Formularkomponenten
- 6 Teilen
- 10 Beispielen
@tabler/icons-react@ui-sdk/core@ui-sdk/react
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-password-input.jsonFügt die Komponente, die HextaUI-Theme-Tokens und alle HextaUI-Komponenten hinzu, von denen sie abhängt.
Füge die Theme-Tokens zu deinem globalen CSS hinzu, falls du das noch nicht getan hast.
Installiere die Abhängigkeiten.
pnpm add @ui-sdk/react@0.1.0-beta.2 @ui-sdk/core@0.1.0-beta.2 @tabler/icons-react cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/ui-sdk-password-input.tsx Passe die Importpfade an dein Projekt-Setup an.
UI SDK bringt etwas eigenes CSS in einem Cascade Layer namens ui-sdk mit. Deklariere diesen Layer ganz oben im globalen Stylesheet, über dem Tailwind-Import, damit deine Klassen gewinnen.
Das Steuerelement bleibt ein natives Passwortfeld, also funktionieren Passwortmanager, Autofill und Formularversand wie überall. Formularoptionen wie name, required und autoComplete gehören auf PasswordInput, Input-Attribute wie id und placeholder auf PasswordInputControl.
autoComplete ist standardmäßig current-password zum Anmelden. Nutze new-password zum Registrieren oder Ändern, damit der Browser ein starkes Passwort vorschlägt, und off für Geheimnisse, die keine Kontopasswörter sind.
PasswordInputStrength bewertet das Passwort beim Tippen von 0 bis 4. Die Checkliste liest denselben Wert mit usePasswordInputValue(). Die Regeln gehören zum Beispiel, denn die Komponente setzt keine Passwortrichtlinie.
Kombiniere es mit einem E-Mail-Feld mit autoComplete="username". Enter im Passwort sendet das Formular, und beim Senden wird ein sichtbares Passwort wieder verborgen, damit der Browser das Speichern anbietet.
defaultVisible startet mit sichtbarem Text, für ein Geheimnis, das Leute lesen müssen, etwa ein WLAN-Passwort.
Ein Controller aus createPasswordInputController() setzt, zeigt, verbirgt, leert und fokussiert das Feld von jedem Button aus. Schreibvorgänge laufen wie Tippen über onValueChange.
Übergib visible und onVisibleChange. Der Grund unterscheidet einen Schalterdruck vom Absenden, einem Reset oder dem Verbergen der Seite.
invalid markiert das Feld und setzt aria-invalid auf das Input. Richte sein aria-describedby auf deine Meldung. Ein Pflichtfeld wird auch rot, wenn es leer verlassen wird.
Ein schreibgeschütztes Feld lässt sich fokussieren, anzeigen und kopieren, aber nicht ändern, und wird trotzdem gesendet.
Tab überspringt ein deaktiviertes Feld und seinen Schalter, und der Wert wird nicht gesendet.
Der Schalter sitzt links, und die Stärkeanzeige füllt sich von rechts. Übergib Labels in deiner Sprache.
| Taste | Aktion |
|---|---|
| Tab | Springt vom Feld zum Schalter. |
| SpaceEnter | Blendet das Passwort über den Schalter ein oder aus und lässt den Fokus darauf. |
| Enter | Sendet das Formular aus dem Feld. Es drückt nie den Schalter. |
Der Schalter ist ein Umschaltbutton mit festem Namen, „Show password“, und aria-pressed sagt Screenreadern, ob das Passwort sichtbar ist. Benenne ihn für andere Geheimnisse und Sprachen um. Ein Zeigerdruck auf den Schalter lässt die Einfügemarke im Feld, wo sie war.
PasswordInputCapsLock öffnet sich unter dem Feld, solange die Feststelltaste aktiv ist und das Feld den Fokus hat, und meldet das über eine Statusregion. PasswordInputStrength ist eine Anzeige, deren Werttext das Stärke-Label ist; es wird bei Bedarf gelesen statt bei jeder Taste angesagt. Sichtbare Passwörter überspringen Rechtschreibprüfung, Autokorrektur und Großschreibung.
Kein Teil schreibt das Passwort in ein data-*-Attribut. Wurzel und Steuerelement tragen nur Booleans wie data-filled, die Anzeige trägt die Punktzahl. Ein kontrolliertes value lässt React allerdings ein value-Attribut im DOM halten, lies das Passwort also mit onValueChange oder usePasswordInputValue().
Jeder Teil umhüllt den gleichnamigen UI-SDK-Teil und nimmt alle seine Props an, auch render und einen className, der eine Funktion des Zustands sein kann.
| Prop | Typ | Standard |
|---|---|---|
value | string | – |
defaultValue | string | – |
onValueChange | (value: string, details) => void | – |
visible | boolean | – |
defaultVisible | boolean | false |
onVisibleChangedetails.reason ist toggle-press, form-submit, reset, page-hide oder 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 | – |
controllerAus createPasswordInputController(). | PasswordInputController | – |
| Attribut | Beschreibung |
|---|---|
data-slot="password-input" | Spricht das Passwortfeld in CSS an. |
data-visible | Vorhanden, solange das Passwort angezeigt wird. |
data-capslock | Vorhanden, solange die Feststelltaste aktiv ist und das Feld den Fokus hat. |
data-filled | Vorhanden, solange das Feld Text enthält. |
data-invalid | Vorhanden, wenn ungültig. |
data-disabled | Vorhanden, wenn deaktiviert. |
data-readonly | Vorhanden, wenn schreibgeschützt. |
data-required | Vorhanden, wenn ein Passwort Pflicht ist. |
Der Rahmen um Feld und Schalter. Er zeichnet den Fokusring, wenn das Feld fokussiert ist.
| Prop | Typ | Standard |
|---|---|---|
id | string | – |
placeholder | string | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Beschreibung |
|---|---|
data-slot="password-input-control" | Spricht das native Input in CSS an. |
data-visible | Vorhanden, solange es ein Textfeld ist. |
| Prop | Typ | Standard |
|---|---|---|
aria-label | string | "Show password" |
childrenStandardmäßig ein Auge, das in ein geschlossenes Auge überblendet. | ReactNode | (state) => ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Beschreibung |
|---|---|
data-slot="password-input-toggle" | Den Umschalter in CSS ansprechen. |
aria-pressed | true, solange das Passwort sichtbar ist. |
| Prop | Typ | Standard |
|---|---|---|
children | ReactNode | "Caps Lock is on" |
| Attribut | Beschreibung |
|---|---|
data-slot="password-input-capslock" | Spricht den Hinweis in CSS an. |
data-active | Vorhanden, solange die Feststelltaste aktiv ist. |
| Prop | Typ | Standard |
|---|---|---|
getStrengthBewertet das Passwort. Der Standard gewichtet Länge, Zeichenvielfalt, Wiederholungen und gängige Passwörter. Für echte Richtlinien nimm einen stärkeren Schätzer wie zxcvbn. | (password: string) => 0 | 1 | 2 | 3 | 4 | scorePassword |
labels | [string, string, string, string, string] | ["", "Weak", "Fair", "Good", "Strong"] |
label | string | "Password strength" |
| Attribut | Beschreibung |
|---|---|
data-slot="password-input-strength" | Spricht die Anzeige in CSS an. |
data-score | Die Punktzahl, von 0 für leer bis 4. |
- CalendarEin Datumsraster für Einzel-, Bereichs- und Mehrfachauswahl, mit gleitenden Monaten, Bereichsvorschau und Tagen in Touch-Größe.
- CheckboxEine Checkbox, deren Häkchen sich einzeichnet, mit unbestimmten übergeordneten Elementen, Gruppen und Labels, die ihren Hover teilen.
- ComboboxEin filterbares Select mit Chips, Gruppen und asynchronen Ergebnissen, in einem Popup, das sich beim Tippen anpasst.
- Date pickerEin Button, der einen Kalender in einem Popover öffnet, auf Smartphones als Bottom Sheet, für einzelne Daten und Zeiträume.
- FieldLabels, Beschreibungen und Fehler, mit ihrem Steuerelement verbunden, mit Validierungszuständen und Layouts für Formulare.
- InputEin Texteingabefeld mit drei Größen, ungültigen und schreibgeschützten Zuständen, nativem Validierungsstyling und einer 16-px-Schrift für Touch, damit Smartphones nie hineinzoomen.