useInvalidShake
Sacode um controle de formulário quando uma tentativa de envio o encontra inválido, e nunca enquanto alguém ainda está digitando.
pnpm dlx shadcn@latest add https://hextaui.com/r/use-invalid-shake.jsonAdiciona o hook e tudo de que ele depende ao seu projeto.
Copie e cole o código a seguir no seu projeto.
hooks/use-invalid-shake.ts Atualize os caminhos de importação para corresponder à configuração do seu projeto.
O hook apenas define um atributo data-shake. O movimento vem do animate-button-shake do tema, que você anexa com data-shake:motion-safe:animate-button-shake. Input, Textarea, Native select e Input group do HextaUI já incluem essa classe e chamam o hook. Use-o diretamente nos seus próprios controles.
Um tremor responde a uma pergunta: por que meu envio não funcionou? Por isso o hook só treme logo depois que alguém tenta enviar, e nunca enquanto a pessoa ainda preenche o formulário.
| Evento | Descrição |
|---|---|
Submit attempt | Clicar em um botão de envio, pressionar Enter em um input do formulário, ou o evento submit do formulário. |
Invalid within 600ms | O controle dispara invalid, ou tem aria-invalid="true", data-invalid ou :user-invalid. Isso cobre a validação nativa, os fields do Base UI e erros do servidor definidos logo após o envio. |
Shake | data-shake é definido por 400ms. Treme uma vez por tentativa, não importa quantos desses sinais cheguem. |
- Dentro de um
InputGroup, o grupo inteiro treme, não apenas o controle interno. - Com movimento reduzido, nada é definido. Combine o tremor com uma mensagem de erro visível de qualquer forma, já que o tremor é uma pista, não a mensagem.
- O hook precisa que o controle pertença a um
<form>. Sem um, ele não faz nada.
- Desative por controle com o argumento
enabled, ou comshake={false}nos inputs do HextaUI. - Reiniciar o atributo reinicia a animação, então uma segunda tentativa falha treme de novo mesmo que a primeira ainda esteja rodando.
- A validação nativa foca o primeiro controle inválido no envio. O tremor apenas acrescenta movimento por cima e nunca move o foco.
| Prop | Tipo | Padrão |
|---|---|---|
refO controle de formulário a observar. | RefObject<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | null> | – |
enabledSe deve tremer. | boolean | true |
| Atributo | Descrição |
|---|---|
data-shake | Presente por 400ms depois de uma tentativa de envio falha, no controle ou em seu InputGroup. |
Input, Textarea, NativeSelect e InputGroup.
- MotionAs curvas de easing, as durações e a verificação de movimento reduzido com que todo componente anima, além de hooks para transformações de tamanho e destaques deslizantes.
- 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.
- Input groupUm input com ícones, texto, botões ou uma dica de teclado anexados, compartilhando uma única borda e um único anel de foco.
- Native selectO select do próprio navegador, estilizado para combinar com o Input, com um placeholder discreto, suporte a Field e o seletor do sistema operacional em todos os dispositivos.
- TextareaTexto de várias linhas que cresce suavemente conforme o que você escreve, entre um número mínimo e máximo de linhas, com contadores, validação e um atalho de envio.