import { ComponentOptionsMixin } from 'vue';
import { DefineComponent } from 'vue';
import { ExtractPropTypes } from 'vue';
import { Plugin as Plugin_2 } from 'vue';
import { PropType } from 'vue';
import { PublicProps } from 'vue';
import { RendererElement } from 'vue';
import { RendererNode } from 'vue';
import { VNode } from 'vue';

declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;

declare type __VLS_Prettify<T> = {
    [K in keyof T]: T[K];
} & {};

declare type __VLS_TypePropsToRuntimeProps<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_WithDefaults<P, D> = {
    [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
        default: D[K];
    }> : P[K];
};

export declare function createToaster(globalOptions?: Options): {
    show(message: string, options?: Options): {
        vNode: VNode<RendererNode, RendererElement, {
        [key: string]: any;
        }>;
        destroy: () => void;
        el: Element | null;
    };
    clear(): void;
    success(message: string, options?: Options): {
        vNode: VNode<RendererNode, RendererElement, {
        [key: string]: any;
        }>;
        destroy: () => void;
        el: Element | null;
    };
    error(message: string, options?: Options): {
        vNode: VNode<RendererNode, RendererElement, {
        [key: string]: any;
        }>;
        destroy: () => void;
        el: Element | null;
    };
    info(message: string, options?: Options): {
        vNode: VNode<RendererNode, RendererElement, {
        [key: string]: any;
        }>;
        destroy: () => void;
        el: Element | null;
    };
    warning(message: string, options?: Options): {
        vNode: VNode<RendererNode, RendererElement, {
        [key: string]: any;
        }>;
        destroy: () => void;
        el: Element | null;
    };
};

export declare type Options = {
    message?: string;
    type?: Type;
    position?: Position;
    duration?: number | false;
    dismissible?: boolean;
    onClick?: Function;
    onClose?: Function;
    queue?: boolean;
    maxToasts?: number | false;
    pauseOnHover?: boolean;
    useDefaultCss?: boolean;
};

declare const plugin: Plugin_2<Options>;
export default plugin;
export { plugin }

export declare type Position = "top" | "bottom" | "top-right" | "bottom-right" | "top-left" | "bottom-left";

export declare const Positions: Readonly<Record<string, Position>>;

declare interface Props {
    message: string;
    type?: string;
    position?: Position;
    maxToasts?: number | false;
    duration?: number | false;
    dismissible?: boolean;
    queue?: boolean;
    props?: boolean;
    useDefaultCss?: boolean;
    onClose?: Function;
    onClick?: Function;
}

export declare const Toaster: DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
type: string;
position: Position;
maxToasts: boolean;
duration: number;
dismissible: boolean;
queue: boolean;
props: boolean;
useDefaultCss: boolean;
onClose: () => void;
onClick: () => void;
}>, {}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
type: string;
position: Position;
maxToasts: boolean;
duration: number;
dismissible: boolean;
queue: boolean;
props: boolean;
useDefaultCss: boolean;
onClose: () => void;
onClick: () => void;
}>>>, {
type: string;
position: Position;
maxToasts: number | false;
duration: number | false;
dismissible: boolean;
queue: boolean;
props: boolean;
useDefaultCss: boolean;
onClose: Function;
onClick: Function;
}, {}>;

export declare type Type = "default" | "success" | "info" | "warning" | "error";

export { }
