import { useState, useCallback, useRef } from "react"; const GLYPHS = "▒▓░█#@*+:-/[]{}<>_"; export function useTextScramble(originalText: string) { const [displayText, setDisplayText] = useState(originalText); const timerRef = useRef | null>(null); const iterationRef = useRef(0); const scramble = useCallback(() => { // Clear any existing animation if (timerRef.current) { clearInterval(timerRef.current); } iterationRef.current = 0; timerRef.current = setInterval(() => { const text = originalText; const iteration = iterationRef.current; const display = text .split("") .map((char, index) => { if (index < iteration) return char; return GLYPHS.charAt(Math.floor(Math.random() * GLYPHS.length)); }) .join(""); setDisplayText(display); iterationRef.current += 1; if (iteration > text.length + 2) { if (timerRef.current) { clearInterval(timerRef.current); timerRef.current = null; } setDisplayText(originalText); } }, 26); }, [originalText]); const reset = useCallback(() => { if (timerRef.current) { clearInterval(timerRef.current); timerRef.current = null; } setDisplayText(originalText); }, [originalText]); return { displayText, scramble, reset }; }