import { Emitter } from '../ele-app/types';
import { ElTableInstance } from '../ele-app/el';
import { dataTableEmits } from './props';
import { DataKey, DataItem, Column, Columns, Sorter, Filter, GetInstance, TableMethods, ShowOverflowTooltip, TooltipEffect, TooltipOptions, RowClass, RowKey } from './types';

/**
 * 获取行的类名
 * @param rowClass 自定义行类名
 * @param param 方法类型的参数
 */
export declare function getRowClass(rowClass: RowClass | undefined, param: Parameters<Exclude<RowClass, string | undefined>>[0]): string | undefined;
/**
 * 获取行的类名
 * @param rowClass 自定义行类名
 * @param param 方法类型的参数
 */
export declare function getBodyRowClass(rowClass: RowClass | undefined, param: Parameters<Exclude<RowClass, string | undefined>>[0]): string;
/**
 * 获取表头行的类名
 * @param rowClass 自定义行类名
 * @param param 方法类型的参数
 * @param ellipsis 是否单行省略
 */
export declare function getHeadRowClass(rowClass: RowClass | undefined, param: Parameters<Exclude<RowClass, string | undefined>>[0], ellipsis: boolean): string;
/**
 * 获取全局溢出提示组件属性
 * @param showOverflowTooltip 溢出提示组件属性
 * @param tooltipEffect 溢出提示组件主题
 * @param tooltipOptions 溢出提示组件配置
 */
export declare function getGlobalTooltipProps(showOverflowTooltip?: ShowOverflowTooltip, tooltipEffect?: TooltipEffect, tooltipOptions?: TooltipOptions): ShowOverflowTooltip;
/**
 * 合并提示组件相关属性
 * @param props 单元格提示组件属性
 * @param globalProps 表格提示组件属性
 */
export declare function mergeTooltipProps(props?: ShowOverflowTooltip, globalProps?: ShowOverflowTooltip): Exclude<ShowOverflowTooltip, true>;
/**
 * 获取单元格提示组件属性
 * @param props 单元格提示组件属性
 * @param globalProps 表格提示组件属性
 */
export declare function getTooltipProps(props?: ShowOverflowTooltip, globalProps?: ShowOverflowTooltip): ShowOverflowTooltip;
/**
 * 切换表格指定数据的选中状态
 * @param tableRef 表格实例
 * @param row 数据
 * @param selected 选中状态
 */
export declare function toggleRowSelectionPro(tableRef: ElTableInstance | undefined, row: DataItem, selected: boolean): void;
/**
 * 获取表格筛选值
 * @param tableRef 表格实例
 */
export declare function getTableFilter(tableRef?: ElTableInstance): Filter | undefined;
/**
 * 获取含表格状态的列配置
 * @param cols 表格的列
 * @param sorter 当前排序状态
 * @param filter 当前筛选状态
 */
export declare function getStateCols(cols: Columns, sorter?: Sorter, filter?: Filter): {
    cols: Columns;
    sorter?: undefined;
} | {
    cols: Columns;
    sorter: Sorter | undefined;
};
/**
 * 获取判断多选是否可选择的方法
 * @param columns 列配置
 */
export declare function getSelectableFunction(columns?: Columns): ((row: any, index: number) => boolean) | null | undefined;
/**
 * 判断行是否禁止多选
 * @param row 行数据
 * @param index 行索引
 * @param columns 列配置
 */
export declare function isDisableRow(row: DataItem, index: number, columns?: Columns): boolean;
/**
 * 判断是否保存不存在的选中数据
 * @param columns 列配置
 */
export declare function isReserveChecked(columns?: Columns): boolean;
/**
 * 用于根据列的固定值排序
 * @param fixed 固定值
 */
export declare function getColFixedNumber(fixed?: boolean | string): 0 | 1 | 2;
/**
 * 获取列类名
 * @param col 列属性
 */
export declare function getCellClass(col: Column): string | undefined;
/**
 * 获取列筛选下拉框类名
 * @param filterClassName 自定义类名
 */
export declare function getFilterPopperClass(filterClassName?: string): string;
/**
 * 获取数据值
 * @param rows 数据
 * @param rowKey 值键名
 */
export declare function getRowKeys(rows: DataItem[] | undefined, rowKey: RowKey): DataKey[];
/**
 * 获取值对应的数据
 * @param key 值
 * @param data 全部数据
 * @param rowKey 值键名
 * @param childrenField 子级数据键名
 */
export declare function getRowByKey(key: DataKey, data?: DataItem[], rowKey?: RowKey, childrenField?: string): DataItem | undefined;
/**
 * 获取平铺后的数据值和数据
 * @param data 表格数据
 * @param rowKey 数据值字段名
 * @param childrenField 子级字段名
 */
export declare function getKeysAndList(data?: DataItem[], rowKey?: RowKey, childrenField?: string): [DataKey[], DataItem[]];
/**
 * 判断值是否改变
 * @param value1 值
 * @param value2 新值
 */
export declare function valueIsChanged<T>(value1?: T | null, value2?: T | null): boolean;
/**
 * 判断数组数据是否改变
 * @param list1 数组
 * @param list2 新数组
 */
export declare function arrayIsChanged<T>(list1?: T[] | null, list2?: T[] | null): boolean;
/**
 * 使用粘性表头
 */
export declare function useStickyHeader(): {
    isLayoutFixedHead: import('vue').ComputedRef<boolean | undefined>;
    isLayoutMaximized: import('vue').ComputedRef<boolean | undefined>;
};
/**
 * 表格实例方法统一处理
 * @param getInstance 获取表格实例方法
 */
export declare function useMethods(getInstance: GetInstance): TableMethods;
/**
 * 表格事件统一处理
 * @param emit 事件触发器
 */
export declare function useEmits(emit: Emitter<typeof dataTableEmits>): {
    onSelect: (selection: DataItem[], row: DataItem) => void;
    onSelectAll: (selection: DataItem[]) => void;
    onCellMouseEnter: (row: DataItem, column: Column, cell: HTMLTableCellElement, event: MouseEvent) => void;
    onCellMouseLeave: (row: DataItem, column: Column, cell: HTMLTableCellElement, event: MouseEvent) => void;
    onCellClick: (row: DataItem, column: Column, cell: HTMLTableCellElement, event: MouseEvent) => void;
    onCellDblclick: (row: DataItem, column: Column, cell: HTMLTableCellElement, event: MouseEvent) => void;
    onCellContextmenu: (row: DataItem, column: Column, cell: HTMLTableCellElement, event: MouseEvent) => void;
    onRowClick: (row: DataItem, column: Column, event: MouseEvent) => void;
    onRowContextmenu: (row: DataItem, column: Column, event: MouseEvent) => void;
    onRowDblclick: (row: DataItem, column: Column, event: MouseEvent) => void;
    onHeaderClick: (column: Column, event: MouseEvent) => void;
    onHeaderContextmenu: (column: Column, event: MouseEvent) => void;
    onHeaderDragend: (newWidth: number, oldWidth: number, column: Column, event: MouseEvent) => void;
    onExpandChange: (row: DataItem | undefined, expanded: boolean | DataItem[]) => void;
    onSelectionChange: (selection: DataItem[]) => void;
    onSortChange: (sorter: Sorter) => void;
    onFilterChange: (filter: Filter) => void;
    onCurrentChange: (currentRow?: DataItem | null, oldCurrentRow?: DataItem | null) => void;
    /** 新增的事件 */
    'onUpdate:currentRowKey': (currentRowKey?: DataKey) => void;
    'onUpdate:selectedRowKeys': (selectedRowKeys: DataKey[]) => void;
};
