import { CompositeDisposable, IDisposable } from '../lifecycle';
export interface IDragAndDropObserverCallbacks {
    onDragEnter: (e: DragEvent) => void;
    onDragLeave: (e: DragEvent) => void;
    onDrop: (e: DragEvent) => void;
    onDragEnd: (e: DragEvent) => void;
    onDragOver?: (e: DragEvent) => void;
}
export declare class DragAndDropObserver extends CompositeDisposable {
    private element;
    private callbacks;
    private counter;
    constructor(element: HTMLElement, callbacks: IDragAndDropObserverCallbacks);
    private registerListeners;
}
export interface IDraggedCompositeData {
    eventData: DragEvent;
    dragAndDropData: any;
}
export interface ICompositeDragAndDropObserverCallbacks {
    onDragEnter?: (e: IDraggedCompositeData) => void;
    onDragLeave?: (e: IDraggedCompositeData) => void;
    onDrop?: (e: IDraggedCompositeData) => void;
    onDragOver?: (e: IDraggedCompositeData) => void;
    onDragStart?: (e: IDraggedCompositeData) => void;
    onDragEnd?: (e: IDraggedCompositeData) => void;
}
export declare class DragAndDrop extends CompositeDisposable {
    private _onDragStart;
    private _onDragEnd;
    private static _instance;
    static get INSTANCE(): DragAndDrop;
    private transferData;
    private constructor();
    registerTarget(element: HTMLElement, callbacks: ICompositeDragAndDropObserverCallbacks): IDisposable;
    registerDraggable(element: HTMLElement, draggedItemProvider: () => {
        type: string;
        id: string;
    }, callbacks: ICompositeDragAndDropObserverCallbacks): IDisposable;
}
