import { ElementRef, EventEmitter, QueryList } from '@angular/core';
import { ResizeCursor } from './util';
export declare type DragRange = number | string;
export interface MutableOptions {
    directions?: [boolean, boolean, boolean, boolean];
    resizeThreshold?: number;
    cursors?: {
        move: string;
    };
    dragRange?: [DragRange, DragRange, DragRange, DragRange];
}
export declare const MUTABLE_BASIC_OPTIONS: MutableOptions;
export interface Point {
    x: number;
    y: number;
}
export declare class DragHandleDirective {
}
export declare class MutableDirective {
    private readonly el;
    private computedOptions;
    /** Allow for stretch shrink, the default is open */
    aclResizable: boolean;
    /** Allow for drag and drop, the default is open */
    aclDragable: boolean;
    /** Define drag boundary, as body */
    aclDragBoundary: string | ElementRef<HTMLElement> | HTMLElement;
    set aclMutableOptions(options: MutableOptions);
    /** In the process of the resize triggering events */
    readonly aclOnResize: EventEmitter<HTMLElement>;
    /** Drag in the process of the triggering event */
    readonly aclOnDrag: EventEmitter<HTMLElement>;
    /** Emits when the user start drag. */
    readonly aclDragStarted: EventEmitter<HTMLElement>;
    readonly aclDragEnded: EventEmitter<HTMLElement>;
    /** Emits when the user start resize */
    readonly aclResizeStarted: EventEmitter<HTMLElement>;
    readonly aclResizeEnded: EventEmitter<HTMLElement>;
    handles: QueryList<ElementRef>;
    isDragging: boolean;
    isResizingX: boolean;
    isResizingY: boolean;
    mousePoint: {
        x: number;
        y: number;
    };
    parentBorder: {
        left: number;
        top: number;
    };
    elementBorder: {
        left: number;
        top: number;
        right: number;
        bottom: number;
    };
    element: HTMLElement;
    private readonly _initCursor;
    resizeCursor: ResizeCursor;
    resizeInitXRight: number;
    resizeInitYBottom: number;
    onMouseDown(event: MouseEvent): void;
    onMouseMove(event: MouseEvent): void;
    onMouseUp(): void;
    constructor(el: ElementRef<HTMLElement>);
    /** Gets the boundary element, based on the `boundaryElement` value. */
    private getBoundaryElement;
    private makesureInParent;
    dragElement(event: MouseEvent): void;
    initDragging(event: MouseEvent): void;
    setDragging(cursor: string, event: MouseEvent): void;
    resizeElementX(event: MouseEvent): void;
    resizeElementY(event: MouseEvent): void;
    initResizing(event: MouseEvent): void;
    setResizing(cursor: string, event: MouseEvent): void;
    getMutableCursor(event: MouseEvent): string;
}
