export declare class ShockDragDrop<Grabbed, Hovering> {
    #private;
    constructor(params: Params<Grabbed, Hovering>);
    readonly dragzone: {
        draggable: () => string;
        dragstart: (grabbed: Grabbed) => (_: DragEvent) => void;
        dragend: () => (_: DragEvent) => void;
    };
    readonly dropzone: {
        dragenter: () => (_: DragEvent) => void;
        dragleave: () => (event: DragEvent) => void;
        dragover: (hovering: Hovering) => (event: DragEvent) => void;
        drop: (hovering: Hovering) => (event: DragEvent) => void;
    };
    get grabbed(): Grabbed | undefined;
    get hovering(): Hovering | undefined;
}
type Params<Grabbed, Hovering> = {
    handle_drop: (event: DragEvent, grabbed: Grabbed, hovering: Hovering) => void;
    out_of_band?: {
        predicate: (event: DragEvent, hovering: Hovering) => boolean;
        handle_drop: (event: DragEvent, hovering: Hovering) => void;
    };
};
export {};
