@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
46 lines • 5.89 kB
JavaScript
import { inject, Injectable, NgZone } from '@angular/core';
import { ReplaySubject } from 'rxjs';
import * as i0 from "@angular/core";
export class ResizeService {
constructor() {
this._zone = inject(NgZone);
this._observer = new ResizeObserver(this.elementDidResize.bind(this));
this._targets = new WeakMap();
}
ngOnDestroy() {
this._observer.disconnect();
}
addResizeListener(target) {
this._zone.runOutsideAngular(() => this._observer.observe(target));
if (this._targets.has(target)) {
return this._targets.get(target);
}
else {
const emitter = new ReplaySubject();
this._targets.set(target, emitter);
return emitter;
}
}
removeResizeListener(target) {
this._observer.unobserve(target);
}
elementDidResize(entries) {
this._zone.run(() => {
for (const entry of entries) {
if (this._targets.has(entry.target)) {
const emitter = this._targets.get(entry.target);
emitter.next({
width: entry.target.offsetWidth,
height: entry.target.offsetHeight,
});
}
}
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ResizeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ResizeService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ResizeService, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGlyZWN0aXZlcy9yZXNpemUvcmVzaXplLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBR3JDLE1BQU0sT0FBTyxhQUFhO0lBRDFCO1FBRW1CLFVBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkIsY0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVqRSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWdELENBQUM7S0FtQ3pGO0lBakNDLFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFtQjtRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFbkUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQWEsRUFBb0IsQ0FBQztZQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUFtQjtRQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsT0FBOEI7UUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ2xCLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQXFCLENBQUMsRUFBRSxDQUFDO29CQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBcUIsQ0FBQyxDQUFDO29CQUMvRCxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNYLEtBQUssRUFBRyxLQUFLLENBQUMsTUFBc0IsQ0FBQyxXQUFXO3dCQUNoRCxNQUFNLEVBQUcsS0FBSyxDQUFDLE1BQXNCLENBQUMsWUFBWTtxQkFDbkQsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQXZDVSxhQUFhO21IQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXNpemVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuZWxlbWVudERpZFJlc2l6ZS5iaW5kKHRoaXMpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YXJnZXRzID0gbmV3IFdlYWtNYXA8SFRNTEVsZW1lbnQsIFJlcGxheVN1YmplY3Q8UmVzaXplRGltZW5zaW9ucz4+KCk7XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgYWRkUmVzaXplTGlzdGVuZXIodGFyZ2V0OiBIVE1MRWxlbWVudCk6IFJlcGxheVN1YmplY3Q8UmVzaXplRGltZW5zaW9ucz4ge1xuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQpKTtcblxuICAgIGlmICh0aGlzLl90YXJnZXRzLmhhcyh0YXJnZXQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0cy5nZXQodGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZW1pdHRlciA9IG5ldyBSZXBsYXlTdWJqZWN0PFJlc2l6ZURpbWVuc2lvbnM+KCk7XG4gICAgICB0aGlzLl90YXJnZXRzLnNldCh0YXJnZXQsIGVtaXR0ZXIpO1xuICAgICAgcmV0dXJuIGVtaXR0ZXI7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlUmVzaXplTGlzdGVuZXIodGFyZ2V0OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX29ic2VydmVyLnVub2JzZXJ2ZSh0YXJnZXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbGVtZW50RGlkUmVzaXplKGVudHJpZXM6IFJlc2l6ZU9ic2VydmVyRW50cnlbXSk6IHZvaWQge1xuICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBpZiAodGhpcy5fdGFyZ2V0cy5oYXMoZW50cnkudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLl90YXJnZXRzLmdldChlbnRyeS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAgIGVtaXR0ZXIubmV4dCh7XG4gICAgICAgICAgICB3aWR0aDogKGVudHJ5LnRhcmdldCBhcyBIVE1MRWxlbWVudCkub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IChlbnRyeS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldEhlaWdodCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXplRGltZW5zaW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuIl19