import * as React from 'react';
import PropTypes from 'prop-types';
import { DraggableProvided, DropResult, ResponderProvided } from 'react-beautiful-dnd';
import { PerformanceTable as PerformanceTableLocal } from '../../../lib/locale-provider';
import { RadioChangeEvent } from '../../../lib/radio';
import { CheckboxChangeEvent } from '../../../lib/checkbox';
import { TableProps, SelectionInfo, SelectionItemSelectFn } from './Table.d';
import { RowProps } from './Row.d';
import { SortType } from './common.d';
import Column from './Column';
import Cell from './Cell';
import HeaderCell from './HeaderCell';
import ProfessionalBar from './query-bar/TableProfessionalBar';
import DynamicFilterBar from './query-bar/TableDynamicFilterBar';
import TableStore from './TableStore';
interface TableRowProps extends RowProps {
    key?: string | number;
    depth?: number;
}
export declare enum TableQueryBarType {
    professionalBar = "professionalBar",
    filterBar = "filterBar"
}
declare type Offset = {
    top?: number;
    left?: number;
    width?: number;
    height?: number;
};
interface TableState {
    headerOffset?: Offset;
    tableOffset?: Offset;
    width: number;
    columnWidth: number;
    dataKey: number;
    shouldFixedColumn: boolean;
    contentHeight: number;
    contentWidth: number;
    tableRowsMaxHeight: number[];
    isColumnResizing?: boolean;
    expandedRowKeys: string[] | number[];
    searchText: string;
    sortType?: SortType;
    scrollY: number;
    isScrolling?: boolean;
    data: object[];
    cacheData: object[];
    fixedHeader: boolean;
    fixedHorizontalScrollbar?: boolean;
    isTree?: boolean;
    selectedRowKeys: string[] | number[];
    selectionDirty?: boolean;
    [key: string]: any;
}
export declare const CUSTOMIZED_KEY = "__customized-column__";
export default class PerformanceTable extends React.Component<TableProps, TableState> {
    static displayName: string;
    static Column: typeof Column;
    static Cell: typeof Cell;
    static ColumnGroup: import("./ColumnGroup").IColumnGroup;
    static HeaderCell: typeof HeaderCell;
    static propTypes: {
        columns: PropTypes.Requireable<any[]>;
        autoHeight: PropTypes.Requireable<boolean>;
        affixHeader: PropTypes.Requireable<number | boolean>;
        affixHorizontalScrollbar: PropTypes.Requireable<number | boolean>;
        bordered: PropTypes.Requireable<boolean>;
        bodyRef: PropTypes.Requireable<(...args: any[]) => any>;
        className: PropTypes.Requireable<string>;
        classPrefix: PropTypes.Requireable<string>;
        children: PropTypes.Requireable<any>;
        cellBordered: PropTypes.Requireable<boolean>;
        clickScrollLength: PropTypes.Requireable<object>;
        data: PropTypes.Requireable<(object | null | undefined)[]>;
        defaultExpandAllRows: PropTypes.Requireable<boolean>;
        defaultExpandedRowKeys: PropTypes.Requireable<(string | number | null | undefined)[]>;
        defaultSortType: PropTypes.Requireable<string | boolean>;
        disabledScroll: PropTypes.Requireable<boolean>;
        expandedRowKeys: PropTypes.Requireable<(string | number | null | undefined)[]>;
        hover: PropTypes.Requireable<boolean>;
        height: PropTypes.Requireable<number>;
        headerHeight: PropTypes.Requireable<number>;
        locale: PropTypes.Requireable<object>;
        loading: PropTypes.Requireable<boolean>;
        loadAnimation: PropTypes.Requireable<boolean>;
        minHeight: PropTypes.Requireable<number>;
        rowKey: PropTypes.Requireable<string | number>;
        rowHeight: PropTypes.Requireable<number | ((...args: any[]) => any)>;
        renderTreeToggle: PropTypes.Requireable<(...args: any[]) => any>;
        renderRowExpanded: PropTypes.Requireable<(...args: any[]) => any>;
        rowExpandedHeight: PropTypes.Requireable<number>;
        renderEmpty: PropTypes.Requireable<(...args: any[]) => any>;
        renderLoading: PropTypes.Requireable<(...args: any[]) => any>;
        rowClassName: PropTypes.Requireable<string | ((...args: any[]) => any)>;
        rtl: PropTypes.Requireable<boolean>;
        style: PropTypes.Requireable<object>;
        sortColumn: PropTypes.Requireable<string>;
        sortType: PropTypes.Requireable<string | boolean>;
        showHeader: PropTypes.Requireable<boolean>;
        showScrollArrow: PropTypes.Requireable<boolean>;
        shouldUpdateScroll: PropTypes.Requireable<boolean>;
        translate3d: PropTypes.Requireable<boolean>;
        wordWrap: PropTypes.Requireable<boolean>;
        width: PropTypes.Requireable<number>;
        virtualized: PropTypes.Requireable<boolean>;
        isTree: PropTypes.Requireable<boolean>;
        onRowClick: PropTypes.Requireable<(...args: any[]) => any>;
        onRowContextMenu: PropTypes.Requireable<(...args: any[]) => any>;
        onScroll: PropTypes.Requireable<(...args: any[]) => any>;
        onSortColumn: PropTypes.Requireable<(...args: any[]) => any>;
        onExpandChange: PropTypes.Requireable<(...args: any[]) => any>;
        onTouchStart: PropTypes.Requireable<(...args: any[]) => any>;
        onTouchMove: PropTypes.Requireable<(...args: any[]) => any>;
        onDataUpdated: PropTypes.Requireable<(...args: any[]) => any>;
        highLightRow: PropTypes.Requireable<boolean>;
        /**
         * 显示查询条
         */
        queryBar: PropTypes.Requireable<boolean | object>;
        customizedCode: PropTypes.Requireable<string>;
        customizable: PropTypes.Requireable<boolean>;
        columnDraggable: PropTypes.Requireable<boolean>;
        columnTitleEditable: PropTypes.Requireable<boolean>;
        columnsDragRender: PropTypes.Requireable<object>;
        rowSelection: PropTypes.Requireable<object>;
        rowDraggable: PropTypes.Requireable<boolean>;
    };
    static ProfessionalBar: typeof ProfessionalBar;
    static DynamicFilterBar: typeof DynamicFilterBar;
    static defaultProps: {
        classPrefix: string;
        data: never[];
        defaultSortType: string;
        height: number;
        rowHeight: number;
        headerHeight: number;
        minHeight: number;
        rowExpandedHeight: number;
        hover: boolean;
        highLightRow: boolean;
        showHeader: boolean;
        showScrollArrow: boolean;
        bordered: boolean;
        rowKey: string;
        translate3d: boolean;
        shouldUpdateScroll: boolean;
        locale: {
            emptyMessage: string;
            loading: string;
        };
        clickScrollLength: {
            horizontal: number;
            vertical: number;
        };
    };
    static getDerivedStateFromProps(props: TableProps, state: TableState): {
        cacheData: object[];
        isTree: boolean | undefined;
        data: object[];
    } | null;
    translateDOMPositionXY: null;
    scrollListener: any;
    bscroll: any;
    tableRef: React.RefObject<any>;
    scrollbarYRef: React.RefObject<any>;
    scrollbarXRef: React.RefObject<any>;
    tableBodyRef: React.RefObject<any>;
    affixHeaderWrapperRef: React.RefObject<any>;
    mouseAreaRef: React.RefObject<any>;
    headerWrapperRef: React.RefObject<any>;
    tableHeaderRef: React.RefObject<any>;
    wheelWrapperRef: React.RefObject<any>;
    tableRows: {
        [key: string]: [HTMLElement, any];
    };
    mounted: boolean;
    disableEventsTimeoutId: null;
    scrollY: number;
    scrollX: number;
    wheelHandler: any;
    minScrollY: any;
    minScrollX: any;
    mouseArea: any;
    touchX: any;
    touchY: any;
    wheelListener: any;
    touchStartListener: any;
    touchMoveListener: any;
    setRowBottomBorderList: Array<number>;
    nextRowZIndex: Array<number>;
    _cacheCells: any;
    _cacheScrollX: number;
    _cacheRenderCols: any;
    _cacheChildrenSize: number;
    _visibleRows: never[];
    _lastRowIndex: string | number;
    tableStore: TableStore;
    constructor(props: TableProps);
    listenWheel: (deltaX: number, deltaY: number) => void;
    componentDidMount(): void;
    shouldComponentUpdate(nextProps: TableProps, nextState: TableState): boolean;
    componentDidUpdate(prevProps: TableProps, prevState: TableState): void;
    componentWillUnmount(): void;
    getExpandedRowKeys(): string[] | number[];
    getSortType(): "desc" | "asc" | undefined;
    getScrollCellGroups(): any;
    getFixedLeftCellGroups(): any;
    getFixedRightCellGroups(): any;
    isRTL(): boolean;
    getRowHeight(rowData?: {}): number;
    /**
     * 获取表头高度
     */
    getTableHeaderHeight(): number;
    /**
     * Table 个性化高度变更
     */
    handleHeightTypeChange(): void;
    /**
     * 获取 Table 需要渲染的高度
     */
    getTableHeight(): number;
    /**
     * 处理 column props
     * @param column
     */
    getColumnProps(column: any): Pick<any, string | number | symbol>;
    /**
     * 处理columns json -> reactNode
     * @param columns
     */
    processTableColumns(columns: any[]): (JSX.Element | undefined)[];
    /**
     * 获取 columns ReactElement 数组
     * - 处理 children 中存在 <Column> 数组的情况
     * - 过滤 children 中的空项
     */
    getTableColumns(): React.ReactNodeArray;
    getRecordKey: (record: object, index: number) => any;
    getCheckboxPropsByItem: (item: object, index: number) => any;
    getDefaultSelection(): any[];
    handleSelect: (record: object, rowIndex: number, e: CheckboxChangeEvent) => void;
    handleSelectRow: (selectionKey: string, index: number, onSelectFunc: SelectionItemSelectFn) => void;
    handleRadioSelect: (record: object, rowIndex: number, e: RadioChangeEvent) => void;
    renderSelectionBox: (type: "checkbox" | "radio" | undefined, rowData: object, rowIndex: number) => JSX.Element;
    renderRowSelection(fixed: any): JSX.Element | undefined;
    getCellDescriptor(): any;
    setOffsetByAffix: () => void;
    handleWindowScroll: () => void;
    affixHorizontalScrollbar: () => void;
    affixTableHeader: () => void;
    handleSortColumn: (dataKey: string) => void;
    handleColumnResizeEnd: (columnWidth: number, _cursorDelta: number, dataKey: any, index: number) => void;
    handleColumnResizeStart: (width: number, left: number, fixed: boolean) => void;
    handleColumnResizeMove: (width: number, left: number, fixed: boolean) => void;
    handleTreeToggle: (rowKey: any, _rowIndex: number, rowData: any) => void;
    setSelectedRowKeys(selectedRowKeys: string[], selectionInfo: SelectionInfo): void;
    handleScrollX: (delta: number) => void;
    handleScrollY: (delta: number) => void;
    handleWheel: (deltaX: number, deltaY: number) => void;
    debounceScrollEndedCallback: () => void;
    handleTouchStart: (event: React.TouchEvent<Element>) => void;
    handleTouchMove: ({ e }: {
        e: any;
    }) => void;
    /**
     * 当用户在 Table 内使用 tab 键，触发了 onScroll 事件，这个时候应该更新滚动条位置
     * https://github.com/rsuite/rsuite/issues/234
     */
    handleBodyScroll: (event: React.UIEvent<HTMLDivElement>) => void;
    handleDragEnd: (resultDrag: DropResult, provided: ResponderProvided) => void;
    initPosition(): void;
    initBScroll(tableBody: any): void;
    updatePosition(): void;
    updatePositionByFixedCell(): void;
    shouldHandleWheelX: (delta: number) => boolean;
    shouldHandleWheelY: (delta: number) => boolean;
    shouldRenderExpandedRow(rowData: object): boolean;
    addPrefix: (name: string) => string;
    calculateRowMaxHeight(): void;
    calculateTableWidth: () => void;
    calculateTableContentWidth(prevProps: TableProps): void;
    calculateTableContextHeight(prevProps?: TableProps): void;
    getControlledScrollTopValue(value: any): number[];
    getControlledScrollLeftValue(value: any): number[];
    /**
     * public method
     */
    scrollTop: (top?: number) => void;
    scrollLeft: (left?: number) => void;
    scrollTo: (coord: {
        x: number;
        y: number;
    }) => void;
    bindTableRowsRef: (index: string | number, rowData: any, provided?: DraggableProvided | undefined) => (ref: HTMLElement) => void;
    bindRowClick: (rowIndex: string | number, index: string | number, rowData: object) => (event: React.MouseEvent<Element, MouseEvent>) => void;
    onRowClick(rowData: any, event: any, rowIndex: any, index: any): void;
    bindRowContextMenu: (rowData: object) => (event: React.MouseEvent<Element, MouseEvent>) => void;
    renderRowData(bodyCells: any[], rowData: any, props: TableRowProps, shouldRenderExpandedRow?: boolean): JSX.Element;
    calculateFixedAndScrollColumn(cells: any[]): {
        fixedLeftCells: any[];
        fixedRightCells: any[];
        scrollCells: any[];
        fixedLeftCellGroupWidth: number;
        fixedRightCellGroupWidth: number;
    };
    renderRow(props: TableRowProps, cells: any[], shouldRenderExpandedRow?: boolean, rowData?: any): JSX.Element;
    renderRowExpanded(rowData?: object): JSX.Element | null;
    renderMouseArea(): JSX.Element;
    renderTableHeader(headerCells: any[], rowWidth: number): JSX.Element;
    renderTableBody(bodyCells: any[], rowWidth: number): JSX.Element;
    renderInfo(locale: PerformanceTableLocal): {} | null | undefined;
    renderScrollbar(): JSX.Element | null;
    /**
     *  show loading
     */
    renderLoading(): {} | null | undefined;
    renderTableToolbar(): JSX.Element | null;
    render(): JSX.Element;
}
export {};
