UNPKG

angular2-draggable

Version:

<!-- Badges section here. --> [![npm](https://img.shields.io/npm/v/angular2-draggable.svg)][npm-badge-url] [![npm](https://img.shields.io/npm/dm/angular2-draggable.svg)][npm-badge-url] [![Build Status](https://travis-ci.org/xieziyu/angular2-draggable.svg?

1,102 lines 90.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Directive, ElementRef, Renderer2, Input, Output, EventEmitter } from '@angular/core'; import { fromEvent } from 'rxjs'; import { HelperBlock } from './widgets/helper-block'; import { ResizeHandle } from './widgets/resize-handle'; import { Position } from './models/position'; import { Size } from './models/size'; var AngularResizableDirective = /** @class */ (function () { function AngularResizableDirective(el, renderer) { this.el = el; this.renderer = renderer; this._resizable = true; this._handles = {}; this._handleType = []; this._handleResizing = null; this._direction = null; this._directionChanged = null; this._aspectRatio = 0; this._containment = null; this._origMousePos = null; /** * Original Size and Position */ this._origSize = null; this._origPos = null; /** * Current Size and Position */ this._currSize = null; this._currPos = null; /** * Initial Size and Position */ this._initSize = null; this._initPos = null; /** * Snap to gird */ this._gridSize = null; this._bounding = null; /** * Bugfix: iFrames, and context unrelated elements block all events, and are unusable * https://github.com/xieziyu/angular2-draggable/issues/84 */ this._helperBlock = null; this.draggingSub = null; this._adjusted = false; /** * Which handles can be used for resizing. * \@example * [rzHandles] = "'n,e,s,w,se,ne,sw,nw'" * equals to: [rzHandles] = "'all'" * * */ this.rzHandles = 'e,s,se'; /** * Whether the element should be constrained to a specific aspect ratio. * Multiple types supported: * boolean: When set to true, the element will maintain its original aspect ratio. * number: Force the element to maintain a specific aspect ratio during resizing. */ this.rzAspectRatio = false; /** * Constrains resizing to within the bounds of the specified element or region. * Multiple types supported: * Selector: The resizable element will be contained to the bounding box of the first element found by the selector. * If no element is found, no containment will be set. * Element: The resizable element will be contained to the bounding box of this element. * String: Possible values: "parent". */ this.rzContainment = null; /** * Snaps the resizing element to a grid, every x and y pixels. * A number for both width and height or an array values like [ x, y ] */ this.rzGrid = null; /** * The minimum width the resizable should be allowed to resize to. */ this.rzMinWidth = null; /** * The minimum height the resizable should be allowed to resize to. */ this.rzMinHeight = null; /** * The maximum width the resizable should be allowed to resize to. */ this.rzMaxWidth = null; /** * The maximum height the resizable should be allowed to resize to. */ this.rzMaxHeight = null; /** * Whether to prevent default event */ this.preventDefaultEvent = true; /** * emitted when start resizing */ this.rzStart = new EventEmitter(); /** * emitted when start resizing */ this.rzResizing = new EventEmitter(); /** * emitted when stop resizing */ this.rzStop = new EventEmitter(); this._helperBlock = new HelperBlock(el.nativeElement, renderer); } Object.defineProperty(AngularResizableDirective.prototype, "ngResizable", { /** Disables the resizable if set to false. */ set: /** * Disables the resizable if set to false. * @param {?} v * @return {?} */ function (v) { if (v !== undefined && v !== null && v !== '') { this._resizable = !!v; this.updateResizable(); } }, enumerable: true, configurable: true }); /** * @param {?} changes * @return {?} */ AngularResizableDirective.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes['rzHandles'] && !changes['rzHandles'].isFirstChange()) { this.updateResizable(); } if (changes['rzAspectRatio'] && !changes['rzAspectRatio'].isFirstChange()) { this.updateAspectRatio(); } if (changes['rzContainment'] && !changes['rzContainment'].isFirstChange()) { this.updateContainment(); } }; /** * @return {?} */ AngularResizableDirective.prototype.ngOnInit = /** * @return {?} */ function () { this.updateResizable(); }; /** * @return {?} */ AngularResizableDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { this.removeHandles(); this._containment = null; this._helperBlock.dispose(); this._helperBlock = null; }; /** * @return {?} */ AngularResizableDirective.prototype.ngAfterViewInit = /** * @return {?} */ function () { /** @type {?} */ var elm = this.el.nativeElement; this._initSize = Size.getCurrent(elm); this._initPos = Position.getCurrent(elm); this._currSize = Size.copy(this._initSize); this._currPos = Position.copy(this._initPos); this.updateAspectRatio(); this.updateContainment(); }; /** A method to reset size */ /** * A method to reset size * @return {?} */ AngularResizableDirective.prototype.resetSize = /** * A method to reset size * @return {?} */ function () { this._currSize = Size.copy(this._initSize); this._currPos = Position.copy(this._initPos); this.doResize(); }; /** A method to get current status */ /** * A method to get current status * @return {?} */ AngularResizableDirective.prototype.getStatus = /** * A method to get current status * @return {?} */ function () { if (!this._currPos || !this._currSize) { return null; } return { size: { width: this._currSize.width, height: this._currSize.height }, position: { top: this._currPos.y, left: this._currPos.x } }; }; /** * @private * @return {?} */ AngularResizableDirective.prototype.updateResizable = /** * @private * @return {?} */ function () { /** @type {?} */ var element = this.el.nativeElement; // clear handles: this.renderer.removeClass(element, 'ng-resizable'); this.removeHandles(); // create new ones: if (this._resizable) { this.renderer.addClass(element, 'ng-resizable'); this.createHandles(); } }; /** Use it to update aspect */ /** * Use it to update aspect * @private * @return {?} */ AngularResizableDirective.prototype.updateAspectRatio = /** * Use it to update aspect * @private * @return {?} */ function () { if (typeof this.rzAspectRatio === 'boolean') { if (this.rzAspectRatio && this._currSize.height) { this._aspectRatio = (this._currSize.width / this._currSize.height); } else { this._aspectRatio = 0; } } else { /** @type {?} */ var r = Number(this.rzAspectRatio); this._aspectRatio = isNaN(r) ? 0 : r; } }; /** Use it to update containment */ /** * Use it to update containment * @private * @return {?} */ AngularResizableDirective.prototype.updateContainment = /** * Use it to update containment * @private * @return {?} */ function () { if (!this.rzContainment) { this._containment = null; return; } if (typeof this.rzContainment === 'string') { if (this.rzContainment === 'parent') { this._containment = this.el.nativeElement.parentElement; } else { this._containment = document.querySelector(this.rzContainment); } } else { this._containment = this.rzContainment; } }; /** Use it to create handle divs */ /** * Use it to create handle divs * @private * @return {?} */ AngularResizableDirective.prototype.createHandles = /** * Use it to create handle divs * @private * @return {?} */ function () { var e_1, _a, e_2, _b; if (!this.rzHandles) { return; } /** @type {?} */ var tmpHandleTypes; if (typeof this.rzHandles === 'string') { if (this.rzHandles === 'all') { tmpHandleTypes = ['n', 'e', 's', 'w', 'ne', 'se', 'nw', 'sw']; } else { tmpHandleTypes = this.rzHandles.replace(/ /g, '').toLowerCase().split(','); } try { for (var tmpHandleTypes_1 = tslib_1.__values(tmpHandleTypes), tmpHandleTypes_1_1 = tmpHandleTypes_1.next(); !tmpHandleTypes_1_1.done; tmpHandleTypes_1_1 = tmpHandleTypes_1.next()) { var type = tmpHandleTypes_1_1.value; // default handle theme: ng-resizable-$type. /** @type {?} */ var handle = this.createHandleByType(type, "ng-resizable-" + type); if (handle) { this._handleType.push(type); this._handles[type] = handle; } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (tmpHandleTypes_1_1 && !tmpHandleTypes_1_1.done && (_a = tmpHandleTypes_1.return)) _a.call(tmpHandleTypes_1); } finally { if (e_1) throw e_1.error; } } } else { tmpHandleTypes = Object.keys(this.rzHandles); try { for (var tmpHandleTypes_2 = tslib_1.__values(tmpHandleTypes), tmpHandleTypes_2_1 = tmpHandleTypes_2.next(); !tmpHandleTypes_2_1.done; tmpHandleTypes_2_1 = tmpHandleTypes_2.next()) { var type = tmpHandleTypes_2_1.value; // custom handle theme. /** @type {?} */ var handle = this.createHandleByType(type, this.rzHandles[type]); if (handle) { this._handleType.push(type); this._handles[type] = handle; } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (tmpHandleTypes_2_1 && !tmpHandleTypes_2_1.done && (_b = tmpHandleTypes_2.return)) _b.call(tmpHandleTypes_2); } finally { if (e_2) throw e_2.error; } } } }; /** Use it to create a handle */ /** * Use it to create a handle * @private * @param {?} type * @param {?} css * @return {?} */ AngularResizableDirective.prototype.createHandleByType = /** * Use it to create a handle * @private * @param {?} type * @param {?} css * @return {?} */ function (type, css) { /** @type {?} */ var _el = this.el.nativeElement; if (!type.match(/^(se|sw|ne|nw|n|e|s|w)$/)) { console.error('Invalid handle type:', type); return null; } return new ResizeHandle(_el, this.renderer, type, css, this.onMouseDown.bind(this)); }; /** * @private * @return {?} */ AngularResizableDirective.prototype.removeHandles = /** * @private * @return {?} */ function () { var e_3, _a; try { for (var _b = tslib_1.__values(this._handleType), _c = _b.next(); !_c.done; _c = _b.next()) { var type = _c.value; this._handles[type].dispose(); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_3) throw e_3.error; } } this._handleType = []; this._handles = {}; }; /** * @param {?} event * @param {?} handle * @return {?} */ AngularResizableDirective.prototype.onMouseDown = /** * @param {?} event * @param {?} handle * @return {?} */ function (event, handle) { // skip right click; if (event instanceof MouseEvent && event.button === 2) { return; } if (this.preventDefaultEvent) { // prevent default events event.stopPropagation(); event.preventDefault(); } if (!this._handleResizing) { this._origMousePos = Position.fromEvent(event); this.startResize(handle); this.subscribeEvents(); } }; /** * @private * @return {?} */ AngularResizableDirective.prototype.subscribeEvents = /** * @private * @return {?} */ function () { var _this = this; this.draggingSub = fromEvent(document, 'mousemove', { passive: false }).subscribe(function (event) { return _this.onMouseMove((/** @type {?} */ (event))); }); this.draggingSub.add(fromEvent(document, 'touchmove', { passive: false }).subscribe(function (event) { return _this.onMouseMove((/** @type {?} */ (event))); })); this.draggingSub.add(fromEvent(document, 'mouseup', { passive: false }).subscribe(function () { return _this.onMouseLeave(); })); // fix for issue #164 /** @type {?} */ var isIEOrEdge = /msie\s|trident\//i.test(window.navigator.userAgent); if (!isIEOrEdge) { this.draggingSub.add(fromEvent(document, 'mouseleave', { passive: false }).subscribe(function () { return _this.onMouseLeave(); })); } this.draggingSub.add(fromEvent(document, 'touchend', { passive: false }).subscribe(function () { return _this.onMouseLeave(); })); this.draggingSub.add(fromEvent(document, 'touchcancel', { passive: false }).subscribe(function () { return _this.onMouseLeave(); })); }; /** * @private * @return {?} */ AngularResizableDirective.prototype.unsubscribeEvents = /** * @private * @return {?} */ function () { this.draggingSub.unsubscribe(); this.draggingSub = null; }; /** * @return {?} */ AngularResizableDirective.prototype.onMouseLeave = /** * @return {?} */ function () { if (this._handleResizing) { this.stopResize(); this._origMousePos = null; this.unsubscribeEvents(); } }; /** * @param {?} event * @return {?} */ AngularResizableDirective.prototype.onMouseMove = /** * @param {?} event * @return {?} */ function (event) { if (this._handleResizing && this._resizable && this._origMousePos && this._origPos && this._origSize) { this.resizeTo(Position.fromEvent(event)); this.onResizing(); } }; /** * @private * @param {?} handle * @return {?} */ AngularResizableDirective.prototype.startResize = /** * @private * @param {?} handle * @return {?} */ function (handle) { /** @type {?} */ var elm = this.el.nativeElement; this._origSize = Size.getCurrent(elm); this._origPos = Position.getCurrent(elm); // x: left, y: top this._currSize = Size.copy(this._origSize); this._currPos = Position.copy(this._origPos); if (this._containment) { this.getBounding(); } this.getGridSize(); // Add a transparent helper div: this._helperBlock.add(); this._handleResizing = handle; this.updateDirection(); this.rzStart.emit(this.getResizingEvent()); }; /** * @private * @return {?} */ AngularResizableDirective.prototype.stopResize = /** * @private * @return {?} */ function () { // Remove the helper div: this._helperBlock.remove(); this.rzStop.emit(this.getResizingEvent()); this._handleResizing = null; this._direction = null; this._origSize = null; this._origPos = null; if (this._containment) { this.resetBounding(); } }; /** * @private * @return {?} */ AngularResizableDirective.prototype.onResizing = /** * @private * @return {?} */ function () { this.rzResizing.emit(this.getResizingEvent()); }; /** * @private * @return {?} */ AngularResizableDirective.prototype.getResizingEvent = /** * @private * @return {?} */ function () { return { host: this.el.nativeElement, handle: this._handleResizing ? this._handleResizing.el : null, size: { width: this._currSize.width, height: this._currSize.height }, position: { top: this._currPos.y, left: this._currPos.x }, direction: tslib_1.__assign({}, this._directionChanged), }; }; /** * @private * @return {?} */ AngularResizableDirective.prototype.updateDirection = /** * @private * @return {?} */ function () { this._direction = { n: !!this._handleResizing.type.match(/n/), s: !!this._handleResizing.type.match(/s/), w: !!this._handleResizing.type.match(/w/), e: !!this._handleResizing.type.match(/e/) }; this._directionChanged = tslib_1.__assign({}, this._direction); // if aspect ration should be preserved: if (this.rzAspectRatio) { // if north then west (unless ne) if (this._directionChanged.n && !this._directionChanged.e) { this._directionChanged.w = true; } // if south then east (unless sw) if (this._directionChanged.s && !this._directionChanged.w) { this._directionChanged.e = true; } // if east then south (unless ne) if (this._directionChanged.e && !this._directionChanged.n) { this._directionChanged.s = true; } // if west then south (unless nw) if (this._directionChanged.w && !this._directionChanged.n) { this._directionChanged.s = true; } } }; /** * @private * @param {?} p * @return {?} */ AngularResizableDirective.prototype.resizeTo = /** * @private * @param {?} p * @return {?} */ function (p) { p.subtract(this._origMousePos); /** @type {?} */ var tmpX = Math.round(p.x / this._gridSize.x) * this._gridSize.x; /** @type {?} */ var tmpY = Math.round(p.y / this._gridSize.y) * this._gridSize.y; if (this._direction.n) { // n, ne, nw this._currPos.y = this._origPos.y + tmpY; this._currSize.height = this._origSize.height - tmpY; } else if (this._direction.s) { // s, se, sw this._currSize.height = this._origSize.height + tmpY; } if (this._direction.e) { // e, ne, se this._currSize.width = this._origSize.width + tmpX; } else if (this._direction.w) { // w, nw, sw this._currSize.width = this._origSize.width - tmpX; this._currPos.x = this._origPos.x + tmpX; } this.checkBounds(); this.checkSize(); this.adjustByRatio(); this.doResize(); }; /** * @private * @return {?} */ AngularResizableDirective.prototype.doResize = /** * @private * @return {?} */ function () { /** @type {?} */ var container = this.el.nativeElement; if (!this._direction || this._direction.n || this._direction.s || this._aspectRatio) { this.renderer.setStyle(container, 'height', this._currSize.height + 'px'); } if (!this._direction || this._direction.w || this._direction.e || this._aspectRatio) { this.renderer.setStyle(container, 'width', this._currSize.width + 'px'); } this.renderer.setStyle(container, 'left', this._currPos.x + 'px'); this.renderer.setStyle(container, 'top', this._currPos.y + 'px'); }; /** * @private * @return {?} */ AngularResizableDirective.prototype.adjustByRatio = /** * @private * @return {?} */ function () { if (this._aspectRatio && !this._adjusted) { if (this._direction.e || this._direction.w) { /** @type {?} */ var newHeight = Math.floor(this._currSize.width / this._aspectRatio); if (this._direction.n) { this._currPos.y += this._currSize.height - newHeight; } this._currSize.height = newHeight; } else { /** @type {?} */ var newWidth = Math.floor(this._aspectRatio * this._currSize.height); if (this._direction.n) { this._currPos.x += this._currSize.width - newWidth; } this._currSize.width = newWidth; } } }; /** * @private * @return {?} */ AngularResizableDirective.prototype.checkBounds = /** * @private * @return {?} */ function () { if (this._containment) { /** @type {?} */ var maxWidth = this._bounding.width - this._bounding.pr - this._bounding.deltaL - this._bounding.translateX - this._currPos.x; /** @type {?} */ var maxHeight = this._bounding.height - this._bounding.pb - this._bounding.deltaT - this._bounding.translateY - this._currPos.y; if (this._direction.n && (this._currPos.y + this._bounding.translateY < 0)) { this._currPos.y = -this._bounding.translateY; this._currSize.height = this._origSize.height + this._origPos.y + this._bounding.translateY; } if (this._direction.w && (this._currPos.x + this._bounding.translateX) < 0) { this._currPos.x = -this._bounding.translateX; this._currSize.width = this._origSize.width + this._origPos.x + this._bounding.translateX; } if (this._currSize.width > maxWidth) { this._currSize.width = maxWidth; } if (this._currSize.height > maxHeight) { this._currSize.height = maxHeight; } /** * Fix Issue: Additional check for aspect ratio * https://github.com/xieziyu/angular2-draggable/issues/132 */ if (this._aspectRatio) { this._adjusted = false; if ((this._direction.w || this._direction.e) && (this._currSize.width / this._aspectRatio) >= maxHeight) { /** @type {?} */ var newWidth = Math.floor(maxHeight * this._aspectRatio); if (this._direction.w) { this._currPos.x += this._currSize.width - newWidth; } this._currSize.width = newWidth; this._currSize.height = maxHeight; this._adjusted = true; } if ((this._direction.n || this._direction.s) && (this._currSize.height * this._aspectRatio) >= maxWidth) { /** @type {?} */ var newHeight = Math.floor(maxWidth / this._aspectRatio); if (this._direction.n) { this._currPos.y += this._currSize.height - newHeight; } this._currSize.width = maxWidth; this._currSize.height = newHeight; this._adjusted = true; } } } }; /** * @private * @return {?} */ AngularResizableDirective.prototype.checkSize = /** * @private * @return {?} */ function () { /** @type {?} */ var minHeight = !this.rzMinHeight ? 1 : this.rzMinHeight; /** @type {?} */ var minWidth = !this.rzMinWidth ? 1 : this.rzMinWidth; if (this._currSize.height < minHeight) { this._currSize.height = minHeight; if (this._direction.n) { this._currPos.y = this._origPos.y + (this._origSize.height - minHeight); } } if (this._currSize.width < minWidth) { this._currSize.width = minWidth; if (this._direction.w) { this._currPos.x = this._origPos.x + (this._origSize.width - minWidth); } } if (this.rzMaxHeight && this._currSize.height > this.rzMaxHeight) { this._currSize.height = this.rzMaxHeight; if (this._direction.n) { this._currPos.y = this._origPos.y + (this._origSize.height - this.rzMaxHeight); } } if (this.rzMaxWidth && this._currSize.width > this.rzMaxWidth) { this._currSize.width = this.rzMaxWidth; if (this._direction.w) { this._currPos.x = this._origPos.x + (this._origSize.width - this.rzMaxWidth); } } }; /** * @private * @return {?} */ AngularResizableDirective.prototype.getBounding = /** * @private * @return {?} */ function () { /** @type {?} */ var el = this._containment; /** @type {?} */ var computed = window.getComputedStyle(el); if (computed) { /** @type {?} */ var p = computed.getPropertyValue('position'); /** @type {?} */ var nativeEl = window.getComputedStyle(this.el.nativeElement); /** @type {?} */ var transforms = nativeEl.getPropertyValue('transform').replace(/[^-\d,]/g, '').split(','); this._bounding = {}; this._bounding.width = el.clientWidth; this._bounding.height = el.clientHeight; this._bounding.pr = parseInt(computed.getPropertyValue('padding-right'), 10); this._bounding.pb = parseInt(computed.getPropertyValue('padding-bottom'), 10); this._bounding.deltaL = this.el.nativeElement.offsetLeft - this._currPos.x; this._bounding.deltaT = this.el.nativeElement.offsetTop - this._currPos.y; if (transforms.length >= 6) { this._bounding.translateX = parseInt(transforms[4], 10); this._bounding.translateY = parseInt(transforms[5], 10); } else { this._bounding.translateX = 0; this._bounding.translateY = 0; } this._bounding.position = computed.getPropertyValue('position'); if (p === 'static') { this.renderer.setStyle(el, 'position', 'relative'); } } }; /** * @private * @return {?} */ AngularResizableDirective.prototype.resetBounding = /** * @private * @return {?} */ function () { if (this._bounding && this._bounding.position === 'static') { this.renderer.setStyle(this._containment, 'position', 'relative'); } this._bounding = null; }; /** * @private * @return {?} */ AngularResizableDirective.prototype.getGridSize = /** * @private * @return {?} */ function () { // set default value: this._gridSize = { x: 1, y: 1 }; if (this.rzGrid) { if (typeof this.rzGrid === 'number') { this._gridSize = { x: this.rzGrid, y: this.rzGrid }; } else if (Array.isArray(this.rzGrid)) { this._gridSize = { x: this.rzGrid[0], y: this.rzGrid[1] }; } } }; AngularResizableDirective.decorators = [ { type: Directive, args: [{ selector: '[ngResizable]', exportAs: 'ngResizable' },] } ]; /** @nocollapse */ AngularResizableDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: Renderer2 } ]; }; AngularResizableDirective.propDecorators = { ngResizable: [{ type: Input }], rzHandles: [{ type: Input }], rzAspectRatio: [{ type: Input }], rzContainment: [{ type: Input }], rzGrid: [{ type: Input }], rzMinWidth: [{ type: Input }], rzMinHeight: [{ type: Input }], rzMaxWidth: [{ type: Input }], rzMaxHeight: [{ type: Input }], preventDefaultEvent: [{ type: Input }], rzStart: [{ type: Output }], rzResizing: [{ type: Output }], rzStop: [{ type: Output }] }; return AngularResizableDirective; }()); export { AngularResizableDirective }; if (false) { /** * @type {?} * @private */ AngularResizableDirective.prototype._resizable; /** * @type {?} * @private */ AngularResizableDirective.prototype._handles; /** * @type {?} * @private */ AngularResizableDirective.prototype._handleType; /** * @type {?} * @private */ AngularResizableDirective.prototype._handleResizing; /** * @type {?} * @private */ AngularResizableDirective.prototype._direction; /** * @type {?} * @private */ AngularResizableDirective.prototype._directionChanged; /** * @type {?} * @private */ AngularResizableDirective.prototype._aspectRatio; /** * @type {?} * @private */ AngularResizableDirective.prototype._containment; /** * @type {?} * @private */ AngularResizableDirective.prototype._origMousePos; /** * Original Size and Position * @type {?} * @private */ AngularResizableDirective.prototype._origSize; /** * @type {?} * @private */ AngularResizableDirective.prototype._origPos; /** * Current Size and Position * @type {?} * @private */ AngularResizableDirective.prototype._currSize; /** * @type {?} * @private */ AngularResizableDirective.prototype._currPos; /** * Initial Size and Position * @type {?} * @private */ AngularResizableDirective.prototype._initSize; /** * @type {?} * @private */ AngularResizableDirective.prototype._initPos; /** * Snap to gird * @type {?} * @private */ AngularResizableDirective.prototype._gridSize; /** * @type {?} * @private */ AngularResizableDirective.prototype._bounding; /** * Bugfix: iFrames, and context unrelated elements block all events, and are unusable * https://github.com/xieziyu/angular2-draggable/issues/84 * @type {?} * @private */ AngularResizableDirective.prototype._helperBlock; /** * @type {?} * @private */ AngularResizableDirective.prototype.draggingSub; /** * @type {?} * @private */ AngularResizableDirective.prototype._adjusted; /** * Which handles can be used for resizing. * \@example * [rzHandles] = "'n,e,s,w,se,ne,sw,nw'" * equals to: [rzHandles] = "'all'" * * * @type {?} */ AngularResizableDirective.prototype.rzHandles; /** * Whether the element should be constrained to a specific aspect ratio. * Multiple types supported: * boolean: When set to true, the element will maintain its original aspect ratio. * number: Force the element to maintain a specific aspect ratio during resizing. * @type {?} */ AngularResizableDirective.prototype.rzAspectRatio; /** * Constrains resizing to within the bounds of the specified element or region. * Multiple types supported: * Selector: The resizable element will be contained to the bounding box of the first element found by the selector. * If no element is found, no containment will be set. * Element: The resizable element will be contained to the bounding box of this element. * String: Possible values: "parent". * @type {?} */ AngularResizableDirective.prototype.rzContainment; /** * Snaps the resizing element to a grid, every x and y pixels. * A number for both width and height or an array values like [ x, y ] * @type {?} */ AngularResizableDirective.prototype.rzGrid; /** * The minimum width the resizable should be allowed to resize to. * @type {?} */ AngularResizableDirective.prototype.rzMinWidth; /** * The minimum height the resizable should be allowed to resize to. * @type {?} */ AngularResizableDirective.prototype.rzMinHeight; /** * The maximum width the resizable should be allowed to resize to. * @type {?} */ AngularResizableDirective.prototype.rzMaxWidth; /** * The maximum height the resizable should be allowed to resize to. * @type {?} */ AngularResizableDirective.prototype.rzMaxHeight; /** * Whether to prevent default event * @type {?} */ AngularResizableDirective.prototype.preventDefaultEvent; /** * emitted when start resizing * @type {?} */ AngularResizableDirective.prototype.rzStart; /** * emitted when start resizing * @type {?} */ AngularResizableDirective.prototype.rzResizing; /** * emitted when stop resizing * @type {?} */ AngularResizableDirective.prototype.rzStop; /** * @type {?} * @private */ AngularResizableDirective.prototype.el; /** * @type {?} * @private */ AngularResizableDirective.prototype.renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1yZXNpemFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhcjItZHJhZ2dhYmxlLyIsInNvdXJjZXMiOlsibGliL2FuZ3VsYXItcmVzaXphYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFDaEMsS0FBSyxFQUFFLE1BQU0sRUFBVSxZQUFZLEVBRXBDLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFFBQVEsRUFBYSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHckM7SUEwR0UsbUNBQW9CLEVBQTJCLEVBQVUsUUFBbUI7UUFBeEQsT0FBRSxHQUFGLEVBQUUsQ0FBeUI7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBckdwRSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGFBQVEsR0FBb0MsRUFBRSxDQUFDO1FBQy9DLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQzNCLG9CQUFlLEdBQWlCLElBQUksQ0FBQztRQUNyQyxlQUFVLEdBQStELElBQUksQ0FBQztRQUM5RSxzQkFBaUIsR0FBK0QsSUFBSSxDQUFDO1FBQ3JGLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLGlCQUFZLEdBQWdCLElBQUksQ0FBQztRQUNqQyxrQkFBYSxHQUFhLElBQUksQ0FBQzs7OztRQUcvQixjQUFTLEdBQVMsSUFBSSxDQUFDO1FBQ3ZCLGFBQVEsR0FBYSxJQUFJLENBQUM7Ozs7UUFHMUIsY0FBUyxHQUFTLElBQUksQ0FBQztRQUN2QixhQUFRLEdBQWEsSUFBSSxDQUFDOzs7O1FBRzFCLGNBQVMsR0FBUyxJQUFJLENBQUM7UUFDdkIsYUFBUSxHQUFhLElBQUksQ0FBQzs7OztRQUcxQixjQUFTLEdBQWMsSUFBSSxDQUFDO1FBRTVCLGNBQVMsR0FBUSxJQUFJLENBQUM7Ozs7O1FBTXRCLGlCQUFZLEdBQWdCLElBQUksQ0FBQztRQUVqQyxnQkFBVyxHQUFpQixJQUFJLENBQUM7UUFDakMsY0FBUyxHQUFHLEtBQUssQ0FBQzs7Ozs7Ozs7O1FBaUJqQixjQUFTLEdBQXFCLFFBQVEsQ0FBQzs7Ozs7OztRQVF2QyxrQkFBYSxHQUFxQixLQUFLLENBQUM7Ozs7Ozs7OztRQVV4QyxrQkFBYSxHQUF5QixJQUFJLENBQUM7Ozs7O1FBTTNDLFdBQU0sR0FBc0IsSUFBSSxDQUFDOzs7O1FBR2pDLGVBQVUsR0FBVyxJQUFJLENBQUM7Ozs7UUFHMUIsZ0JBQVcsR0FBVyxJQUFJLENBQUM7Ozs7UUFHM0IsZUFBVSxHQUFXLElBQUksQ0FBQzs7OztRQUcxQixnQkFBVyxHQUFXLElBQUksQ0FBQzs7OztRQUczQix3QkFBbUIsR0FBRyxJQUFJLENBQUM7Ozs7UUFHMUIsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDOzs7O1FBRzNDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQzs7OztRQUc5QyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFHbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFsRUQsc0JBQWEsa0RBQVc7UUFEeEIsOENBQThDOzs7Ozs7UUFDOUMsVUFBeUIsQ0FBTTtZQUM3QixJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4QjtRQUNILENBQUM7OztPQUFBOzs7OztJQStERCwrQ0FBVzs7OztJQUFYLFVBQVksT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDakUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDekUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDMUI7UUFFRCxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN6RSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7Ozs7SUFFRCw0Q0FBUTs7O0lBQVI7UUFDRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7OztJQUVELCtDQUFXOzs7SUFBWDtRQUNFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7Ozs7SUFFRCxtREFBZTs7O0lBQWY7O1lBQ1EsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYTtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsNkJBQTZCOzs7OztJQUN0Qiw2Q0FBUzs7OztJQUFoQjtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELHFDQUFxQzs7Ozs7SUFDOUIsNkNBQVM7Ozs7SUFBaEI7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU87WUFDTCxJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztnQkFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTthQUM5QjtZQUNELFFBQVEsRUFBRTtnQkFDUixHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3RCO1NBQ0YsQ0FBQztJQUNKLENBQUM7Ozs7O0lBRU8sbURBQWU7Ozs7SUFBdkI7O1lBQ1EsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYTtRQUVyQyxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixtQkFBbUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsOEJBQThCOzs7Ozs7SUFDdEIscURBQWlCOzs7OztJQUF6QjtRQUNFLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRTtZQUMzQyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3BFO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7YUFBTTs7Z0JBQ0QsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFRCxtQ0FBbUM7Ozs7OztJQUMzQixxREFBaUI7Ozs7O0lBQXpCO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsT0FBTztTQUNSO1FBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxFQUFFO1lBQzFDLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO2FBQ3pEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBYyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDN0U7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVELG1DQUFtQzs7Ozs7O0lBQzNCLGlEQUFhOzs7OztJQUFyQjs7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixPQUFPO1NBQ1I7O1lBRUcsY0FBd0I7UUFDNUIsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFO1lBQ3RDLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUU7Z0JBQzVCLGNBQWMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMvRDtpQkFBTTtnQkFDTCxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM1RTs7Z0JBRUQsS0FBaUIsSUFBQSxtQkFBQSxpQkFBQSxjQUFjLENBQUEsOENBQUEsMEVBQUU7b0JBQTVCLElBQUksSUFBSSwyQkFBQTs7O3dCQUVQLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLGtCQUFnQixJQUFNLENBQUM7b0JBQ2xFLElBQUksTUFBTSxFQUFFO3dCQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztxQkFDOUI7aUJBQ0Y7Ozs7Ozs7OztTQUNGO2FBQU07WUFDTCxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7O2dCQUM3QyxLQUFpQixJQUFBLG1CQUFBLGlCQUFBLGNBQWMsQ0FBQSw4Q0FBQSwwRUFBRTtvQkFBNUIsSUFBSSxJQUFJLDJCQUFBOzs7d0JBRVAsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEUsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO3FCQUM5QjtpQkFDRjs7Ozs7Ozs7O1NBQ0Y7SUFFSCxDQUFDO0lBRUQsZ0NBQWdDOzs7Ozs7OztJQUN4QixzREFBa0I7Ozs7Ozs7SUFBMUIsVUFBMkIsSUFBWSxFQUFFLEdBQVc7O1lBQzVDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWE7UUFFakMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsRUFBRTtZQUMxQyxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDOzs7OztJQUVPLGlEQUFhOzs7O0lBQXJCOzs7WUFDRSxLQUFpQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQSxnQkFBQSw0QkFBRTtnQkFBOUIsSUFBSSxJQUFJLFdBQUE7Z0JBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUMvQjs7Ozs7Ozs7O1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQzs7Ozs7O0lBRUQsK0NBQVc7Ozs7O0lBQVgsVUFBWSxLQUE4QixFQUFFLE1BQW9CO1FBQzlELG9CQUFvQjtRQUNwQixJQUFJLEtBQUssWUFBWSxVQUFVLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckQsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIseUJBQXlCO1lBQ3pCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDeEI7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDOzs7OztJQUVPLG1EQUFlOzs7O0lBQXZCO1FBQUEsaUJBV0M7UUFWQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBQSxLQUFLLEVBQWMsQ0FBQyxFQUFyQyxDQUFxQyxDQUFDLENBQUM7UUFDbEksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFBLEtBQUssRUFBYyxDQUFDLEVBQXJDLENBQXFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsWUFBWSxFQUFFLEVBQW5CLENBQW1CLENBQUMsQ0FBQyxDQUFDOzs7WUFFMUcsVUFBVSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUNyRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxZQUFZLEVBQUUsRUFBbkIsQ0FBbUIsQ0FBQyxDQUFDLENBQUM7U0FDbEg7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLFlBQVksRUFBRSxFQUFuQixDQUFtQixDQUFDLENBQUMsQ0FBQztRQUMvRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLFlBQVksRUFBRSxFQUFuQixDQUFtQixDQUFDLENBQUMsQ0FBQztJQUNwSCxDQUFDOzs7OztJQUVPLHFEQUFpQjs7OztJQUF6QjtRQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQzs7OztJQUVELGdEQUFZOzs7SUFBWjtRQUNFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDOzs7OztJQUVELCtDQUFXOzs7O0lBQVgsVUFBWSxLQUE4QjtRQUN4QyxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNwRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDOzs7Ozs7SUFFTywrQ0FBVzs7Ozs7SUFBbkIsVUFBb0IsTUFBb0I7O1lBQ2hDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWE7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtRQUM1RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7OztJQUVPLDhDQUFVOzs7O0lBQWxCO1FBQ0UseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQzs7Ozs7SUFFTyw4Q0FBVTs7OztJQUFsQjtRQUNFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQzs7Ozs7SUFFTyxvREFBZ0I7Ozs7SUFBeEI7UUFDRSxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYTtZQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDN0QsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7Z0JBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07YUFDOUI7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN0QjtZQUNELFNBQVMsdUJBQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFFO1NBQ3pDLENBQUM7SUFDSixDQUFDOzs7OztJQUVPLG1EQUFlOzs7O0lBQXZCO1FBQ0UsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDekMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3pDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN6QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDMUMsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsd0JBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBRSxDQUFDO1FBRWhELHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFFdEIsaUNBQWlDO1lBQ2pDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ2pDO1lBRUQsaUNBQWlDO1lBQ2pDLElBQUksSUFBSSxDQUFDLGlCQUFpQi