type LibMixins = LibMixin & Record<string, any>;

interface LibMixin {

    computed?:Record<string,  Record<string, any> | LibMixinsComputed>;

    methods?:Record<string, LibMixinsMethod>;

    beforeUnmount?:Function

}

interface LibMixinsComputed {
    (this:LibVueOptions):any | void
}


interface LibMixinsMethod {
    (this:LibVueOptions,...rest:any):any | void
}

type LibVueOptions = Record<string, any> & LibVueOption;

interface LibVueOption  {

    $popup:PopupComponent,

    $toast:(option:PopupToastOptions)=>string,

    $confirm:(option:PopupToastOptions)=>string,

    $loading:(option:PopupToastOptions)=>string,

    $success:(option:PopupToastOptions)=>any,

    $fail:(option:PopupToastOptions)=>any,

    $warning:(option:PopupToastOptions)=>any,

    $info:(option:PopupToastOptions)=>any,

    $request:(option:LibRequestOptions)=>Promise

}