import { useState, useEffect, useRef, useCallback } from 'react'; export function useDebounce(value: T, delay: number = 300): T { const [debouncedValue, setDebouncedValue] = useState(value); useEffect(() => { const timer = setTimeout(() => { setDebouncedValue(value); }, delay); return () => { clearTimeout(timer); }; }, [value, delay]); return debouncedValue; } export function useDebounceCallback any>( callback: T, delay: number = 300 ): T { const callbackRef = useRef(callback); const timeoutRef = useRef(); useEffect(() => { callbackRef.current = callback; }, [callback]); const debouncedCallback = useCallback((...args: Parameters) => { if (timeoutRef.current) { clearTimeout(timeoutRef.current); } timeoutRef.current = setTimeout(() => { callbackRef.current(...args); }, delay); }, [delay]) as T; return debouncedCallback; }