import Vue, { DirectiveOptions, VNodeDirective } from "vue"; export declare type HandleType = Vue | HTMLElement; export declare type MouseOrTouchEvent = MouseEvent | TouchEvent; export interface Position { left: number; top: number; } export interface PositionDiff { x: number; y: number; } export interface MarginOptions { top?: number; right?: number; bottom?: number; left?: number; } export interface DraggableValue { handle?: HandleType; onPositionChange?: (posDiff?: PositionDiff, pos?: Position, event?: MouseOrTouchEvent) => void; onDragEnd?: (posDiff?: PositionDiff, pos?: Position, event?: MouseOrTouchEvent) => void; onDragStart?: (posDiff?: PositionDiff, pos?: Position, event?: MouseOrTouchEvent) => void; resetInitialPos?: boolean; stopDragging?: boolean; boundingRect?: ClientRect; boundingElement?: HTMLElement; boundingRectMargin?: MarginOptions; initialPosition?: Position; } export interface DraggableBindings extends VNodeDirective { value: DraggableValue; } export interface DraggableState { initialPosition: Position; startDragPosition: Position; currentDragPosition: Position; initialMousePos?: Position; } export declare const Draggable: DirectiveOptions;