import { Subscription, Subject } from 'rxjs';
import { AfterViewInit, ElementRef, EventEmitter, NgZone, OnDestroy, OnInit, Renderer2 } from '@angular/core';
import { DragDropService } from '../services/drag-drop.service';
import { PreserveNextEventEmitter } from './../shared/preserve-next-event-emitter';
import { DragPreviewDirective } from './drag-preview.directive';
export declare class DraggableDirective implements OnInit, AfterViewInit, OnDestroy {
    el: ElementRef;
    private renderer;
    private dragDropService;
    private ngZone;
    dragPreviewDirective: DragPreviewDirective;
    draggable: boolean;
    /**
     * The data that will be available to the droppable directive on its `onDrop()` event.
     */
    dragData: any;
    /**
     * The selector that defines the drag Handle. If defined drag will only be allowed if dragged from the selector element.
     */
    dragHandle: string;
    /**
     * Currently not used
     */
    dragEffect: string;
    /**
     * Defines compatible drag drop pairs. Values must match both in draggable and droppable.dropScope.
     */
    dragScope: string | Array<string>;
    dragHandleClass: string;
    /**
     * CSS class applied on the draggable that is applied when the item is being dragged.
     */
    dragOverClass: string;
    /**
     * Event fired when Drag is started
     */
    dragStartEvent: EventEmitter<any>;
    /**
     * @deprecated
     * Event fired while the element is being dragged
     * 为了性能优化，该函数废弃，请用(drag)自行监听， 如果不需要angular脏检测则最好用runOutsideAngular的addEventListener监听以获得好的性能
     */
    dragEvent: PreserveNextEventEmitter<any>;
    /**
     * Event fired when dragged ends
     */
    dragEndEvent: EventEmitter<any>;
    /**
     * Keeps track of mouse over element that is used to determine drag handles
     */
    private mouseOverElement;
    dropEndEvent: PreserveNextEventEmitter<any>;
    disabled: boolean;
    private _disabled;
    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: any;
    private dragOriginPlaceholder;
    private dragOriginPlaceholderNextSibling;
    dragElShowHideEvent: Subject<boolean>;
    beforeDragStartEvent: Subject<boolean>;
    constructor(el: ElementRef, renderer: Renderer2, dragDropService: DragDropService, ngZone: NgZone, dragPreviewDirective: DragPreviewDirective);
    ngOnInit(): void;
    dropSubscription(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    dragStart(e: any): void;
    dragEnd(e: any): void;
    mouseover(e: any): 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: any): any;
    private checkAndGetViewPointChange;
}
