import { DragDropAllowEvent, DragDropCore, EventBase, IElement, IPanel, ISurveyElement, JsonObject, PageModel, QuestionRowModel, SurveyElement } from "survey-core";
import { IQuestionToolboxItem } from "./toolbox";
import { SurveyElementAdornerBase } from "./components/survey-element-adorner-base";
import { DropIndicatorPosition } from "./drag-drop-enums";
export declare function calculateIsEdge(dropTargetNode: HTMLElement, clientY: number): boolean;
export declare function calculateIsSide(dropTargetNode: HTMLElement, clientX: number): boolean;
export declare function calculateDragOverLocation(clientX: number, clientY: number, rect: DOMRectInit, direction?: "top-bottom" | "left-right"): DropIndicatorPosition;
export declare class DragDropSurveyElements extends DragDropCore<any> {
    static newGhostPage: PageModel;
    static restrictDragQuestionBetweenPages: boolean;
    static edgeHeight: number;
    static nestedPanelDepth: number;
    static ghostSurveyElementName: string;
    insideElement: any;
    protected prevIsEdge: any;
    protected dragOverIndicatorElement: any;
    protected dragOverLocation: DropIndicatorPosition;
    protected get draggedElementAdorner(): SurveyElementAdornerBase | null;
    protected get dropTargetAdorner(): SurveyElementAdornerBase | null;
    protected get draggedElementType(): string;
    protected isDraggedElementSelected: boolean;
    onGetMaxNestedPanels: () => number;
    onGetMaxPanelNestingLevel: () => number;
    onDragOverLocationCalculating: (options: any) => void;
    get maxNestedPanels(): number;
    get maxPanelNestingLevel(): number;
    isAllowedToAdd: (elementType: string, container: SurveyElement) => boolean;
    startDragToolboxItem(event: PointerEvent, draggedElementJson: JsonObject, toolboxItemModel: IQuestionToolboxItem): void;
    get isDraggingExistingElement(): boolean;
    startDragSurveyElement(event: PointerEvent, draggedElement: any, isElementSelected?: boolean): void;
    protected getShortcutText(draggedElement: any): string;
    protected createDraggedElementShortcut(text: string, draggedElementNode?: HTMLElement, event?: PointerEvent): HTMLElement;
    protected createDraggedElementIcon(): HTMLElement;
    protected getDraggedElementClass(): string;
    protected createElementFromJson(json: object): HTMLElement;
    private createNewElement;
    protected findDropTargetNodeByDragOverNode(dragOverNode: HTMLElement): HTMLElement;
    protected getDropTargetByDataAttributeValue(dataAttributeValue: string, dropTargetNode: HTMLElement, event: PointerEvent): any;
    protected isDropTargetValid(dropTarget: any, dropTargetNode?: HTMLElement, dragOverLocation?: DropIndicatorPosition): boolean;
    protected doBanDropHere: () => void;
    private shouldRestricDragQuestionBetweenPages;
    protected findDeepestDropTargetChild(parent: HTMLElement): HTMLElement;
    /**
     * An event that is raised when users drag and drop survey elements while designing the survey in [Survey Creator](https://surveyjs.io/survey-creator/documentation/overview). Use this event to control drag and drop operations.
     */
    onDragDropAllow: EventBase<DragDropCore<any>, DragDropAllowEvent>;
    private isAllowDragOver;
    dragOverCore(dropTarget: ISurveyElement, dragOverLocation: DropIndicatorPosition): void;
    private dragDropFindRow;
    private isSameElement;
    private isDragInsideItself;
    dragOver(event: PointerEvent): void;
    protected onStartDrag(): void;
    moveElementInPanel(panel: IPanel, src: IElement, target: IElement, targetIndex: number): void;
    protected doDrop: () => any;
    private removeDragOverMarker;
    clear(): void;
    private getTargetParent;
    protected getTargetRow(dropTarget: any): QuestionRowModel;
}
