import { useEffect, useState } from 'react' /** * A hook that returns a debounced value that only updates after a specified delay * * @param value - The value to debounce * @param delay - The delay in milliseconds * * @returns The debounced value * * @example * ```tsx * const [value, setValue] = useState("") * const debouncedValue = useDebounce(value, 500) * ``` */ export function useDebounce(value: T, delay: number): T { const [debouncedValue, setDebouncedValue] = useState(value) useEffect(() => { const handler = setTimeout(() => { setDebouncedValue(value) }, delay) return () => { clearTimeout(handler) } }, [value, delay]) return debouncedValue }