import type { VNodeChild } from 'vue';
import type { TooltipProps } from 'ant-design-vue/es/tooltip';
import { ComponentsType } from './componentsType';
import type { Recordable } from '../../typings/global';
export declare type SortOrder = 'ascend' | 'descend' | null;
export interface ColumnFilterItem {
    text: VNodeChild | JSX.Element;
    value: string | number | boolean;
    children?: ColumnFilterItem[];
}
interface FilterDropdownProps<RecordType> {
    prefixCls?: string;
    setSelectedKeys?: (selectedKeys: string[]) => void;
    selectedKeys?: string[];
    confirm?: (param?: {
        closeDropdown: boolean;
    }) => void;
    clearFilters?: () => void;
    filters?: ColumnFilterItem[];
    visible?: boolean;
    column?: ColumnProps<RecordType>;
    getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
}
declare type Breakpoint = 'xxxl' | 'xxl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs';
export declare type VueNode = VNodeChild | JSX.Element;
export interface ColumnProps<RecordType> {
    align?: 'left' | 'right' | 'center';
    colSpan?: number;
    dataIndex?: string;
    ellipsis?: boolean | {
        showTitle?: boolean;
    };
    defaultFilteredValue?: string[];
    defaultSortOrder?: SortOrder;
    filterDropdown?: VueNode | ((props: FilterDropdownProps<RecordType>) => VueNode);
    customFilterDropdown?: boolean;
    filterDropdownVisible?: boolean;
    filtered?: boolean;
    filteredValue?: string[];
    filterIcon?: boolean | VueNode;
    filterMultiple?: boolean;
    filters?: ColumnFilterItem[];
    fixed?: boolean | ('left' | 'right');
    key?: string;
    customRender?: (opt: {
        value: any;
        text: any;
        record: RecordType;
        index: number;
        column: ColumnProps<RecordType>;
    }) => any;
    responsive?: Breakpoint[];
    showSorterTooltip?: boolean | TooltipProps;
    sorter?: ((a: RecordType, b: RecordType, sortOrder?: SortOrder) => number) | boolean;
    sortOrder?: boolean | SortOrder;
    sortDirections?: SortOrder[];
    title?: VueNode | ((props: any) => VueNode);
    width?: string | number;
    minWidth?: number;
    maxWidth?: number;
    resizable?: boolean;
    customCell?: (record: RecordType, rowIndex: number, column: ColumnProps<RecordType>) => object;
    customHeaderCell?: (column: ColumnProps<RecordType>) => object;
    onFilter?: (value: any, record: RecordType) => boolean;
    onFilterDropdownVisibleChange?: (visible: boolean) => void;
    disabled?: boolean;
}
export declare type CellFormat<T = any> = string | ((text: any, record: T, index: number) => string | number) | Map<string | number, any>;
export declare type ColumnPropsEx<T = any> = ColumnProps<T> & {
    children?: ColumnPropsEx<T>[];
    flag?: 'INDEX' | 'DEFAULT' | 'CHECKBOX' | 'RADIO' | 'ACTION' | 'SETTING';
    customTitle?: VueNode;
    defaultHidden?: boolean;
    helpMessage?: string | string[];
    format?: CellFormat<T>;
    edit?: boolean;
    editRow?: boolean;
    editable?: boolean;
    editComponent?: ComponentsType;
    editComponentProps?: Recordable;
    editRule?: boolean | ((text: string, record: T) => Promise<string>);
    editValueMap?: (value: any) => string;
    onEditRow?: () => void;
    ifShow?: boolean | ((column: ColumnPropsEx<T>) => boolean);
};
export declare type ColumnChangeParam = {
    dataIndex: string;
    fixed: boolean | 'left' | 'right' | undefined;
    visible: boolean;
};
export interface InnerHandlers {
    onColumnsChange: (data: ColumnChangeParam[]) => void;
}
export {};
