Mouvement
Les 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.
pnpm dlx shadcn@latest add https://hextaui.com/r/motion.jsonAjoute l’utilitaire et tout ce dont il dépend à votre projet.
Copiez et collez le code suivant dans votre projet.
lib/motion.ts Mettez à jour les chemins d’import selon la configuration de votre projet.
Chaque composant HextaUI se déplace avec les mêmes quelques courbes et durées, si bien que la bibliothèque forme un tout cohérent.
- Ease out pour ce qui répond à une action. Les éléments qui entrent, se déploient ou suivent un clic démarrent vite puis se stabilisent, pour que l'interface semble immédiate.
- Court et interruptible. La plupart des animations durent de 150 à 300ms. Tout ce qui peut être inversé repart de son état actuel au lieu de recommencer.
- La réduction des animations est un second design, pas un interrupteur. Le mouvement devient un changement instantané ou un simple fondu, et l'état reste lisible.
Le thème définit les courbes comme utilitaires d'easing Tailwind, et lib/motion exporte les mêmes valeurs pour la Web Animations API.
| Classe | Description |
|---|---|
ease-out-quint | easeOut en JS. La valeur par défaut du mouvement : popovers, surbrillances, changements de taille. |
ease-out-cubic | Un ease out plus doux pour les changements de couleur et d'ombre au survol et au focus. |
ease-in-out-quart | easeInOut en JS. Pour un mouvement entre deux états de repos que personne n'a déclenché directement. |
ease-spring | easeSpring en JS. Un ressort avec un léger dépassement, écrit en linear(), pour ce qui atterrit, comme le curseur d'un toggle. |
ease-drawer | La courbe de feuille iOS pour les drawers et sheets qui glissent depuis un bord. |
| duration. | Description |
|---|---|
press: 100 | État pressé, à l'enfoncement. |
release: 200 | Le retour vers le haut après un appui. |
hover: 150 | Retour visuel au survol et au focus. |
enter: 200 | Éléments qui apparaissent. |
exit: 150 | Éléments qui disparaissent. Les sorties sont plus rapides que les entrées, pour ne jamais rien retarder. |
morph: 300 | Changements de taille et de position. |
prefersReducedMotion() lit la media query au moment de l'appel. Vérifiez-la au démarrage d'une animation plutôt qu'une seule fois au montage, pour que le changement du réglage système s'applique tout de suite. Elle renvoie true côté serveur.
- Toute modification du DOM à l'intérieur de l'élément déclenche un morphing, qu'il s'agisse de texte, d'enfants ou d'icônes. Les changements de taille venus de l'extérieur, comme un redimensionnement, n'en déclenchent pas : l'élément suit son conteneur sans retard.
- Un changement en plein morphing repart de la taille courante. Pendant l'animation, l'élément porte
data-morphing, que vous pouvez utiliser pour couper le débordement ou suspendre d'autres transitions. - Gardez l'élément à sa taille naturelle : aucune largeur ni hauteur fixe sur l'axe animé. Ajoutez
overflow-hiddenpour que le nouveau contenu ne déborde pas pendant la croissance. - Il renvoie une ref callback. Combinez-la avec d'autres refs grâce à
useMergedRef.
- La surbrillance est dimensionnée et translatée avec des styles en ligne. Donnez-lui
absolute top-0et une transition surtransform,width,heightetopacity. - Le hook observe l'attribut que vous nommez avec un
MutationObserver, et suit donc un état venu de n'importe où, y compris lesdata-pressed,data-checkedouaria-currentde Base UI. data-visibleest défini tant que quelque chose correspond.data-instantest défini quand la surbrillance doit sauter : à la première apparition, au redimensionnement et au défilement, et avec la réduction des animations. Stylez-le avecdata-instant:transition-opacity.- Il mesure en tenant compte de l'échelle de la barre, et reste donc aligné dans un dialog qui est encore en train de zoomer.
| Prop | Type | Par défaut |
|---|---|---|
axisQuelle dimension animer. | "width" | "height" | – |
enabledIndique s'il faut animer. | boolean | true |
durationMillisecondes. | number | 300 |
easingN'importe quel easing CSS. | string | easeOut |
| Prop | Type | Par défaut |
|---|---|---|
barRefLe conteneur positionné. | RefObject<HTMLElement | null> | – |
highlightRefL'élément à déplacer. | RefObject<HTMLElement | null> | – |
selectorCorrespond à l'enfant à mettre en surbrillance. | string | – |
attributeL'attribut dont les changements déplacent la surbrillance. | string | "data-popup-open" |
| Export | Description |
|---|---|
easeOut | cubic-bezier(0.23, 1, 0.32, 1) |
easeInOut | cubic-bezier(0.77, 0, 0.175, 1) |
easeSpring | Un ressort linear(). |
duration | press, release, hover, enter, exit et morph. |
prefersReducedMotion() | Indique si la réduction des animations est activée. true côté serveur. |
- AlertDes messages en ligne pour le statut et les retours, avec une surface neutre, une icône colorée et une fermeture qui se replie en douceur.
- AttachmentDes cartes de fichiers et d’images pour les uploads, avec progression, états, actions, un déclencheur sur toute la carte et des noms qui conservent leur extension.
- BadgeDes libellés de statut avec pastilles colorées, des tags amovibles qui se referment en glissant et des compteurs qui défilent vers leur nouvelle valeur.
- BreadcrumbUn fil d’Ariane vers la page courante qui passe à la ligne sans risque, s’inverse dans les mises en page de droite à gauche et déploie les segments réduits sur place.
- CalendarUne grille de dates pour la sélection simple, de plage et multiple, avec des mois qui défilent, des aperçus de plage et des jours à taille tactile.
- CommandUne liste d’actions recherchable, intégrée ou en palette ⌘K, avec pages, raccourcis et correspondances surlignées.