Number flow
Animierte Zahlen, bei denen sich nur die geänderten Ziffern drehen, mit beliebigem Intl-Format und Locale.
pnpm dlx shadcn@latest add https://hextaui.com/r/number-flow.jsonFügt die Komponente, die HextaUI-Theme-Tokens und alle HextaUI-Komponenten hinzu, von denen sie abhängt.
Füge die Theme-Tokens zu deinem globalen CSS hinzu, falls du das noch nicht getan hast.
Installiere die Abhängigkeiten.
pnpm add cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/number-flow.tsx lib/motion.ts Passe die Importpfade an dein Projekt-Setup an.
Nur geänderte Ziffern bewegen sich
Jede Ziffer ist eine eigene Spalte. Von 22 auf 23 dreht sich nur die Einerstelle; die Zehnerstelle bleibt stehen. Ziffern, die erscheinen oder verschwinden, wie die dritte Ziffer bei 99 → 100, gleiten mit ihrer Breite ein oder aus.
Trend
trend legt fest, in welche Richtung sich Ziffern drehen. auto dreht aufwärts, wenn der Wert wächst, und abwärts, wenn er sinkt, up und down erzwingen eine Richtung, und shortest nimmt den kürzesten Weg um das Rad.
Formate
format und locales nehmen beliebige Intl.NumberFormat-Optionen an. Währungssymbole, Trennzeichen und Vorzeichen bleiben stehen, während sich die Ziffern bewegen, und nicht-lateinische Ziffern drehen sich in ihrer eigenen Schrift.
Timing
Passe die Bewegung mit duration und easing an oder schalte sie mit animated={false} ab. Einstellungen für reduzierte Bewegung schalten sie automatisch ab.
Unterbrechungen und Events
Ein neuer Wert mitten im Drehen läuft von der Stelle weiter, an der jede Ziffer gerade ist, sodass schnelle Updates nie springen. onAnimationsStart und onAnimationsFinish feuern einmal pro Ziffernschub.
Inline und in Badges
Es rendert ein Inline-<span> auf der Textgrundlinie, und tabellarische Ziffern halten seine Breite stabil, während sich Ziffern drehen. BadgeCount nutzt es für Zähler, die an einem Maximum gedeckelt sind.
Rechts nach links
Zahlen werden immer von links nach rechts gelesen, auch in rechts-nach-links-Layouts, wie Browser sie darstellen.
- Screenreader lesen die echte formatierte Zahl vor. Die drehenden Spalten sind für assistive Technik ausgeblendet, und Zeichen, die gerade ausblenden, sind während der Animation versteckt.
- Es ist keine Live-Region. Umschließe es mit einem Element mit
aria-live="polite", wenn Änderungen angesagt werden sollen. - Bei aktivierter reduzierter Bewegung werden Werte sofort ohne Drehen aktualisiert.
Akzeptiert alle <span>-Attribute außer children und prefix.
| Prop | Typ | Standard |
|---|---|---|
valueErforderlich. | number | – |
locales | Intl.LocalesArgument | "en-US" |
formatWird an Intl.NumberFormat übergeben. | Intl.NumberFormatOptions | – |
prefixStatischer Text vor der Zahl. | string | – |
suffixStatischer Text nach der Zahl. | string | – |
trend | "auto" | "up" | "down" | "shortest" | "auto" |
durationDauer des Drehens in Millisekunden. | number | 600 |
easingBeliebiger CSS-Easing-Wert. | string | easeSpring |
animated | boolean | true |
onAnimationsStartWird aufgerufen, wenn ein Schub von Ziffern sich zu bewegen beginnt. | () => void | – |
onAnimationsFinishWird aufgerufen, wenn der letzte Schub zur Ruhe kommt. Entfällt, wenn ein neuerer Wert ihn unterbricht. | () => void | – |
| Attribut | Beschreibung |
|---|---|
data-slot="number-flow" | Das Root-span. |
data-slot="number-flow-digit" | Jede Ziffernzelle. |
data-slot="number-flow-symbol" | Trennzeichen, Vorzeichen, Symbole, Präfix und Suffix. |
data-slot="number-flow-column" | Die drehende Spalte in einer Ziffernzelle. |
data-digit | Die Ziffer, auf der eine Spalte gerade ruht, 0–9. |
- MotionDie Easing-Kurven, Dauern und der Reduced-Motion-Check, mit denen jede Komponente animiert, plus Hooks für Größen-Morphs und gleitende Hervorhebungen.
- AvatarNutzerfotos mit Initialen als Fallback, Statusbadges und gestapelte Gruppen, die zu einer Zahl einklappen.
- BadgeStatuslabels mit farbigen Punkten, entfernbare Tags, die zugleiten, und Zähler, die zu ihrem neuen Wert rollen.
- CardEine Fläche zum Gruppieren von Inhalten, mit drei Varianten, randlosen Medien, konzentrischen Radien und Links über die ganze Karte.
- ChartRecharts-Diagramme mit Theme-Farben, einem Tooltip und einer Legende, die Labels aus einer Konfiguration lesen, und Tastaturnavigation mit sichtbarem Fokusring.
- Data tableEine Tabelle für echte Daten, mit Sortierung, Suche, Zeilenauswahl, fixierten Spalten, Sticky Header und Paginierung.
In Blocks verwendet
Blocks, die auf Number flow aufbauen.
- ArtifactDas Panel neben einem KI-Chat, das zeigt, was das Modell erzeugt hat. Webseiten, SVGs, Dokumente und Code streamen live ein und wechseln dann zu einer Sandbox-Vorschau, mit Versionen zum Vergleichen und Wiederherstellen, einem anpassbaren Split und einem Bottom Sheet auf Smartphones.
- Diff ReviewPrüfe die Änderungen eines Agenten über mehrere Dateien, bevor sie übernommen werden. Ein Dateibaum mit Zählern, jede Änderung, jede Datei oder alles annehmen oder ablehnen, Kommentare zu jeder Zeile oder jedem Bereich, die an den Agenten zurückgehen, Unified- und Split-Ansicht, Hervorhebung auf Wortebene, Rückgängig, streamende Änderungen und eine Zusammenfassung „4 Dateien bearbeitet“ für den Chat.