import { type ButtonHTMLAttributes, type HTMLAttributes, type ReactNode } from 'react';
import { DropdownProps } from '../Dropdown/Dropdown';
type TableProps = TableNotSelectableProps | TableSelectablePropsMultiple | TableSelectablePropsSingle;
export type TablePrimitive = string | number | boolean;
export type TableItemWithTemplate = {
    value: TablePrimitive;
    template: ReactNode;
};
export type TableCellValue = TablePrimitive | TableItemWithTemplate;
export type TableItem = Record<string, TableCellValue>;
export type TableItemSelection = Record<string, TableItem>;
type TableNotSelectableProps = {
    headers: {
        key: string;
        title: string | ReactNode;
    }[];
    id: string;
    data: TableItem[];
    selectable?: false;
    multiple?: never;
    action?: (args: TableItem) => void;
    actions?: (args: TableItem) => TableActions[];
    tableProps?: HTMLAttributes<HTMLTableElement>;
    currentSelection?: never;
    setCurrentSelection?: never;
    loading?: boolean;
    numberOfRows?: number;
    footer?: ReactNode;
} & HTMLAttributes<HTMLDivElement>;
type TableSelectablePropsMultiple = {
    selectable?: true;
    multiple?: true;
    currentSelection?: TableItemSelection;
    setCurrentSelection?: (args: TableItemSelection) => void;
} & Omit<TableNotSelectableProps, 'selectable' | 'currentSelection' | 'setCurrentSelection' | 'multiple'>;
type TableSelectablePropsSingle = {
    selectable?: true;
    multiple?: false;
    currentSelection?: TableItem | undefined;
    setCurrentSelection?: (args: TableItem) => void;
} & Omit<TableNotSelectableProps, 'selectable' | 'currentSelection' | 'setCurrentSelection' | 'multiple'>;
export type TableActions = ButtonHTMLAttributes<HTMLButtonElement> & {
    tooltip?: string;
    dropdown?: DropdownProps;
};
/**
 * Table component for rendering data
 *
 * @example
 * <Table
 *   headers={[
 *     { key: 'id', title: 'ID' },
 *     { key: 'name', title: 'Name' },
 *   ]}
 *   id="id"
 *   data={[
 *     { id: 1, name: 'John' },
 *     { id: 2, name: 'Jane' },
 *   ]}
 *   selectable={true}
 *   multiple={true}
 *   currentSelection={{}}
 *   setCurrentSelection={(selection) => console.log(selection)}
 *   action={(item) => console.log(item)}
 *   actions={(item) => [
 *     { children: 'Edit', onClick: () => console.log('Edit', item) },
 *   ]}
 *   loading={false}
 *   numberOfRows={10}
 * />
 *
 * @param {Object} props - The properties for the Table component.
 * @param {Array<{ key: string, title: string | ReactNode }>} props.headers - The headers of the table.
 * @param {string} props.id - The unique identifier for each row.
 * @param {Array<TableItem>} props.data - The data to be displayed in the table.
 * @param {boolean} [props.selectable=false] - Whether the table rows are selectable.
 * @param {boolean} [props.multiple=true] - Whether multiple rows can be selected.
 * @param {TableItemSelection | TableItem} [props.currentSelection={}] - The current selection of rows.
 * @param {Function} [props.setCurrentSelection] - The function to update the current selection.
 * @param {Function} [props.action] - The function to be called when a row is clicked.
 * @param {Function} [props.actions] - The function to generate actions for each row.
 * @param {Object} [props.tableProps] - Additional properties for the table element.
 * @param {boolean} [props.loading=false] - Whether the table is in a loading state.
 * @param {number} [props.numberOfRows=10] - The number of rows to display when loading.
 * @param {Object} restProps - Additional properties for the container div.
 *
 * @returns {ReactNode} The rendered Table component.
 */
export declare function Table({ headers, id, data, action, actions, selectable, multiple, currentSelection, setCurrentSelection, tableProps, loading, numberOfRows, footer, ...restProps }: TableProps): ReactNode;
export {};
//# sourceMappingURL=Table.d.ts.map