const { useState, useEffect, useRef } = React; const useAnimatedNumber = (value, duration = 500) => { const [displayValue, setDisplayValue] = useState(value); const prevValue = useRef(value); useEffect(() => { const startValue = prevValue.current; const endValue = value; const startTime = Date.now(); const animate = () => { const elapsed = Date.now() - startTime; const progress = Math.min(elapsed / duration, 1); const eased = 1 - Math.pow(1 - progress, 3); const current = startValue + (endValue - startValue) * eased; setDisplayValue(Math.round(current)); if (progress < 1) { requestAnimationFrame(animate); } }; animate(); prevValue.current = value; }, [value, duration]); return displayValue; };