UNPKG

@yelon/abc

Version:

Common business components of ng-yunzai.

120 lines (116 loc) 4.99 kB
import * as i0 from '@angular/core'; import { Injectable, inject, ElementRef, NgZone, EventEmitter, Output, Directive, NgModule } from '@angular/core'; import { Observable, Subject } from 'rxjs'; class SizeObserver { _observedElements = new Map(); ngOnDestroy() { this._observedElements.forEach((_, element) => this._cleanupObserver(element)); } observe(element) { return new Observable((observer) => { const stream = this._observeElement(element); const subscription = stream.subscribe(observer); return () => { subscription.unsubscribe(); this._unobserveElement(element); }; }); } _observeElement(element) { if (!this._observedElements.has(element)) { const stream = new Subject(); let observer = null; if (typeof MutationObserver !== 'undefined') { observer = new MutationObserver(mutations => stream.next(mutations)); observer.observe(element, { attributes: true, attributeOldValue: true, attributeFilter: ['width', 'height', 'style'] }); } this._observedElements.set(element, { observer, stream, count: 1 }); } else { this._observedElements.get(element).count++; } return this._observedElements.get(element).stream; } _unobserveElement(element) { if (this._observedElements.has(element)) { this._observedElements.get(element).count--; if (!this._observedElements.get(element).count) { this._cleanupObserver(element); } } } _cleanupObserver(element) { if (this._observedElements.has(element)) { const { observer, stream } = this._observedElements.get(element); if (observer) { observer.disconnect(); } stream.complete(); this._observedElements.delete(element); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SizeObserver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SizeObserver, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SizeObserver, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); class ObserverSize { _obs = inject(SizeObserver); el = inject(ElementRef).nativeElement; ngZone = inject(NgZone); _sub$ = null; event = new EventEmitter(); ngAfterViewInit() { if (!this._sub$) { this._sub(); } } _sub() { this._unsub(); const stream = this._obs.observe(this.el); this.ngZone.runOutsideAngular(() => { this._sub$ = stream.subscribe(this.event); }); } _unsub() { this._sub$?.unsubscribe(); } ngOnDestroy() { this._unsub(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: ObserverSize, deps: [], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.3", type: ObserverSize, isStandalone: true, selector: "[observeSize]", outputs: { event: "observeSize" }, exportAs: ["observeSize"], ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: ObserverSize, decorators: [{ type: Directive, args: [{ selector: '[observeSize]', exportAs: 'observeSize' }] }], propDecorators: { event: [{ type: Output, args: ['observeSize'] }] } }); class ObserversModule { static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: ObserversModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.3", ngImport: i0, type: ObserversModule, imports: [ObserverSize], exports: [ObserverSize] }); static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: ObserversModule }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: ObserversModule, decorators: [{ type: NgModule, args: [{ exports: [ObserverSize], imports: [ObserverSize] }] }] }); /** * Generated bundle index. Do not edit. */ export { ObserverSize, ObserversModule, SizeObserver }; //# sourceMappingURL=chart-observer-size.mjs.map