"use client"; import { HTMLAttributes, useEffect, useRef, memo } from "react"; import { cn } from "@/utils/cn"; import { setIntervalOnVisible } from "@/utils/set-timeout-on-visible"; import data from "./explosion-data.json"; function AsciiExplosion(attrs: HTMLAttributes) { const ref = useRef(null); const wrapperRef = useRef(null); useEffect(() => { let index = -30; const interval = setIntervalOnVisible({ element: wrapperRef.current, callback: () => { index++; if (index >= data.length) index = -40; if (index < 0) return; if (ref.current) { ref.current.innerHTML = data[index]; } }, interval: 40, }); return () => interval?.(); }, []); return (
); } // Memoized version to prevent re-renders on parent state changes const MemoizedAsciiExplosion = memo(AsciiExplosion); // Named export export { AsciiExplosion }; // Default export for backward compatibility export default MemoizedAsciiExplosion;