/// import type { DataNode } from "antd/es/tree"; /** * Drop position: * -1 = before the node (gap above) * 0 = inside the node (as child, for folders only) * 1 = after the node (gap below) */ export type DropPosition = -1 | 0 | 1; export interface DragState { /** 拖拽中的节点 key */ dragNodeKey: string | null; /** 当前悬停的目标节点 key */ dropNodeKey: string | null; /** drop 位置 */ dropPosition: DropPosition; } export interface UseFolderDragOptions { /** 是否启用拖拽('file' | 'folder' | 'all') */ dragMode: "file" | "folder" | "all" | false; /** 拖拽完成回调 */ onDrop?: (dragNode: DataNode, dropNode: DataNode, dropPosition: DropPosition) => void; /** 拖拽进入节点时回调(用于自动展开) */ onDragEnterExpand?: (nodeKey: string) => void; } export interface UseFolderDragReturn { dragState: DragState; /** 绑定到 draggable 元素的 onDragStart */ onDragStart: (e: React.DragEvent, node: DataNode) => void; /** 绑定到 draggable 元素的 onDragEnd */ onDragEnd: (e: React.DragEvent) => void; /** 绑定到每个树节点容器的 onDragEnter */ onItemDragEnter: (e: React.DragEvent, node: DataNode) => void; /** 绑定到每个树节点容器的 onDragOver */ onItemDragOver: (e: React.DragEvent, node: DataNode) => void; /** 绑定到每个树节点容器的 onDragLeave */ onItemDragLeave: (e: React.DragEvent) => void; /** 绑定到每个树节点容器的 onDrop */ onItemDrop: (e: React.DragEvent, node: DataNode) => void; /** 绑定到树内容容器(directoryTreeContent)的 onDragOver,处理拖到空白区域 */ onContainerDragOver: (e: React.DragEvent) => void; /** 绑定到树内容容器(directoryTreeContent)的 onDrop,处理拖到空白区域 */ onContainerDrop: (e: React.DragEvent) => void; /** 清除拖拽状态 */ clearDragState: () => void; /** 是否正在拖拽中 */ isDragging: boolean; /** 判断节点是否可拖拽 */ canDragNode: (node: DataNode & { _isTempNode?: boolean; }) => boolean; } export declare function useFolderDrag(options: UseFolderDragOptions): UseFolderDragReturn;