import { type ComputedRef, type Ref, type SetupContext } from 'vue';
export declare const UPDATE_MODEL_EVENT = "update:modelValue";
export declare const DRAG_START_EVENT = "dragstart";
export declare const DRAG_END_EVENT = "dragend";
export type BeforeDragEnd = (drag: {
    item: unknown;
    index: number;
    list: unknown[];
    resultList: unknown[];
}, drop: {
    item: unknown;
    index: number;
    list: unknown[];
    resultList: unknown[];
}) => Promise<boolean> | boolean;
type PropsRef = ComputedRef<{
    list: unknown[];
    droppable: boolean;
    disabled: boolean;
    beforeDragend?: BeforeDragEnd;
    isDirective?: boolean;
}>;
export declare class DraggableItem {
    draggable: unknown;
    first: {
        x: number;
        y: number;
    };
    last: {
        x: number;
        y: number;
    };
    style: {
        transition: string;
        transform: string;
        opacity: unknown;
    };
    elStyle: Record<string, unknown>;
    setDraggable(draggable?: boolean): void;
    setOpacity(opacity?: number): void;
}
export declare const useDraggable: (containerRef: Ref<Element | undefined>, propsRef: PropsRef, ctx?: SetupContext) => {
    onAnimationEnd: () => void;
    onDragover: (event: DragEvent) => void;
    onDragstart: (event: Event) => void;
    onDragend: (event: Event) => Promise<void>;
    draggableItems: DraggableItem[];
    nextTickQueue: (() => void)[];
    onMousemove: (event: MouseEvent) => void;
    onUpdated: () => void;
};
export {};
