Number flow
Des nombres animés où seuls les chiffres modifiés tournent, avec n’importe quel format Intl et n’importe quelle locale.
pnpm dlx shadcn@latest add https://hextaui.com/r/number-flow.jsonAjoute le composant, les tokens de thème HextaUI et les composants HextaUI dont il dépend.
Ajoutez les tokens de thème à votre CSS global, si ce n’est pas déjà fait.
Installez les dépendances.
pnpm add cnCopiez et collez le code suivant dans votre projet.
components/ui/number-flow.tsx lib/motion.ts Mettez à jour les chemins d’import selon la configuration de votre projet.
Seuls les chiffres modifiés bougent
Chaque chiffre est sa propre colonne. Passer de 22 à 23 ne fait tourner que les unités ; les dizaines restent immobiles. Les chiffres qui apparaissent ou disparaissent, comme le troisième chiffre de 99 → 100, glissent en largeur pour entrer ou sortir.
Tendance
trend définit le sens de rotation des chiffres. auto tourne vers le haut quand la valeur augmente et vers le bas quand elle diminue, up et down forcent un sens, et shortest prend le chemin le plus court sur la roue.
Formats
format et locales acceptent toutes les options de Intl.NumberFormat. Les symboles monétaires, séparateurs et signes restent immobiles pendant que les chiffres bougent, et les chiffres non latins tournent dans leur propre écriture.
Durée
Réglez le mouvement avec duration et easing, ou désactivez-le avec animated={false}. Les réglages de réduction des animations le désactivent automatiquement.
Interruptions et événements
Une nouvelle valeur en pleine rotation repart de la position de chaque chiffre, si bien que des mises à jour rapides ne sautent jamais. onAnimationsStart et onAnimationsFinish se déclenchent une fois par lot de chiffres.
En ligne et dans les badges
Il rend un <span> en ligne posé sur la ligne de base du texte, et les chiffres tabulaires gardent sa largeur stable pendant la rotation. BadgeCount l'utilise pour des compteurs plafonnés à un maximum.
De droite à gauche
Les nombres se lisent toujours de gauche à droite, même dans une mise en page de droite à gauche, comme les navigateurs les affichent.
- Les lecteurs d'écran lisent le vrai nombre formaté. Les colonnes qui tournent sont masquées aux technologies d'assistance, et les caractères qui partent sont masqués pendant leur animation de sortie.
- Ce n'est pas une live region. Entourez-le d'un élément avec
aria-live="polite"quand les changements doivent être annoncés. - Avec la réduction des animations, les valeurs se mettent à jour instantanément, sans rotation.
Accepte tous les attributs de <span> sauf children et prefix.
| Prop | Type | Par défaut |
|---|---|---|
valueRequis. | number | – |
locales | Intl.LocalesArgument | "en-US" |
formatTransmis à Intl.NumberFormat. | Intl.NumberFormatOptions | – |
prefixTexte statique avant le nombre. | string | – |
suffixTexte statique après le nombre. | string | – |
trend | "auto" | "up" | "down" | "shortest" | "auto" |
durationDurée de rotation en millisecondes. | number | 600 |
easingN'importe quelle valeur d'easing CSS. | string | easeSpring |
animated | boolean | true |
onAnimationsStartAppelé quand un lot de chiffres commence à bouger. | () => void | – |
onAnimationsFinishAppelé quand le dernier lot se stabilise. Ignoré si une valeur plus récente l'interrompt. | () => void | – |
| Attribut | Description |
|---|---|
data-slot="number-flow" | Le span racine. |
data-slot="number-flow-digit" | Chaque cellule de chiffre. |
data-slot="number-flow-symbol" | Séparateurs, signes, symboles, préfixe et suffixe. |
data-slot="number-flow-column" | La colonne qui tourne dans une cellule de chiffre. |
data-digit | Le chiffre sur lequel une colonne repose, de 0 à 9. |
- 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.
- AvatarDes photos d’utilisateurs avec initiales en repli, badges de statut et groupes empilés qui se réduisent en compteur.
- 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.
- CardUne surface pour regrouper du contenu, avec trois variantes, médias bord à bord, rayons concentriques et liens sur toute la carte.
- ChartDes graphiques Recharts aux couleurs du thème, avec une infobulle et une légende qui lisent leurs libellés depuis une seule config, et une navigation au clavier avec anneau de focus visible.
- Data tableUn tableau pour de vraies données, avec tri, recherche, sélection de lignes, colonnes épinglées, en-tête fixe et pagination.
Utilisé dans les blocks
Des blocks qui s’appuient sur Number flow.
- ArtifactLe panneau à côté d’un chat IA qui montre ce que le modèle a produit. Pages web, SVG, documents et code arrivent en direct, puis passent à un aperçu isolé en sandbox, avec des versions à comparer et à restaurer, une séparation redimensionnable et une bottom sheet sur mobile.
- Diff ReviewRelisez les modifications d’un agent dans plusieurs fichiers avant qu’elles ne soient appliquées. Une arborescence de fichiers avec compteurs, acceptation ou rejet de chaque changement, de chaque fichier ou de tout, des commentaires sur n’importe quelle ligne ou plage renvoyés à l’agent, des vues unifiée et côte à côte, des surlignages au niveau du mot, l’annulation, des modifications en streaming et un résumé « 4 fichiers modifiés » pour le chat.