UNPKG

ngx-resizable-ex

Version:

A Resizable Split-Pane Layout for Angular6+

147 lines 18.9 kB
import * as tslib_1 from "tslib"; 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; } ResizableComponent.prototype.ngOnInit = 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'; }; ResizableComponent.prototype.ngAfterViewInit = function () { this.style = this.windowRef.nativeWindow.getComputedStyle(this.nativeElement); }; ResizableComponent.prototype.updateInfo = function (e) { 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['evt'] = e; }; ResizableComponent.prototype.dragStart = function (e, direction) { var mouseEvent = e.originalEvent; this.dragDir = direction; this.axis = (this.dragDir === 'left' || this.dragDir === 'right') ? 'x' : 'y'; this.start = (this.axis === 'x' ? mouseEvent.clientX : mouseEvent.clientY); 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; }; ResizableComponent.prototype.dragEnd = function (e) { var mouseEvent = e.originalEvent; this.updateInfo(mouseEvent); this.resizeEnd.emit({ info: this.info }); this.noTransition = false; }; ResizableComponent.prototype.dragging = function (e) { var mouseEvent = e.originalEvent; var offset = (this.axis === 'x') ? this.start - mouseEvent.clientX : this.start - mouseEvent.clientY; var operand = 1; switch (this.dragDir) { case 'top': operand = -1; /* falls through */ case 'bottom': 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': var width = (this.w - offset * this.vx * operand) + 'px'; if (this.rFlex) { this.flexBasis = width; } else { this.width = width; } break; } this.updateInfo(mouseEvent); this.resizing.emit({ info: this.info }); }; tslib_1.__decorate([ HostBinding('class.resizable'), tslib_1.__metadata("design:type", Object) ], ResizableComponent.prototype, "resizable", void 0); tslib_1.__decorate([ HostBinding('class.no-transition'), tslib_1.__metadata("design:type", Object) ], ResizableComponent.prototype, "noTransition", void 0); tslib_1.__decorate([ HostBinding('style.width'), tslib_1.__metadata("design:type", Object) ], ResizableComponent.prototype, "width", void 0); tslib_1.__decorate([ HostBinding('style.height'), tslib_1.__metadata("design:type", Object) ], ResizableComponent.prototype, "height", void 0); tslib_1.__decorate([ HostBinding('style.flex-basis'), tslib_1.__metadata("design:type", Object) ], ResizableComponent.prototype, "flexBasis", void 0); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Object) ], ResizableComponent.prototype, "directions", void 0); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Object) ], ResizableComponent.prototype, "rFlex", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", Object) ], ResizableComponent.prototype, "resizeStart", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", Object) ], ResizableComponent.prototype, "resizing", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", Object) ], ResizableComponent.prototype, "resizeEnd", void 0); ResizableComponent = tslib_1.__decorate([ Component({ 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:flex;flex-flow:column nowrap}.row{flex:1;display:flex;flex-flow:row nowrap}.row.resizable{flex:0 0 360px}.cell{box-sizing:border-box;background:#fff;border:4px solid #f0f0f0;flex:1;min-height:60px}.cell.resizable{flex:0 0 360px}.resizable{position:relative}.resizable.no-transition{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{flex-flow:row nowrap}.content.cols .row{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}"] }), tslib_1.__metadata("design:paramtypes", [ElementRef, NgxResizeableWindowRef]) ], ResizableComponent); return ResizableComponent; }()); export { ResizableComponent }; export { ɵ0 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1yZXNpemFibGUtZXgvIiwic291cmNlcyI6WyJsaWIvcmVzaXphYmxlL3Jlc2l6YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsV0FBVyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7U0FNYixNQUFNO0FBR3BEO0lBaUNFLDRCQUFvQixhQUF5QixFQUFVLFNBQWlDO1FBQXBFLGtCQUFhLEdBQWIsYUFBYSxDQUFZO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBd0I7UUEvQnhELGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDYixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQU1oRCxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBU2pDLE9BQUUsR0FBRyxDQUFDLENBQUM7UUFDUCxPQUFFLEdBQUcsQ0FBQyxDQUFDO1FBUVAsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUdoQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO0lBQ3hELENBQUM7SUFFRCxxQ0FBUSxHQUFSO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUFFLENBQUMsaURBQWlEO1FBQzlGLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxD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dCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSG9zdEJpbmRpbmcsIElucHV0LCBFbGVtZW50UmVmLCBWaWV3RW5jYXBzdWxhdGlvbiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFJlc2l6ZWFibGVXaW5kb3dSZWYgfSBmcm9tICcuLi93aW5kb3cuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jzei1sYXlvdXQnLFxuICB0ZW1wbGF0ZVVybDogJ3Jlc2l6YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydyZXNpemFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbIHsgcHJvdmlkZTogJ1dpbmRvdycsIHVzZVZhbHVlOiB3aW5kb3cgfSBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZXNpemFibGUnKSByZXNpemFibGUgPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5vLXRyYW5zaXRpb24nKSBub1RyYW5zaXRpb24gPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpIHdpZHRoO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodCcpIGhlaWdodDtcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5mbGV4LWJhc2lzJykgZmxleEJhc2lzO1xuXG4gIEBJbnB1dCgpIGRpcmVjdGlvbnM7XG4gIEBJbnB1dCgpIHJGbGV4ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHJlc2l6ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVzaXppbmcgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZXNpemVFbmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBuYXRpdmVFbGVtZW50O1xuXG4gIHByaXZhdGUgc3R5bGU7XG5cbiAgcHJpdmF0ZSB3O1xuICBwcml2YXRlIGg7XG5cbiAgcHJpdmF0ZSB2eCA9IDE7XG4gIHByaXZhdGUgdnkgPSAxO1xuXG4gIHByaXZhdGUgc3RhcnQ7XG5cbiAgcHJpdmF0ZSBkcmFnRGlyO1xuXG4gIHByaXZhdGUgYXhpcztcblxuICBwcml2YXRlIGluZm8gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZ2lvbkVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgd2luZG93UmVmOiBOZ3hSZXNpemVhYmxlV2luZG93UmVmKSB7XG4gICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gdGhpcy5yZWdpb25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuckZsZXgpIHsgdGhpcy5yZXNpemFibGUgPSBmYWxzZTsgfSAvLyBBZGRlZCB0byBwZXJtaXQgdXNlIG9mIGNvbXBvbmVudCBmb3IgYWxsIGNlbGxzXG4gICAgdGhpcy5mbGV4QmFzaXMgPSAnZmxleEJhc2lzJyBpbiB0aGlzLm5hdGl2ZUVsZW1lbnQuc3R5bGUgPyAnZmxleEJhc2lzJyA6XG4gICAgICAnd2Via2l0RmxleEJhc2lzJyBpbiB0aGlzLm5hdGl2ZUVsZW1lbnQuc3R5bGUgPyAnd2Via2l0RmxleEJhc2lzJyA6XG4gICAgICAnbXNGbGV4UHJlZmVycmVkU2l6ZScgaW4gdGhpcy5uYXRpdmVFbGVtZW50LnN0eWxlID8gJ21zRmxleFByZWZlcnJlZFNpemUnIDogJ2ZsZXhCYXNpcyc7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zdHlsZSA9IHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUluZm8oZSkge1xuICAgIHRoaXMuaW5mb1snd2lkdGgnXSA9IGZhbHNlOyB0aGlzLmluZm9bJ2hlaWdodCddID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuYXhpcyA9PT0gJ3gnKSB7XG4gICAgICB0aGlzLmluZm9bJ3dpZHRoJ10gPSBwYXJzZUludCh0aGlzLm5hdGl2ZUVsZW1lbnQuc3R5bGVbdGhpcy5yRmxleCA/IHRoaXMuZmxleEJhc2lzIDogJ3dpZHRoJ10sIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvWydoZWlnaHQnXSA9IHBhcnNlSW50KHRoaXMubmF0aXZlRWxlbWVudC5zdHlsZVt0aGlzLnJGbGV4ID8gdGhpcy5mbGV4QmFzaXMgOiAnaGVpZ2h0J10sIDEwKTtcbiAgICB9XG4gICAgdGhpcy5pbmZvWydpZCddID0gdGhpcy5uYXRpdmVFbGVtZW50LmlkO1xuICAgIHRoaXMuaW5mb1snZXZ0J10gPSBlO1xuICB9XG5cbiAgcHVibGljIGRyYWdTdGFydChlLCBkaXJlY3Rpb24pIHtcbiAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdGhpcy5kcmFnRGlyID0gZGlyZWN0aW9uO1xuICAgIHRoaXMuYXhpcyA9ICh0aGlzLmRyYWdEaXIgPT09ICdsZWZ0JyB8fCB0aGlzLmRyYWdEaXIgPT09ICdyaWdodCcpID8gJ3gnIDogJ3knO1xuICAgIHRoaXMuc3RhcnQgPSAodGhpcy5heGlzID09PSAneCcgPyBtb3VzZUV2ZW50LmNsaWVudFggOiBtb3VzZUV2ZW50LmNsaWVudFkpO1xuICAgIHRoaXMudyA9IHBhcnNlSW50KHRoaXMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkdGgnKSwgMTApO1xuICAgIHRoaXMuaCA9IHBhcnNlSW50KHRoaXMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0JyksIDEwKTtcblxuICAgIHRoaXMucmVzaXplU3RhcnQuZW1pdCh7IGluZm86IHRoaXMuaW5mbyB9KTtcblxuICAgIC8vIHByZXZlbnQgdHJhbnNpdGlvbiB3aGlsZSBkcmFnZ2luZ1xuICAgIHRoaXMubm9UcmFuc2l0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBkcmFnRW5kKGUpIHtcbiAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdGhpcy51cGRhdGVJbmZvKG1vdXNlRXZlbnQpO1xuICAgIHRoaXMucmVzaXplRW5kLmVtaXQoeyBpbmZvOiB0aGlzLmluZm8gfSk7XG4gICAgdGhpcy5ub1RyYW5zaXRpb24gPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBkcmFnZ2luZyhlKSB7XG4gICAgY29uc3QgbW91c2VFdmVudCA9IGUub3JpZ2luYWxFdmVudDtcbiAgICBjb25zdCBvZmZzZXQgPSAodGhpcy5heGlzID09PSAneCcpID8gdGhpcy5zdGFydCAtIG1vdXNlRXZlbnQuY2xpZW50WCA6IHRoaXMuc3RhcnQgLSBtb3VzZUV2ZW50LmNsaWVudFk7XG5cbiAgICBsZXQgb3BlcmFuZCA9IDE7XG4gICAgc3dpdGNoICh0aGlzLmRyYWdEaXIpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIG9wZXJhbmQgPSAtMTtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuaCAtIG9mZnNldCAqIHRoaXMudnkgKiBvcGVyYW5kKSArICdweCc7XG4gICAgICAgIGlmICh0aGlzLnJGbGV4KSB7XG4gICAgICAgICAgdGhpcy5mbGV4QmFzaXMgPSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgb3BlcmFuZCA9IC0xO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIGNvbnN0IHdpZHRoID0gKHRoaXMudyAtIG9mZnNldCAqIHRoaXMudnggKiBvcGVyYW5kKSArICdweCc7XG4gICAgICAgIGlmICh0aGlzLnJGbGV4KSB7XG4gICAgICAgICAgdGhpcy5mbGV4QmFzaXMgPSB3aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlSW5mbyhtb3VzZUV2ZW50KTtcbiAgICB0aGlzLnJlc2l6aW5nLmVtaXQoeyBpbmZvOiB0aGlzLmluZm8gfSk7XG4gIH1cblxufVxuIl19