import { DirectiveOptions } from 'vue';
import { PluginObject } from 'vue/types/plugin';
import { MElementDomPlugin, MountFunction, RefreshFunction } from '../domPlugin';
import './sortable.scss';
export interface MSortableOptions {
    items: any[];
    acceptedActions: string[];
    canSort?: any;
    encapsulate?: boolean;
}
export declare enum MSortableEventNames {
    OnAdd = "sortable:add",
    OnMove = "sortable:move",
    OnRemove = "sortable:remove"
}
export declare enum MSortInsertPositions {
    Before = "before",
    In = "in",
    After = "after"
}
export interface MSortEvent extends CustomEvent {
    sortInfo: MSortInfo;
}
export declare enum MSortableClassNames {
    Sortable = "m--is-sortable",
    CantSort = "m--cant-sort",
    SortBefore = "m--is-sortbefore",
    SortIn = "m--is-sortin",
    SortAfter = "m--is-sortafter",
    EmptyPlaceholder = "m--is-sortable-placeholder"
}
export interface MSortInfo {
    action: string;
    grouping?: string;
    data: any;
    canDrop: boolean;
    oldPosition: number;
    newPosition: number;
}
export declare enum MSortableAction {
    Default = "any",
    Move = "move",
    MoveGroup = "move_group"
}
export declare class MSortable extends MElementDomPlugin<MSortableOptions> {
    static defaultMountPoint: string;
    static activeSortContainer: MSortable | undefined;
    static fromSortContainer: MSortable | undefined;
    private emptyPlaceHolderElement;
    private observer;
    constructor(element: HTMLElement, options: MSortableOptions);
    doCleanUp(): void;
    attach(mount: MountFunction): void;
    update(options: MSortableOptions, refresh: RefreshFunction): void;
    detach(): void;
    private manageMutation;
    private setOptions;
    private canDrag;
    private canDrop;
    private attachChilds;
    private detachChilds;
    private attachEmptyPlaceholder;
    private onDragEnter;
    private onDragLeave;
    private onDragOver;
    private onDragIn;
    private onDrop;
    private onRemove;
    private onChildDragEnd;
    private onChildDragStart;
    private insertInsertionMarker;
    private getInsertionMarkerBehavior;
    private getNewPosition;
    private isHoveringOverDraggedElement;
    private isInsertingOnChild;
    private hasItems;
    private getCurrentInsertPosition;
    private cleanUpInsertionClasses;
}
export declare const SortableDirective: DirectiveOptions;
declare const SortablePlugin: PluginObject<any>;
export default SortablePlugin;
//# sourceMappingURL=sortable.d.ts.map