import { useEffect, useState, useCallback, useRef } from 'react'; export function useDebounceValue(value: T, delay: number): T { const [debouncedValue, setDebouncedValue] = useState(value); useEffect(() => { const timer = setTimeout(() => { setDebouncedValue(value); }, delay); return () => { clearTimeout(timer); }; }, [value, delay]); return debouncedValue; } export function useDebounceCallback( callback: (...args: Args) => R, delay: number ): (...args: Args) => void { const timeoutRef = useRef(undefined); return useCallback( (...args: Args) => { if (timeoutRef.current) { clearTimeout(timeoutRef.current); } timeoutRef.current = setTimeout(() => { callback(...args); }, delay); }, [callback, delay] ); }