UNPKG

@ux-aspects/ux-aspects

Version:

Open source user interface framework for building modern, responsive, mobile big data applications

88 lines (87 loc) 4.07 kB
import { EventEmitter, OnDestroy } from '@angular/core'; import { Subject } from 'rxjs'; import * as i0 from "@angular/core"; export interface DragScrollEvent { offsetX: number; offsetY: number; } export declare class DragDirective<T = unknown> implements OnDestroy { private readonly _elementRef; private readonly _ngZone; private readonly _renderer; private readonly _scrollDispatcher; private readonly _drag; /** Detemine if we should show a clone when dragging */ clone: boolean; /** Define the group the drag event belongs to */ group: string; /** Associate some data with the drag event */ model: T; /** Allow the dragging to be enabled/disabled */ draggable: boolean; /** Emit an event when dragging starts */ onDragStart: EventEmitter<MouseEvent>; /** Emit an event when the mouse moves while dragging */ onDrag: EventEmitter<MouseEvent>; /** Emit an event when the document scrolls while dragging */ onDragScroll: EventEmitter<DragScrollEvent>; /** Emit an event when the dragging finishes */ onDragEnd: EventEmitter<void>; /** Emit when the user drops an item in a drop area */ onDrop: EventEmitter<T>; /** Emit when the user drags over a drop area */ onDropEnter: EventEmitter<void>; /** Emit when the user drags out of a drop area */ onDropLeave: EventEmitter<void>; /** Store the element we have cloned */ private _clone; /** Store the dragging state */ private _isDragging; /** Store the mouse offset for the cloned element position */ private _offset; /** The nearest scrolling ancestor, populated while dragging */ private _scrollParent; /** The current scroll position of _scrollParent */ private _scrollPosition; /** The scroll event listener handle */ private _scrollListener; /** The offset in pixels currently being scrolled while dragging */ private _scrollOffset; /** The current `setInterval` handle for periodic scrolling */ private _scrollIntervalHandle; /** Create an observable from the mouse down event */ private readonly _mousedown$; /** Create an observable from the mouse move event */ private readonly _mousemove$; /** Create an observable from the mouse up event */ private readonly _mouseup$; /** Use an observable to unsubscribe from all subscriptions */ protected _onDestroy: Subject<void>; constructor(); /** Emit events and create clone when drag starts */ dragStart(event: MouseEvent): void; /** Emit event and update clone position when dragging moves */ dragMove(event: MouseEvent): void; /** Emit event and destroy clone when dragging ends */ dragEnd(): void; /** Emit the onDragScroll event */ scroll(): void; /** Create an exact clone of an element */ cloneNode(event: MouseEvent): void; /** Position the clone relative to the mouse */ updateNodePosition(event: MouseEvent): void; /** Inline all styles to ensure styling is consistent regardless of its position in the dom */ inlineStyles(source: Element, target: Element): void; /** Unsubscribe from all subscriptions */ ngOnDestroy(): void; private updateScrolling; private getScrollParent; private createScrollEventListener; private removeScrollEventListener; private getScrollOffsets; private startScrolling; private stopScrolling; private performScroll; static ɵfac: i0.ɵɵFactoryDeclaration<DragDirective<any>, never>; static ɵdir: i0.ɵɵDirectiveDeclaration<DragDirective<any>, "[uxDrag]", never, { "clone": { "alias": "clone"; "required": false; }; "group": { "alias": "group"; "required": false; }; "model": { "alias": "model"; "required": false; }; "draggable": { "alias": "draggable"; "required": false; }; }, { "onDragStart": "onDragStart"; "onDrag": "onDrag"; "onDragScroll": "onDragScroll"; "onDragEnd": "onDragEnd"; "onDrop": "onDrop"; "onDropEnter": "onDropEnter"; "onDropLeave": "onDropLeave"; }, never, never, false, never>; }