import { PluginObject } from 'vue';
import { MElementDomPlugin, MountFunction, RefreshFunction } from '../../domPlugin';
import './draggable.scss';
export declare enum MDraggableClassNames {
    Draggable = "m--is-draggable",
    Dragging = "m--is-dragging",
    Grabbing = "m--is-grabbing",
    DragImage = "dragImage",
    DragHandle = "m-drag-handle",
    HasDragHandle = "m--has-drag-handle"
}
export interface MDraggableOptions {
    canDrag?: boolean;
    action: string;
    dragData: any;
    grouping?: any;
}
export interface MDragInfo {
    action: string;
    grouping?: string;
    data: any;
}
export interface MDragEvent extends CustomEvent {
    dragInfo: MDragInfo;
}
export declare enum MDraggableEventNames {
    OnDragStart = "draggable:dragstart",
    OnDragEnd = "draggable:dragend"
}
export declare class MDraggable extends MElementDomPlugin<MDraggableOptions> {
    static defaultMountPoint: string;
    static currentDraggable?: MDraggable;
    private grabEvents;
    private cancelGrabEvents;
    private touchUpListener;
    private intputTouchUpListener;
    private grabDelay;
    private touchHasMoved;
    private isMouseInitiatedDrag;
    constructor(element: HTMLElement, options: MDraggableOptions);
    doCleanUp(): void;
    attach(mount: MountFunction): void;
    update(options: MDraggableOptions, refresh: RefreshFunction): void;
    detach(): void;
    onDragStart(event: DragEvent): void;
    onDragEnd(event: DragEvent): void;
    private setupGrabBehavior;
    private turnDragOn;
    private turnDragOff;
    private targetIsGrabbable;
    private destroyGrabBehavior;
    private forceCursorRefresh;
    private attachDragImage;
    private setEventDragImage;
    private calculateHorizontalCenterOffset;
    private calculateVerticalCenterOffset;
    private dispatchEvent;
    private cleanupCssClasses;
    private draggableHasHandle;
    private isHandleUsedToDrag;
}
declare const DraggablePlugin: PluginObject<any>;
export default DraggablePlugin;
//# sourceMappingURL=draggable.d.ts.map