///
import { Disposable } from '@gedit/utils';
import { Rectangle } from '@gedit/math';
import { Tree, TreeNode } from './tree';
import { IDragEvent } from '@phosphor/dragdrop';
import { LabelProvider } from '@gedit/theme';
export declare const TREE_DROP_KEY = "data-tree-move-drop";
export declare enum TreeDropType {
SIBLING = 0,
CHILD = 1,
NONE = 2
}
export declare const TreeDragdropOpts: unique symbol;
export interface TreeDragdropOpts {
/**
* 拖拽结束是否要触发点击, 默认true
*/
dragEndWithSelect?: boolean;
canbeDrag?(clickNode: T, tree: TREE): boolean;
canbeDrop?(dropNode: T, source: T[], tree: TREE, asChild: boolean): boolean;
/**
* 默认拖拽选中的节点, 不包含根节点
* @param currentNode
* @param tree
*/
getDraggingNodes?(currentNode: T, tree: TREE): T[];
dropSuccess(source: T[], dropNode: T, tree: TREE, asChild: boolean): void;
}
export declare const TreeDragdropDefault: TreeDragdropOpts;
export declare class TreeDragdrop implements Disposable {
readonly tree: TREE;
protected readonly labelProvider: LabelProvider;
private droppingLine;
private treeElement;
private currentDropId;
private handleContextmenu;
private dropType;
protected treeNodeElements: HTMLElement[];
protected dragId: number;
protected opts: Required>;
constructor(tree: TREE, opts: TreeDragdropOpts, labelProvider: LabelProvider);
private _tryToExpandedNode;
private _expandedTimeout;
get isDropping(): boolean;
private clearExpandedNode;
tryToExpanded(dropNode: T, cb: () => void): boolean;
dispose(): void;
init(element: HTMLElement): void;
getDropProps(dropTarget: HTMLElement, source: T[], event: IDragEvent): {
node?: T;
rect?: Rectangle;
type: TreeDropType;
};
handleEvent(event: IDragEvent): void;
protected isParent(parent: T, id: string): boolean;
startDrag(node: T, e: React.MouseEvent): Promise<{
dropId?: string;
shouldTriggerClick: boolean;
}>;
protected findDropTarget(element: HTMLElement, e: MouseEvent): HTMLElement | 'root' | undefined;
}
//# sourceMappingURL=tree-dragdrop.d.ts.map