import type * as React from 'react';
import type { Override } from '../helpers/overrides';
export type TreeLabelOverrides = {
    TreeItemContent?: Override;
    IconContainer?: Override;
    ExpandIcon?: Override;
    CollapseIcon?: Override;
    LeafIconContainer?: Override;
    LeafIcon?: Override;
};
export type TreeViewOverrides = {
    Root?: Override;
    TreeItemList?: Override;
    TreeItem?: Override;
    TreeLabel?: Override;
} & TreeLabelOverrides;
export type TreeNodeId = number | string;
export type TreeNodeData<T = any> = {
    id?: TreeNodeId;
    children?: TreeNodeData[];
    isExpanded?: boolean;
    label: ((node: TreeNodeData) => React.ReactNode) | string;
    info?: T;
    [key: string]: any;
};
export type TreeLabelProps = {
    hasChildren: boolean;
    isExpanded?: boolean;
    isSelected?: boolean;
    isFocusVisible?: boolean;
    label: ((node: TreeNodeData) => React.ReactNode) | string;
    overrides?: TreeLabelOverrides;
    node: TreeNodeData;
};
export type SharedStyleProps = {
    $hasChildren: boolean;
    $isExpanded: boolean;
    $isSelected: boolean;
    $isFocusVisible: boolean;
};
export type TreeNodeProps = {
    node: TreeNodeData;
    getId: (node: TreeNodeData) => TreeNodeId;
    onToggle?: (node: TreeNodeData) => void;
    overrides?: TreeViewOverrides;
    renderAll?: boolean;
    onKeyDown?: (e: KeyboardEvent, node: TreeNodeData) => unknown;
    onFocus?: (event: React.SyntheticEvent) => unknown;
    onBlur?: (event: React.SyntheticEvent) => unknown;
    selectedNodeId?: TreeNodeId;
    addRef: (id: TreeNodeId, ref: React.Ref<HTMLLIElement>) => unknown;
    removeRef: (id: TreeNodeId) => unknown;
    isFocusVisible?: boolean;
    indentGuides?: boolean;
};
export type StatefulContainerProps = {
    children: (props: TreeViewProps) => React.ReactNode;
} & TreeViewProps;
export type TreeViewProps = {
    data: TreeNodeData[];
    indentGuides?: boolean;
    onToggle?: (node: TreeNodeData) => void;
    overrides?: TreeViewOverrides;
    renderAll?: boolean;
    getId?: (node: TreeNodeData) => TreeNodeId;
    singleExpanded?: boolean;
};
