import { ObjectTS } from "@intuitionrobotics/ts-common";
import { Stylable } from "../tools/Stylable";
import React = require("react");
export type HeaderRenderer<T extends ObjectTS> = {
    [P in keyof T]: (columnKey: P) => React.ReactNode;
};
export type ActionItemRenderer<P> = (rowIndex: number, actionKey: P) => React.ReactNode;
export type ActionsRenderer<A extends ObjectTS> = {
    [P in keyof A]: ActionItemRenderer<P>;
};
export type CellRenderer<P, V, T> = (cellValue: V, rowIndex: number, columnKey: P, rowObject: T) => React.ReactNode;
export type RowRenderer<T extends ObjectTS> = {
    [P in keyof T]: CellRenderer<P, T[P], T>;
};
export type CellStyle<P, V, T> = (rowObject: T, rowIndex: number, cellValue?: V, columnKey?: P) => Stylable;
export type TableProps<T extends ObjectTS, A extends ObjectTS = never> = Stylable & {
    id: string;
    header: (keyof T)[];
    rows: T[];
    headerRenderer: ((columnKey: keyof T) => React.ReactNode) | HeaderRenderer<T>;
    cellRenderer: CellRenderer<keyof T, T[keyof T], T> | RowRenderer<T>;
    actions?: (keyof A)[];
    actionsRenderer?: ActionsRenderer<A> | ActionItemRenderer<keyof A>;
    body?: Stylable;
    tr?: Stylable | ((rowValue: T, rowIndex: number) => Stylable);
    td?: Stylable | CellStyle<keyof T, T[keyof T], T>;
};
export declare class TS_Table<T extends ObjectTS, A extends ObjectTS = never> extends React.Component<TableProps<T, A>, any> {
    constructor(p: TableProps<T, A>);
    render(): React.JSX.Element;
    private renderTableHeader;
    private renderTableBody;
    private resolveTDStyleable;
    private resolveTRStyleable;
}
