import { ElementRef, EventEmitter, QueryList } from '@angular/core';
import { ResizeCursor } from './util';
import * as i0 from "@angular/core";
export 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 {
    static ɵfac: i0.ɵɵFactoryDeclaration<DragHandleDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DragHandleDirective, "[aclDragHandle]", never, {}, {}, never, never, false, never>;
}
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 */
    aclDraggable: 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 ensureInParent;
    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;
    private isResizeOutOfBoundary;
    static ɵfac: i0.ɵɵFactoryDeclaration<MutableDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<MutableDirective, "[aclMutable]", never, { "aclResizable": { "alias": "aclResizable"; "required": false; }; "aclDraggable": { "alias": "aclDraggable"; "required": false; }; "aclDragBoundary": { "alias": "aclDragBoundary"; "required": false; }; "aclMutableOptions": { "alias": "aclMutableOptions"; "required": false; }; }, { "aclOnResize": "aclOnResize"; "aclOnDrag": "aclOnDrag"; "aclDragStarted": "aclDragStarted"; "aclDragEnded": "aclDragEnded"; "aclResizeStarted": "aclResizeStarted"; "aclResizeEnded": "aclResizeEnded"; }, ["handles"], never, false, never>;
}
