@yelon/abc
Version:
Common business components of ng-yunzai.
120 lines (116 loc) • 4.99 kB
JavaScript
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