@delon/abc
Version:
Common business components of ng-alain.
107 lines (103 loc) • 4.87 kB
JavaScript
import * as i0 from '@angular/core';
import { Injectable, inject, ElementRef, DestroyRef, output, afterNextRender, Directive, NgModule } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
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: "21.2.6", ngImport: i0, type: SizeObserver, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: SizeObserver, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: SizeObserver, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}] });
class ObserverSize {
_obs = inject(SizeObserver);
el = inject(ElementRef).nativeElement;
d$ = inject(DestroyRef);
event = output({ alias: 'observeSize' });
constructor() {
afterNextRender(() => {
this._obs
.observe(this.el)
.pipe(takeUntilDestroyed(this.d$))
.subscribe(res => this.event.emit(res));
});
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: ObserverSize, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.6", type: ObserverSize, isStandalone: true, selector: "[observeSize]", outputs: { event: "observeSize" }, exportAs: ["observeSize"], ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: ObserverSize, decorators: [{
type: Directive,
args: [{
selector: '[observeSize]',
exportAs: 'observeSize'
}]
}], ctorParameters: () => [], propDecorators: { event: [{ type: i0.Output, args: ["observeSize"] }] } });
class ObserversModule {
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: ObserversModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.6", ngImport: i0, type: ObserversModule, imports: [ObserverSize], exports: [ObserverSize] });
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: ObserversModule });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", 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