/**
 * useDebounce Hook
 *
 * Debounces a callback function, delaying execution until after
 * a specified time has passed since the last call. Each new call
 * resets the timer.
 */
/**
 * Options for the useDebounce hook
 */
export interface UseDebounceOptions {
    /** Maximum time to wait before forcing execution (default: none) */
    maxWait?: number;
    /** Whether to call on leading edge instead of trailing (default: false) */
    leading?: boolean;
}
/**
 * Return type for useDebounce hook
 */
export interface UseDebounceResult<T extends (...args: unknown[]) => unknown> {
    /** The debounced function */
    debouncedFn: (...args: Parameters<T>) => void;
    /** Whether there's a pending debounced call */
    isPending: boolean;
    /** Cancel any pending call */
    cancel: () => void;
    /** Immediately execute any pending call */
    flush: () => void;
}
/**
 * Debounces a callback function to delay execution
 *
 * @param callback - The function to debounce
 * @param delay - Time to wait after last call before executing (ms)
 * @param options - Debounce options
 * @returns Object with debounced function and control methods
 *
 * @example
 * const { debouncedFn, isPending } = useDebounce(search, 300);
 *
 * // Each call resets the timer
 * debouncedFn('a');   // Starts 300ms timer
 * debouncedFn('ab');  // Resets timer
 * debouncedFn('abc'); // Resets timer
 * // After 300ms of no calls, search('abc') is called
 */
export declare function useDebounce<T extends (...args: unknown[]) => unknown>(callback: T, delay: number, options?: UseDebounceOptions): UseDebounceResult<T>;
/**
 * Simple debounce hook that just returns the debounced function
 *
 * @param callback - The function to debounce
 * @param delay - Time to wait after last call before executing (ms)
 * @returns The debounced function
 *
 * @example
 * const debouncedSearch = useDebounceFn(search, 300);
 * debouncedSearch(query);
 */
export declare function useDebounceFn<T extends (...args: unknown[]) => unknown>(callback: T, delay: number): (...args: Parameters<T>) => void;
/**
 * Debounce a value (re-renders when debounced value changes)
 *
 * @param value - The value to debounce
 * @param delay - Debounce delay in milliseconds
 * @returns The debounced value
 *
 * @example
 * const [searchTerm, setSearchTerm] = useState('');
 * const debouncedSearch = useDebouncedValue(searchTerm, 300);
 *
 * useEffect(() => {
 *   // Only runs 300ms after user stops typing
 *   performSearch(debouncedSearch);
 * }, [debouncedSearch]);
 */
export declare function useDebouncedValue<T>(value: T, delay: number): T;
export default useDebounce;
//# sourceMappingURL=useDebounce.d.ts.map