'use client'; import { AnimatePresence, motion } from 'framer-motion'; import { useEffect, useState } from 'react'; const brandConfig = { Mixpanel: '#7A59FF', 'Google Analytics': '#E37400', Amplitude: '#00CF98', } as const; const words = Object.keys(brandConfig); function useWordCycle(words: string[], interval: number, mounted: boolean) { const [index, setIndex] = useState(0); const [isInitial, setIsInitial] = useState(true); useEffect(() => { if (!mounted) { return; } if (isInitial) { setIndex(Math.floor(Math.random() * words.length)); setIsInitial(false); return; } const timer = setInterval(() => { setIndex((current) => (current + 1) % words.length); }, interval); return () => clearInterval(timer); }, [words, interval, isInitial, mounted]); return words[index]; } export function Competition() { const [mounted, setMounted] = useState(false); const word = useWordCycle(words, 2100, mounted); const color = brandConfig[word as keyof typeof brandConfig]; useEffect(() => { setMounted(true); }, []); if (!mounted) { return ( {word} ); } return ( {word?.split('').map((char, index) => ( {char} ))} ); }