import { ElementRef, OnChanges, OnDestroy } from '@angular/core';
import { Identifier } from 'dnd-core';
import { Subscription } from 'rxjs';
import { DragSource, DropTarget } from './connection-types';
import { DragPreviewOptions, DragSourceOptions } from './connectors';
import { TypeOrTypeArray } from './type-ish';
import * as i0 from "@angular/core";
/** @ignore */
export declare class AbstractDndDirective implements OnChanges, OnDestroy {
    protected connection: any;
    private deferredRequest;
    protected elRef: ElementRef<any>;
    private ngZone;
    ngOnChanges(): void;
    ngOnDestroy(): void;
    protected callHooks(_conn: any): Subscription;
    static ɵfac: i0.ɵɵFactoryDeclaration<AbstractDndDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractDndDirective, never, never, {}, {}, never, never, true, never>;
}
/**
 * Allows you to connect a {@link DropTarget} to an element in a component template.
 */
export declare class DropTargetDirective extends AbstractDndDirective implements OnChanges {
    protected connection: DropTarget | undefined;
    /** Which target to connect the DOM to */
    dropTarget: DropTarget;
    /**
     * Shortcut for setting a type on the connection.
     * Lets you use Angular binding to do it. Runs {@link DropTarget#setTypes}.
     */
    dropTargetTypes?: TypeOrTypeArray;
    /** Reduce typo confusion by allowing non-plural version of dropTargetTypes */
    set dropTargetType(t: TypeOrTypeArray);
    ngOnChanges(): void;
    protected callHooks(conn: DropTarget): Subscription;
    static ɵfac: i0.ɵɵFactoryDeclaration<DropTargetDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DropTargetDirective, "[dropTarget]", never, { "dropTarget": { "alias": "dropTarget"; "required": false; }; "dropTargetTypes": { "alias": "dropTargetTypes"; "required": false; }; "dropTargetType": { "alias": "dropTargetType"; "required": false; }; }, {}, never, never, true, never>;
}
/** Allows you to connect a {@link DragSource} to an element in a component template. */
export declare class DragSourceDirective extends AbstractDndDirective implements OnChanges {
    protected connection: DragSource<any> | undefined;
    /** Which source to connect the DOM to */
    dragSource: DragSource<any>;
    /**
     * Shortcut for setting a type on the connection.
     * Lets you use Angular binding to do it. Runs {@link DragSource#setType}.
     */
    dragSourceType?: Identifier;
    /** Pass an options object as you would to {@link DragSource#connectDragSource}. */
    dragSourceOptions?: DragSourceOptions;
    /**
     * Do not render an HTML5 preview. Only applies when using the HTML5 backend.
     * It does not use { captureDraggingState: true } for IE11 support; that is broken.
     */
    noHTML5Preview: boolean;
    ngOnChanges(): void;
    protected callHooks(conn: DragSource<any>): Subscription;
    static ɵfac: i0.ɵɵFactoryDeclaration<DragSourceDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DragSourceDirective, "[dragSource]", never, { "dragSource": { "alias": "dragSource"; "required": false; }; "dragSourceType": { "alias": "dragSourceType"; "required": false; }; "dragSourceOptions": { "alias": "dragSourceOptions"; "required": false; }; "noHTML5Preview": { "alias": "noHTML5Preview"; "required": false; }; }, {}, never, never, true, never>;
}
/**
 * Allows you to specify which element a {@link DragSource} should screenshot
 * as an HTML5 drag preview.
 *
 * Only relevant when using the HTML5 backend.
 */
export declare class DragPreviewDirective extends AbstractDndDirective implements OnChanges {
    protected connection: DragSource<any> | undefined;
    /** The drag source for which this element will be the preview. */
    dragPreview: DragSource<any>;
    /** Pass an options object as you would to {@link DragSource#connectDragPreview}. */
    dragPreviewOptions?: DragPreviewOptions;
    ngOnChanges(): void;
    protected callHooks(conn: DragSource<any>): Subscription;
    static ɵfac: i0.ɵɵFactoryDeclaration<DragPreviewDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DragPreviewDirective, "[dragPreview]", never, { "dragPreview": { "alias": "dragPreview"; "required": false; }; "dragPreviewOptions": { "alias": "dragPreviewOptions"; "required": false; }; }, {}, never, never, true, never>;
}
