import React from 'react';
import { DataTypeDefinition, SearchValue } from '@reltio/mdm-sdk';
import { useCollapsibleTableRows } from '../hooks/useCollapsibleTableRows';
import { DraggableAttributes } from '@dnd-kit/core';
export type ColumnFilter = {
    filter: string;
    value?: SearchValue;
};
export type ColumnFilterOptions = Array<{
    value: string;
    label: string;
    dataTypeDefinition: DataTypeDefinition;
}>;
export type ColumnData = {
    id: string;
    label: string;
    description?: string;
    dataTypeDefinition?: DataTypeDefinition;
    hideable?: boolean;
    autoResize?: boolean;
    initialWidth?: number;
    minWidth?: number;
    sortable?: boolean;
    filterable?: boolean;
    resizable?: boolean;
    nestedPath?: string[];
    headCellRenderer?: React.ElementType;
    rowCellValueRenderer?: React.ElementType;
    draggable?: boolean;
    filterOptions?: ColumnFilterOptions;
    [key: string]: unknown;
};
export type ColumnSize = {
    id: string;
    size?: number;
    manuallyChanged?: boolean;
};
export type GroupedColumns<TColumnData = ColumnData> = {
    id: string;
    label: string;
    columns: TColumnData[];
};
export type GroupedColumnsData<TColumnData = ColumnData> = GroupedColumns<TColumnData> | TColumnData;
export type CollapseContext = ReturnType<typeof useCollapsibleTableRows>['collapseContextValue'];
export type RowId = string | number;
export type RowValue = {
    rawValue: unknown;
    [key: string]: unknown;
};
export type ElementsRowsData = Array<RowValue>;
export type TableRowsData = Array<{
    data: Record<string, {
        height: number;
        indexPath?: Array<number>;
        nestedKey?: string;
        rowSpan?: number;
        values: React.ReactNode;
    }[]>;
    id?: RowId;
}>;
type RowCell = {
    values: unknown[];
    rowSpan: number;
    height: number;
};
type GetRowCellHeightArg = {
    columnIndex: number;
    columnData: ColumnData;
    rowIndex: number;
    rowValue: RowValue;
    cellIndex: number;
    cell: RowCell;
};
export type GetRowCellHeight = ({ columnIndex, columnData, rowIndex, rowValue, cellIndex, cell }: GetRowCellHeightArg) => number;
export type RenderRowCellProps = {
    columnIndex: number;
    columnData: ColumnData;
    rowIndex: number;
    rowValue: RowValue;
    cellIndex: number;
    cell: RowCell;
    CellValueRenderer: (props: unknown) => React.ReactElement;
};
export type RenderRowCell = ({ columnIndex, columnData, rowIndex, rowValue, cellIndex, cell, CellValueRenderer }: RenderRowCellProps) => React.ReactElement;
export type OnFilter = (event: {
    columnId: string;
    filter: ColumnFilter;
}) => void;
export type DraggableProps = DraggableAttributes & {
    ref: (element: HTMLElement | null) => void;
};
export type CellValue = {
    uri: string;
    value: unknown;
};
export declare enum TableVariant {
    Narrow = "narrow",
    Wide = "wide"
}
export declare enum HeadColorVariant {
    Grey = "grey",
    White = "white"
}
export {};
