import * as React from "react";
import * as PropTypes from "prop-types";
import { Column, Props as ColumnProps } from "./Column";
import { ChildrenOf } from "../utils/types";
import "./Table.less";
export declare type SortDirection = "asc" | "desc";
export interface SortState {
    columnID?: string;
    direction?: SortDirection;
}
export declare type PageRangeSize = 1 | 3 | 5 | 7 | 9;
export interface ActionInput {
    callback(selectedRows: Set<any>): void;
    title: {
        singular: React.ReactNode;
        plural?: React.ReactNode;
    };
    icon?: string;
    hoverIcon?: string;
}
export interface Props {
    children?: ChildrenOf<typeof Column>;
    className?: string;
    data?: any[];
    filter?: Function;
    fixed?: boolean;
    initialPage?: number;
    initialSortState?: SortState;
    firstSortDirection?: SortDirection;
    onPageChange?: Function;
    onRowClick?: Function;
    onRowMouseOver?: (e: any, rowID: any, rowData: any) => void;
    onSortChange?: Function;
    onViewChange?: Function;
    pageSize?: number;
    paginated?: boolean;
    visiblePageRangeSize?: PageRangeSize;
    rowIDFn: Function;
    rowClassNameFn?: Function;
    noDataContent?: React.ReactNode;
    selectable?: boolean;
    singleActions?: Array<ActionInput>;
    checkboxClassName?: string;
    showSingleActionsOnHover?: boolean;
    singleActionsClassName?: string;
    selectedRowsHeaderContentType?: {
        singular: string;
        plural?: string;
    };
    selectedRowsHeaderContentTypeNoSelection?: string;
    selectedRowsHeaderActions?: Array<ActionInput>;
    disableSelectedRowsHeader?: boolean;
    selectedRowsColumnName?: string;
    preselectedRowFn?: Function;
    numDisplayedActions?: number;
    onSelect?: Function;
    lazy?: boolean;
    getData?: Function;
    numRows?: number;
}
interface State {
    currentPage: number;
    sortState: SortState;
    selectedRows: Set<any>;
    allSelected: boolean;
    allData: Set<any>;
    lazyPages: any[];
    pageLoading: boolean;
    allLoaded: boolean;
}
export declare const DEFAULT_VISIBLE_PAGE_RANGE_SIZE = 5;
export declare const cssClass: {
    BODY: string;
    HEADER: string;
    CLICKABLE_ROW: string;
    SELECTABLE: string;
    FIXED: string;
    NO_DATA: string;
    NO_DATA_CONTENT: string;
    ROW: string;
    ROW_ODD: string;
    ROW_EVEN: string;
    ROW_SELECTED: string;
    SINGLE_ACTIONS: string;
    SINGLE_ACTION_TRIGGER: string;
    ACTION_ICON: string;
    ACTION_ICON_CONTAINER: string;
    ACTION_HOVER_ICON: string;
    ACTION_TITLE: string;
    ACTION_MENU: string;
    ACTION_MENU_ITEM: string;
    ACTION_MENU_ITEM_TITLE: string;
    TABLE: string;
    CHECKBOX_HEADER: string;
};
export declare class Table2Beta extends React.Component<Props, State> {
    static propTypes: {
        children: PropTypes.Requireable<unknown[]>;
        className: PropTypes.Requireable<string>;
        data: PropTypes.Requireable<any[]>;
        filter: PropTypes.Requireable<(...args: any[]) => any>;
        fixed: PropTypes.Requireable<boolean>;
        initialPage: {
            (props: any, propName: any, componentName: any): Error;
            isRequired(props: any, propName: any, componentName: any): Error;
        };
        initialSortState: PropTypes.Requireable<PropTypes.InferProps<{
            columnID: PropTypes.Requireable<string>;
            direction: PropTypes.Requireable<"desc" | "asc">;
        }>>;
        firstSortDirection: PropTypes.Requireable<"desc" | "asc">;
        onPageChange: PropTypes.Requireable<(...args: any[]) => any>;
        onRowClick: PropTypes.Requireable<(...args: any[]) => any>;
        onRowMouseOver: PropTypes.Requireable<(...args: any[]) => any>;
        onSortChange: PropTypes.Requireable<(...args: any[]) => any>;
        onViewChange: PropTypes.Requireable<(...args: any[]) => any>;
        pageSize: PropTypes.Requireable<number>;
        paginated: PropTypes.Requireable<boolean>;
        visiblePageRangeSize: PropTypes.Requireable<number>;
        rowIDFn: PropTypes.Validator<(...args: any[]) => any>;
        rowClassNameFn: PropTypes.Requireable<(...args: any[]) => any>;
        noDataContent: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        selectable: PropTypes.Requireable<boolean>;
        checkboxClassName: PropTypes.Requireable<string>;
        singleActions: PropTypes.Requireable<any[]>;
        singleActionsClassName: PropTypes.Requireable<string>;
        showSingleActionsOnHover: PropTypes.Requireable<boolean>;
        lazy: PropTypes.Requireable<boolean>;
        getData: PropTypes.Requireable<(...args: any[]) => any>;
        numRows: PropTypes.Requireable<number>;
    };
    static defaultProps: {
        onPageChange: () => void;
        onSortChange: () => void;
        pageSize: number;
        visiblePageRangeSize: number;
        firstSortDirection: "asc";
        singleActions: any[];
        selectedRowsHeaderActions: any[];
        numDisplayedActions: number;
    };
    static Column: React.FunctionComponent<ColumnProps>;
    static sortDirection: {
        readonly ASCENDING: "asc";
        readonly DESCENDING: "desc";
    };
    constructor(props: Props);
    componentDidMount(): void;
    componentDidUpdate(): void;
    componentWillUnmount(): void;
    private _epoch;
    private _isMounted;
    /**
     * @param {number} page - 1-based index of the page to select.
     */
    setCurrentPage(page: any): Promise<void>;
    _fetchLazy(pageIdx: any): Promise<void>;
    /**
     * Resets all lazily-loaded data. Call this if you change the backing data
     * behind the `getData` function (i.e. apply a search filter).
     */
    lazyReset(): void;
    _getColumn(columnID: any): React.ReactElement<ColumnProps, string | ((props: any) => React.ReactElement<any, any>) | (new (props: any) => React.Component<any, any, any>)>;
    _toggleSort(columnID: any): void;
    _getSynchronousData(): {
        displayedData: any;
        numPages: number;
        allRows: any;
    };
    _getLazyData(): {
        displayedData: any;
        numPages: any;
    };
    _getDisplayedData(): {
        displayedData: any;
        numPages: any;
        allRows?: any;
    };
    actionIconAndHoverIcon: (action: ActionInput) => JSX.Element;
    _singleActionsRender(rowData: any): JSX.Element;
    render(): JSX.Element;
}
export {};
