import { ExtractPropTypes, Component, VNode, PropType } from 'vue';
import { ElTooltipProps, PaginationProps, TableColumnCtx } from 'element-plus';
import { WetValueType, WetSchemaItemType, WetSchemaProps } from '../../pro-form';
import { WetFormOption } from '../../types';

export declare const wetBaseColumnProps: {
    type: {
        type: StringConstructor;
        default: string;
    };
    label: StringConstructor;
    className: StringConstructor;
    labelClassName: StringConstructor;
    property: StringConstructor;
    prop: StringConstructor;
    width: {
        type: (StringConstructor | NumberConstructor)[];
        default: string;
    };
    minWidth: {
        type: (StringConstructor | NumberConstructor)[];
        default: string;
    };
    renderHeader: PropType<(data: {
        column: TableColumnCtx<any>;
        $index: number;
    }) => VNode<import('vue').RendererNode, import('vue').RendererElement, {
        [key: string]: any;
    }>>;
    sortable: {
        type: (BooleanConstructor | StringConstructor)[];
        default: boolean;
    };
    sortMethod: PropType<(a: any, b: any) => number>;
    sortBy: PropType<string | string[] | ((row: any, index: number) => string)>;
    resizable: {
        type: BooleanConstructor;
        default: boolean;
    };
    columnKey: StringConstructor;
    align: StringConstructor;
    headerAlign: StringConstructor;
    showOverflowTooltip: {
        type: PropType<boolean | Partial<Pick<ElTooltipProps, "transition" | "hideAfter" | "appendTo" | "showArrow" | "effect" | "enterable" | "popperClass" | "offset" | "placement" | "popperOptions" | "showAfter">>>;
        default: undefined;
    };
    fixed: (BooleanConstructor | StringConstructor)[];
    formatter: PropType<(row: any, column: TableColumnCtx<any>, cellValue: any, index: number) => string | VNode<import('vue').RendererNode, import('vue').RendererElement, {
        [key: string]: any;
    }>>;
    selectable: PropType<(row: any, index: number) => boolean>;
    reserveSelection: BooleanConstructor;
    filterMethod: PropType<import('element-plus/es/components/table/src/table-column/defaults').FilterMethods<any>>;
    filteredValue: PropType<string[]>;
    filters: PropType<import('element-plus/es/components/table/src/table-column/defaults').Filters>;
    filterPlacement: StringConstructor;
    filterMultiple: {
        type: BooleanConstructor;
        default: boolean;
    };
    filterClassName: StringConstructor;
    index: PropType<number | ((index: number) => number)>;
    sortOrders: {
        type: PropType<("ascending" | "descending")[]>;
        default: () => string[];
        validator: (val: ("ascending" | "descending")[]) => boolean;
    };
};
export type CloumnPropsType = ExtractPropTypes<typeof wetBaseColumnProps>;
export type WetProTableRequstRes = {
    data: any;
    total: number;
    success?: boolean;
};
export interface TableSpanMethodProps<T = any> {
    row: T;
    column: TableColumnCtx<T>;
    rowIndex: number;
    columnIndex: number;
}
export type WetBaseColumns = {
    title?: string;
    label?: string;
    isScrollMark?: boolean;
    dataIndex: string | string[];
    tooltip?: string;
    ellipsis?: boolean | Partial<ElTooltipProps>;
    valueEnum?: WetFormOption[];
    isRender?: boolean;
    render?: (rowInfo: {
        row: any;
        $index: number;
    }) => Component | VNode | undefined;
    columns?: WetBaseColumns[];
} & Partial<Omit<TableColumnCtx<any>, 'columns'>>;
export type WetRowSelection = {
    type: 'checkbox' | 'radio' | 'line';
    fixed?: boolean;
    onChange?: (selectedRows: any[]) => void;
};
export type WetTableExpandable = {
    columns: WetBaseColumns[];
    dataIndex?: string | string[];
    dataOutput?: (row: any, index: number) => any;
    showIndex?: boolean;
    expandable?: WetTableExpandable;
    size?: "" | "small" | "default" | "large";
    stripe?: boolean;
} | boolean;
export declare const wetSchemaTableProps: {
    emptyFormat: {
        type: StringConstructor;
        default: string;
    };
    rowKey: {
        type: PropType<string | string[]>;
    };
    fill: {
        type: BooleanConstructor;
    };
    columns: {
        type: PropType<WetBaseColumns[]>;
        default(): any[];
    };
    showIndex: {
        type: BooleanConstructor;
        default: boolean;
    };
    ellipsisProps: {
        type: PropType<Partial<ElTooltipProps>>;
        default(): {
            effect: string;
            placement: string;
        };
    };
    selections: {
        type: PropType<any[]>;
        default(): any[];
    };
    rowSelection: {
        type: PropType<WetRowSelection>;
    };
    expandable: {
        type: PropType<WetTableExpandable>;
    };
    mergeDataIndexs: {
        type: PropType<(string | string[])[]>;
    };
    data: {
        type: PropType<any[]>;
        default: () => never[];
    };
    size: {
        readonly type: PropType<import('element-plus/es/utils').EpPropMergeType<StringConstructor, "" | "default" | "small" | "large", never>>;
        readonly required: false;
        readonly validator: (val: unknown) => boolean;
        __epPropKey: true;
    };
    width: (StringConstructor | NumberConstructor)[];
    height: (StringConstructor | NumberConstructor)[];
    maxHeight: (StringConstructor | NumberConstructor)[];
    fit: {
        type: BooleanConstructor;
        default: boolean;
    };
    stripe: BooleanConstructor;
    border: BooleanConstructor;
    showHeader: {
        type: BooleanConstructor;
        default: boolean;
    };
    showSummary: BooleanConstructor;
    sumText: StringConstructor;
    summaryMethod: PropType<import('element-plus/es/components/table/src/table/defaults').SummaryMethod<any>>;
    rowClassName: PropType<import('element-plus/es/components/table/src/table/defaults').ColumnCls<any>>;
    rowStyle: PropType<import('element-plus/es/components/table/src/table/defaults').ColumnStyle<any>>;
    cellClassName: PropType<import('element-plus/es/components/table/src/table/defaults').CellCls<any>>;
    cellStyle: PropType<import('element-plus/es/components/table/src/table/defaults').CellStyle<any>>;
    headerRowClassName: PropType<import('element-plus/es/components/table/src/table/defaults').ColumnCls<any>>;
    headerRowStyle: PropType<import('element-plus/es/components/table/src/table/defaults').ColumnStyle<any>>;
    headerCellClassName: PropType<import('element-plus/es/components/table/src/table/defaults').CellCls<any>>;
    headerCellStyle: PropType<import('element-plus/es/components/table/src/table/defaults').CellStyle<any>>;
    highlightCurrentRow: BooleanConstructor;
    currentRowKey: (StringConstructor | NumberConstructor)[];
    emptyText: StringConstructor;
    expandRowKeys: PropType<string[]>;
    defaultExpandAll: BooleanConstructor;
    defaultSort: PropType<import('element-plus/es/components/table/src/table/defaults').Sort>;
    tooltipEffect: StringConstructor;
    tooltipOptions: PropType<Partial<Pick<ElTooltipProps, "transition" | "hideAfter" | "appendTo" | "showArrow" | "effect" | "enterable" | "popperClass" | "offset" | "placement" | "popperOptions" | "showAfter">>>;
    spanMethod: PropType<(data: {
        row: any;
        rowIndex: number;
        column: TableColumnCtx<any>;
        columnIndex: number;
    }) => number[] | {
        rowspan: number;
        colspan: number;
    }>;
    selectOnIndeterminate: {
        type: BooleanConstructor;
        default: boolean;
    };
    indent: {
        type: NumberConstructor;
        default: number;
    };
    treeProps: {
        type: PropType<import('element-plus/es/components/table/src/table/defaults').TreeProps>;
        default: () => {
            hasChildren: string;
            children: string;
            checkStrictly: boolean;
        };
    };
    lazy: BooleanConstructor;
    load: PropType<(row: any, treeNode: import('element-plus/es/components/table/src/table/defaults').TreeNode, resolve: (data: any[]) => void) => void>;
    style: {
        type: PropType<import('vue').CSSProperties>;
        default: () => {};
    };
    className: {
        type: StringConstructor;
        default: string;
    };
    tableLayout: {
        type: PropType<"fixed" | "auto">;
        default: string;
    };
    scrollbarAlwaysOn: BooleanConstructor;
    flexible: BooleanConstructor;
    showOverflowTooltip: PropType<boolean | Partial<Pick<ElTooltipProps, "transition" | "hideAfter" | "appendTo" | "showArrow" | "effect" | "enterable" | "popperClass" | "offset" | "placement" | "popperOptions" | "showAfter">>>;
    appendFilterPanelTo: StringConstructor;
    scrollbarTabindex: {
        type: (StringConstructor | NumberConstructor)[];
        default: undefined;
    };
};
export type WetSchemaTableProps = ExtractPropTypes<typeof wetSchemaTableProps>;
export type WetSchemaTableInstance = {
    scrollToIndex: (index: number) => void;
};
export type WetProTableColumns = Omit<WetBaseColumns, 'columns'> & {
    required?: boolean;
    columns?: WetProTableColumns[];
    valueType?: WetValueType;
    formItemProps?: Partial<WetSchemaItemType>;
    fieldProps?: Record<string, any>;
    search?: boolean;
    hideInSearch?: boolean;
    hideInTable?: boolean;
};
export type WetProTableRequest = <T>(fromValue: T, pagination: {
    pageSize: number;
    currentPage: number;
}, sort?: any, filter?: any) => Promise<WetProTableRequstRes>;
export declare const wetProTableProps: {
    title: StringConstructor;
    request: PropType<WetProTableRequest>;
    search: {
        type: PropType<boolean | (Partial<Omit<WetSchemaProps, "span" | "labelWidth">> & {
            collapsed?: boolean;
            labelWidth?: number;
            collapseShowNum?: number;
            span: number;
        })>;
        default(): boolean;
    };
    columns: {
        type: PropType<WetProTableColumns[]>;
        default(): any[];
    };
    pagination: {
        type: PropType<boolean | (Partial<PaginationProps> & {
            position: 'left' | 'right' | 'center';
        })>;
        default(): boolean;
    };
    showMoreTools: {
        type: BooleanConstructor;
        default: boolean;
    };
    cardBordered: BooleanConstructor;
    emptyFormat: {
        type: StringConstructor;
        default: string;
    };
    rowKey: {
        type: PropType<string | string[]>;
    };
    fill: {
        type: BooleanConstructor;
    };
    showIndex: {
        type: BooleanConstructor;
        default: boolean;
    };
    ellipsisProps: {
        type: PropType<Partial<ElTooltipProps>>;
        default(): {
            effect: string;
            placement: string;
        };
    };
    selections: {
        type: PropType<any[]>;
        default(): any[];
    };
    rowSelection: {
        type: PropType<WetRowSelection>;
    };
    expandable: {
        type: PropType<WetTableExpandable>;
    };
    mergeDataIndexs: {
        type: PropType<(string | string[])[]>;
    };
    data: {
        type: PropType<any[]>;
        default: () => never[];
    };
    size: {
        readonly type: PropType<import('element-plus/es/utils').EpPropMergeType<StringConstructor, "" | "default" | "small" | "large", never>>;
        readonly required: false;
        readonly validator: (val: unknown) => boolean;
        __epPropKey: true;
    };
    width: (StringConstructor | NumberConstructor)[];
    height: (StringConstructor | NumberConstructor)[];
    maxHeight: (StringConstructor | NumberConstructor)[];
    fit: {
        type: BooleanConstructor;
        default: boolean;
    };
    stripe: BooleanConstructor;
    border: BooleanConstructor;
    showHeader: {
        type: BooleanConstructor;
        default: boolean;
    };
    showSummary: BooleanConstructor;
    sumText: StringConstructor;
    summaryMethod: PropType<import('element-plus/es/components/table/src/table/defaults').SummaryMethod<any>>;
    rowClassName: PropType<import('element-plus/es/components/table/src/table/defaults').ColumnCls<any>>;
    rowStyle: PropType<import('element-plus/es/components/table/src/table/defaults').ColumnStyle<any>>;
    cellClassName: PropType<import('element-plus/es/components/table/src/table/defaults').CellCls<any>>;
    cellStyle: PropType<import('element-plus/es/components/table/src/table/defaults').CellStyle<any>>;
    headerRowClassName: PropType<import('element-plus/es/components/table/src/table/defaults').ColumnCls<any>>;
    headerRowStyle: PropType<import('element-plus/es/components/table/src/table/defaults').ColumnStyle<any>>;
    headerCellClassName: PropType<import('element-plus/es/components/table/src/table/defaults').CellCls<any>>;
    headerCellStyle: PropType<import('element-plus/es/components/table/src/table/defaults').CellStyle<any>>;
    highlightCurrentRow: BooleanConstructor;
    currentRowKey: (StringConstructor | NumberConstructor)[];
    emptyText: StringConstructor;
    expandRowKeys: PropType<string[]>;
    defaultExpandAll: BooleanConstructor;
    defaultSort: PropType<import('element-plus/es/components/table/src/table/defaults').Sort>;
    tooltipEffect: StringConstructor;
    tooltipOptions: PropType<Partial<Pick<ElTooltipProps, "transition" | "hideAfter" | "appendTo" | "showArrow" | "effect" | "enterable" | "popperClass" | "offset" | "placement" | "popperOptions" | "showAfter">>>;
    spanMethod: PropType<(data: {
        row: any;
        rowIndex: number;
        column: TableColumnCtx<any>;
        columnIndex: number;
    }) => number[] | {
        rowspan: number;
        colspan: number;
    }>;
    selectOnIndeterminate: {
        type: BooleanConstructor;
        default: boolean;
    };
    indent: {
        type: NumberConstructor;
        default: number;
    };
    treeProps: {
        type: PropType<import('element-plus/es/components/table/src/table/defaults').TreeProps>;
        default: () => {
            hasChildren: string;
            children: string;
            checkStrictly: boolean;
        };
    };
    lazy: BooleanConstructor;
    load: PropType<(row: any, treeNode: import('element-plus/es/components/table/src/table/defaults').TreeNode, resolve: (data: any[]) => void) => void>;
    style: {
        type: PropType<import('vue').CSSProperties>;
        default: () => {};
    };
    className: {
        type: StringConstructor;
        default: string;
    };
    tableLayout: {
        type: PropType<"fixed" | "auto">;
        default: string;
    };
    scrollbarAlwaysOn: BooleanConstructor;
    flexible: BooleanConstructor;
    showOverflowTooltip: PropType<boolean | Partial<Pick<ElTooltipProps, "transition" | "hideAfter" | "appendTo" | "showArrow" | "effect" | "enterable" | "popperClass" | "offset" | "placement" | "popperOptions" | "showAfter">>>;
    appendFilterPanelTo: StringConstructor;
    scrollbarTabindex: {
        type: (StringConstructor | NumberConstructor)[];
        default: undefined;
    };
};
export type WetProTablePropsType = ExtractPropTypes<typeof wetProTableProps>;
