Feito sobre o UI SDK 0.1.0-beta.2 da Vercel. A API pode mudar.
Password input
Um campo de senha no UI SDK da Vercel com botão para mostrar e ocultar, aviso de Caps Lock, medidor de força e o autocomplete certo para gerenciadores de senha.
- Componentes de formulário
- 6 partes
- 10 exemplos
@tabler/icons-react@ui-sdk/core@ui-sdk/react
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-password-input.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @ui-sdk/react@0.1.0-beta.2 @ui-sdk/core@0.1.0-beta.2 @tabler/icons-react cnCopie e cole o código a seguir no seu projeto.
components/ui/ui-sdk-password-input.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
O UI SDK adiciona um pouco de CSS próprio em uma camada de cascata chamada ui-sdk. Declare essa camada no topo da sua folha de estilos global, acima do import do Tailwind, para que suas classes vençam.
O controle continua sendo um campo de senha nativo, então gerenciadores de senha, preenchimento automático e envio de formulário funcionam como em qualquer lugar. Coloque opções de formulário como name, required e autoComplete em PasswordInput, e atributos do input como id e placeholder em PasswordInputControl.
autoComplete é current-password por padrão, para entrar. Use new-password para cadastro ou troca de senha, para o navegador sugerir uma senha forte, e off para segredos que não são senhas de conta.
PasswordInputStrength pontua a senha de 0 a 4 enquanto ela é digitada. A checklist lê o mesmo valor com usePasswordInputValue(). As regras são do exemplo, já que o componente não impõe política de senha.
Combine com um campo de e-mail com autoComplete="username". Enter na senha envia o formulário, e o envio oculta de novo uma senha visível para o navegador oferecer salvá-la.
defaultVisible começa com o texto visível, para um segredo que as pessoas precisam ler, como uma senha de Wi-Fi.
Um controller de createPasswordInputController() define, mostra, oculta, limpa e foca o campo a partir de qualquer botão. As escritas passam por onValueChange como a digitação.
Passe visible e onVisibleChange. O motivo diferencia um clique no botão de um envio, um reset ou a página sendo ocultada.
invalid marca o campo e coloca aria-invalid no input. Aponte o aria-describedby dele para a sua mensagem. Um campo obrigatório também fica vermelho depois que alguém o deixa vazio.
Um campo somente leitura pode ser focado, mostrado e copiado, mas não alterado, e ainda é enviado.
Tab pula um campo desativado e o botão dele, e o valor não é enviado.
O botão fica à esquerda e o medidor enche a partir da direita. Passe os rótulos no seu idioma.
| Tecla | Ação |
|---|---|
| Tab | Vai do campo para o botão. |
| SpaceEnter | Mostra ou oculta a senha pelo botão e mantém o foco nele. |
| Enter | Envia o formulário a partir do campo. Nunca aciona o botão. |
O botão é um botão de alternância com nome fixo, “Show password”, e aria-pressed diz aos leitores de tela se a senha está visível. Renomeie-o para outros segredos e idiomas. Um clique no botão mantém o cursor onde estava no campo.
PasswordInputCapsLock abre abaixo do campo enquanto o Caps Lock está ligado e o campo tem foco, e avisa por uma região de status. PasswordInputStrength é um medidor cujo texto de valor é o rótulo de força, lido sob demanda em vez de anunciado a cada tecla. Senhas visíveis pulam corretor ortográfico, autocorreção e maiúsculas automáticas.
Nenhuma parte escreve a senha num atributo data-*. A raiz e o controle só carregam booleanos como data-filled, e o medidor carrega a pontuação. Um value controlado faz o React manter um atributo value no DOM, então leia a senha com onValueChange ou usePasswordInputValue().
Cada parte envolve a parte do UI SDK de mesmo nome e aceita todas as suas props, incluindo render e um className que pode ser uma função do estado da parte.
| Prop | Tipo | Padrão |
|---|---|---|
value | string | – |
defaultValue | string | – |
onValueChange | (value: string, details) => void | – |
visible | boolean | – |
defaultVisible | boolean | false |
onVisibleChangedetails.reason é 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 | – |
controllerDe createPasswordInputController(). | PasswordInputController | – |
| Atributo | Descrição |
|---|---|
data-slot="password-input" | Mira o campo de senha no CSS. |
data-visible | Presente enquanto a senha está visível. |
data-capslock | Presente enquanto o Caps Lock está ligado e o campo tem foco. |
data-filled | Presente enquanto o campo tem algum texto. |
data-invalid | Presente quando inválido. |
data-disabled | Presente quando desabilitado. |
data-readonly | Presente quando somente leitura. |
data-required | Presente quando uma senha é obrigatória. |
A caixa em volta do campo e do botão. Ela desenha o anel de foco quando o campo tem foco.
| Prop | Tipo | Padrão |
|---|---|---|
id | string | – |
placeholder | string | – |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descrição |
|---|---|
data-slot="password-input-control" | Mira o input nativo no CSS. |
data-visible | Presente enquanto é um campo de texto. |
| Prop | Tipo | Padrão |
|---|---|---|
aria-label | string | "Show password" |
childrenPor padrão, um olho que se transforma num olho fechado com fade. | ReactNode | (state) => ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descrição |
|---|---|
data-slot="password-input-toggle" | Seleciona o alternador no CSS. |
aria-pressed | true enquanto a senha está visível. |
| Prop | Tipo | Padrão |
|---|---|---|
children | ReactNode | "Caps Lock is on" |
| Atributo | Descrição |
|---|---|
data-slot="password-input-capslock" | Mira o aviso no CSS. |
data-active | Presente enquanto o Caps Lock está ligado. |
| Prop | Tipo | Padrão |
|---|---|---|
getStrengthPontua a senha. O padrão pesa comprimento, variedade de caracteres, repetições e senhas comuns. Use um estimador mais forte como o zxcvbn para políticas reais. | (password: string) => 0 | 1 | 2 | 3 | 4 | scorePassword |
labels | [string, string, string, string, string] | ["", "Weak", "Fair", "Good", "Strong"] |
label | string | "Password strength" |
| Atributo | Descrição |
|---|---|
data-slot="password-input-strength" | Mira o medidor no CSS. |
data-score | A pontuação, de 0 para vazio até 4. |
- CalendarUma grade de datas para seleção única, de intervalo e múltipla, com meses deslizantes, prévias de intervalo e dias com tamanho adequado ao toque.
- CheckboxUma caixa de seleção cujo check é desenhado na tela, com pais indeterminados, grupos e rótulos que compartilham seu hover.
- ComboboxUm select filtrável com chips, grupos e resultados assíncronos, em um popup que se redimensiona conforme você digita.
- Date pickerUm botão que abre um calendário em um popover, ou em um bottom sheet no celular, para datas únicas e intervalos.
- FieldRótulos, descrições e erros ligados ao seu controle, com estados de validação e layouts para formulários.
- InputUm campo de texto com três tamanhos, estados inválido e somente leitura, estilo de validação nativa e fonte de 16px no toque para que os celulares nunca façam zoom.