import { Session } from "../Types";
export interface LoadingReasonsCollection {
    addLoadingReason(reason: string): void;
    removeLoadingReason(reason: string): void;
}
export declare type SessionWithLoadingReasons<T extends Session = Session> = T & {
    withLoadingReason<T extends any[], R>(execute: (...args: T) => R, generateReason?: (...args: T) => string): (...args: T) => R;
};
export declare const createSessionWithLoadingReasons: <T extends Session<import("../Types").ApplicationStateValue, import("../Types").NotificationPayloads<import("../Types").ApplicationStateValue>>>(session: T, reasonCollection: LoadingReasonsCollection) => SessionWithLoadingReasons<T>;
