Setting the file. One moment.
Skill 32 · Remotion To Hyperframes
Subchapter 32.56
Scripts
Gitkeepscriptsassets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx
TypeScript23 lines740 B
import { interpolate, useCurrentFrame } from "remotion";
interface Props {
from: number;
to: number;
durationInFrames: number;
}
/**
* Counts from `from` to `to` over `durationInFrames` with easeOut.
* Driven entirely by useCurrentFrame — deterministic.
*/
export const AnimatedNumber: React.FC<Props> = ({ from, to, durationInFrames }) => {
const frame = useCurrentFrame();
const t = interpolate(frame, [0, durationInFrames], [0, 1], {
extrapolateLeft: "clamp",
extrapolateRight: "clamp",
});
// Ease-out cubic — fast start, slow finish, matches the ramp on data dashboards.
const eased = 1 - (1 - t) ** 3;
const value = Math.round(from + (to - from) * eased);
return <>{value.toLocaleString()}</>;
};