Hecho sobre el UI SDK 0.1.0-beta.2 de Vercel. Su API puede cambiar.
Password input
Un campo de contraseña sobre el UI SDK de Vercel con botón para mostrar y ocultar, aviso de Bloq Mayús, medidor de seguridad y el autocompletado adecuado para gestores de contraseñas.
- Componentes de formulario
- 6 partes
- 10 ejemplos
@tabler/icons-react@ui-sdk/core@ui-sdk/react
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-password-input.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add @ui-sdk/react@0.1.0-beta.2 @ui-sdk/core@0.1.0-beta.2 @tabler/icons-react cnCopia y pega el siguiente código en tu proyecto.
components/ui/ui-sdk-password-input.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
UI SDK añade un poco de CSS propio en una capa de cascada llamada ui-sdk. Declara esa capa al principio de tu hoja de estilos global, encima del import de Tailwind, para que tus clases ganen.
El control sigue siendo un campo de contraseña nativo, así que los gestores de contraseñas, el autocompletado y el envío de formularios funcionan como en cualquier otro sitio. Pon las opciones de formulario como name, required y autoComplete en PasswordInput, y los atributos del input como id y placeholder en PasswordInputControl.
autoComplete vale current-password por defecto, para iniciar sesión. Usa new-password al registrarse o cambiar la contraseña, para que el navegador ofrezca una segura, y off para secretos que no son contraseñas de cuenta.
PasswordInputStrength puntúa la contraseña de 0 a 4 mientras se escribe. La lista lee el mismo valor con usePasswordInputValue(). Las reglas son del ejemplo, porque el componente no impone ninguna política de contraseñas.
Combínalo con un campo de email con autoComplete="username". Enter en la contraseña envía el formulario, y al enviar se vuelve a ocultar una contraseña visible para que el navegador ofrezca guardarla.
defaultVisible empieza con el texto visible, para un secreto que hay que leer, como una contraseña de Wi-Fi.
Un controlador de createPasswordInputController() fija, muestra, oculta, vacía y enfoca el campo desde cualquier botón. Las escrituras pasan por onValueChange como al teclear.
Pasa visible y onVisibleChange. El motivo distingue una pulsación del botón de un envío, un reinicio o la página al ocultarse.
invalid marca el campo y pone aria-invalid en el input. Apunta su aria-describedby a tu mensaje. Un campo obligatorio también se vuelve rojo si alguien lo deja vacío.
Un campo de solo lectura se puede enfocar, mostrar y copiar, pero no cambiar, y aun así se envía.
Tab se salta un campo desactivado y su botón, y el valor no se envía.
El botón queda a la izquierda y el medidor se llena desde la derecha. Pasa las etiquetas en tu idioma.
| Key | Acción |
|---|---|
| Tab | Pasa del campo al botón. |
| SpaceEnter | Muestra u oculta la contraseña desde el botón y mantiene el foco en él. |
| Enter | Envía el formulario desde el campo. Nunca pulsa el botón. |
El botón es un botón conmutador con un nombre fijo, “Show password”, y aria-pressed indica a los lectores de pantalla si la contraseña se ve. Cámbiale el nombre para otros secretos e idiomas. Una pulsación con puntero en el botón deja el cursor donde estaba en el campo.
PasswordInputCapsLock se abre bajo el campo mientras Bloq Mayús está activo y el campo tiene el foco, y lo dice mediante una región de estado. PasswordInputStrength es un medidor cuyo texto de valor es la etiqueta de seguridad, que se lee a demanda en vez de anunciarse en cada tecla. Las contraseñas visibles se saltan el corrector, la autocorrección y las mayúsculas automáticas.
Ninguna parte escribe la contraseña en un atributo data-*. La raíz y el control solo llevan booleanos como data-filled, y el medidor lleva la puntuación. Un value controlado sí hace que React mantenga un atributo value en el DOM, así que lee la contraseña con onValueChange o usePasswordInputValue().
Cada parte envuelve la parte de UI SDK del mismo nombre y acepta todas sus props, incluidas render y un className que puede ser una función del estado de la parte.
| Prop | Tipo | Predeterminado |
|---|---|---|
value | string | – |
defaultValue | string | – |
onValueChange | (value: string, details) => void | – |
visible | boolean | – |
defaultVisible | boolean | false |
onVisibleChangedetails.reason es toggle-press, form-submit, reset, page-hide o 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 | – |
controllerDe createPasswordInputController(). | PasswordInputController | – |
| Atributo | Descripción |
|---|---|
data-slot="password-input" | Apunta al campo de contraseña en CSS. |
data-visible | Presente mientras se muestra la contraseña. |
data-capslock | Presente mientras Bloq Mayús está activo y el campo tiene el foco. |
data-filled | Presente mientras el campo tiene texto. |
data-invalid | Presente cuando no es válido. |
data-disabled | Presente cuando está deshabilitado. |
data-readonly | Presente cuando es de solo lectura. |
data-required | Presente cuando se exige una contraseña. |
La caja alrededor del campo y del botón. Dibuja el anillo de foco cuando el campo tiene el foco.
| Prop | Tipo | Predeterminado |
|---|---|---|
id | string | – |
placeholder | string | – |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descripción |
|---|---|
data-slot="password-input-control" | Apunta al input nativo en CSS. |
data-visible | Presente mientras es un campo de texto. |
| Prop | Tipo | Predeterminado |
|---|---|---|
aria-label | string | "Show password" |
childrenPor defecto, un ojo que se funde en un ojo cerrado. | ReactNode | (state) => ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descripción |
|---|---|
data-slot="password-input-toggle" | Selecciona el interruptor en CSS. |
aria-pressed | true mientras la contraseña se ve. |
| Prop | Tipo | Predeterminado |
|---|---|---|
children | ReactNode | "Caps Lock is on" |
| Atributo | Descripción |
|---|---|
data-slot="password-input-capslock" | Apunta al aviso en CSS. |
data-active | Presente mientras Bloq Mayús está activo. |
| Prop | Tipo | Predeterminado |
|---|---|---|
getStrengthPuntúa la contraseña. La función por defecto pondera longitud, variedad de caracteres, repeticiones y contraseñas comunes. Usa un estimador más sólido como zxcvbn para políticas reales. | (password: string) => 0 | 1 | 2 | 3 | 4 | scorePassword |
labels | [string, string, string, string, string] | ["", "Weak", "Fair", "Good", "Strong"] |
label | string | "Password strength" |
| Atributo | Descripción |
|---|---|
data-slot="password-input-strength" | Apunta al medidor en CSS. |
data-score | La puntuación, de 0 (vacío) a 4. |
- CalendarUna cuadrícula de fechas para selección única, de rango y múltiple, con meses deslizantes, vistas previas de rango y días de tamaño táctil.
- CheckboxUna casilla de verificación cuya marca se dibuja, con padres indeterminados, grupos y etiquetas que comparten su hover.
- ComboboxUn select filtrable con chips, grupos y resultados asíncronos, en un popup que cambia de tamaño mientras escribes.
- Date pickerUn botón que abre un calendario en un popover, o en una hoja inferior en móviles, para fechas únicas y rangos.
- FieldEtiquetas, descripciones y errores conectados a su control, con estados de validación y diseños para formularios.
- InputUn campo de texto con tres tamaños, estados inválido y de solo lectura, estilos de validación nativos y una fuente táctil de 16px para que los móviles nunca hagan zoom.