import { AfterViewInit, ElementRef, EventEmitter, NgZone, OnDestroy, OnInit, Renderer2 } from '@angular/core';
import { Subject } from 'rxjs';
import { DragDropService } from '../services/drag-drop.service';
import { DropEvent } from '../shared/drop-event.model';
import { DragPlaceholderInsertionEvent } from './placeholder-insertion-event.type';
import * as i0 from "@angular/core";
export declare type DropIndexFlag = 'beforeAll' | 'afterAll';
export declare class DroppableDirective implements OnInit, AfterViewInit, OnDestroy {
    protected el: ElementRef;
    private renderer;
    private dragDropService;
    private ngZone;
    private doc;
    /**
       *  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>;
    document: Document;
    constructor(el: ElementRef, renderer: Renderer2, dragDropService: DragDropService, ngZone: NgZone, doc: any);
    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;
    static ɵfac: i0.ɵɵFactoryDeclaration<DroppableDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DroppableDirective, "[dDroppable]", never, { "dragOverClass": "dragOverClass"; "dropScope": "dropScope"; "placeholderTag": "placeholderTag"; "placeholderStyle": "placeholderStyle"; "placeholderText": "placeholderText"; "allowDropOnItem": "allowDropOnItem"; "dragOverItemClass": "dragOverItemClass"; "nestingTargetRect": "nestingTargetRect"; "switchWhileCrossEdge": "switchWhileCrossEdge"; "defaultDropPosition": "defaultDropPosition"; "dropSortCountSelector": "dropSortCountSelector"; "dropSortVirtualScrollOption": "dropSortVirtualScrollOption"; }, { "dragEnterEvent": "dragEnterEvent"; "dragOverEvent": "dragOverEvent"; "dragLeaveEvent": "dragLeaveEvent"; "dropEvent": "dropEvent"; }, never, never, false>;
}
