Number Ticker
Animated number counter triggered by scroll visibility via IntersectionObserver.
pnpm dlx @glinui/cli@latest add number-ticker- Active workspaces
- 12480
- Uptime, last 90 days
- 99.98%
- Median build time (s)
- 42
Installation$
pnpm dlx @glinui/cli@latest add number-tickerPrefer the package?
Usage$
Renders a number that counts up from from to value when scrolled into view. Uses requestAnimationFrame for smooth 60fps animation.
Examples$
With Decimals$
import { NumberTicker } from "@glinui/ui"
export function NumberTickerDecimalDemo() {return ( <span className="text-4xl font-bold"> <NumberTicker value={99.99} decimals={2} /> </span>)}Currency Format$
import { NumberTicker } from "@glinui/ui"
export function NumberTickerCurrencyDemo() {return ( <span className="text-4xl font-bold"> <NumberTicker value={49999} formatOptions={{ style: "currency", currency: "USD", maximumFractionDigits: 0 }} /> </span>)}Slow Duration$
import { NumberTicker } from "@glinui/ui"
export function NumberTickerSlowDemo() {return ( <span className="text-4xl font-bold"> <NumberTicker value={500} duration={3} /> </span>)}Engines$
Number Ticker drives its main animation through the pluggable motion engine. Pass engine="css" | "motion" | "gsap", wrap a subtree in MotionEngineProvider, or set data-glin-engine on <html>. The css engine is built in and dependency free; motion and gsap are opt-in through @glinui/motion/register/*. Motion level none renders the final state and subtle is opacity only.
Engine comparison$
CSS
12480Motion
12480GSAP
12480// Same component, three engines. motion and gsap are opt-in:// import "@glinui/motion/register/motion"// import "@glinui/motion/register/gsap"<NumberTicker engine="css" value={12480} />
<NumberTicker engine="motion" value={12480} />
<NumberTicker engine="gsap" value={12480} />Accessibility$
- Renders as a
<span>withtabular-numsfor stable width during counting. - Add
aria-labelto the parent if the number has semantic meaning beyond decoration.
Reduced Motion$
When prefers-reduced-motion is active, the final value is displayed immediately without animation.
API Reference$
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
decimals | number | No | 0 | Auto-generated from TypeScript source. |
delay | number | No | 0 | Delay in seconds. |
duration | number | No | 1.5 | Duration in seconds. |
engine | EngineName | No | - | Engine override: `css` (default), `motion`, `gsap` or a registered custom engine. |
formatOptions | Intl.NumberFormatOptions | No | - | Auto-generated from TypeScript source. |
from | number | No | 0 | Auto-generated from TypeScript source. |
motion | MotionLevel | No | - | Motion override. `none` renders the static final state, `subtle` is opacity only. |
value | number | Yes | - | Auto-generated from TypeScript source. |
Source$
import { NumberTicker } from "@glinui/ui"Generated API Snapshot
Beta
Generated API Snapshot
BetaAuto-extracted from TypeScript source in packages/ui/src/components/number-ticker.tsx. This section is in beta and may lag behind hand-curated docs. Regenerate with pnpm --filter @glinui/docs api:generate.
Generated: 2026-10-08T01:41:21.546Z · Full index: /docs/api-metadata
Primary Props Type
NumberTickerProps
NumberTickerProps
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
decimals | number | No | 0 | - |
delay | number | No | 0 | Delay in seconds. |
duration | number | No | 1.5 | Duration in seconds. |
engine | EngineName | No | - | Engine override: `css` (default), `motion`, `gsap` or a registered custom engine. |
formatOptions | Intl.NumberFormatOptions | No | - | - |
from | number | No | 0 | - |
motion | MotionLevel | No | - | Motion override. `none` renders the static final state, `subtle` is opacity only. |
value | number | Yes | - | - |