"use client"; import { useInView, useMotionValue, useSpring } from "framer-motion"; import { useEffect, useRef } from "react"; export default function NumTicker({ value, direction = "up", delay = 0, className, }: { value: number; direction?: "up" | "down"; className?: string; delay?: number; }) { const ref = useRef(null); const motionValue = useMotionValue(direction === "down" ? value : 0); const springValue = useSpring(motionValue, { damping: 60, stiffness: 100, }); const isInView = useInView(ref, { once: true, margin: "0px" }); useEffect(() => { isInView && setTimeout(() => { motionValue.set(direction === "down" ? value : 0); }, delay * 1000); }, [motionValue, isInView, delay, value, direction]); useEffect( () => springValue.on("change", (latest) => { if (ref.current) { ref.current.textContent = Intl.NumberFormat("en-US").format( latest.toFixed(0) ); } }), [springValue] ); return ( ); }