import * as React from 'react';
import { BlockNode, BlockNodeType } from '../data';
import { BlockEditorValue } from '../components/editor/BlockEditorProps';
export interface DraggedInfo {
    startLeft: number;
    startTop: number;
}
export declare function parseTypes(types: Array<string>): {
    draggedNodeId: string;
    draggedNodeType: BlockNodeType | null;
};
export declare function getDragPositionRelativeToTarget(e: React.DragEvent<HTMLDivElement>, targetRect: ClientRect | null): {
    left: number;
    top: number;
    width: number;
    height: number;
} | null;
export declare function getDragPositionRelativeToTarget2({ clientX, clientY }: {
    clientX: number;
    clientY: number;
}, targetRect: ClientRect | null): {
    left: number;
    top: number;
    width: number;
    height: number;
} | null;
export declare function onDragStart(e: React.DragEvent<HTMLDivElement>, draggedNode: BlockNode, getBoundingRect: () => any): void;
export interface MoveOpts {
    beforeItemId?: string;
    afterItemId?: string;
    isPlaceHolder?: boolean;
    absolutePos?: {
        left: number;
        top: number;
    };
}
export declare function onDropped(types: Array<string>, targetNodeId: string, opts?: MoveOpts): (value: BlockEditorValue) => BlockEditorValue;
export declare function onDropped2(draggedNodeId: string, targetNodeId: string, opts?: MoveOpts): (value: BlockEditorValue) => BlockEditorValue;
