import React from 'react';
import RcTree, { TreeNode, TreeProps as RcTreeProps, TreeNodeProps } from 'rc-tree';
import { BaseInputProps } from '../input/Input';
import type { EventDataNode as RcEventDataNode, DataNode as RcDataNode, Key } from 'rc-tree/lib/interface';
export interface DataNode extends RcDataNode {
    isEditable?: boolean;
}
export type EventDataNode = RcEventDataNode<DataNode>;
export type TreeIcon = React.ReactNode | ((treeNode: TreeNodeProps) => React.ReactNode);
declare enum DataChangeType {
    SAVE = "save",
    EDITINPUTCHANGE = "editInputChange",
    DELETE = "delete",
    ADD = "add",
    DROP = "drop"
}
declare enum UtilType {
    Add = "Add",
    Edit = "Edit",
    Delete = "Delete"
}
interface PopoverUtil {
    text: string;
    onClick: UtilType | ((data?: DataNode, treeData?: DataNode[]) => any);
    disabled?: boolean;
    key?: string;
}
export interface TreeProps extends Partial<RcTreeProps> {
    treeData?: DataNode[];
    showLine?: boolean;
    className?: string;
    multiple?: boolean;
    checkable?: boolean;
    selectable?: boolean;
    draggable?: boolean;
    searchable?: boolean;
    searchPlaceholder?: string;
    editable?: boolean;
    editInputProps?: BaseInputProps;
    showIconUtil?: boolean;
    showPopoverUtil?: boolean;
    customPopoverUtil?: Array<PopoverUtil> | ((data: DataNode) => Array<PopoverUtil>);
    showIcon?: boolean;
    icon?: TreeIcon;
    switchIcon?: TreeIcon;
    children?: React.ReactNode;
    onDataChange?: (treeData: DataNode[], changingData: DataNode, changeType: DataChangeType) => void;
    titleEllipsis?: boolean;
    popoverZIndex?: number;
}
export interface TreeNodeBaseEvent {
    node: EventDataNode;
    nativeEvent: MouseEvent;
}
export interface TreeNodeExpandedEvent extends TreeNodeBaseEvent {
    expanded: boolean;
}
export interface TreeNodeDropEvent {
    event: React.DragEvent<HTMLDivElement>;
    node: EventDataNode;
    dragNode: EventDataNode;
    dragNodesKeys: Key[];
    dropPosition: number;
    dropToGap: boolean;
}
type TreeComponent = React.ForwardRefExoticComponent<TreeProps & React.RefAttributes<RcTree<RcDataNode>>> & {
    TreeNode: typeof TreeNode;
};
declare const Tree: TreeComponent;
export default Tree;
