UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

828 lines 85.2 kB
/** * @fileoverview added by tsickle * Generated from: directives/draggable.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Subscription, fromEvent, Subject } from 'rxjs'; import { Directive, ElementRef, EventEmitter, HostBinding, Input, NgZone, Output, Renderer2, Self, Optional } from '@angular/core'; import { DragDropService } from '../services/drag-drop.service'; import { Utils } from '../shared/utils'; import { PreserveNextEventEmitter } from './../shared/preserve-next-event-emitter'; import { DragPreviewDirective } from './drag-preview.directive'; var DraggableDirective = /** @class */ (function () { function DraggableDirective(el, renderer, dragDropService, ngZone, dragPreviewDirective) { var _this = this; this.el = el; this.renderer = renderer; this.dragDropService = dragDropService; this.ngZone = ngZone; this.dragPreviewDirective = dragPreviewDirective; this.draggable = true; /** * Currently not used */ this.dragEffect = 'move'; /** * Defines compatible drag drop pairs. Values must match both in draggable and droppable.dropScope. */ this.dragScope = 'default'; this.dragHandleClass = 'drag-handle'; /** * Event fired when Drag is started */ this.dragStartEvent = new EventEmitter(); /** * @deprecated * Event fired while the element is being dragged * 为了性能优化,该函数废弃,请用(drag)自行监听, 如果不需要angular脏检测则最好用runOutsideAngular的addEventListener监听以获得好的性能 */ this.dragEvent = new PreserveNextEventEmitter(); /** * Event fired when dragged ends */ this.dragEndEvent = new EventEmitter(); this.dropEndEvent = new PreserveNextEventEmitter(); this.enableDragFollow = false; // 默认false使用浏览器H5API拖拽, 否则使用原dom定位偏移 // 用于虚拟滚动的恢复 this.dragItemParentName = ''; // 当前拖拽元素的类名或元素名称(类名需要加.),主要用于子节点的截取操作 // 当前拖拽元素的类名或元素名称(类名需要加.),主要用于子节点的截取操作 this.dragItemChildrenName = ''; // 当前拖拽元素的子节点类名或元素名称(类名需要加.) // 当前拖拽元素的子节点类名或元素名称(类名需要加.) this.dragsSub = new Subscription(); this.destroyDragEndSub = new Subscription(); this.dragElShowHideEvent = new Subject(); this.beforeDragStartEvent = new Subject(); this.insertOriginPlaceholder = (/** * @param {?=} directShow * @param {?=} updateService * @return {?} */ function (directShow, updateService) { if (directShow === void 0) { directShow = true; } if (updateService === void 0) { updateService = true; } if (_this.delayRemoveOriginPlaceholderTimer) { clearTimeout(_this.delayRemoveOriginPlaceholderTimer); _this.delayRemoveOriginPlaceholderTimer = undefined; } /** @type {?} */ var node = document.createElement(_this.originPlaceholder.tag || 'div'); /** @type {?} */ var rect = _this.el.nativeElement.getBoundingClientRect(); if (directShow) { node.style.display = 'block'; } else { node.style.display = 'none'; } node.style.width = rect.width + 'px'; node.style.height = rect.height + 'px'; node.classList.add('drag-origin-placeholder'); if (_this.originPlaceholder.text) { node.innerText = _this.originPlaceholder.text; } if (_this.originPlaceholder.style) { Utils.addElStyles(node, _this.originPlaceholder.style); } if (updateService) { _this.dragDropService.dragOriginPlaceholder = node; _this.dragDropService.dragOriginPlaceholderNextSibling = _this.el.nativeElement.nextSibling; } else { node.classList.add('side-drag-origin-placeholder'); /** @type {?} */ var originCloneNode = _this.el.nativeElement.cloneNode(true); originCloneNode.style.margin = 0; originCloneNode.style.pointerEvents = 'none'; originCloneNode.style.opacity = '0.3'; node.appendChild(originCloneNode); } _this.dragOriginPlaceholder = node; _this.dragOriginPlaceholderNextSibling = _this.el.nativeElement.nextSibling; _this.el.nativeElement.parentElement.insertBefore(node, _this.el.nativeElement.nextSibling); }); this.removeOriginPlaceholder = (/** * @param {?=} updateService * @return {?} */ function (updateService) { if (updateService === void 0) { updateService = true; } if (_this.dragOriginPlaceholder) { _this.dragOriginPlaceholder.parentElement.removeChild(_this.dragOriginPlaceholder); } if (updateService) { _this.dragDropService.dragOriginPlaceholder = undefined; _this.dragDropService.dragOriginPlaceholderNextSibling = undefined; } _this.dragOriginPlaceholder = undefined; _this.dragOriginPlaceholderNextSibling = undefined; }); this.delayRemoveOriginPlaceholder = (/** * @param {?=} updateService * @return {?} */ function (updateService) { if (updateService === void 0) { updateService = true; } /** @type {?} */ var timeout = _this.originPlaceholder.removeDelay; /** @type {?} */ var delayOriginPlaceholder = _this.dragOriginPlaceholder; /** @type {?} */ var dragOriginPlaceholderNextSibling = _this.findNextSibling(_this.dragOriginPlaceholderNextSibling); // 需要临时移动位置,保证被ngFor刷新之后位置是正确的 // ngFor刷新的原理是有变化的部分都刷新,夹在变化部分中间的内容将被刷到变化部分之后的位置,所以需要恢复位置 // setTimeout是等ngFor的View刷新, 后续需要订阅sortContainer的view的更新才需要重新恢复位置 if (delayOriginPlaceholder.parentElement.contains(dragOriginPlaceholderNextSibling)) { delayOriginPlaceholder.parentElement.insertBefore(delayOriginPlaceholder, dragOriginPlaceholderNextSibling); } setTimeout((/** * @return {?} */ function () { if (delayOriginPlaceholder.parentElement.contains(dragOriginPlaceholderNextSibling)) { delayOriginPlaceholder.parentElement.insertBefore(delayOriginPlaceholder, dragOriginPlaceholderNextSibling); } delayOriginPlaceholder.classList.add('delay-deletion'); _this.delayRemoveOriginPlaceholderTimer = setTimeout((/** * @return {?} */ function () { delayOriginPlaceholder.parentElement.removeChild(delayOriginPlaceholder); if (document.body.contains(_this.el.nativeElement)) { _this.el.nativeElement.style.display = ''; _this.dragDropService.dragElShowHideEvent.next(false); } }), timeout); if (updateService) { _this.dragDropService.dragOriginPlaceholder = undefined; _this.dragDropService.dragOriginPlaceholderNextSibling = undefined; } _this.dragOriginPlaceholder = undefined; _this.dragOriginPlaceholderNextSibling = undefined; })); }); } Object.defineProperty(DraggableDirective.prototype, "disabled", { get: /** * @return {?} */ function () { return this._disabled; }, set: /** * @param {?} value * @return {?} */ function (value) { this._disabled = value; this.draggable = !this._disabled; }, enumerable: true, configurable: true }); /** * @return {?} */ DraggableDirective.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; this.ngZone.runOutsideAngular((/** * @return {?} */ function () { _this.dragsSub.add(fromEvent(_this.el.nativeElement, 'mouseover').subscribe((/** * @param {?} event * @return {?} */ function (event) { return _this.mouseover(event); }))); _this.dragsSub.add(fromEvent(_this.el.nativeElement, 'dragstart').subscribe((/** * @param {?} event * @return {?} */ function (event) { return _this.dragStart(event); }))); _this.dragsSub.add(fromEvent(_this.el.nativeElement, 'dragend').subscribe((/** * @param {?} event * @return {?} */ function (event) { return _this.dragEnd(event); }))); })); }; /** * @return {?} */ DraggableDirective.prototype.dropSubscription = /** * @return {?} */ function () { var _this = this; this.dragDropService.newSubscription().add(this.dragDropService.dropEvent.subscribe((/** * @param {?} event * @return {?} */ function (event) { _this.mouseOverElement = undefined; _this.renderer.removeClass(_this.el.nativeElement, _this.dragOverClass); _this.dropEndEvent.emit(event); // 兼容虚拟滚动后被销毁 if (_this.isDestroyed) { if (_this.dropEndEvent.schedulerFns && _this.dropEndEvent.schedulerFns.size > 0) { _this.dropEndEvent.forceCallback(event, true); } } if (_this.dragDropService.dragOriginPlaceholder) { if (_this.originPlaceholder && _this.originPlaceholder.removeDelay > 0 && !_this.dragDropService.dropOnOrigin) { // 非drop到自己的情况 _this.delayRemoveOriginPlaceholder(); } else { _this.removeOriginPlaceholder(); } _this.dragDropService.draggedElIdentity = undefined; } _this.dragDropService.subscription.unsubscribe(); }))).add(this.dragDropService.dragElShowHideEvent.subscribe(this.dragElShowHideEvent)); }; /** * @return {?} */ DraggableDirective.prototype.ngAfterViewInit = /** * @return {?} */ function () { this.applyDragHandleClass(); if (this.dragIdentity) { if (this.dragDropService.draggedEl && this.dragIdentity === this.dragDropService.draggedElIdentity) { if (this.originPlaceholder && this.originPlaceholder.show !== false) { this.insertOriginPlaceholder(); } this.dragDropService.draggedEl = this.el.nativeElement; this.el.nativeElement.style.display = 'none'; // recovery don't need to emit event } } }; /** * @return {?} */ DraggableDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { var _this = this; // 兼容虚拟滚动后被销毁 this.isDestroyed = true; if (this.dragDropService.draggedEl === this.el.nativeElement) { this.destroyDragEndSub = new Subscription(); this.destroyDragEndSub.add(fromEvent(this.el.nativeElement, 'dragend').subscribe((/** * @param {?} event * @return {?} */ function (event) { _this.dragEnd(event); if (_this.dropEndEvent.schedulerFns && _this.dropEndEvent.schedulerFns.size > 0) { _this.dropEndEvent.forceCallback(event, true); } _this.destroyDragEndSub.unsubscribe(); _this.destroyDragEndSub = undefined; }))); if (this.originPlaceholder && this.originPlaceholder.show !== false && this.dragDropService.dragOriginPlaceholder && this.dragDropService.draggedElIdentity) { // 如果有originPlaceholder 则销毁 this.removeOriginPlaceholder(); } } this.dragsSub.unsubscribe(); }; /** * @param {?} e * @return {?} */ DraggableDirective.prototype.dragStart = /** * @param {?} e * @return {?} */ function (e) { var _this = this; if (this.allowDrag(e)) { this.renderer.addClass(this.el.nativeElement, this.dragOverClass); this.dragDropService.dragData = this.dragData; this.dragDropService.scope = this.dragScope; this.dragDropService.draggedEl = this.el.nativeElement; this.dragDropService.draggedElIdentity = this.dragIdentity; this.dragDropService.dragFollow = this.enableDragFollow; this.dragDropService.dragFollowOptions = this.dragFollowOptions; this.dragDropService.dragItemParentName = this.dragItemParentName; this.dragDropService.dragItemChildrenName = this.dragItemChildrenName; this.beforeDragStartEvent.next(); if (this.dragPreviewDirective && this.dragPreviewDirective.dragPreviewTemplate) { this.dragDropService.dragFollow = true; this.dragDropService.dragPreviewDirective = this.dragPreviewDirective; } if (this.batchDraggable) { if (this.batchDraggable.dragData) { // 有dragData证明被加入到了group里 if (this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 1) { this.dragDropService.batchDragging = true; this.dragDropService.batchDragStyle = this.batchDraggable.batchDragStyle; } } else if (this.batchDraggable.batchDragLastOneAutoActiveEventKeys) { /** @type {?} */ var batchActiveAble = this.batchDraggable.batchDragLastOneAutoActiveEventKeys .map((/** * @param {?} key * @return {?} */ function (key) { return e[key]; })) .some((/** * @param {?} eventKey * @return {?} */ function (eventKey) { return eventKey === true; })); if (batchActiveAble) { if (this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 0) { this.batchDraggable.active(); if (!this.batchDraggable.dragData) { // 如果用户没做任何处理把项目加到组里则加到组里 this.batchDraggable.addToBatchGroup(); } if (this.dragDropService.batchDragData.some((/** * @param {?} dragData * @return {?} */ function (dragData) { return dragData.draggable === _this; }))) { this.dragDropService.batchDragging = true; this.dragDropService.batchDragStyle = this.batchDraggable.batchDragStyle; } } } } } /** @type {?} */ var targetOffset = this.el.nativeElement.getBoundingClientRect(); if (this.dragDropService.dragFollow) { /** @type {?} */ var mousePositionXY = this.mousePosition(e); // 用于出现transform的场景position:fixed相对位置变更 /** @type {?} */ var transformOffset = this.checkAndGetViewPointChange(this.el.nativeElement); this.dragDropService.dragOffset = { left: targetOffset.left, top: targetOffset.top, offsetLeft: mousePositionXY.x - targetOffset.left + transformOffset.offsetX, offsetTop: mousePositionXY.y - targetOffset.top + transformOffset.offsetY, width: targetOffset.width, height: targetOffset.height }; this.dragDropService.enableDraggedCloneNodeFollowMouse(); } else { this.dragDropService.dragOffset = { left: targetOffset.left, top: targetOffset.top, offsetLeft: null, offsetTop: null, width: targetOffset.width, height: targetOffset.height }; } if (this.originPlaceholder && this.originPlaceholder.show !== false) { this.insertOriginPlaceholder(false); } if (this.dragDropService.batchDragging && this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 1) { this.dragDropService.batchDragData.map((/** * @param {?} dragData * @return {?} */ function (dragData) { return dragData.draggable; })) .filter((/** * @param {?} draggable * @return {?} */ function (draggable) { return draggable && draggable !== _this; })) .forEach((/** * @param {?} draggable * @return {?} */ function (draggable) { if (draggable.originPlaceholder && draggable.originPlaceholder.show !== false) { draggable.insertOriginPlaceholder(true, false); draggable.el.nativeElement.style.display = 'none'; } else { setTimeout((/** * @return {?} */ function () { draggable.el.nativeElement.style.display = 'none'; })); } })); } // Firefox requires setData() to be called otherwise the drag does not work. if (e.dataTransfer != null) { e.dataTransfer.setData('text', ''); } e.dataTransfer.effectAllowed = this.dragEffect; this.dropSubscription(); if (this.dragDropService.dragFollow) { if ('function' === typeof DataTransfer.prototype.setDragImage) { e.dataTransfer.setDragImage(this.dragDropService.dragEmptyImage, 0, 0); } else { e.srcElement.style.display = 'none'; this.dragDropService.dragElShowHideEvent.next(false); } } e.stopPropagation(); this.dragStartEvent.emit(e); this.dragDropService.dragStartEvent.next(e); } else { e.preventDefault(); } }; /** * @param {?} e * @return {?} */ DraggableDirective.prototype.dragEnd = /** * @param {?} e * @return {?} */ function (e) { var _this = this; this.renderer.removeClass(this.el.nativeElement, this.dragOverClass); this.dragDropService.dragEndEvent.next(e); this.mouseOverElement = undefined; if (this.dragDropService.draggedEl) { // 当dom被清除的的时候不会触发dragend,所以清理工作部分交给了drop,但是内部排序的时候dom不会被清理,dragend防止和drop重复操作清理动作 if (this.dragDropService.dragFollow) { this.dragDropService.disableDraggedCloneNodeFollowMouse(); } if (this.dragDropService.dragOriginPlaceholder) { this.removeOriginPlaceholder(); } if (this.dragDropService.batchDragging && this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 1) { this.dragDropService.batchDragData.map((/** * @param {?} dragData * @return {?} */ function (dragData) { return dragData.draggable; })) .filter((/** * @param {?} draggable * @return {?} */ function (draggable) { return draggable && draggable !== _this; })) .forEach((/** * @param {?} draggable * @return {?} */ function (draggable) { if (draggable.originPlaceholder && draggable.originPlaceholder.show !== false) { draggable.el.nativeElement.style.display = ''; draggable.removeOriginPlaceholder(); } else { draggable.el.nativeElement.style.display = ''; } })); } if (this.batchDraggable && !this.batchDraggable.batchDragActive) { this.batchDraggable.removeFromBatchGroup(); this.dragDropService.batchDragging = false; this.dragDropService.batchDragStyle = undefined; } if (this.dragDropService.subscription) { this.dragDropService.subscription.unsubscribe(); } this.dragDropService.dragData = undefined; this.dragDropService.scope = undefined; this.dragDropService.draggedEl = undefined; this.dragDropService.dragFollow = undefined; this.dragDropService.dragFollowOptions = undefined; this.dragDropService.dragOffset = undefined; this.dragDropService.draggedElIdentity = undefined; this.dragDropService.dragPreviewDirective = undefined; } e.stopPropagation(); e.preventDefault(); this.dragEndEvent.emit(e); }; /** * @param {?} e * @return {?} */ DraggableDirective.prototype.mouseover = /** * @param {?} e * @return {?} */ function (e) { this.mouseOverElement = e.target; }; /** * @private * @param {?} e * @return {?} */ DraggableDirective.prototype.allowDrag = /** * @private * @param {?} e * @return {?} */ function (e) { if (!this.draggable) { return false; } if (this.batchDraggable && !this.batchDraggable.allowAddToBatchGroup()) { // 批量拖拽判断group是否相同 return false; } if (this.dragHandle) { if (e && e.fromTouch) { return true; } // from touchstart dispatch event if (!this.mouseOverElement) { return false; } return Utils.matches(this.mouseOverElement, this.dragHandle); } else { return true; } }; /** * @private * @return {?} */ DraggableDirective.prototype.applyDragHandleClass = /** * @private * @return {?} */ function () { /** @type {?} */ var dragElement = this.getDragHandleElement(); if (!dragElement) { return; } if (this.draggable) { Utils.addClass(dragElement, this.dragHandleClass); } else { Utils.removeClass(this.el, this.dragHandleClass); } }; /** * @private * @return {?} */ DraggableDirective.prototype.getDragHandleElement = /** * @private * @return {?} */ function () { /** @type {?} */ var dragElement = this.el; if (this.dragHandle) { dragElement = this.el.nativeElement.querySelector(this.dragHandle); } return dragElement; }; /** * @private * @param {?} event * @return {?} */ DraggableDirective.prototype.mousePosition = /** * @private * @param {?} event * @return {?} */ function (event) { return { x: event.clientX, y: event.clientY }; }; /** * @param {?} currentNextSibling * @return {?} */ DraggableDirective.prototype.findNextSibling = /** * @param {?} currentNextSibling * @return {?} */ function (currentNextSibling) { if (!this.dragDropService.batchDragData) { return currentNextSibling; } else { if (this.dragDropService.batchDragData .map((/** * @param {?} dragData * @return {?} */ function (dragData) { return dragData.draggable && dragData.draggable.el.nativeElement; })) .indexOf(currentNextSibling) > -1) { currentNextSibling = currentNextSibling.nextSibling; } return currentNextSibling; } }; /** * @private * @param {?} element * @return {?} */ DraggableDirective.prototype.checkAndGetViewPointChange = /** * @private * @param {?} element * @return {?} */ function (element) { if (!element.parentNode) { return null; } // 模拟一个元素测预测位置和最终位置是否符合,如果不符合则是有transform等造成的偏移 /** @type {?} */ var elementPosition = element.getBoundingClientRect(); /** @type {?} */ var testEl = document.createElement('div'); Utils.addElStyles(testEl, { opacity: '0', position: 'fixed', top: elementPosition.top + 'px', left: elementPosition.left + 'px', width: '1px', height: '1px', zIndex: '-999999', }); element.parentNode.appendChild(testEl); /** @type {?} */ var testElPosition = testEl.getBoundingClientRect(); element.parentNode.removeChild(testEl); return { offsetX: testElPosition.left - elementPosition.left, offsetY: testElPosition.top - elementPosition.top }; }; DraggableDirective.decorators = [ { type: Directive, args: [{ selector: '[dDraggable]' },] } ]; /** @nocollapse */ DraggableDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: Renderer2 }, { type: DragDropService }, { type: NgZone }, { type: DragPreviewDirective, decorators: [{ type: Optional }, { type: Self }] } ]; }; DraggableDirective.propDecorators = { draggable: [{ type: HostBinding, args: ['draggable',] }], dragData: [{ type: Input }], dragHandle: [{ type: HostBinding, args: ['attr.data-drag-handle-selector',] }, { type: Input }], dragEffect: [{ type: Input }], dragScope: [{ type: Input }], dragHandleClass: [{ type: Input }], dragOverClass: [{ type: Input }], dragStartEvent: [{ type: Output }], dragEvent: [{ type: Output }], dragEndEvent: [{ type: Output }], dropEndEvent: [{ type: Output }], disabled: [{ type: Input }], enableDragFollow: [{ type: Input }], dragFollowOptions: [{ type: Input }], originPlaceholder: [{ type: Input }], dragIdentity: [{ type: Input }], dragItemParentName: [{ type: Input }], dragItemChildrenName: [{ type: Input }] }; return DraggableDirective; }()); export { DraggableDirective }; if (false) { /** @type {?} */ DraggableDirective.prototype.draggable; /** * The data that will be available to the droppable directive on its `onDrop()` event. * @type {?} */ DraggableDirective.prototype.dragData; /** * The selector that defines the drag Handle. If defined drag will only be allowed if dragged from the selector element. * @type {?} */ DraggableDirective.prototype.dragHandle; /** * Currently not used * @type {?} */ DraggableDirective.prototype.dragEffect; /** * Defines compatible drag drop pairs. Values must match both in draggable and droppable.dropScope. * @type {?} */ DraggableDirective.prototype.dragScope; /** @type {?} */ DraggableDirective.prototype.dragHandleClass; /** * CSS class applied on the draggable that is applied when the item is being dragged. * @type {?} */ DraggableDirective.prototype.dragOverClass; /** * Event fired when Drag is started * @type {?} */ DraggableDirective.prototype.dragStartEvent; /** * @deprecated * Event fired while the element is being dragged * 为了性能优化,该函数废弃,请用(drag)自行监听, 如果不需要angular脏检测则最好用runOutsideAngular的addEventListener监听以获得好的性能 * @type {?} */ DraggableDirective.prototype.dragEvent; /** * Event fired when dragged ends * @type {?} */ DraggableDirective.prototype.dragEndEvent; /** * Keeps track of mouse over element that is used to determine drag handles * @type {?} * @private */ DraggableDirective.prototype.mouseOverElement; /** @type {?} */ DraggableDirective.prototype.dropEndEvent; /** * @type {?} * @private */ DraggableDirective.prototype._disabled; /** @type {?} */ DraggableDirective.prototype.enableDragFollow; /** @type {?} */ DraggableDirective.prototype.dragFollowOptions; /** @type {?} */ DraggableDirective.prototype.originPlaceholder; /** @type {?} */ DraggableDirective.prototype.dragIdentity; /** @type {?} */ DraggableDirective.prototype.dragItemParentName; /** @type {?} */ DraggableDirective.prototype.dragItemChildrenName; /** @type {?} */ DraggableDirective.prototype.dragsSub; /** @type {?} */ DraggableDirective.prototype.destroyDragEndSub; /** @type {?} */ DraggableDirective.prototype.isDestroyed; /** * @type {?} * @private */ DraggableDirective.prototype.delayRemoveOriginPlaceholderTimer; /** @type {?} */ DraggableDirective.prototype.batchDraggable; /** * @type {?} * @private */ DraggableDirective.prototype.dragOriginPlaceholder; /** * @type {?} * @private */ DraggableDirective.prototype.dragOriginPlaceholderNextSibling; /** @type {?} */ DraggableDirective.prototype.dragElShowHideEvent; /** @type {?} */ DraggableDirective.prototype.beforeDragStartEvent; /** @type {?} */ DraggableDirective.prototype.insertOriginPlaceholder; /** @type {?} */ DraggableDirective.prototype.removeOriginPlaceholder; /** @type {?} */ DraggableDirective.prototype.delayRemoveOriginPlaceholder; /** @type {?} */ DraggableDirective.prototype.el; /** * @type {?} * @private */ DraggableDirective.prototype.renderer; /** * @type {?} * @private */ DraggableDirective.prototype.dragDropService; /** * @type {?} * @private */ DraggableDirective.prototype.ngZone; /** @type {?} */ DraggableDirective.prototype.dragPreviewDirective; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL2RyYWdkcm9wLyIsInNvdXJjZXMiOlsiZGlyZWN0aXZlcy9kcmFnZ2FibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUN0RSxLQUFLLEVBQUUsTUFBTSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFRLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVoRTtJQStGRSw0QkFBbUIsRUFBYyxFQUFVLFFBQW1CLEVBQVUsZUFBZ0MsRUFBVSxNQUFjLEVBQ25HLG9CQUEwQztRQUR2RSxpQkFHQztRQUhrQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDbkcseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQXpGN0MsY0FBUyxHQUFHLElBQUksQ0FBQzs7OztRQWVsQyxlQUFVLEdBQUcsTUFBTSxDQUFDOzs7O1FBS3BCLGNBQVMsR0FBMkIsU0FBUyxDQUFDO1FBRTlDLG9CQUFlLEdBQUcsYUFBYSxDQUFDOzs7O1FBUy9CLG1CQUFjLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7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