crucıble

Tally

A count-up number built from odometer-style digit drums that enter with a soft white-blue cast and settle to white as they seat, with a brief neutral underline flash on settle. Locale and currency aware via Intl.NumberFormat.

motionfree

Installation

CLI

npx shadcn@latest add @crucible/tally

Manual — install dependencies, then copy the source

npm install motion

Props

PropTypeDefaultDescription
valuenumberThe number counted up (or down) to.
startnumber0Starting value each digit drum spins up (or down) from.
decimalsnumber0Decimal places to show.
localestring"en-US"BCP 47 locale passed to Intl.NumberFormat.
formatOptionsIntl.NumberFormatOptionsExtra Intl.NumberFormat options, e.g. { style: "currency", currency: "USD" }.
durationnumber1.4Seconds each digit drum takes to settle.
staggernumber0.06Seconds between each digit's settle, tail to head.
delaynumberSeconds before the count-up starts.
repeatbooleanRe-run every time the number re-enters the viewport (default: once).
Also accepts all props of Omit<HTMLMotionProps<"span">, "children" | "initial" | "whileInView" | "viewport" | "transition">they pass through to the underlying element.

Honors prefers-reduced-motion with a designed static fallback, and passes className through.