/**
 * @license chowa v1.1.3
 *
 * Copyright (c) Chowa Techonlogies Co.,Ltd.(http://www.chowa.cn).
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
import * as React from 'react';
import * as PropTypes from 'prop-types';
import TableColumn, { TableColumnProps, DataIndex, SortMode } from './table-column';
export interface Record {
    index?: React.ReactText;
    [key: string]: any;
}
export declare type Data = Record[];
export interface ColumnsWidthMap {
    [dataIndex: string]: number;
}
export interface ExpanedVisibleMap {
    [index: string]: boolean;
}
export interface FilterInfo {
    dataIndex: DataIndex;
    values: React.ReactText[];
}
export interface SorterInfo {
    dataIndex: DataIndex;
    mode: SortMode;
}
export interface UpdateParams {
    realColumnsWidthMap?: ColumnsWidthMap;
    realRowsHeightMap?: number[];
    expanedVisibleMap?: ExpanedVisibleMap;
    filterInfo?: FilterInfo;
    sorterInfo?: SorterInfo;
    selfSelectedIndexs?: React.ReactText[];
    highlightRowIndex?: React.ReactText;
    headerHeight?: number;
    contentScrollTop?: number;
    footerHeight?: number;
    scrollXStart?: boolean;
    scrollXEnd?: boolean;
}
export interface TableProps {
    className?: string;
    style?: React.CSSProperties;
    children: React.ReactElement<any>;
    size?: 'default' | 'small' | 'large';
    align?: 'left' | 'right' | 'center';
    loading?: boolean;
    data: Data;
    columns?: TableColumnProps[];
    bordered?: boolean;
    striped?: boolean;
    fixedHeader?: boolean;
    scrollHeight?: number;
    resizeable?: boolean;
    showHeader?: boolean;
    headerRowAttr?: (rowIndex: number) => React.Attributes;
    selectable?: boolean;
    selectedIndexs?: React.ReactText[];
    onSelect?: (record: Record) => void;
    onDeSelect?: (record: Record) => void;
    onSelectAll?: () => void;
    onDeSelectAll?: () => void;
    accordion?: boolean;
    expandedRowRender?: (record: Record) => React.ReactNode;
    expandedOpenNode?: React.ReactNode;
    expandedCloseNode?: React.ReactNode;
    onExpandedVisibleChange?: (visible: boolean, record: Record) => void;
    rowAttr?: (index: React.ReactText, record: Record) => React.Attributes;
    highlightRow?: boolean;
    footer?: React.ReactNode;
    noDataDescription?: React.ReactNode;
    noDataImg?: string;
    noDataImgStyle?: React.CSSProperties;
    draggable?: boolean;
    onRowDragEnd?: (data: Data, dragRecord: Record) => void;
    onColumDragEnd?: (columns: TableColumnProps[], dragColumn: TableColumnProps) => void;
}
export interface TableState {
    renderData?: Data;
    selfLoading?: boolean;
    renderColumns: TableColumnProps[];
    customColumnsWidthMap: ColumnsWidthMap;
    realColumnsWidthMap?: ColumnsWidthMap;
    realRowsHeightMap?: number[];
    expanedVisibleMap?: ExpanedVisibleMap;
    renderDataIndexs: DataIndex[];
    leftFixedColums: TableColumnProps[];
    leftFixedDataIndexs: DataIndex[];
    rightFixedColums: TableColumnProps[];
    rightFixedDataIndexs: DataIndex[];
    filterInfo?: FilterInfo;
    sorterInfo?: SorterInfo;
    headerHeight?: number;
    contentScrollTop?: number;
    footerHeight?: number;
    scrollXStart?: boolean;
    scrollXEnd?: boolean;
    selfSelectedIndexs?: React.ReactText[];
    highlightRowIndex?: React.ReactText;
}
declare class Table extends React.PureComponent<TableProps, TableState> {
    static propTypes: {
        className: PropTypes.Requireable<string>;
        style: PropTypes.Requireable<object>;
        size: PropTypes.Requireable<string>;
        align: PropTypes.Requireable<string>;
        loading: PropTypes.Requireable<boolean>;
        data: PropTypes.Requireable<any[]>;
        bordered: PropTypes.Requireable<boolean>;
        striped: PropTypes.Requireable<boolean>;
        fixedHeader: PropTypes.Requireable<boolean>;
        scrollHeight: PropTypes.Requireable<number>;
        columns: PropTypes.Requireable<any[]>;
        resizeable: PropTypes.Requireable<boolean>;
        showHeader: PropTypes.Requireable<boolean>;
        headerRowAttr: PropTypes.Requireable<(...args: any[]) => any>;
        selectable: PropTypes.Requireable<boolean>;
        selectedIndexs: PropTypes.Requireable<any[]>;
        onSelect: PropTypes.Requireable<(...args: any[]) => any>;
        onDeSelect: PropTypes.Requireable<(...args: any[]) => any>;
        onSelectAll: PropTypes.Requireable<(...args: any[]) => any>;
        onDeSelectAll: PropTypes.Requireable<(...args: any[]) => any>;
        accordion: PropTypes.Requireable<boolean>;
        expandedRowRender: PropTypes.Requireable<(...args: any[]) => any>;
        expandedOpenNode: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        expandedCloseNode: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        onExpandedVisibleChange: PropTypes.Requireable<(...args: any[]) => any>;
        rowAttr: PropTypes.Requireable<(...args: any[]) => any>;
        highlightRow: PropTypes.Requireable<boolean>;
        footer: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        noDataDescription: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        noDataImg: PropTypes.Requireable<string>;
        noDataImgStyle: PropTypes.Requireable<object>;
        draggable: PropTypes.Requireable<boolean>;
        onRowDragEnd: PropTypes.Requireable<(...args: any[]) => any>;
        onColumDragEnd: PropTypes.Requireable<(...args: any[]) => any>;
    };
    static defaultProps: {
        align: string;
        size: string;
        loading: boolean;
        data: any[];
        bordered: boolean;
        striped: boolean;
        fixedHeader: boolean;
        scrollHeight: number;
        resizeable: boolean;
        showHeader: boolean;
        selectedIndexs: any[];
        selectable: boolean;
        accordion: boolean;
        draggable: boolean;
    };
    static Column: typeof TableColumn;
    constructor(props: TableProps);
    componentDidUpdate(preProps: TableProps): void;
    private updateRenderData;
    private rowDragSorter;
    private columnDragSorter;
    private compileColums;
    private renderTable;
    render(): {};
}
export default Table;
