angular-resizable-element
Version:
An angular 20.0+ directive that allows an element to be dragged and resized
214 lines (206 loc) • 7.06 kB
TypeScript
import * as i0 from '@angular/core';
import { OnInit, OnDestroy, EventEmitter } from '@angular/core';
import { Subject } from 'rxjs';
/**
* The edges that the resize event were triggered on
*/
interface Edges {
top?: boolean | number;
bottom?: boolean | number;
left?: boolean | number;
right?: boolean | number;
[key: string]: boolean | number | undefined;
}
/**
* The bounding rectangle of the resized element
*/
interface BoundingRectangle {
top: number;
bottom: number;
left: number;
right: number;
height?: number;
width?: number;
scrollTop?: number;
scrollLeft?: number;
[key: string]: number | undefined;
}
/**
* The `$event` object that is passed to the resize events
*/
interface ResizeEvent {
rectangle: BoundingRectangle;
edges: Edges;
}
interface ResizeCursors {
topLeft: string;
topRight: string;
bottomLeft: string;
bottomRight: string;
leftOrRight: string;
topOrBottom: string;
}
/**
* Place this on an element to make it resizable. For example:
*
* ```html
* <div
* mwlResizable
* [resizeEdges]="{bottom: true, right: true, top: true, left: true}"
* [enableGhostResize]="true">
* </div>
* ```
* Or in case they are sibling elements:
* ```html
* <div mwlResizable #resizableElement="mwlResizable"></div>
* <div mwlResizeHandle [resizableContainer]="resizableElement" [resizeEdges]="{bottom: true, right: true}"></div>
* ```
*/
declare class ResizableDirective implements OnInit, OnDestroy {
/**
* A function that will be called before each resize event. Return `true` to allow the resize event to propagate or `false` to cancel it
*/
validateResize: (resizeEvent: ResizeEvent) => boolean;
/**
* Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events.
*/
enableGhostResize: boolean;
/**
* A snap grid that resize events will be locked to.
*
* e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}`
*/
resizeSnapGrid: Edges;
/**
* The mouse cursors that will be set on the resize edges
*/
resizeCursors: Partial<ResizeCursors>;
/**
* Define the positioning of the ghost element (can be fixed or absolute)
*/
ghostElementPositioning: 'fixed' | 'absolute';
/**
* Allow elements to be resized to negative dimensions
*/
allowNegativeResizes: boolean;
/**
* The mouse move throttle in milliseconds, default: 50 ms
*/
mouseMoveThrottleMS: number;
/**
* Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object.
*/
resizeStart: EventEmitter<ResizeEvent>;
/**
* Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object.
*/
resizing: EventEmitter<ResizeEvent>;
/**
* Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object.
*/
resizeEnd: EventEmitter<ResizeEvent>;
/**
* @hidden
*/
mouseup: Subject<{
clientX: number;
clientY: number;
edges?: Edges;
}>;
/**
* @hidden
*/
mousedown: Subject<{
clientX: number;
clientY: number;
edges?: Edges;
}>;
/**
* @hidden
*/
mousemove: Subject<{
clientX: number;
clientY: number;
edges?: Edges;
event: MouseEvent | TouchEvent;
}>;
private pointerEventListeners;
private destroy$;
private platformId;
private renderer;
private elm;
private zone;
/**
* @hidden
*/
constructor();
/**
* @hidden
*/
ngOnInit(): void;
/**
* @hidden
*/
ngOnDestroy(): void;
private setElementClass;
static ɵfac: i0.ɵɵFactoryDeclaration<ResizableDirective, never>;
static ɵdir: i0.ɵɵDirectiveDeclaration<ResizableDirective, "[mwlResizable]", ["mwlResizable"], { "validateResize": { "alias": "validateResize"; "required": false; }; "enableGhostResize": { "alias": "enableGhostResize"; "required": false; }; "resizeSnapGrid": { "alias": "resizeSnapGrid"; "required": false; }; "resizeCursors": { "alias": "resizeCursors"; "required": false; }; "ghostElementPositioning": { "alias": "ghostElementPositioning"; "required": false; }; "allowNegativeResizes": { "alias": "allowNegativeResizes"; "required": false; }; "mouseMoveThrottleMS": { "alias": "mouseMoveThrottleMS"; "required": false; }; }, { "resizeStart": "resizeStart"; "resizing": "resizing"; "resizeEnd": "resizeEnd"; }, never, never, true, never>;
}
/**
* An element placed inside a `mwlResizable` directive to be used as a drag and resize handle
*
* For example
*
* ```html
* <div mwlResizable>
* <div mwlResizeHandle [resizeEdges]="{bottom: true, right: true}"></div>
* </div>
* ```
* Or in case they are sibling elements:
* ```html
* <div mwlResizable #resizableElement="mwlResizable"></div>
* <div mwlResizeHandle [resizableContainer]="resizableElement" [resizeEdges]="{bottom: true, right: true}"></div>
* ```
*/
declare class ResizeHandleDirective implements OnInit, OnDestroy {
private renderer;
private element;
private zone;
private resizableDirective;
/**
* The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on
*/
resizeEdges: Edges;
/**
* Reference to ResizableDirective in case if handle is not located inside of element with ResizableDirective
*/
resizableContainer: ResizableDirective;
private eventListeners;
private destroy$;
ngOnInit(): void;
ngOnDestroy(): void;
/**
* @hidden
*/
onMousedown(event: MouseEvent | TouchEvent, clientX: number, clientY: number): void;
/**
* @hidden
*/
onMouseup(clientX: number, clientY: number): void;
private get resizable();
private onMousemove;
private unsubscribeEventListeners;
private listenOnTheHost;
static ɵfac: i0.ɵɵFactoryDeclaration<ResizeHandleDirective, never>;
static ɵdir: i0.ɵɵDirectiveDeclaration<ResizeHandleDirective, "[mwlResizeHandle]", never, { "resizeEdges": { "alias": "resizeEdges"; "required": false; }; "resizableContainer": { "alias": "resizableContainer"; "required": false; }; }, {}, never, never, true, never>;
}
/**
* @deprecated import standalone `ResizableDirective` / `ResizeHandleDirective` directives instead
*/
declare class ResizableModule {
static ɵfac: i0.ɵɵFactoryDeclaration<ResizableModule, never>;
static ɵmod: i0.ɵɵNgModuleDeclaration<ResizableModule, never, [typeof ResizableDirective, typeof ResizeHandleDirective], [typeof ResizableDirective, typeof ResizeHandleDirective]>;
static ɵinj: i0.ɵɵInjectorDeclaration<ResizableModule>;
}
export { ResizableDirective, ResizableModule, ResizeHandleDirective };
export type { BoundingRectangle, Edges, ResizeCursors, ResizeEvent };