import { PerPageOptions } from '@patternfly/react-core';
import { Dispatch, ReactNode, SetStateAction } from 'react';
import { IPageAction } from '../PageActions/PageAction';
import { PageTableViewType } from '../PageToolbar/PageTableViewType';
import { IFilterState, IToolbarFilter } from '../PageToolbar/PageToolbarFilter';
import { ITableColumn } from './PageTableColumn';
export type PageTableCommonProps<T extends object> = {
    id?: string;
    keyFn: (item: T) => string | number;
    itemCount?: number;
    pageItems: T[] | undefined;
    toolbarActions?: IPageAction<T>[];
    tableColumns: ITableColumn<T>[];
    rowActions?: IPageAction<T>[];
    toolbarFilters?: IToolbarFilter[];
    filterState?: IFilterState;
    setFilterState?: Dispatch<SetStateAction<IFilterState>>;
    clearAllFilters?: () => void;
    page: number;
    perPage: number;
    setPage: (page: number) => void;
    setPerPage: (perPage: number) => void;
    perPageOptions?: PerPageOptions[];
    sort?: string;
    setSort?: (sort: string) => void;
    sortDirection?: 'asc' | 'desc';
    setSortDirection?: (sortDirection: 'asc' | 'desc') => void;
    compact?: boolean;
    borderless?: boolean;
    autoHidePagination?: boolean;
    isSelected?: (item: T) => boolean;
    isSelectMultiple?: boolean;
    selectedItems?: T[];
    selectItem?: (item: T) => void;
    unselectItem?: (item: T) => void;
    selectItems?: (items: T[]) => void;
    unselectAll?: () => void;
    onSelect?: (item: T) => void;
    errorStateTitle: string;
    error?: Error;
    emptyState?: ReactNode;
    showSelect?: boolean;
    disableTableView?: boolean;
    disableListView?: boolean;
    disableCardView?: boolean;
    defaultTableView?: PageTableViewType;
    hideTable?: boolean;
    disableBodyPadding?: boolean;
    disablePagination?: boolean;
    defaultSubtitle?: ReactNode;
    expandedRow?: (item: T) => ReactNode;
    disableLastRowBorder?: boolean;
    maxSelections?: number;
    topContent?: React.ReactNode;
    toolbarContent?: React.ReactNode;
    scrollTopContent?: boolean;
    limitFiltersToOneOrOperation?: boolean;
    defaultExpandedRows?: boolean;
};
export type PageTableProps<T extends object> = WithEmptyState<T> | WithoutEmptyState<T>;
interface WithEmptyState<T extends object> extends PageTableCommonProps<T> {
    emptyState: ReactNode;
    emptyStateTitle?: never;
    emptyStateDescription?: never;
    emptyStateIcon?: never;
    emptyStateNoDataIcon?: never;
    emptyStateActions?: never;
    emptyStateButtonIcon?: never;
    emptyStateButtonText?: never;
    emptyStateButtonClick?: never;
    emptyStateVariant?: never;
}
interface WithoutEmptyState<T extends object> extends PageTableCommonProps<T> {
    emptyState?: never;
    emptyStateTitle?: string;
    emptyStateDescription?: string | null;
    emptyStateIcon?: React.ComponentClass;
    emptyStateNoDataIcon?: React.ComponentClass;
    emptyStateActions?: IPageAction<T>[];
    emptyStateButtonIcon?: React.ReactNode;
    emptyStateButtonText?: string | null;
    emptyStateButtonClick?: () => void;
    emptyStateVariant?: 'default' | 'light' | 'dark' | 'darker';
}
export declare function PageTable<T extends object>(props: PageTableProps<T>): string | number | true | Iterable<ReactNode> | import("react/jsx-runtime").JSX.Element;
export {};
