ngx-resizable-touch
Version:
A Resizable Split-Pane Layout for Angular6+
257 lines • 20.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, HostBinding, Input, ElementRef, ViewEncapsulation, Output, EventEmitter } from '@angular/core';
import { NgxResizeableWindowRef } from '../window.service';
var ɵ0 = window;
var ResizableComponent = /** @class */ (function () {
function ResizableComponent(regionElement, windowRef) {
this.regionElement = regionElement;
this.windowRef = windowRef;
this.resizable = true;
this.noTransition = false;
this.rFlex = false;
this.resizeStart = new EventEmitter();
this.resizing = new EventEmitter();
this.resizeEnd = new EventEmitter();
this.vx = 1;
this.vy = 1;
this.info = {};
this.nativeElement = this.regionElement.nativeElement;
}
/**
* @return {?}
*/
ResizableComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
if (!this.rFlex) {
this.resizable = false;
} // Added to permit use of component for all cells
this.flexBasis = 'flexBasis' in this.nativeElement.style ? 'flexBasis' :
'webkitFlexBasis' in this.nativeElement.style ? 'webkitFlexBasis' :
'msFlexPreferredSize' in this.nativeElement.style ? 'msFlexPreferredSize' : 'flexBasis';
};
/**
* @return {?}
*/
ResizableComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this.style = this.windowRef.nativeWindow.getComputedStyle(this.nativeElement);
};
/**
* @private
* @param {?} p
* @return {?}
*/
ResizableComponent.prototype.updateInfo = /**
* @private
* @param {?} p
* @return {?}
*/
function (p) {
this.info['width'] = false;
this.info['height'] = false;
if (this.axis === 'x') {
this.info['width'] = parseInt(this.nativeElement.style[this.rFlex ? this.flexBasis : 'width'], 10);
}
else {
this.info['height'] = parseInt(this.nativeElement.style[this.rFlex ? this.flexBasis : 'height'], 10);
}
this.info['id'] = this.nativeElement.id;
this.info['point'] = p;
};
/**
* @param {?} p
* @param {?} direction
* @return {?}
*/
ResizableComponent.prototype.dragStart = /**
* @param {?} p
* @param {?} direction
* @return {?}
*/
function (p, direction) {
this.dragDir = direction;
this.axis = (this.dragDir === 'left' || this.dragDir === 'right') ? 'x' : 'y';
this.start = (this.axis === 'x' ? p.x : p.y);
this.w = parseInt(this.style.getPropertyValue('width'), 10);
this.h = parseInt(this.style.getPropertyValue('height'), 10);
this.resizeStart.emit({ info: this.info });
// prevent transition while dragging
this.noTransition = true;
};
/**
* @param {?} p
* @return {?}
*/
ResizableComponent.prototype.dragEnd = /**
* @param {?} p
* @return {?}
*/
function (p) {
this.updateInfo(p);
this.resizeEnd.emit({ info: this.info });
this.noTransition = false;
};
/**
* @param {?} p
* @return {?}
*/
ResizableComponent.prototype.dragging = /**
* @param {?} p
* @return {?}
*/
function (p) {
/** @type {?} */
var offset = (this.axis === 'x') ? this.start - p.x : this.start - p.y;
/** @type {?} */
var operand = 1;
switch (this.dragDir) {
case 'top':
operand = -1;
/* falls through */
case 'bottom':
/** @type {?} */
var height = (this.h - offset * this.vy * operand) + 'px';
if (this.rFlex) {
this.flexBasis = height;
}
else {
this.height = height;
}
break;
case 'left':
operand = -1;
/* falls through */
case 'right':
/** @type {?} */
var width = (this.w - offset * this.vx * operand) + 'px';
if (this.rFlex) {
this.flexBasis = width;
}
else {
this.width = width;
}
break;
}
this.updateInfo(p);
this.resizing.emit({ info: this.info });
};
ResizableComponent.decorators = [
{ type: Component, args: [{
selector: 'rsz-layout',
template: "<ng-content></ng-content>\n\n<div *ngFor='let direction of directions'\n [class]=\"'rg-' + direction\"\n rszDragHandle\n (DragStart)=\"dragStart($event, direction);\"\n (DragEnd)=\"dragEnd($event)\"\n (Drag)=\"dragging($event)\">\n <span></span>\n</div>",
providers: [{ provide: 'Window', useValue: ɵ0 }],
encapsulation: ViewEncapsulation.None,
styles: [".content{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap}.row{-webkit-box-flex:1;flex:1;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap}.row.resizable{-webkit-box-flex:0;flex:0 0 360px}.cell{box-sizing:border-box;background:#fff;border:4px solid #f0f0f0;-webkit-box-flex:1;flex:1;min-height:60px}.cell.resizable{-webkit-box-flex:0;flex:0 0 360px}.resizable{position:relative}.resizable.no-transition{-webkit-transition:none!important;transition:none!important}.rg-none{display:none}.rg-bottom,.rg-left,.rg-right,.rg-top{display:block;width:8px;height:8px;line-height:8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:0 0;position:absolute;z-index:1}.rg-bottom span,.rg-left span,.rg-right span,.rg-top span{position:absolute;box-sizing:border-box;display:block;border:1px solid #ccc}.rg-left span,.rg-right span{border-width:0 1px;top:50%;margin:-10px 0 0 2px;height:20px;width:4px}.rg-bottom span,.rg-top span{border-width:1px 0;left:50%;margin:2px 0 0 -10px;width:20px;height:4px}.rg-top{cursor:row-resize;width:100%;top:0;left:0;margin-top:-4px}.rg-right{cursor:col-resize;height:100%;right:0;top:0;margin-right:-8px}.rg-bottom{cursor:row-resize;width:100%;bottom:0;left:0;margin-bottom:-4px}.rg-left{cursor:col-resize;height:100%;left:0;top:0;margin-left:-8px}.content.cols{-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap}.content.cols .row{-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap}.content.cols .cell{min-width:60px}.content.cols .rg-top{margin-top:-8px}.content.cols .rg-right{margin-right:-4px}.content.cols .rg-bottom{margin-bottom:-8px}.content.cols .rg-left{margin-left:-4px}"]
}] }
];
/** @nocollapse */
ResizableComponent.ctorParameters = function () { return [
{ type: ElementRef },
{ type: NgxResizeableWindowRef }
]; };
ResizableComponent.propDecorators = {
resizable: [{ type: HostBinding, args: ['class.resizable',] }],
noTransition: [{ type: HostBinding, args: ['class.no-transition',] }],
width: [{ type: HostBinding, args: ['style.width',] }],
height: [{ type: HostBinding, args: ['style.height',] }],
flexBasis: [{ type: HostBinding, args: ['style.flex-basis',] }],
directions: [{ type: Input }],
rFlex: [{ type: Input }],
resizeStart: [{ type: Output }],
resizing: [{ type: Output }],
resizeEnd: [{ type: Output }]
};
return ResizableComponent;
}());
export { ResizableComponent };
if (false) {
/** @type {?} */
ResizableComponent.prototype.resizable;
/** @type {?} */
ResizableComponent.prototype.noTransition;
/** @type {?} */
ResizableComponent.prototype.width;
/** @type {?} */
ResizableComponent.prototype.height;
/** @type {?} */
ResizableComponent.prototype.flexBasis;
/** @type {?} */
ResizableComponent.prototype.directions;
/** @type {?} */
ResizableComponent.prototype.rFlex;
/** @type {?} */
ResizableComponent.prototype.resizeStart;
/** @type {?} */
ResizableComponent.prototype.resizing;
/** @type {?} */
ResizableComponent.prototype.resizeEnd;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.nativeElement;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.style;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.w;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.h;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.vx;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.vy;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.start;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.dragDir;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.axis;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.info;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.regionElement;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.windowRef;
}
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1yZXNpemFibGUtdG91Y2gvIiwic291cmNlcyI6WyJsaWIvcmVzaXphYmxlL3Jlc2l6YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsV0FBVyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7U0FPYixNQUFNO0FBSnBEO0lBd0NFLDRCQUFvQixhQUF5QixFQUFVLFNBQWlDO1FBQXBFLGtCQUFhLEdBQWIsYUFBYSxDQUFZO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBd0I7UUEvQnhELGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDYixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQU1oRCxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBU2pDLE9BQUUsR0FBRyxDQUFDLENBQUM7UUFDUCxPQUFFLEdBQUcsQ0FBQyxDQUFDO1FBUVAsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUdoQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO0lBQ3hELENBQUM7Ozs7SUFFRCxxQ0FBUTs7O0lBQVI7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1NBQUUsQ0FBQyxpREFBaUQ7UUFDOUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGFBQWEs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RSx1Q0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSG9zdEJpbmRpbmcsIElucHV0LCBFbGVtZW50UmVmLCBWaWV3RW5jYXBzdWxhdGlvbiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFJlc2l6ZWFibGVXaW5kb3dSZWYgfSBmcm9tICcuLi93aW5kb3cuc2VydmljZSc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4vZHJhZy5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyc3otbGF5b3V0JyxcbiAgdGVtcGxhdGVVcmw6ICdyZXNpemFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsncmVzaXphYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogWyB7IHByb3ZpZGU6ICdXaW5kb3cnLCB1c2VWYWx1ZTogd2luZG93IH0gXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBSZXNpemFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucmVzaXphYmxlJykgcmVzaXphYmxlID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5uby10cmFuc2l0aW9uJykgbm9UcmFuc2l0aW9uID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKSB3aWR0aDtcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKSBoZWlnaHQ7XG4gIEBIb3N0QmluZGluZygnc3R5bGUuZmxleC1iYXNpcycpIGZsZXhCYXNpcztcblxuICBASW5wdXQoKSBkaXJlY3Rpb25zO1xuICBASW5wdXQoKSByRmxleCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSByZXNpemVTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlc2l6aW5nID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVzaXplRW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgbmF0aXZlRWxlbWVudDtcblxuICBwcml2YXRlIHN0eWxlO1xuXG4gIHByaXZhdGUgdztcbiAgcHJpdmF0ZSBoO1xuXG4gIHByaXZhdGUgdnggPSAxO1xuICBwcml2YXRlIHZ5ID0gMTtcblxuICBwcml2YXRlIHN0YXJ0O1xuXG4gIHByaXZhdGUgZHJhZ0RpcjtcblxuICBwcml2YXRlIGF4aXM7XG5cbiAgcHJpdmF0ZSBpbmZvID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWdpb25FbGVtZW50OiBFbGVtZW50UmVmLCBwcml2YXRlIHdpbmRvd1JlZjogTmd4UmVzaXplYWJsZVdpbmRvd1JlZikge1xuICAgIHRoaXMubmF0aXZlRWxlbWVudCA9IHRoaXMucmVnaW9uRWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLnJGbGV4KSB7IHRoaXMucmVzaXphYmxlID0gZmFsc2U7IH0gLy8gQWRkZWQgdG8gcGVybWl0IHVzZSBvZiBjb21wb25lbnQgZm9yIGFsbCBjZWxsc1xuICAgIHRoaXMuZmxleEJhc2lzID0gJ2ZsZXhCYXNpcycgaW4gdGhpcy5uYXRpdmVFbGVtZW50LnN0eWxlID8gJ2ZsZXhCYXNpcycgOlxuICAgICAgJ3dlYmtpdEZsZXhCYXNpcycgaW4gdGhpcy5uYXRpdmVFbGVtZW50LnN0eWxlID8gJ3dlYmtpdEZsZXhCYXNpcycgOlxuICAgICAgJ21zRmxleFByZWZlcnJlZFNpemUnIGluIHRoaXMubmF0aXZlRWxlbWVudC5zdHlsZSA/ICdtc0ZsZXhQcmVmZXJyZWRTaXplJyA6ICdmbGV4QmFzaXMnO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc3R5bGUgPSB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbmZvKHA6IFBvaW50KSB7XG4gICAgdGhpcy5pbmZvWyd3aWR0aCddID0gZmFsc2U7IHRoaXMuaW5mb1snaGVpZ2h0J10gPSBmYWxzZTtcbiAgICBpZiAodGhpcy5heGlzID09PSAneCcpIHtcbiAgICAgIHRoaXMuaW5mb1snd2lkdGgnXSA9IHBhcnNlSW50KHRoaXMubmF0aXZlRWxlbWVudC5zdHlsZVt0aGlzLnJGbGV4ID8gdGhpcy5mbGV4QmFzaXMgOiAnd2lkdGgnXSwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm9bJ2hlaWdodCddID0gcGFyc2VJbnQodGhpcy5uYXRpdmVFbGVtZW50LnN0eWxlW3RoaXMuckZsZXggPyB0aGlzLmZsZXhCYXNpcyA6ICdoZWlnaHQnXSwgMTApO1xuICAgIH1cbiAgICB0aGlzLmluZm9bJ2lkJ10gPSB0aGlzLm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgdGhpcy5pbmZvWydwb2ludCddID0gcDtcbiAgfVxuXG4gIHB1YmxpYyBkcmFnU3RhcnQocDogUG9pbnQsIGRpcmVjdGlvbikge1xuICAgIHRoaXMuZHJhZ0RpciA9IGRpcmVjdGlvbjtcbiAgICB0aGlzLmF4aXMgPSAodGhpcy5kcmFnRGlyID09PSAnbGVmdCcgfHwgdGhpcy5kcmFnRGlyID09PSAncmlnaHQnKSA/ICd4JyA6ICd5JztcbiAgICB0aGlzLnN0YXJ0ID0gKHRoaXMuYXhpcyA9PT0gJ3gnID8gcC54IDogcC55KTtcbiAgICB0aGlzLncgPSBwYXJzZUludCh0aGlzLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3dpZHRoJyksIDEwKTtcbiAgICB0aGlzLmggPSBwYXJzZUludCh0aGlzLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpLCAxMCk7XG5cbiAgICB0aGlzLnJlc2l6ZVN0YXJ0LmVtaXQoeyBpbmZvOiB0aGlzLmluZm8gfSk7XG5cbiAgICAvLyBwcmV2ZW50IHRyYW5zaXRpb24gd2hpbGUgZHJhZ2dpbmdcbiAgICB0aGlzLm5vVHJhbnNpdGlvbiA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgZHJhZ0VuZChwOiBQb2ludCkge1xuICAgIHRoaXMudXBkYXRlSW5mbyhwKTtcbiAgICB0aGlzLnJlc2l6ZUVuZC5lbWl0KHsgaW5mbzogdGhpcy5pbmZvIH0pO1xuICAgIHRoaXMubm9UcmFuc2l0aW9uID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZHJhZ2dpbmcocDogUG9pbnQpIHtcbiAgICBjb25zdCBvZmZzZXQgPSAodGhpcy5heGlzID09PSAneCcpID8gdGhpcy5zdGFydCAtIHAueCA6IHRoaXMuc3RhcnQgLSBwLnk7XG5cbiAgICBsZXQgb3BlcmFuZCA9IDE7XG4gICAgc3dpdGNoICh0aGlzLmRyYWdEaXIpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIG9wZXJhbmQgPSAtMTtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuaCAtIG9mZnNldCAqIHRoaXMudnkgKiBvcGVyYW5kKSArICdweCc7XG4gICAgICAgIGlmICh0aGlzLnJGbGV4KSB7XG4gICAgICAgICAgdGhpcy5mbGV4QmFzaXMgPSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgb3BlcmFuZCA9IC0xO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIGNvbnN0IHdpZHRoID0gKHRoaXMudyAtIG9mZnNldCAqIHRoaXMudnggKiBvcGVyYW5kKSArICdweCc7XG4gICAgICAgIGlmICh0aGlzLnJGbGV4KSB7XG4gICAgICAgICAgdGhpcy5mbGV4QmFzaXMgPSB3aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlSW5mbyhwKTtcbiAgICB0aGlzLnJlc2l6aW5nLmVtaXQoeyBpbmZvOiB0aGlzLmluZm8gfSk7XG4gIH1cbn1cbiJdfQ==