import React from 'react';

interface Node {
    id: string | number;
    name: string;
    data?: any;
    children?: Node[];
    expanded?: boolean;
    disabled?: boolean;
    selected?: boolean;
    selectable?: boolean;
}
type NodeState = {
    expanded: boolean;
    depth: number;
    selected: boolean;
    disabled: boolean;
    selectable: boolean;
    parent: Node | null;
};
type RenderOptions = Partial<{
    childClassName: string;
    expandTool: React.ReactNode;
    collapseTool: React.ReactNode;
    indentWidth: number;
}>;
type ChildRenderer = (node: Node, state: NodeState, props: TreeProps, callbacks: {
    expand: (node: Node) => void;
    collapse: (node: Node) => void;
    select: (node: Node) => void;
    deselect: (node: Node) => void;
}) => JSX.Element;
type FilterFn = (node: Node, filter: string) => boolean;
interface TreeProps {
    data: Node[];
    className?: string;
    childRenderer?: ChildRenderer;
    renderOptions?: RenderOptions;
    virtual?: boolean;
    onExpand?: (node: Node) => void;
    onCollapse?: (node: Node) => void;
    selectable?: boolean;
    multiSelect?: boolean;
    onSelect?: (node: Node) => void;
    onDeselect?: (node: Node) => void;
    disabled?: boolean;
    filterable?: boolean;
    filter?: string;
    filterFn?: FilterFn;
}
type TreeType = React.FC<TreeProps>;

declare const Tree: TreeType;

export { ChildRenderer, FilterFn, Node, NodeState, RenderOptions, TreeProps, TreeType, Tree as default };
