import { useState, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { Code2, GitCommit, MessageSquare, Users, TrendingUp, TrendingDown, Sparkles, Globe } from "lucide-react"; interface Props { stats: any; } // Animated number component function AnimatedNumber({ value, className, prefix = "", suffix = "" }: { value: number; className?: string; prefix?: string; suffix?: string; }) { const [displayValue, setDisplayValue] = useState(0); useEffect(() => { const duration = 1200; const startTime = Date.now(); const startValue = displayValue; const animate = () => { const now = Date.now(); const progress = Math.min((now - startTime) / duration, 1); const eased = 1 - Math.pow(1 - progress, 3); setDisplayValue(Math.floor(startValue + (value - startValue) * eased)); if (progress < 1) { requestAnimationFrame(animate); } }; requestAnimationFrame(animate); }, [value]); return {prefix}{displayValue.toLocaleString()}{suffix}; } export default function BottomPanel({ stats }: Props) { const [activeSlide, setActiveSlide] = useState(0); const SLIDES = 4; useEffect(() => { const interval = setInterval(() => { setActiveSlide((prev) => (prev + 1) % SLIDES); }, 15000); return () => clearInterval(interval); }, []); const variants = { enter: { opacity: 0, y: 30, filter: "blur(10px)" }, center: { opacity: 1, y: 0, filter: "blur(0px)" }, exit: { opacity: 0, y: -30, filter: "blur(10px)" }, }; return (