@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
TypeScript
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>;
}