import React, { Component, type JSX } from 'react';
import type { Connection } from '../Connection';
import type { IobTheme } from '../types';
interface Column {
    cellStyle?: Record<string, any>;
    editComponent?: React.FC<{
        value: any;
        rowData: Record<string, any>;
        onChange: (newValue: any) => void;
    }>;
    field: string;
    headerStyle?: Record<string, any>;
    hidden?: boolean;
    lookup?: Record<string, string>;
    editable?: boolean | 'never';
    title?: string;
    type?: 'string' | 'boolean' | 'numeric' | 'icon' | 'oid' | 'color';
    subField?: string;
    subLookup?: Record<string, string>;
    subStyle?: Record<string, any>;
}
interface TreeTableProps {
    data: Record<string, any>[];
    className?: string;
    /** name of table to save settings in localStorage */
    name?: string;
    columns: Column[];
    noSort?: boolean;
    onUpdate?: ((newData: Record<string, any>, oldData: Record<string, any>) => void) | ((addNew: true) => void);
    onDelete?: (oldData: Record<string, any>) => void;
    /** hide add button */
    noAdd?: boolean;
    themeType?: string;
    glowOnChange?: boolean;
    /** only if an oid type is used */
    socket?: Connection;
    /** Shift in pixels for every level */
    levelShift?: number;
    adapterName: string;
    theme: IobTheme;
}
interface TreeTableState {
    opened: string[];
    editMode: number | false;
    deleteMode: number | false;
    editData: Record<string, any> | null;
    order: 'desc' | 'asc';
    update: string[] | null;
    orderBy: string;
    showSelectColor: boolean;
    selectIdValue?: string | null;
    showSelectId?: boolean;
    data?: Record<string, any>[];
}
export declare class TreeTable extends Component<TreeTableProps, TreeTableState> {
    private selectCallback;
    private updateTimeout;
    constructor(props: TreeTableProps);
    static getDerivedStateFromProps(props: TreeTableProps, state: TreeTableState): Partial<TreeTableState>;
    renderCellEdit(item: Record<string, any>, col: Column): JSX.Element | null;
    onChange(col: Column, oldValue: string | number | boolean, newValue: string | number | boolean): void;
    renderCellEditSelect(col: Column, val: string | number): JSX.Element;
    renderCellEditString(col: Column, val: string): JSX.Element;
    renderCellEditNumber(col: Column, val: number): JSX.Element;
    renderCellEditCustom(col: Column, val: any, item: Record<string, any>): JSX.Element | null;
    renderCellEditBoolean(col: Column, val: boolean): JSX.Element;
    renderSelectColorDialog(): JSX.Element;
    renderCellEditColor(col: Column, val: string): JSX.Element;
    renderSelectIdDialog(): JSX.Element | null;
    renderCellEditObjectID(col: Column, val: string): JSX.Element;
    static renderCellNonEdit(item: Record<string, any>, col: Column): JSX.Element | string | number | null;
    renderCell(item: Record<string, any>, col: Column, level: number, i: number): JSX.Element;
    static renderCellWithSubField(item: Record<string, any>, col: Column): JSX.Element;
    renderLine(item: Record<string, any>, level?: number): JSX.Element | JSX.Element[] | null;
    handleRequestSort(property: string): void;
    renderHead(): JSX.Element;
    render(): JSX.Element | null;
}
export {};
