import * as React from 'react';
import { Nullish } from '@table-library/react-table-library/types/common';
import { Theme } from '@table-library/react-table-library/types/theme';
import { Layout } from '@table-library/react-table-library/types/layout';
import { ColumnResizeProps } from '@table-library/react-table-library/types/resize';
import { Select } from '@table-library/react-table-library/types/select';
import { Tree } from '@table-library/react-table-library/types/tree';
import { Sort } from '@table-library/react-table-library/types/sort';
import { Pagination } from '@table-library/react-table-library/types/pagination';
export declare type Identifier = string | number;
export declare type TableNode = {
    id: Identifier;
    nodes?: TableNode[] | Nullish;
    [prop: string]: any;
};
export declare type ExtendedNode<T extends TableNode> = T & {
    treeXLevel?: number;
    treeYLevel?: number;
    parentNode?: ExtendedNode<T> | Nullish;
    ancestors?: ExtendedNode<T>[];
};
export declare type Data<T extends TableNode> = {
    pageInfo?: any;
    nodes: T[];
};
export declare type RestProps = Record<string, any>;
export declare type Event = React.SyntheticEvent | React.KeyboardEvent;
export declare type OnClick<T extends TableNode> = (node: T, event: Event) => void;
export declare type CellProps = {
    className?: string;
    pinLeft?: boolean;
    pinRight?: boolean;
    stiff?: boolean;
    gridColumnStart?: number;
    gridColumnEnd?: number;
    onClick?: (event: React.SyntheticEvent) => void;
    children?: React.ReactNode;
} & RestProps;
export declare type HeaderCellProps = {
    index?: number;
    className?: string;
    hide?: boolean;
    pinLeft?: boolean;
    pinRight?: boolean;
    stiff?: boolean;
    isFooter?: boolean;
    gridColumnStart?: number;
    gridColumnEnd?: number;
    resize?: ColumnResizeProps;
    children?: React.ReactNode;
} & RestProps;
export declare type RowProps<T extends TableNode> = {
    item: T;
    className?: string;
    disabled?: boolean;
    onClick?: OnClick<T>;
    onDoubleClick?: OnClick<T>;
    children: React.ReactNode;
} & RestProps;
export declare type BodyProps = {
    children: React.ReactNode;
} & RestProps;
export declare type HeaderRowProps = {
    isFooter?: boolean;
    className?: string;
    children: React.ReactNode;
} & RestProps;
export declare type HeaderProps = {
    children: React.ReactNode;
} & RestProps;
export declare type TableProps<T extends TableNode> = {
    data: Data<T>;
    theme?: Theme;
    layout?: Layout;
    sort?: Sort<T>;
    pagination?: Pagination<T>;
    select?: Select<T>;
    tree?: Tree<T>;
    onInit?: OnInitFunction;
    children?: (nodes: ExtendedNode<TableNode>[]) => React.ReactNode;
} & RestProps;
export declare type OnInitFunction = (node: HTMLTableElement) => void;
export declare type Features<T extends TableNode> = {
    select: Select<T> | Nullish;
    tree: Tree<T> | Nullish;
    sort: Sort<T> | Nullish;
    pagination: Pagination<T> | Nullish;
};
export declare type FeatureProps<T extends TableNode> = {
    theme?: string;
    className?: string;
    onClick: OnClick<T>;
};
export declare type GetRowProps<T extends TableNode> = (props: RowProps<T>, features: Features<T>) => FeatureProps<T>;
