import { ButtonOnGetphonenumberEvent, ButtonOnErrorEvent, ButtonOnOpensettingEvent, ButtonOnLaunchappEvent, ButtonOnChooseavatarEvent, ButtonOnAgreeprivacyauthorizationEvent, ButtonOnAddgroupappEvent, ButtonOnChooseaddressEvent, ButtonOnChooseinvoicetitleEvent, ButtonOnSubscribeEvent, ButtonOnLoginEvent, ScrollViewProps, ScrollViewOnRefresherpulling, ScrollViewOnScrollEvent, ImageMode } from '@uni-helper/uni-app-types';
import * as vue from 'vue';
import { ExtractPropTypes, PropType } from 'vue';
import { ComponentResolver } from '@uni-helper/vite-plugin-uni-components';

declare const buttonProps: {
    /**
     * @description 打开公众号资料卡时，传递的号码 openType="openPublicProfile"时有效
     */
    readonly publicId: StringConstructor;
    /**
     * @description 客服的抖音号,openType="im"时有效
     */
    readonly dataImId: StringConstructor;
    /**
     * @description IM卡片类型,openType="im"时有效
     */
    readonly dataImType: StringConstructor;
    /**
     * @description 商品的id，仅支持泛知识课程库和生活服务商品库中的商品,openType="im"时有效
     */
    readonly dataGoodsId: StringConstructor;
    /**
     * @description 订单的id，仅支持交易2.0订单, openType="im"时有效
     */
    readonly dataOrderId: StringConstructor;
    /**
     * @description 商品类型，“1”代表生活服务，“2”代表泛知识。openType="im"时有效
     */
    readonly dataBizLine: StringConstructor;
};
type ButtonProps = ExtractPropTypes<typeof buttonProps>;
declare const buttonEmits: {
    getphonenumber: (evt: ButtonOnGetphonenumberEvent) => boolean;
    getuserinfo: (evt: any) => boolean;
    error: (evt: ButtonOnErrorEvent) => boolean;
    opensetting: (evt: ButtonOnOpensettingEvent) => boolean;
    launchapp: (evt: ButtonOnLaunchappEvent) => boolean;
    contact: (evt: any) => boolean;
    chooseavatar: (evt: ButtonOnChooseavatarEvent) => boolean;
    agreeprivacyauthorization: (evt: ButtonOnAgreeprivacyauthorizationEvent) => boolean;
    addgroupapp: (evt: ButtonOnAddgroupappEvent) => boolean;
    chooseaddress: (evt: ButtonOnChooseaddressEvent) => boolean;
    chooseinvoicetitle: (evt: ButtonOnChooseinvoicetitleEvent) => boolean;
    subscribe: (evt: ButtonOnSubscribeEvent) => boolean;
    login: (evt: ButtonOnLoginEvent) => boolean;
    im: (evt: any) => boolean;
};
type ButtonEmits = typeof buttonEmits;

