"use client"; import { useEffect, useRef, useState } from "react"; import ScrollReveal from "./ScrollReveal"; const stats = [ { value: 10, suffix: "+", label: "Years in Broadcast", description: "Production & engineering" }, { value: 8, suffix: "", label: "Major Facilities", description: "Designed & integrated" }, { value: 5900, suffix: "+", label: "End Users Served", description: "Global content delivery" }, { value: 3, suffix: "", label: "Industry Verticals", description: "Sports, corporate, defense" }, ]; function AnimatedNumber({ value, suffix }: { value: number; suffix: string }) { const [count, setCount] = useState(0); const ref = useRef(null); const hasAnimated = useRef(false); useEffect(() => { const observer = new IntersectionObserver( ([entry]) => { if (entry.isIntersecting && !hasAnimated.current) { hasAnimated.current = true; const duration = 2000; const steps = 60; const increment = value / steps; let current = 0; const timer = setInterval(() => { current += increment; if (current >= value) { setCount(value); clearInterval(timer); } else { setCount(Math.floor(current)); } }, duration / steps); } }, { threshold: 0.3 } ); if (ref.current) observer.observe(ref.current); return () => observer.disconnect(); }, [value]); return ( {count >= 1000 && value >= 1000 ? `${(count / 1000).toFixed(1).replace(/\.0$/, "")}k` : count} {suffix} ); } export default function Stats() { return (
{stats.map((stat, i) => (

{stat.label}

{stat.description}

))}
); }