UNPKG

@taiga-ui/cdk

Version:

Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance

83 lines 9.86 kB
import { Directive, EventEmitter, inject, Input, Output, } from '@angular/core'; import { tuiPx } from '@taiga-ui/cdk/utils/miscellaneous'; import { TuiResizable } from './resizable.directive'; import * as i0 from "@angular/core"; class TuiResizer { constructor() { this.resizable = inject(TuiResizable); this.x = NaN; this.y = NaN; this.width = 0; this.height = 0; this.tuiResizer = [0, 0]; this.tuiSizeChange = new EventEmitter(); } get cursor() { if (!this.tuiResizer[0]) { return 'ns-resize'; } if (!this.tuiResizer[1]) { return 'ew-resize'; } if (this.tuiResizer[0] * this.tuiResizer[1] > 0) { return 'nwse-resize'; } return 'nesw-resize'; } onPointerDown(x, y) { this.x = x; this.y = y; this.width = this.resizable.nativeElement.clientWidth; this.height = this.resizable.nativeElement.clientHeight; } onPointerMove({ x, y, buttons }) { if (!buttons) { this.onPointerUp(); } else { this.onMove(x, y); } } onPointerUp() { this.x = NaN; } onMove(x, y) { if (Number.isNaN(this.x)) { return; } const { style } = this.resizable.nativeElement; const size = [ this.width + this.tuiResizer[0] * (x - this.x), this.height + this.tuiResizer[1] * (y - this.y), ]; if (this.tuiResizer[0]) { style.width = tuiPx(size[0]); } if (this.tuiResizer[1]) { style.height = tuiPx(size[1]); } this.tuiSizeChange.emit(size); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiResizer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiResizer, isStandalone: true, selector: "[tuiResizer]", inputs: { tuiResizer: "tuiResizer" }, outputs: { tuiSizeChange: "tuiSizeChange" }, host: { listeners: { "pointerdown.zoneless.prevent": "onPointerDown($event.x, $event.y)", "document:pointermove.zoneless": "onPointerMove($event)", "document:pointerup.zoneless": "onPointerUp()" }, properties: { "style.cursor": "cursor", "style.touchAction": "\"none\"" } }, ngImport: i0 }); } } export { TuiResizer }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiResizer, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[tuiResizer]', host: { '[style.cursor]': 'cursor', '[style.touchAction]': '"none"', '(pointerdown.zoneless.prevent)': 'onPointerDown($event.x, $event.y)', '(document:pointermove.zoneless)': 'onPointerMove($event)', '(document:pointerup.zoneless)': 'onPointerUp()', }, }] }], propDecorators: { tuiResizer: [{ type: Input }], tuiSizeChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9yZXNpemVyL3Jlc2l6ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUV4RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7O0FBRW5ELE1BV2EsVUFBVTtJQVh2QjtRQVlxQixjQUFTLEdBQTRCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVqRSxNQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ1IsTUFBQyxHQUFHLEdBQUcsQ0FBQztRQUNSLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBR2QsZUFBVSxHQUFvQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUc1QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFtQyxDQUFDO0tBMER2RjtJQXhERyxJQUFjLE1BQU07UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckIsT0FBTyxXQUFXLENBQUM7U0FDdEI7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQixPQUFPLFdBQVcsQ0FBQztTQUN0QjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3QyxPQUFPLGFBQWEsQ0FBQztTQUN4QjtRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxhQUFhLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDeEMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1FBQ3RELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO0lBQzVELENBQUM7SUFFUyxhQUFhLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBZTtRQUNqRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RCO2FBQU07WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNyQjtJQUNMLENBQUM7SUFFUyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFUyxNQUFNLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDakMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0QixPQUFPO1NBQ1Y7UUFFRCxNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDN0MsTUFBTSxJQUFJLEdBQUc7WUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN6QyxDQUFDO1FBRVgsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQzsrR0FyRVEsVUFBVTttR0FBVixVQUFVOztTQUFWLFVBQVU7NEZBQVYsVUFBVTtrQkFYdEIsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLElBQUksRUFBRTt3QkFDRixnQkFBZ0IsRUFBRSxRQUFRO3dCQUMxQixxQkFBcUIsRUFBRSxRQUFRO3dCQUMvQixnQ0FBZ0MsRUFBRSxtQ0FBbUM7d0JBQ3JFLGlDQUFpQyxFQUFFLHVCQUF1Qjt3QkFDMUQsK0JBQStCLEVBQUUsZUFBZTtxQkFDbkQ7aUJBQ0o7OEJBVVUsVUFBVTtzQkFEaEIsS0FBSztnQkFJVSxhQUFhO3NCQUQ1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgdHlwZSBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dHVpUHh9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5cbmltcG9ydCB7VHVpUmVzaXphYmxlfSBmcm9tICcuL3Jlc2l6YWJsZS5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3R1aVJlc2l6ZXJdJyxcbiAgICBob3N0OiB7XG4gICAgICAgICdbc3R5bGUuY3Vyc29yXSc6ICdjdXJzb3InLFxuICAgICAgICAnW3N0eWxlLnRvdWNoQWN0aW9uXSc6ICdcIm5vbmVcIicsXG4gICAgICAgICcocG9pbnRlcmRvd24uem9uZWxlc3MucHJldmVudCknOiAnb25Qb2ludGVyRG93bigkZXZlbnQueCwgJGV2ZW50LnkpJyxcbiAgICAgICAgJyhkb2N1bWVudDpwb2ludGVybW92ZS56b25lbGVzcyknOiAnb25Qb2ludGVyTW92ZSgkZXZlbnQpJyxcbiAgICAgICAgJyhkb2N1bWVudDpwb2ludGVydXAuem9uZWxlc3MpJzogJ29uUG9pbnRlclVwKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aVJlc2l6ZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzaXphYmxlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChUdWlSZXNpemFibGUpO1xuXG4gICAgcHJvdGVjdGVkIHggPSBOYU47XG4gICAgcHJvdGVjdGVkIHkgPSBOYU47XG4gICAgcHJvdGVjdGVkIHdpZHRoID0gMDtcbiAgICBwcm90ZWN0ZWQgaGVpZ2h0ID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHR1aVJlc2l6ZXI6IHJlYWRvbmx5IFt4OiBudW1iZXIsIHk6IG51bWJlcl0gPSBbMCwgMF07XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgdHVpU2l6ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8cmVhZG9ubHkgW3g6IG51bWJlciwgeTogbnVtYmVyXT4oKTtcblxuICAgIHByb3RlY3RlZCBnZXQgY3Vyc29yKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy50dWlSZXNpemVyWzBdKSB7XG4gICAgICAgICAgICByZXR1cm4gJ25zLXJlc2l6ZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMudHVpUmVzaXplclsxXSkge1xuICAgICAgICAgICAgcmV0dXJuICdldy1yZXNpemUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudHVpUmVzaXplclswXSAqIHRoaXMudHVpUmVzaXplclsxXSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnbndzZS1yZXNpemUnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICduZXN3LXJlc2l6ZSc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uUG9pbnRlckRvd24oeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmVzaXphYmxlLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yZXNpemFibGUubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uUG9pbnRlck1vdmUoe3gsIHksIGJ1dHRvbnN9OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFidXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uTW92ZSh4LCB5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblBvaW50ZXJVcCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy54ID0gTmFOO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbk1vdmUoeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTih0aGlzLngpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7c3R5bGV9ID0gdGhpcy5yZXNpemFibGUubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IFtcbiAgICAgICAgICAgIHRoaXMud2lkdGggKyB0aGlzLnR1aVJlc2l6ZXJbMF0gKiAoeCAtIHRoaXMueCksXG4gICAgICAgICAgICB0aGlzLmhlaWdodCArIHRoaXMudHVpUmVzaXplclsxXSAqICh5IC0gdGhpcy55KSxcbiAgICAgICAgXSBhcyBjb25zdDtcblxuICAgICAgICBpZiAodGhpcy50dWlSZXNpemVyWzBdKSB7XG4gICAgICAgICAgICBzdHlsZS53aWR0aCA9IHR1aVB4KHNpemVbMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudHVpUmVzaXplclsxXSkge1xuICAgICAgICAgICAgc3R5bGUuaGVpZ2h0ID0gdHVpUHgoc2l6ZVsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnR1aVNpemVDaGFuZ2UuZW1pdChzaXplKTtcbiAgICB9XG59XG4iXX0=