import type { Component } from 'vue';
import { ComponentOptionsMixin } from 'vue';
import type { CSSProperties } from 'vue';
import { DefineComponent } from 'vue';
import { ExtractPropTypes } from 'vue';
import { PropType } from 'vue';
import { PublicProps } from 'vue';

declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;

declare type __VLS_NonUndefinedable_2<T> = T extends undefined ? never : T;

declare type __VLS_NonUndefinedable_3<T> = T extends undefined ? never : T;

declare type __VLS_NonUndefinedable_4<T> = T extends undefined ? never : T;

declare type __VLS_PrettifyLocal<T> = {
    [K in keyof T]: T[K];
} & {};

declare type __VLS_PrettifyLocal_2<T> = {
    [K in keyof T]: T[K];
} & {};

declare type __VLS_PrettifyLocal_3<T> = {
    [K in keyof T]: T[K];
} & {};

declare type __VLS_PrettifyLocal_4<T> = {
    [K in keyof T]: T[K];
} & {};

declare type __VLS_TypePropsToOption<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_TypePropsToOption_2<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable_2<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_TypePropsToOption_3<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable_3<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_TypePropsToOption_4<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable_4<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_PrettifyLocal<P[K] & {
        default: D[K];
    }> : P[K];
};

declare type __VLS_WithDefaults_2<P, D> = {
    [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_PrettifyLocal_2<P[K] & {
        default: D[K];
    }> : P[K];
};

declare type __VLS_WithDefaults_3<P, D> = {
    [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_PrettifyLocal_3<P[K] & {
        default: D[K];
    }> : P[K];
};

declare type __VLS_WithDefaults_4<P, D> = {
    [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_PrettifyLocal_4<P[K] & {
        default: D[K];
    }> : P[K];
};

export declare const CheckmarkIcon: DefineComponent<__VLS_WithDefaults_2<__VLS_TypePropsToOption_2<CheckmarkTheme>, {
primary: string;
secondary: string;
}>, {}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults_2<__VLS_TypePropsToOption_2<CheckmarkTheme>, {
primary: string;
secondary: string;
}>>>, {
primary: string;
secondary: string;
}, {}>;

declare interface CheckmarkTheme {
    primary?: string;
    secondary?: string;
}

declare type DefaultToastOptions = ToastOptions & {
    [key in ToastType]?: ToastOptions;
};

export declare const ErrorIcon: DefineComponent<__VLS_WithDefaults_3<__VLS_TypePropsToOption_3<ErrorTheme>, {
primary: string;
secondary: string;
}>, {}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults_3<__VLS_TypePropsToOption_3<ErrorTheme>, {
primary: string;
secondary: string;
}>>>, {
primary: string;
secondary: string;
}, {}>;

declare interface ErrorTheme {
    primary?: string;
    secondary?: string;
}

declare interface IconTheme {
    primary: string;
    secondary: string;
}

export declare const LoaderIcon: DefineComponent<__VLS_WithDefaults_4<__VLS_TypePropsToOption_4<LoaderTheme>, {
primary: string;
secondary: string;
}>, {}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults_4<__VLS_TypePropsToOption_4<LoaderTheme>, {
primary: string;
secondary: string;
}>>>, {
primary: string;
secondary: string;
}, {}>;

declare interface LoaderTheme {
    primary?: string;
    secondary?: string;
}

declare type Message = ValueOrFunction<Renderable, Toast>;

declare type Renderable = Component | string | null;

declare interface Toast {
    type: ToastType;
    id: string;
    message: ValueOrFunction<Renderable, Toast>;
    icon?: Renderable;
    duration?: number;
    pauseDuration: number;
    position?: ToastPosition;
    ariaProps: {
        role: 'status' | 'alert';
        'aria-live': 'assertive' | 'off' | 'polite';
    };
    style?: CSSProperties;
    className?: string;
    iconTheme?: IconTheme;
    createdAt: number;
    visible: boolean;
    height?: number;
}

declare function toast(message: Message, opts?: ToastOptions): string;

declare namespace toast {
    var error: ToastHandler;
    var success: ToastHandler;
    var loading: ToastHandler;
    var custom: ToastHandler;
    var dismiss: (toastId?: string) => void;
    var remove: (toastId?: string) => void;
    var promise: <T>(promise: Promise<T>, msgs: {
        loading: Renderable;
        success: ValueOrFunction<Renderable, T>;
        error: ValueOrFunction<Renderable, any>;
    }, opts?: DefaultToastOptions) => Promise<T>;
}
export default toast;
export { toast }

export declare const ToastBar: DefineComponent<    {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<    {}>>, {}, {}>;

export declare const Toaster: DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToOption<ToasterProps>, {
position: string;
}>, {}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<ToasterProps>, {
position: string;
}>>>, {
position: ToastPosition;
}, {}>;

declare interface ToasterProps {
    position?: ToastPosition;
    toastOptions?: DefaultToastOptions;
    reverseOrder?: boolean;
    gutter?: number;
}

declare type ToastHandler = (message: Message, options?: ToastOptions) => string;

export declare const ToastIcon: DefineComponent<    {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<    {}>>, {}, {}>;

declare type ToastOptions = Partial<Pick<Toast, 'id' | 'icon' | 'duration' | 'ariaProps' | 'className' | 'style' | 'position' | 'iconTheme'>>;

declare type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';

declare type ToastType = 'success' | 'error' | 'loading' | 'blank' | 'custom';

declare type ValueFunction<TValue, TArg> = (arg: TArg) => TValue;

declare type ValueOrFunction<TValue, TArg> = TValue | ValueFunction<TValue, TArg>;

export { }
