import { PureObject } from '../../types';

export declare const USE_VISIBLE_SWITCH_PAGER_KEY = "USE_VISIBLE_SWITCH";
export interface UseVisibleSetting {
    /** successEmit后自动关闭 */
    autoClose?: boolean;
    withWrapper?: any;
    wrapperProps?: PureObject;
    wrapperSlots?: PureObject;
    wrapperContentClickOutsideClose?: boolean;
    /** 这阶段，可以创建一些自己可能会用到的变量，通过provide/inject的特殊方式下发下去，慎用！如果返回是Promise，visible会等待之后再执行 */
    beforeInstanceSetup?: () => void | Promise<any>;
}
export type UseVisibleProps = {
    /** 事件监听，onInput,onFocus,这里因为没有上下文和内部变量，只能处理一些很简单的事件 */
    on?: PureObject;
    key?: string;
    slots?: PureObject;
    successEmit?: string;
    provides?: PureObject;
    refCallback?: (refInstance: any, hide: () => void) => void;
} & PureObject;
export type UseVisibleResolve<T> = {
    success?: boolean;
    data: T;
    close?: () => void;
    ref?: any;
};
export declare const replaceUseVisibleKey: (newKey: string, oldKey: string) => void;
/**
 * 调用方法关闭一个useVisible打开的实例
 * 不传的话就是关闭所有使用useVisible打开的弹窗，注意！！！
 * @param name 需要关闭的visible的key值
 * @returns
 */
export declare const unuseVisible: (closeKeys?: string | RegExp | string[], uncloseKeys?: string | string[]) => Promise<void[]>;
/**
 * 判断某个
 * @param key 实例key
 * @returns
 */
export declare const checkUseVisible: (key: string) => boolean;
/** 检查当前页面是否有通过useVisible打开的窗口 */
export declare const checkHasUseVisibleWorking: () => boolean;
/** 检查当前页面是否有通过useVisible打开的窗口,排除传入的key之外 */
export declare const checkHasUseVisibleWorkingExclude: (exclude: string) => boolean;
/** 如果有useVisible打开的窗口发生变动，可以监听到的方法
 * 传入一个方法，接受一个key和value,key是发生visible的弹窗key，value是弹窗状态
 */
export declare const useVisibleSubscribe: (cb: (key: string, value: boolean) => any) => void;
export interface UseVisible {
    <SuccessResult = unknown>(VisibleComponent: any, optionProps?: UseVisibleProps, otherOption?: UseVisibleSetting): Promise<UseVisibleResolve<SuccessResult>>;
}
/**
 * 打开某个具有visible prop属性的抽屉、弹窗、或者任何由visible控制的组件
 * @param { Component } VisibleComponent vue组件
 * @param { UseVisibleProps } optionProps 传给组件的参数以及一些监听事件
 * @param { UseVisibleSetting } otherOption 一些很少用到的配置
 * @returns
 */
export declare const useVisible: UseVisible;
