import { Subject, Subscription } from 'rxjs';
import { EventEmitter, PreserveNextEventEmitter } from './preserve-next-event-emitter';
import { DragDropService } from './drag-drop.service';
import { DirectiveBinding, InjectionKey, VNode } from 'vue';
import { NgDirectiveBase } from './directive-base';
import { DragPreviewDirective } from './drag-preview.directive';
export interface IDraggableBinding {
    dragData?: any;
    dragHandle?: string;
    dragEffect?: string;
    dragScope?: string | Array<string>;
    dragHandleClass?: string;
    dragOverClass?: string;
    disabled?: boolean;
    enableDragFollow?: boolean;
    dragFollowOptions?: {
        appendToBody?: boolean;
    };
    originPlaceholder?: {
        show?: boolean;
        tag?: string;
        style?: {
            [cssProperties: string]: string;
        };
        text?: string;
        removeDelay?: number;
    };
    dragIdentity?: any;
    dragItemParentName?: string;
    dragItemChildrenName?: string;
}
export interface IDraggableListener {
    '@dragStartEvent'?: (_: any) => void;
    '@dragEvent'?: (_: any) => void;
    '@dragEndEvent'?: (_: any) => void;
    '@dropEndEvent'?: (_: any) => void;
}
export declare class DraggableDirective extends NgDirectiveBase<IDraggableBinding, IDraggableListener> {
    static INSTANCE_KEY: string;
    static TOKEN: InjectionKey<DraggableDirective>;
    hostBindingMap?: {
        [key: string]: string;
    } | undefined;
    draggable: boolean;
    dragData?: any;
    dragScope: string | Array<string>;
    dragHandle?: string;
    dragHandleClass: string;
    dragOverClass?: string;
    dragEffect: string;
    get disabled(): boolean;
    set disabled(value: boolean);
    private _disabled;
    dragStartEvent: EventEmitter<any>;
    dragEvent: PreserveNextEventEmitter<any>;
    dragEndEvent: EventEmitter<any>;
    dropEndEvent: PreserveNextEventEmitter<any>;
    document: Document;
    private mouseOverElement;
    enableDragFollow: boolean;
    dragFollowOptions?: {
        appendToBody?: boolean;
    };
    originPlaceholder?: {
        show?: boolean;
        tag?: string;
        style?: {
            [cssProperties: string]: string;
        };
        text?: string;
        removeDelay?: number;
    };
    dragIdentity: any;
    dragItemParentName: string;
    dragItemChildrenName: string;
    dragsSub: Subscription;
    destroyDragEndSub?: Subscription;
    isDestroyed?: boolean;
    private delayRemoveOriginPlaceholderTimer?;
    batchDraggable: undefined | any;
    private dragOriginPlaceholder?;
    private dragOriginPlaceholderNextSibling?;
    dragElShowHideEvent: Subject<boolean>;
    beforeDragStartEvent: Subject<boolean>;
    el: {
        nativeElement: any;
    };
    dragDropService: DragDropService;
    dragPreviewDirective?: DragPreviewDirective;
    constructor(el: HTMLElement, dragDropService: DragDropService, dragPreviewDirective?: DragPreviewDirective);
    ngOnInit(): void;
    dropSubscription(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    dragStart(e: DragEvent): void;
    dragEnd(e: DragEvent): void;
    mouseover(e: MouseEvent): void;
    private allowDrag;
    private applyDragHandleClass;
    private getDragHandleElement;
    private mousePosition;
    insertOriginPlaceholder: (directShow?: boolean, updateService?: boolean) => void;
    removeOriginPlaceholder: (updateService?: boolean) => void;
    delayRemoveOriginPlaceholder: (updateService?: boolean) => void;
    findNextSibling(currentNextSibling: Element): Element;
    private checkAndGetViewPointChange;
}
declare const _default: {
    mounted(el: HTMLElement & {
        [props: string]: any;
    }, binding: DirectiveBinding<IDraggableBinding & IDraggableListener>, vNode: VNode): void;
    updated(el: HTMLElement & {
        [props: string]: any;
    }, binding: DirectiveBinding<IDraggableBinding & IDraggableListener>): void;
    beforeUnmount(el: HTMLElement & {
        [props: string]: any;
    }): void;
};
export default _default;