interface ListObj<T> {
    loading: boolean;
    finished: boolean;
    refreshing: boolean;
    list: T[];
    total?: number;
}
interface SkeletonObj {
    num?: number;
    rows?: number;
    gridCol?: number;
}
declare const listProps: {
    /**
     * @description 是否需要设置高度为全屏
     * @default false
     */
    readonly isNeedHFull: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
    /**
     * @description 是否需要显示空状态
     * @default true
     */
    readonly isNeedEmpty: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
    /**
     * @description 空状态是否需要居中显示
     * @default true
     */
    readonly isNeedEmptyCenter: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
    /**
     * @description 空状态是否需要底部内边距
     * @default true
     */
    readonly isNeedEmptyPb: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
    /**
     * @description 空状态的顶部内边距
     * @default undefined
     */
    readonly emptyTop: {
        readonly type: StringConstructor;
        readonly default: undefined;
    };
    /**
     * @description 空状态对象
     * @default undefined
     */
    readonly emptyObj: {
        readonly type: PropType<any>;
        readonly default: undefined;
    };
    /**
     * @description 列表数据对象，包含加载状态、完成状态、刷新状态、列表数据和总数等信息
     * @required
     */
    readonly listObj: {
        readonly type: PropType<ListObj<any>>;
        readonly required: true;
    };
    /**
     * @description 骨架屏配置对象，包含骨架屏数量、行数和网格列数等信息
     * @default { num: 1, rows: 3, gridCol: 1 }
     */
    readonly skeletonObj: {
        readonly type: PropType<SkeletonObj>;
        readonly default: () => {
            num: number;
            rows: number;
            gridCol: number;
        };
    };
    /**
     * @description 滚动视图的属性配置，排除了 'loading'、'finished' 和 'onLoad' 属性
     * @default { scrollY: true, scrollX: false, refresherEnabled: true, refresherThreshold: 100, refresherBackground: "transparent" }
     */
    readonly scrollViewProps: {
        readonly type: PropType<Partial<Omit<ScrollViewProps, "loading" | "finished" | "onLoad">>>;
        readonly default: () => {
            scrollY: boolean;
            scrollX: boolean;
            refresherThreshold: number;
            refresherBackground: string;
        };
    };
    /**
     * @description 虚拟列表配置对象，包含是否启用虚拟列表、项高度、容器高度、底部 loading 骨架高度等
     * @default { enabled: false, itemHeight: 50, containerHeight: undefined, loadingHeight: 100 }
     */
    readonly virtualListProps: {
        readonly type: PropType<{
            enabled?: boolean;
            itemHeight?: number;
            containerHeight?: number;
            loadingHeight?: number;
        }>;
        readonly default: () => {
            enabled: boolean;
            itemHeight: number;
            containerHeight: undefined;
            loadingHeight: number;
        };
    };
    /**
     * @description 是否启默认列表模式（只针对非虚拟列表）
     * @default false
     */
    readonly isListMode: {
        readonly type: BooleanConstructor;
        readonly default: false;
    };
};
type ListProps = ExtractPropTypes<typeof listProps>;
type ListEmits = {
    (e: 'update:listObj', data: ListObj<any>): void;
    (e: 'onRefresh'): void;
    (e: 'onLoad'): void;
    (e: 'onPulling', data: ScrollViewOnRefresherpulling): void;
    (e: 'onScroll', data: ScrollViewOnScrollEvent): void;
};

declare const skeletonProps: {
    /**
     * @description 骨架屏类型
     */
    readonly type: {
        type: PropType<"title" | "avatar">;
        default: "title" | "avatar";
    };
    /**
     * @description 是否禁用刷新功能
     * @default false
     */
    readonly loading: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
    /**
     * @description 是否开启骨架屏
     * @default false
     */
    readonly animate: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
    /**
     * @description 头像形状
     * @default "circle"
     */
    readonly avatarShape: {
        type: PropType<"circle" | "square">;
        default: "circle" | "square";
    };
    /**
     * @description 头像大小
     * @default 60
     */
    readonly avatarSize: {
        readonly type: PropType<number | string>;
        readonly default: 60;
    };
    /**
     * @description 标题高度
     * @default 36
     */
    readonly titleHeight: {
        readonly type: PropType<number | string>;
        readonly default: 36;
    };
    /**
     * @description 标题宽度
     * @default "100%"
     */
    readonly titleWidth: {
        readonly type: PropType<number | string>;
        readonly default: "100%";
    };
    /**
     * @description 行数
     * @default 3
     */
    readonly rows: {
        readonly type: NumberConstructor;
        readonly default: 3;
    };
};
type SkeletonProps = ExtractPropTypes<typeof skeletonProps>;

