import { ElementRef, EventEmitter, Renderer2, OnInit, AfterViewInit, OnDestroy, NgZone } from '@angular/core';
import { DropEvent } from '../shared/drop-event.model';
import { DragDropService } from '../services/drag-drop.service';
import { Subject } from 'rxjs';
import { DragPlaceholderInsertionEvent } from './placeholder-insertion-event.type';
export declare type DropIndexFlag = 'beforeAll' | 'afterAll';
export declare class DroppableDirective implements OnInit, AfterViewInit, OnDestroy {
    protected el: ElementRef;
    private renderer;
    private dragDropService;
    private ngZone;
    /**
     *  Event fired when Drag dragged element enters a valid drop target.
     */
    dragEnterEvent: EventEmitter<any>;
    /**
     * Event fired when an element is being dragged over a valid drop target
     */
    dragOverEvent: EventEmitter<any>;
    /**
     * Event fired when a dragged element leaves a valid drop target.
     */
    dragLeaveEvent: EventEmitter<any>;
    /**
     * Event fired when an element is dropped on a valid drop target.
     */
    dropEvent: EventEmitter<DropEvent>;
    /**
     * CSS class applied on the draggable that is applied when the item is being dragged.
     */
    dragOverClass: string;
    /**
     * Defines compatible drag drop pairs. Values must match both in draggable and droppable.dropScope.
     */
    dropScope: string | Array<string>;
    placeholderTag: string;
    placeholderStyle: any;
    /**
     * 设置placeholder的提示性文字，仅支持文本（安全起见）
     */
    placeholderText: string;
    /**
     * 用于允许拖动到元素上，方便树形结构的拖动可以成为元素的子节点
     */
    allowDropOnItem: boolean;
    /**
     * allowDropOnItem为true时，才有效，用于允许拖动到元素上后，被命中的元素增加样式
     */
    dragOverItemClass: string;
    /**
     *  用于修正有内嵌列表后，父项高度被撑大，此处height，width为父项自己的高度（用于纵向拖动），宽度（用于横向拖动）
     * */
    nestingTargetRect: {
        height?: number;
        width?: number;
    };
    /**
   *  是否启用越过立即交换位置的算法, 不能与allowDropOnItem一起用，allowDropOnItem为true时，此规则无效
   * */
    switchWhileCrossEdge: boolean;
    /**
    *  sortable的情况下，拖动到可以drop但不在sortContainer里的时候默认drop的位置
    * */
    defaultDropPosition: 'closest' | 'before' | 'after';
    /**
    *  sortable的情况下，列表如果使用了virtual scroll等部分加载技术时候返回正确的dropIndex
    * */
    dropSortCountSelector: string;
    dropSortVirtualScrollOption: {
        totalLength?: number;
        startIndex?: number;
    };
    private dropFlag;
    private sortContainer;
    private sortDirection;
    private sortDirectionZMode;
    private placeholder;
    private dragCount;
    private dropIndex;
    private dragStartSubscription;
    private dragEndSubscription;
    private dropEndSubscription;
    private overElement;
    private dragPartEventSub;
    private allowDropCache;
    private dragElIndex;
    placeholderInsertionEvent: Subject<DragPlaceholderInsertionEvent>;
    placeholderRenderEvent: Subject<any>;
    constructor(el: ElementRef, renderer: Renderer2, dragDropService: DragDropService, ngZone: NgZone);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    dragEnter(e: any): void;
    dragOver(e: any): void;
    dragLeave(e: any): void;
    drop(e: any): void;
    allowDrop(e: any): boolean;
    private dropSortCountSelectorFilterFn;
    private findSortableEl;
    private calcPosition;
    private calcPositionOutside;
    setPlaceholder: () => void;
    private insertPlaceholder;
    private isDragPlaceholderPosition;
    private hitDragOriginPlaceholder;
    private removePlaceholder;
    private removeDragoverItemClass;
    private checkSelfFromIndex;
    private getRealIndex;
    getBoundingRectAndRealPosition(targetElement: any): any;
    getSortContainer(): any;
}
