@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
JavaScript
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=