'use client' import { useEffect, useState, useRef } from 'react' interface AnimatedCounterProps { target: number duration?: number prefix?: string suffix?: string className?: string decimals?: number } export default function AnimatedCounter({ target, duration = 2000, prefix = '', suffix = '', className = '', decimals = 0, }: AnimatedCounterProps) { const [current, setCurrent] = useState(0) const startTime = useRef(null) const frameRef = useRef(0) useEffect(() => { startTime.current = null function animate(timestamp: number) { if (!startTime.current) startTime.current = timestamp const elapsed = timestamp - startTime.current const progress = Math.min(elapsed / duration, 1) const eased = 1 - Math.pow(1 - progress, 3) setCurrent(eased * target) if (progress < 1) { frameRef.current = requestAnimationFrame(animate) } } frameRef.current = requestAnimationFrame(animate) return () => cancelAnimationFrame(frameRef.current) }, [target, duration]) const formatted = decimals > 0 ? current.toFixed(decimals) : Math.round(current).toLocaleString('de-DE') return ( {prefix}{formatted}{suffix} ) }