useInvalidShake
Fait vibrer un contrôle de formulaire lorsqu’une tentative d’envoi le trouve invalide, et jamais pendant que quelqu’un tape encore.
pnpm dlx shadcn@latest add https://hextaui.com/r/use-invalid-shake.jsonAjoute le hook et tout ce dont il dépend à votre projet.
Copiez et collez le code suivant dans votre projet.
hooks/use-invalid-shake.ts Mettez à jour les chemins d’import selon la configuration de votre projet.
Le hook ne fait que définir un attribut data-shake. Le mouvement vient du animate-button-shake du thème, que vous attachez avec data-shake:motion-safe:animate-button-shake. Input, Textarea, Native select et Input group de HextaUI incluent déjà cette classe et appellent le hook. Utilisez-le directement pour vos propres contrôles.
Un tremblement répond à une question : pourquoi mon envoi n'a-t-il pas fonctionné ? Le hook ne fait donc trembler que juste après une tentative d'envoi, et jamais pendant que l'on remplit encore le formulaire.
| Événement | Description |
|---|---|
Submit attempt | Un clic sur un bouton d'envoi, un appui sur Enter dans un champ du formulaire, ou l'événement submit du formulaire. |
Invalid within 600ms | Le contrôle déclenche invalid, ou a aria-invalid="true", data-invalid ou :user-invalid. Cela couvre la validation native, les champs Base UI et les erreurs serveur définies juste après l'envoi. |
Shake | data-shake est défini pendant 400ms. Il tremble une fois par tentative, quel que soit le nombre de ces signaux reçus. |
- Dans un
InputGroup, c'est tout le groupe qui tremble, pas seulement le contrôle interne. - Avec la réduction des animations, rien n'est défini. Dans tous les cas, associez le tremblement à un message d'erreur visible, car le tremblement est un signal, pas le message.
- Le hook exige que le contrôle appartienne à un
<form>. Sans cela, il ne fait rien.
- Désactivez-le par contrôle avec l'argument
enabled, ou avecshake={false}sur les champs de HextaUI. - Relancer l'attribut relance l'animation : une seconde tentative échouée fait donc trembler de nouveau même si la première est encore en cours.
- La validation native donne le focus au premier contrôle invalide à l'envoi. Le tremblement n'ajoute que du mouvement par-dessus et ne déplace jamais le focus.
| Prop | Type | Par défaut |
|---|---|---|
refLe contrôle de formulaire à surveiller. | RefObject<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | null> | – |
enabledIndique s'il faut trembler. | boolean | true |
| Attribut | Description |
|---|---|
data-shake | Présent pendant 400ms après une tentative d'envoi échouée, sur le contrôle ou son InputGroup. |
Input, Textarea, NativeSelect et InputGroup.
- MotionLes courbes d’easing, les durées et la vérification de réduction des animations utilisées par chaque composant, ainsi que des hooks pour les morphs de taille et les surlignages glissants.
- 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.
- Input groupUn champ de saisie avec icônes, texte, boutons ou indice clavier attachés, partageant une même bordure et un même anneau de focus.
- Native selectLe select natif du navigateur, stylé pour s’accorder à Input, avec un placeholder discret, la prise en charge de Field et le sélecteur du système sur chaque appareil.
- TextareaUn texte multiligne qui grandit en douceur selon ce que vous écrivez, entre un nombre minimal et maximal de lignes, avec compteurs, validation et raccourci d’envoi.