import * as React from 'react';
import { ComponentPropsGetterC, TableCellRenderer } from 'react-table';
import 'react-table/react-table.css';
import './Table.css';
import { ColumnAlignment, IActionInfo, IAdditionalRowConfig, IColumnConfig, IGetRowState, IRowsConfig, IRowConfig } from './interfaces';
import { CellType } from './Cell';
import { FooterType } from './Footer';
export type { IActionInfo, IColumnConfig, IRowConfig, IRowsConfig, IAdditionalRowConfig };
export { CellType, FooterType };
export { ColumnAlignment };
export { mergeConfigs } from './config';
declare type ExpandDescriptor = {
    [key: string]: string | ExpandDescriptor;
};
interface ITableState<T> {
    columns: IRowConfig<T>;
    foldedColumns: IRowConfig<T>;
    expanded: ExpandDescriptor;
    page?: number;
    perPage?: number;
}
interface ITableProps<T> {
    ExtraComponent?: React.ComponentType<T>;
    BeforePaginationComponent?: React.ComponentType<{}>;
    Expander?: TableCellRenderer;
    expanderWidth?: number;
    columns: IRowConfig<T>;
    data: T[];
    foldableColumns?: boolean;
    getTheadThProps?: ComponentPropsGetterC;
    minWidth?: number;
    pagination?: boolean;
    page?: number;
    pages?: number;
    perPage?: number;
    totalCount?: number;
    getRowState?: IGetRowState<T>;
    containerClass?: string;
    noDataContent?: string;
    automaticPagination?: boolean;
    pageSizeOptions?: number[];
    onPageChange?(index: number): void;
    onPageSizeChange?(size: number): void;
}
export declare class Table<T> extends React.Component<ITableProps<T>, ITableState<T>> {
    static defaultProps: {
        foldableColumns: boolean;
        minWidth: number;
        page: number;
        pages: number;
        pagination: boolean;
        perPage: number;
    };
    state: {
        columns: IRowConfig<T>;
        expanded: {};
        foldedColumns: never[];
        page: number;
        perPage: number;
    };
    private divRef;
    private onResize;
    private get rowCount();
    private get pages();
    private get page();
    private get perPage();
    componentDidMount(): void;
    componentWillUnmount(): void;
    componentWillReceiveProps(nextProps: ITableProps<T>): void;
    render(): JSX.Element;
    private renderPagination;
    private getRowState;
    private getSubComponent;
    private canExpand;
    private onExpanded;
    private onPageChange;
    private onPageSizeChange;
    private onFilteredChange;
    private calculateFoldedColumns;
    private onTableDivRef;
    private getColumnsConfig;
    private constructNoDataComponent;
}
