import { BoxProps, ElementProps, Factory, MantineSpacing, StylesApiProps } from '../../core';
import { TreeController } from './use-tree';
export interface TreeNodeData {
    label: React.ReactNode;
    value: string;
    nodeProps?: Record<string, any>;
    children?: TreeNodeData[];
}
export interface RenderNodePayload {
    level: number;
    expanded: boolean;
    hasChildren: boolean;
    selected: boolean;
    node: TreeNodeData;
    elementProps: {
        className: string;
        style: React.CSSProperties;
        onClick: (event: React.MouseEvent) => void;
        'data-selected': boolean | undefined;
        'data-value': string;
    };
}
export type RenderNode = (payload: RenderNodePayload) => React.ReactNode;
export type TreeStylesNames = 'root' | 'node' | 'subtree' | 'label';
export type TreeCssVariables = {
    root: '--level-offset';
};
export interface TreeProps extends BoxProps, StylesApiProps<TreeFactory>, ElementProps<'ul'> {
    /** Data used to render nodes */
    data: TreeNodeData[];
    /** Horizontal padding of each subtree level, key of `theme.spacing` or any valid CSS value, `'lg'` by default */
    levelOffset?: MantineSpacing;
    /** Determines whether tree node with children should be expanded on click, `true` by default */
    expandOnClick?: boolean;
    /** Determines whether node should be selected on click, `false` by default */
    selectOnClick?: boolean;
    /** use-tree hook instance that can be used to manipulate component state */
    tree?: TreeController;
    /** A function to render tree node label */
    renderNode?: RenderNode;
    /** Determines whether selection should be cleared when user clicks outside of the tree, `false` by default */
    clearSelectionOnOutsideClick?: boolean;
    /** Determines whether tree nodes range can be selected with click when `Shift` key is pressed, `true` by default */
    allowRangeSelection?: boolean;
}
export type TreeFactory = Factory<{
    props: TreeProps;
    ref: HTMLUListElement;
    stylesNames: TreeStylesNames;
    vars: TreeCssVariables;
}>;
export declare const Tree: import("../../core").MantineComponent<{
    props: TreeProps;
    ref: HTMLUListElement;
    stylesNames: TreeStylesNames;
    vars: TreeCssVariables;
}>;
