import { type Component, type PropType, type VNodeChild } from 'vue';
import { type BoxProps } from '../../core';
import type { TreeDragDropPayload } from './move-tree-node/move-tree-node';
import type { TreeAllowDrop, TreeDragHandleProps } from './use-tree-node-drag-drop';
import { type TreeController } from './use-tree';
export interface TreeNodeData {
    label: VNodeChild | (() => VNodeChild);
    value: string;
    nodeProps?: Record<string, any>;
    children?: TreeNodeData[];
    hasChildren?: boolean;
}
export interface RenderTreeNodePayload {
    level: number;
    expanded: boolean;
    hasChildren: boolean;
    selected: boolean;
    isRoot: boolean;
    isLoading: boolean;
    loadError: Error | null;
    node: TreeNodeData;
    tree: TreeController;
    elementProps: Record<string, any>;
    dragHandleProps: TreeDragHandleProps | undefined;
}
export type RenderNode = (payload: RenderTreeNodePayload) => VNodeChild;
export type TreeStylesNames = 'root' | 'node' | 'subtree' | 'label';
export type TreeCssVariables = {
    root: '--level-offset';
};
export interface TreeDragState {
    draggedValue: string | null;
    currentDropTarget: HTMLElement | null;
}
export interface TreeProps extends BoxProps {
    data: TreeNodeData[];
    levelOffset?: string | number;
    expandOnClick?: boolean;
    expandOnSpace?: boolean;
    checkOnSpace?: boolean;
    selectOnClick?: boolean;
    tree?: TreeController;
    renderNode?: RenderNode;
    clearSelectionOnOutsideClick?: boolean;
    allowRangeSelection?: boolean;
    keepMounted?: boolean;
    onDragDrop?: (payload: TreeDragDropPayload) => void;
    allowDrop?: TreeAllowDrop;
    withDragHandle?: boolean;
    withLines?: boolean;
}
export type TreeFactory = any;
export declare const Tree: import("../..").WithBoxProps<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
    component: {
        type: PropType<string | Component>;
        default: string;
    };
    data: {
        type: PropType<TreeNodeData[]>;
        required: true;
    };
    levelOffset: {
        type: PropType<string | number>;
        default: string;
    };
    expandOnClick: {
        type: BooleanConstructor;
        default: boolean;
    };
    expandOnSpace: {
        type: BooleanConstructor;
        default: boolean;
    };
    checkOnSpace: {
        type: BooleanConstructor;
        default: boolean;
    };
    selectOnClick: {
        type: BooleanConstructor;
        default: boolean;
    };
    tree: {
        type: PropType<TreeController>;
        default: undefined;
    };
    renderNode: {
        type: PropType<RenderNode>;
        default: undefined;
    };
    clearSelectionOnOutsideClick: {
        type: BooleanConstructor;
        default: boolean;
    };
    allowRangeSelection: {
        type: BooleanConstructor;
        default: boolean;
    };
    keepMounted: {
        type: BooleanConstructor;
        default: boolean;
    };
    onDragDrop: {
        type: PropType<(payload: TreeDragDropPayload) => void>;
        default: undefined;
    };
    allowDrop: {
        type: PropType<TreeAllowDrop>;
        default: undefined;
    };
    withDragHandle: {
        type: BooleanConstructor;
        default: boolean;
    };
    withLines: {
        type: BooleanConstructor;
        default: boolean;
    };
    classNames: {
        type: (ObjectConstructor | FunctionConstructor)[];
        default: undefined;
    };
    styles: {
        type: (ObjectConstructor | FunctionConstructor)[];
        default: undefined;
    };
    vars: {
        type: (ObjectConstructor | FunctionConstructor)[];
        default: undefined;
    };
    unstyled: {
        type: BooleanConstructor;
        default: boolean;
    };
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
    [key: string]: any;
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
    component: {
        type: PropType<string | Component>;
        default: string;
    };
    data: {
        type: PropType<TreeNodeData[]>;
        required: true;
    };
    levelOffset: {
        type: PropType<string | number>;
        default: string;
    };
    expandOnClick: {
        type: BooleanConstructor;
        default: boolean;
    };
    expandOnSpace: {
        type: BooleanConstructor;
        default: boolean;
    };
    checkOnSpace: {
        type: BooleanConstructor;
        default: boolean;
    };
    selectOnClick: {
        type: BooleanConstructor;
        default: boolean;
    };
    tree: {
        type: PropType<TreeController>;
        default: undefined;
    };
    renderNode: {
        type: PropType<RenderNode>;
        default: undefined;
    };
    clearSelectionOnOutsideClick: {
        type: BooleanConstructor;
        default: boolean;
    };
    allowRangeSelection: {
        type: BooleanConstructor;
        default: boolean;
    };
    keepMounted: {
        type: BooleanConstructor;
        default: boolean;
    };
    onDragDrop: {
        type: PropType<(payload: TreeDragDropPayload) => void>;
        default: undefined;
    };
    allowDrop: {
        type: PropType<TreeAllowDrop>;
        default: undefined;
    };
    withDragHandle: {
        type: BooleanConstructor;
        default: boolean;
    };
    withLines: {
        type: BooleanConstructor;
        default: boolean;
    };
    classNames: {
        type: (ObjectConstructor | FunctionConstructor)[];
        default: undefined;
    };
    styles: {
        type: (ObjectConstructor | FunctionConstructor)[];
        default: undefined;
    };
    vars: {
        type: (ObjectConstructor | FunctionConstructor)[];
        default: undefined;
    };
    unstyled: {
        type: BooleanConstructor;
        default: boolean;
    };
}>> & Readonly<{}>, {
    classNames: Function | Record<string, any>;
    styles: Function | Record<string, any>;
    keepMounted: boolean;
    component: string | Component;
    vars: Function | Record<string, any>;
    unstyled: boolean;
    expandOnClick: boolean;
    renderNode: RenderNode;
    selectOnClick: boolean;
    allowRangeSelection: boolean;
    expandOnSpace: boolean;
    checkOnSpace: boolean;
    onDragDrop: (payload: TreeDragDropPayload) => void;
    allowDrop: TreeAllowDrop;
    withDragHandle: boolean;
    levelOffset: string | number;
    tree: import("./use-tree").UseTreeReturnType;
    clearSelectionOnOutsideClick: boolean;
    withLines: boolean;
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
