import { VNode, ComponentPublicInstance, Ref } from 'vue';
import { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults';
import { DefaultRow } from 'element-plus/es/components/table/src/table/defaults';
import { ZhTableProps, default as ZhTable } from './Table.vue';
export interface Pageable {
    page: number;
    size: number;
    total: number;
}
export interface EnumProps {
    label?: string;
    value?: string | number | boolean | any[];
    disabled?: boolean;
    tagType?: string;
    children?: EnumProps[];
    [key: string]: any;
}
export type TypeProps = "index" | "selection" | "radio" | "expand" | "sort" | "input";
export type SearchType = "input" | "input-number" | "select" | "select-v2" | "tree-select" | "cascader" | "date-picker" | "time-picker" | "time-select" | "switch" | "slider" | "zhCascaderLoadMore";
export type SearchRenderScope = {
    searchParam: {
        [key: string]: any;
    };
    modelValue?: string | number | boolean | null | any[];
    placeholder: string;
    clearable: boolean;
    options: EnumProps[];
    data: EnumProps[];
};
export type SearchProps = {
    el?: SearchType;
    type?: string;
    label?: string;
    props?: any;
    key?: string;
    tooltip?: string;
    order?: number;
    defaultValue?: string | number | boolean | null | any[] | Ref<any>;
    render?: (scope: SearchRenderScope) => VNode;
    width?: number | ((value: any) => number);
    isShow?: boolean;
} & Partial<Record<BreakPoint, Responsive>>;
export type FieldNamesProps = {
    label: string;
    value: string;
    children?: string;
};
export type RenderScope<T extends DefaultRow = DefaultRow> = {
    row: T;
    $index: number;
    column: TableColumnCtx<T>;
    [key: string]: any;
};
export type HeaderRenderScope<T extends DefaultRow = DefaultRow> = {
    $index: number;
    column: TableColumnCtx<T>;
    [key: string]: any;
};
export interface ColumnProps<T extends DefaultRow = DefaultRow> extends Partial<Omit<TableColumnCtx<T>, "type" | "children" | "renderCell" | "renderHeader" | "order">> {
    order?: string | number;
    type?: TypeProps;
    blurCallback?: (rowData?: any, weight?: number) => void | Promise<void>;
    tag?: boolean | Ref<boolean>;
    isShow?: boolean | Ref<boolean>;
    search?: SearchProps | undefined;
    enum?: EnumProps[] | Ref<EnumProps[]> | ((params?: any) => Promise<any>);
    isFilterEnum?: boolean | Ref<boolean>;
    fieldNames?: FieldNamesProps;
    headerRender?: (scope: HeaderRenderScope<T>) => VNode;
    render?: (scope: RenderScope<T>) => VNode | string;
    slot?: string;
    _children?: ColumnProps<T>[];
    click?: (row: any, index: number) => void;
    isCustomDisable?: boolean;
    wrap?: boolean;
    expandOperationButtons?: boolean;
    readonly?: boolean;
    hideInCustomColumn?: boolean;
}
export interface SortChangeEvent {
    column: TableColumnCtx<any>;
    prop: string;
    order: "ascending" | "descending" | null;
}
export type ZhTableInstance = Omit<InstanceType<typeof ZhTable>, keyof ComponentPublicInstance | keyof ZhTableProps>;
export type BreakPoint = "xs" | "sm" | "md" | "lg" | "xl";
export type Responsive = {
    span?: number;
    offset?: number;
};
