import React from 'react';
import { TableBodyProps, TableCellProps, TablePaginationProps, TableProps, TableRowProps } from '@mui/material';
import { TableContainerProps } from '@mui/material/TableContainer/TableContainer';
import { StartonTableOrder } from './starton-table.helpers';
import { StartonTableHeadProps } from './StartonTableHead';
import { StartonTableTotalProps } from './StartonTableTotal';
export interface StartonTableOrderProps<Value> {
    orderBy: keyof Value;
    order?: StartonTableOrder;
}
export interface StartonTableSelectableProps<Value> {
    selectKey?: keyof Value | undefined;
}
export interface StartonTableOptions {
    dense?: boolean | undefined;
}
export interface StartonTableHeadExtraProps<Value> extends Pick<StartonTableHeadProps<Value>, 'label' | 'headCells' | 'tableHeadProps' | 'tableHeadRowProps'> {
    onRequestSort?: (event: React.MouseEvent<unknown>, property: keyof Value | string) => void;
    onSelectAllClick?: (event: React.ChangeEvent<HTMLInputElement>) => void;
}
export interface StartonTableRows<Value> {
    handleClick?: (event: React.MouseEvent<unknown>, row: Value) => void;
    handlePageChange?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent> | null, newPage: number) => void;
    handleChangeRowsPerPage?: (event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => void;
}
export interface StartonTableProps<Value, Data extends Array<[string, Value]>> {
    data: Data | null;
    head: StartonTableHeadExtraProps<Value>;
    order: StartonTableOrderProps<Value>;
    children: React.FC<{
        row: Value;
        rowKey: string;
        index: number;
    }>;
    rows?: StartonTableRows<Value>;
    selectable?: StartonTableSelectableProps<Value> | undefined;
    options?: StartonTableOptions | undefined;
    collapseChildren?: React.FC<{
        row: Value;
        rowKey: string;
        index: number;
    }>;
    tableContainerProps?: TableContainerProps;
    tableProps?: TableProps;
    tableBodyProps?: TableBodyProps;
    tableTotal?: StartonTableTotalProps;
    tablePaginationProps?: Omit<TablePaginationProps, 'onPageChange' | 'onRowsPerPageChange'>;
    tableRowsProps?: TableRowProps;
    tableCellsProps?: TableCellProps;
}
export declare function StartonTable<Value>(props: StartonTableProps<Value, Array<[string, Value]>>): JSX.Element;