declare const imageProps: {
    readonly mode: {
        readonly type: PropType<ImageMode>;
        readonly default: "scaleToFill";
    };
    readonly width: {
        readonly type: PropType<number | string>;
    };
    readonly height: {
        readonly type: PropType<number | string>;
    };
    readonly delay: {
        readonly type: NumberConstructor;
        readonly default: 0;
    };
    readonly radius: {
        readonly type: PropType<number | string>;
        readonly default: 0;
    };
    readonly minHeight: {
        type: (StringConstructor | NumberConstructor)[];
        default: string;
    };
    readonly lazyLoad: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
    readonly customStyle: {
        readonly type: StringConstructor;
        readonly default: "";
    };
    readonly round: {
        readonly type: BooleanConstructor;
        readonly default: false;
    };
    readonly enablePreview: {
        readonly type: BooleanConstructor;
        readonly default: false;
    };
    readonly customClass: {
        readonly type: StringConstructor;
        readonly default: "";
    };
    readonly src: {
        readonly type: StringConstructor;
        readonly default: "";
    };
    readonly previewSrc: {
        readonly type: StringConstructor;
        readonly default: "";
    };
    readonly placeholderSrc: {
        readonly type: StringConstructor;
        readonly default: "";
    };
    readonly filter: {
        readonly type: PropType<number | string>;
        readonly default: "";
    };
};
type ImageProps = ExtractPropTypes<typeof imageProps>;
interface ImageEmits {
    (e: 'onRefresh'): any;
}

/**
 * prop type helpers
 * help us to write less code and reduce bundle size
 * copy from https://github.com/youzan/vant/blob/main/packages/vant/src/utils/props.ts
 */

type ClassType = string | object | Array<ClassType>;

declare const emptyProps: {
    /**
     * @description 图片类型，可选值为 `empty`、`error`、`network`，支持传入图片 `URL`
     */
    image: {
        type: vue.PropType<(string & {}) | "empty" | "error" | "network">;
        default: (string & {}) | "empty" | "error" | "network";
    };
    /**
     * @description 图片大小，单位为 `px`
     */
    imageSize: {
        type: (StringConstructor | NumberConstructor)[];
        default: string;
    };
    /**
     * @description 图片下方的描述文字
     */
    description: {
        type: vue.PropType<string>;
        default: string;
    };
    customClass: {
        type: vue.PropType<ClassType>;
        default: string;
    };
    customStyle: {
        type: vue.PropType<vue.StyleValue>;
        default: string;
    };
};
type EmptyProps = ExtractPropTypes<typeof emptyProps>;

interface WaterfallItem {
    [key: string]: any;
    index?: number;
    id?: string | number;
}
interface ColumnHeight {
    column: number;
    height: number;
}
interface FlowData {
    list: WaterfallItem[];
    column: number;
    columnSpace: number;
    [key: string]: any;
}
declare const waterfallProps: {
    /**
     * @description 瀑布流数据列表
     */
    list: {
        type: PropType<WaterfallItem[]>;
        default: () => never[];
    };
    /**
     * @description 列数
     * @default 2
     */
    column: {
        type: NumberConstructor;
        default: number;
    };
    /**
     * @description 列间距(百分比)
     * @default 2
     */
    columnSpace: {
        type: NumberConstructor;
        default: number;
    };
    /**
     * @description 图片字段名
     * @default 'imgUrl'
     */
    imageField: {
        type: StringConstructor;
        default: string;
    };
    /**
     * @description 获取图片源的方法
     * @default undefined
     */
    getImageSrc: {
        type: PropType<(item: WaterfallItem) => string>;
        default: undefined;
    };
    /**
     * @description 是否根据图片信息排序
     * @default false
     */
    sortByImgInfo: {
        type: BooleanConstructor;
        default: boolean;
    };
};
type WaterfallProps = ExtractPropTypes<typeof waterfallProps>;
interface WaterfallEmits {
    (e: 'load-complete'): void;
    (e: 'item-click', item: WaterfallItem, index: number): void;
    (e: 'image-load', item: WaterfallItem): void;
    (e: 'image-error', item: WaterfallItem): void;
}
declare const waterfallEmits: readonly ["load-complete", "item-click", "image-load", "image-error"];

declare function UpResolver(): ComponentResolver;

export { UpResolver, buttonEmits, buttonProps, emptyProps, imageProps, listProps, skeletonProps, waterfallEmits, waterfallProps };
export type { ButtonEmits, ButtonProps, ColumnHeight, EmptyProps, FlowData, ImageEmits, ImageProps, ListEmits, ListProps, SkeletonProps, WaterfallEmits, WaterfallItem, WaterfallProps };
