import type { Ref } from "vue";
import type { TreeNodeWithChildren } from "./type";
export declare const LONG_PRESS_DELAY = 300;
export interface UseDraggingOptions {
    itemHeight: number;
    emit: (event: "updateDragState" | "nodeDragDrop", ...args: any[]) => void;
    getFlattenedItems: () => {
        id: string;
        level: number;
        node: TreeNodeWithChildren;
    }[];
    getContainerRef: () => HTMLElement | null;
    canDropFn?: (draggedNodeId: string, targetNodeId: string, dragPosition: "before" | "after" | "inside") => boolean;
}
export declare function useDragging(options: UseDraggingOptions): {
    isDragging: Ref<boolean, boolean>;
    draggedNodeId: Ref<string | null, string | null>;
    dropTargetNodeId: Ref<string | null, string | null>;
    dropPosition: Ref<"before" | "after" | "inside" | null, "before" | "after" | "inside" | null>;
    mousePosition: Ref<{
        x: number;
        y: number;
    }, {
        x: number;
        y: number;
    } | {
        x: number;
        y: number;
    }>;
    onDragStart: (nodeId: string, event: MouseEvent) => void;
    cancelDrag: () => void;
};
export declare function useNodeDragDetection(onStartDrag: (event: MouseEvent) => void, isDisabled: Ref<boolean> | (() => boolean)): {
    onMouseDown: (event: MouseEvent) => void;
    onMouseMove: () => void;
    onMouseUp: () => void;
};
