import type { IItemProps } from 'react-movable/lib/types';
export declare enum UIFlexibleTableLayout {
    InlineFlex = "InlineFlex",
    Wrapping = "Wrapping"
}
export interface UIFlexibleTableColumnType {
    title: string;
    key: string;
    className?: string;
    hidden?: boolean;
    tooltip?: string;
}
export type TableRowCells<T> = {
    [key: string]: T;
};
export interface UIFlexibleTableRowType<T> {
    key: string;
    cells: TableRowCells<T>;
    title?: string;
    className?: string;
    tooltip?: string;
}
export interface TableRowEventHandlerParameters<T> {
    readonly: boolean;
    rowIndex: number;
    rowKey: string;
    cells: TableRowCells<T>;
}
export interface TitleCellRendererParams {
    colIndex?: number;
    colKey?: string;
    isActionsColumn?: boolean;
    isIndexColumn?: boolean;
}
export interface CellRendererParams<T> extends TableRowEventHandlerParameters<T> {
    colIndex: number;
    colKey: string;
    isInRowLayout: boolean;
    value: T;
}
export interface CellRendererResult {
    content: React.ReactNode;
    title?: string | React.ReactNode;
    isSpan?: boolean;
    cellClassNames?: string | string[];
    tooltip?: string;
}
export type AddRowResultType = {
    scrollToRow?: number;
} | undefined;
export interface UIFlexibleTableProps<T> {
    addRowButton?: {
        ariaLabel?: string;
        label: string;
        title?: string;
        onClick?: () => AddRowResultType | Promise<AddRowResultType>;
    };
    columns: UIFlexibleTableColumnType[];
    id: string;
    isAddItemDisabled?: boolean;
    isContentLoading?: boolean;
    inRowLayoutMinWidth?: number;
    layout: UIFlexibleTableLayout;
    maxScrollableContentHeight?: number;
    maxWidth?: number;
    noRowBackground?: boolean;
    onBeforeTableRender?: (params: {
        rows: UIFlexibleTableRowType<T>[];
    }) => {
        rows: (UIFlexibleTableRowType<T> & {
            disabled: boolean;
        })[];
    };
    onDeleteRow?: (params: TableRowEventHandlerParameters<T>) => void;
    onRenderPrimaryTableActions?: (params: {
        readonly: boolean;
    }) => React.ReactElement[];
    onRenderSecondaryTableActions?: (params: {
        readonly: boolean;
    }) => React.ReactElement[];
    onRenderActions?: (params: TableRowEventHandlerParameters<T>) => React.ReactElement[];
    onRenderReorderActions?: (params: TableRowEventHandlerParameters<T>) => undefined | {
        up?: {
            disabled: boolean;
            tooltip?: string;
        };
        down?: {
            disabled: boolean;
            tooltip?: string;
        };
    };
    onRenderDeleteAction?: (params: TableRowEventHandlerParameters<T>) => {
        isDeleteDisabled: boolean;
        tooltip?: string;
    };
    onStartDragging?: (params: {
        elements: Element[];
        index: number;
    }) => void;
    onRenderRowContainer?: (params: {
        readonly: boolean;
        rowIndex?: number;
        isDragged: boolean;
    }) => {
        isDropWarning?: boolean;
    };
    onRenderCell: (params: CellRendererParams<T>) => CellRendererResult;
    onRenderRowDataContent?: (params: TableRowEventHandlerParameters<T>) => React.ReactNode | undefined;
    onRenderTitleColumnCell?: (params: TitleCellRendererParams) => CellRendererResult;
    onTableReorder?: (params: {
        oldIndex: number;
        newIndex: number;
    }) => void | {
        isDropDisabled: boolean;
    };
    onContentSizeChange?: (params: {
        height: number;
        width: number;
    }) => void;
    readonly?: boolean;
    rows: UIFlexibleTableRowType<T>[];
    showIndexColumn?: boolean;
    showColumnTitles?: boolean;
    showColumnTitlesInCells?: boolean;
    showRowTitles?: boolean;
    lockVertically?: boolean;
    reverseBackground?: boolean;
    noDataText?: string | React.ReactElement;
    isTouchDragDisabled?: boolean;
}
export interface NodeDragAndDropSortingParams {
    index?: number;
    isDragged: boolean;
    isOutOfBounds: boolean;
    isSelected: boolean;
    props: IItemProps;
    value: unknown;
}
export declare enum UIFlexibleTableNoDataAlignment {
    Left = "left",
    Right = "right",
    Center = "center"
}
//# sourceMappingURL=types.d.ts.map