import { DragEvent } from 'react';
import { InternalRCNode, RCTreeNode, DropPositionInfo } from './types';
type Props<Node extends RCTreeNode> = {
    treeData: Node[];
    containerRef: React.RefObject<HTMLDivElement>;
    expandNode: (pos: string, expanded: boolean) => void;
    onLoadChildren?: (treeNode: Node) => Promise<void>;
    onChange?: (node: Node[]) => void;
    onDrop?: (treeData: Node[], dragNode: Node, parentNode: Node) => void;
    canDrop?: (params: {
        nextParent: Node;
        node: Node;
    }) => boolean;
    canDrag?: (params: {
        node: Node;
    }) => boolean;
};
export declare const useDnd: <Node extends RCTreeNode>({ treeData, containerRef, expandNode, onLoadChildren, onChange, onDrop: onDropProp, canDrop, canDrag }: Props<Node>) => {
    treeProps: {
        onDragStart: ({ node }: {
            node: InternalRCNode<Node>;
        }) => void;
        onDragOver: ({ event, node }: {
            event: DragEvent<HTMLDivElement>;
            node: InternalRCNode<Node>;
        }) => void;
        onDragLeave: ({ event, node }: {
            event: any;
            node: any;
        }) => void;
        onDrop: () => void;
        dropIndicatorRender: () => any;
    };
    nodeDraggable: (node: InternalRCNode<Node>) => boolean;
    dropNode: InternalRCNode<Node>;
    dragNode: InternalRCNode<Node>;
    dropPositionInfo: DropPositionInfo;
};
export {};
