import { ReactNode, CSSProperties } from 'react';
import { TreeNodeProps } from '../../ComponentProps/TreeNodeProps';
interface NewNode {
    sourceId?: string;
    payloadSourceId?: string;
    action?: 'addAbove' | 'addBelow' | 'addInside';
    type?: 'input' | 'inputWithDropdown';
    options?: [];
    selectedOption?: string;
    value?: string;
    error?: string;
    label?: string;
    confirmIconTooltip?: string;
    cancelIconTooltip?: string;
    firstNodeKey?: string;
}
declare type JSX = ReactNode | JSX.Element[] | string | null;
export interface TableCellProps {
    treeRowRef?: React.RefObject<HTMLDivElement | null>;
    col: any;
    colIndex?: number;
    columnMeta?: ColumnMeta;
    node: any;
    selected: string[];
    select: string | null;
    onCheckBoxChange: (e: any, node: string[] | any) => void;
    onToggleExpand: (node: any) => void;
    index?: number;
    onAddConfirm?: (_name: string, _type?: Option) => void;
    onAddCancel?: () => void;
    handleEditFieldError?: (inputText: string) => string;
    isExpanding?: boolean;
    columnTextColor?: string;
    hideOnDisable?: boolean;
    addModuleInputWidth?: number;
    addModuleSelectWidth?: number;
    disableEditLabelConfirmIcon?: boolean;
    isEditable?: boolean;
    setIsEditable?: (id: string | null) => void;
}
export type RootNode = {
    node: any;
    select: 'radio' | 'checkbox' | 'none';
    cell?: (row: any) => JSX;
    actions?: (row: any, treeRowRef?: React.RefObject<HTMLDivElement | null>) => JSX;
};
export interface TableHeadProps {
    columnsData: any[];
    columnMeta?: ColumnMeta[];
    totalWidth?: string;
    rootNode?: RootNode;
    selected: string[];
    selectedNode?: string;
    tableHeaderBgColor?: string;
    onCheckBoxChange: (e: any, node: string[] | any) => void;
    hideOnDisable?: boolean;
    transparentHeader?: boolean;
    showHeader?: boolean;
}
export interface TableBodyProps {
    flattenedTreeData: any[];
    columnsData: any[];
    columnMeta?: ColumnMeta[];
    totalWidth?: string;
    rowHeight?: number;
    startIndex?: number;
    totalHeight?: number;
    selected: string[];
    select: string | null;
    onRowClick: (e: any, node: any) => void;
    onToggleExpand: (node: TreeNodeProps) => void;
    onCheckBoxChange: (e: any, node: string[] | any) => void;
    newNode?: NewNode;
    onAddConfirm?: (_name: string, _type?: Option) => void;
    onAddCancel?: () => void;
    handleEditFieldError?: (inputText: string) => string;
    expanding?: string | null;
    rootNode?: TreeNodeProps;
    selectedNode?: string;
    hideOnDisable?: boolean;
    addModuleInputWidth?: number;
    addModuleSelectWidth?: number;
    disableEditLabelConfirmIcon?: boolean;
    isEditable?: boolean;
    setIsEditable?: (id: string | null) => void;
}
export interface TableRowProps {
    node: any;
    columnsData: any[];
    columnMeta?: ColumnMeta[];
    selected: string[];
    select: string | null;
    onRowClick: (e: any, node: any) => void;
    onToggleExpand: (node: TreeNodeProps) => void;
    onCheckBoxChange: (e: any, node: string[] | any) => void;
    index?: number;
    onAddConfirm?: (_name: string, _type?: Option) => void;
    onAddCancel?: () => void;
    handleEditFieldError?: (inputText: string) => string;
    isExpanding?: boolean;
    selectedNode?: string;
    hideOnDisable?: boolean;
    addModuleInputWidth?: number;
    addModuleSelectWidth?: number;
    disableEditLabelConfirmIcon?: boolean;
    isEditable?: boolean;
    setIsEditable?: (id: string | null) => void;
    style?: CSSProperties;
}
export interface Column {
    name: string | JSX;
    accessor: string;
    width: string;
    isClickable?: boolean;
    cell?: (row: any) => JSX;
    actions?: (row: any, treeRowRef?: React.RefObject<HTMLDivElement | null>) => JSX;
    isTree?: boolean;
    defaultValue?: string;
    defaultActions?: () => JSX;
}
export interface ColumnMeta {
    width: string;
    sticky: boolean;
    left: string;
    zIndex: number;
}
export interface TreeTableProps {
    treeData: any;
    columnsData: Column[];
    selected?: string[];
    select?: 'radio' | 'checkbox' | 'none';
    onChange?: (e: any, node: string[] | any) => void;
    onClick?: (e: React.MouseEvent<HTMLDivElement>, row: TreeNodeProps) => void;
    onExpand?: (node: TreeNodeProps) => void;
    loadMore?: (_direction?: string) => void;
    tableBorder?: string;
    height?: number | string;
    newNode?: NewNode;
    onAddConfirm?: (_name: string, _type?: Option) => void;
    onAddCancel?: () => void;
    loading?: boolean;
    rootNode?: RootNode;
    getContentLength?: number;
    handleEditFieldError?: (inputText: string) => string;
    pagination?: boolean;
    selectedNode?: string;
    tableHeaderBgColor?: string;
    hideOnDisable?: boolean;
    freezeColumns?: number;
    addModuleInputWidth?: number;
    addModuleSelectWidth?: number;
    onScroll?: () => void;
    onScrollEnd?: () => void;
    disableEditLabelConfirmIcon?: boolean;
    transparentHeader?: boolean;
    navigateTreeNode?: string | null;
    handleRemoveNavigateTreeNode?: () => void;
    scrollThreshold?: number;
    showHeader?: boolean;
    resetScroll?: boolean;
    setResetScroll?: (value: boolean) => void;
}
type OptionValue = any;
export interface Option {
    [key: string]: OptionValue;
}
export {};
