angular2-draggable
Version:
<!-- Badges section here. --> [][npm-badge-url] [][npm-badge-url] [ {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1yZXNpemFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhcjItZHJhZ2dhYmxlLyIsInNvdXJjZXMiOlsibGliL2FuZ3VsYXItcmVzaXphYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFDaEMsS0FBSyxFQUFFLE1BQU0sRUFBVSxZQUFZLEVBRXBDLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFFBQVEsRUFBYSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHckM7SUEwR0UsbUNBQW9CLEVBQTJCLEVBQVUsUUFBbUI7UUFBeEQsT0FBRSxHQUFGLEVBQUUsQ0FBeUI7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBckdwRSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGFBQVEsR0FBb0MsRUFBRSxDQUFDO1FBQy9DLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQzNCLG9CQUFlLEdBQWlCLElBQUksQ0FBQztRQUNyQyxlQUFVLEdBQStELElBQUksQ0FBQztRQUM5RSxzQkFBaUIsR0FBK0QsSUFBSSxDQUFDO1FBQ3JGLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLGlCQUFZLEdBQWdCLElBQUksQ0FBQztRQUNqQyxrQkFBYSxHQUFhLElBQUksQ0FBQzs7OztRQUcvQixjQUFTLEdBQVMsSUFBSSxDQUFDO1FBQ3ZCLGFBQVEsR0FBYSxJQUFJLENBQUM7Ozs7UUFHMUIsY0FBUyxHQUFTLElBQUksQ0FBQztRQUN2Qixh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