import { StatefulPromise } from "./StatefulPromise.js";
type Callback = (...args: any[]) => unknown;
type FunctionOrBoolean = (() => unknown) | boolean;
type Options = {
    leading?: FunctionOrBoolean;
    maxWait?: number;
    trailing?: FunctionOrBoolean;
};
type DebouncedFunction<C extends Callback> = {
    (this: ThisParameterType<C>, ...args: Parameters<C>): Promise<Awaited<ReturnType<C>>>;
};
export type Debounced<C extends Callback, R extends ReturnType<C>> = DebouncedFunction<C> & {
    callback: C;
    promise: StatefulPromise<R>;
    resolve: (value: R) => void;
    reject: (reason?: unknown) => void;
    run(): Promise<R>;
    clear(shouldRun?: boolean): Promise<void>;
};
export declare function debounce<C extends Callback, R extends ReturnType<C>>(callback: C, limit?: number, options?: Options): Debounced<C, R>;
export declare namespace debounce {
    var noop: Debounced<() => void, void>;
}
export declare function throttle(callback: Callback, limit?: number, options?: Options): Debounced<Callback, unknown>;
export {};
//# sourceMappingURL=debounce.d.ts.map