import { StateStore } from 'stream-chat';
export type GetDialogParams = {
    id: DialogId;
};
export type GetOrCreateDialogParams = GetDialogParams & {
    /**
     * Optional per-dialog override.
     * If undefined, manager-level `closeOnClickOutside` is used.
     */
    closeOnClickOutside?: boolean;
};
type DialogId = string;
export type Dialog = {
    close: () => void;
    closeOnClickOutside?: boolean;
    id: DialogId;
    isOpen: boolean | undefined;
    open: (zIndex?: number) => void;
    removalTimeout: NodeJS.Timeout | undefined;
    remove: () => void;
    toggle: (closeAll?: boolean) => void;
};
export type DialogManagerOptions = {
    /** Enables closing all dialogs in this manager when clicking overlay/outside area. */
    closeOnClickOutside?: boolean;
    id?: string;
};
type Dialogs = Record<DialogId, Dialog>;
export type DialogManagerState = {
    dialogsById: Dialogs;
    openedDialogIds: DialogId[];
};
/**
 * Keeps a map of Dialog objects.
 * Dialog can be controlled via `Dialog` object retrieved using `useDialog()` hook.
 * The hook returns an object with the following API:
 *
 * - `dialog.open()` - opens the dialog
 * - `dialog.close()` - closes the dialog
 * - `dialog.toggle()` - toggles the dialog open state. Accepts boolean argument closeAll. If enabled closes any other dialog that would be open.
 * - `dialog.remove()` - removes the dialog object reference from the state (primarily for cleanup purposes)
 */
export declare class DialogManager {
    /** Manager-level outside click policy used by DialogPortal dismiss handlers. */
    closeOnClickOutside: boolean;
    id: string;
    state: StateStore<DialogManagerState>;
    constructor({ closeOnClickOutside, id }?: DialogManagerOptions);
    get openDialogCount(): number;
    get(id: DialogId): Dialog | undefined;
    getOrCreate({ closeOnClickOutside, id }: GetOrCreateDialogParams): Dialog;
    open(params: GetOrCreateDialogParams, closeRest?: boolean): void;
    close(id: DialogId): void;
    closeAll(): void;
    toggle(params: GetOrCreateDialogParams, closeAll?: boolean): void;
    remove: (id: DialogId) => void;
    /**
     * Marks the dialog state as unused. If the dialog id is referenced again quickly,
     * the state will not be removed. Otherwise, the state will be removed after
     * a short timeout.
     */
    markForRemoval(id: DialogId): void;
    cancelPendingRemoval(id: DialogId): void;
}
export {};
//# sourceMappingURL=DialogManager.d.ts.map