import { ElementRef, EventEmitter, NgZone, OnDestroy, OnInit, Renderer2, ChangeDetectorRef } from '@angular/core';
import { Subject } from 'rxjs';
export declare enum RestrictDrag {
    VERTICALLY = 0,
    HORIZONTALLY = 1,
    NONE = 2,
}
export declare class IgxDragCustomEventDetails {
    startX: number;
    startY: number;
    pageX: number;
    pageY: number;
    owner: IgxDragDirective;
}
export declare class IgxDropEnterEventArgs {
    owner: IgxDropDirective;
    drag: IgxDragDirective;
    dragData: any;
    startX: number;
    startY: number;
    pageX: number;
    pageY: number;
}
export declare class IgxDropLeaveEventArgs {
    owner: IgxDropDirective;
    drag: IgxDragDirective;
    dragData: any;
    startX: number;
    startY: number;
    pageX: number;
    pageY: number;
}
export declare class IgxDropEventArgs {
    owner: IgxDropDirective;
    drag: IgxDragDirective;
    cancel: boolean;
}
export declare class IgxDragDirective implements OnInit, OnDestroy {
    cdr: ChangeDetectorRef;
    element: ElementRef;
    zone: NgZone;
    renderer: Renderer2;
    data: any;
    dragTolerance: number;
    ghostImageClass: string;
    hideBaseOnDrag: boolean;
    animateOnRelease: boolean;
    zIndexDrag: number;
    dragStart: EventEmitter<any>;
    dragEnd: EventEmitter<any>;
    returnMoveEnd: EventEmitter<any>;
    dragClicked: EventEmitter<any>;
    touch: string;
    transitionProperty: string;
    top1: number;
    left1: number;
    _visibility: string;
    visible: boolean;
    left: number;
    top: number;
    readonly pointerEventsEnabled: boolean;
    readonly touchEventsEnabled: boolean;
    defaultReturnDuration: string;
    protected _startX: number;
    protected _startY: number;
    protected _dragGhost: any;
    protected _dragStarted: boolean;
    protected _dragOffsetX: any;
    protected _dragOffsetY: any;
    protected _dragStartX: any;
    protected _dragStartY: any;
    protected _pointerDownId: any;
    protected _clicked: boolean;
    protected _lastDropArea: any;
    protected _destroy: Subject<boolean>;
    constructor(cdr: ChangeDetectorRef, element: ElementRef, zone: NgZone, renderer: Renderer2);
    ngOnInit(): void;
    ngOnDestroy(): void;
    /**
     * Method bound to the PointerDown event of the base element igxDrag is initialized.
     * @param event PointerDown event captured
     */
    onPointerDown(event: any): void;
    /**
     * Perfmorm drag move logic when dragging and dispatching events if there is igxDrop under the pointer.
     * This method is bound at first at the base element.
     * If dragging starts and after the dragGhost is rendered the pointerId is reassigned to the dragGhost. Then this method is bound to it.
     * @param event PointerMove event captured
     */
    onPointerMove(event: any): void;
    /**
     * Perform drag end logic when releasing the dragGhost and dispatchind drop event if igxDrop is under the pointer.
     * This method is bound at first at the base element.
     * If dragging starts and after the dragGhost is rendered the pointerId is reassigned to the dragGhost. Then this method is bound to it.
     * @param event PointerUp event captured
     */
    onPointerUp(event: any): void;
    /**
     * Create dragGhost element - copy of the base element. Bind all needed events.
     * @param event Pointer event required when the dragGhost is being initialized.
     */
    protected createDragGhost(event: any): void;
    /** Dispatch custom igxDragEnter/igxDragLeave events based on current pointer position and if drop area is under. */
    protected dispatchDragEvents(pageX: number, pageY: number): void;
    /**
     * Dispatch custom igxDrop event based on current pointer position if there is last recorder drop area under the pointer.
     * Last recorder drop area is updated in @dispatchDragEvents method.
     */
    protected dispatchDropEvent(pageX: number, pageY: number): void;
    /**
     * Update relative positions
     */
    updateDragRelativePos(): void;
    dropFinished(): void;
    onTransitionEnd(event: any): void;
    protected getElementsAtPoint(pageX: number, pageY: number): NodeListOf<Element> | Element[];
    protected dispatchEvent(target: any, eventName: string, eventArgs: IgxDragCustomEventDetails): void;
}
export declare class IgxDropDirective {
    element: ElementRef;
    private _renderer;
    /** Event triggered when dragged element enters the area of the element */
    onEnter: EventEmitter<IgxDropEnterEventArgs>;
    /** Event triggered when dragged element leaves the area of the element */
    onLeave: EventEmitter<IgxDropLeaveEventArgs>;
    /** Event triggered when dragged element is dropped in the area of the element */
    onDrop: EventEmitter<IgxDropEventArgs>;
    droppable: boolean;
    dragover: boolean;
    constructor(element: ElementRef, _renderer: Renderer2);
    onDragEnter(event: CustomEvent<IgxDragCustomEventDetails>): void;
    onDragLeave(event: any): void;
    onDragDrop(event: any): void;
}
export declare class IgxDragDropModule {
}
