import { Observable } from 'rxjs';
interface QdDelayAndHoldOptions<T> {
    appearAfter?: number;
    minVisible?: number;
    triggerState?: (curr: T, prev: T) => boolean;
    holdState?: (state: T) => boolean;
}
/**
 * Delays the emission of a value (like a loading spinner) for a given time and keeps it visible for at least a minimum duration.
 *
 * Time →
 * Status:   IDLE         PENDING                SUCCESS
 *            |-------------|--------------------|---------->
 *                 |
 *                 |--- appearAfter (e.g. 400ms) ---|
 *                               |
 *                               v
 * Feedback:  OFF  ..........(waiting)..........  ON    |<--- minVisible (e.g. 300ms) --->|  OFF
 *
 * - appearAfter:
 *   Number of milliseconds to wait before showing the value after the trigger condition is true.
 *   Example: 400 means the spinner appears 400 ms after PENDING starts.
 *
 * - minVisible:
 *   Minimum milliseconds the value stays visible, even if the state changes sooner.
 *   Example: 300 means the spinner will be shown for at least 300 ms.
 *
 * - triggerState:
 *   Function (curr, prev) that decides when to start the delay.
 *   Default: when the current state is PENDING and the previous state was not ERROR.
 *
 * - holdState:
 *   Function (state) that decides how long to keep the value visible.
 *   Default: as long as the state is PENDING.
 *
 *
 * @example
 * delayedRequestState$ = requestState$.pipe(
 *   delayAndHold(
 *     400, // wait 400 ms before showing
 *     300, // show at least 300 ms
 *     (curr, prev) => curr === QdFormOptionsRequestState.PENDING && prev !== QdFormOptionsRequestState.ERROR,
 *     (state) => state === QdFormOptionsRequestState.PENDING
 *   )
 * );
 *
 * @example with defaults
 * myStream.pipe(delayAndHold());
 */
export declare function qdDelayAndHold<T>(options?: QdDelayAndHoldOptions<T>): (source$: Observable<T>) => Observable<T>;
export {};
//# sourceMappingURL=delay-and-hold.operator.d.ts.map