import type { JsonSerializable } from '../shared/types/shared.ts';
/**
 * Returns a debounced version of `value` that only updates after the value
 * has stopped changing for `delayMs` milliseconds (default: 300ms).
 *
 * Useful for delaying expensive operations (e.g. search requests) until the
 * user has finished typing.
 *
 * Object and array values are compared by deep equality (via `JSON.stringify`),
 * so values must be JSON-serializable. Functions, Symbols, BigInts, and
 * circular references are not supported.
 *
 * @example
 * ```ts
 * const [searchText, setSearchText] = useState('');
 * const debouncedQuery = useDebounce(searchText, 200);
 * ```
 */
export declare function useDebounce<T extends JsonSerializable>(value: T, delayMs?: number): T;
