@ng-web-apis/resize-observer
Version:
A library for declarative use of Resize Observer API with Angular
74 lines (66 loc) • 3.71 kB
JavaScript
import * as i0 from '@angular/core';
import { InjectionToken, inject, ElementRef, Injectable, Directive } from '@angular/core';
import { outputFromObservable } from '@angular/core/rxjs-interop';
import { Observable } from 'rxjs';
import { WA_WINDOW } from '@ng-web-apis/common';
const SafeObserver = typeof ResizeObserver === 'undefined'
? class {
observe() { }
unobserve() { }
disconnect() { }
}
: ResizeObserver;
const WA_RESIZE_OPTION_BOX_DEFAULT = 'content-box';
const WA_RESIZE_OPTION_BOX = new InjectionToken(ngDevMode ? '[WA_RESIZE_OPTION_BOX]' : '', { factory: () => WA_RESIZE_OPTION_BOX_DEFAULT });
class WaResizeObserverService extends Observable {
constructor() {
const nativeElement = inject(ElementRef).nativeElement;
const box = inject(WA_RESIZE_OPTION_BOX);
super((subscriber) => {
const observer = new SafeObserver((entries) => subscriber.next(entries));
observer.observe(nativeElement, { box });
return () => {
observer.disconnect();
};
});
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WaResizeObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WaResizeObserverService });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WaResizeObserverService, decorators: [{
type: Injectable
}], ctorParameters: () => [] });
class WaResizeObserver {
waResizeObserver = outputFromObservable(inject(WaResizeObserverService));
waResizeBox = WA_RESIZE_OPTION_BOX_DEFAULT;
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WaResizeObserver, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.19", type: WaResizeObserver, isStandalone: true, selector: "[waResizeObserver]", inputs: { waResizeBox: "waResizeBox" }, outputs: { waResizeObserver: "waResizeObserver" }, providers: [
WaResizeObserverService,
{
provide: WA_RESIZE_OPTION_BOX,
useFactory: () => inject(ElementRef).nativeElement.getAttribute('waResizeBox') ||
WA_RESIZE_OPTION_BOX_DEFAULT,
},
], ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WaResizeObserver, decorators: [{
type: Directive,
args: [{
selector: '[waResizeObserver]',
inputs: ['waResizeBox'],
providers: [
WaResizeObserverService,
{
provide: WA_RESIZE_OPTION_BOX,
useFactory: () => inject(ElementRef).nativeElement.getAttribute('waResizeBox') ||
WA_RESIZE_OPTION_BOX_DEFAULT,
},
],
}]
}], propDecorators: { waResizeObserver: [{ type: i0.Output, args: ["waResizeObserver"] }] } });
const WA_RESIZE_OBSERVER_SUPPORT = new InjectionToken(ngDevMode ? '[WA_RESIZE_OBSERVER_SUPPORT]' : '', { factory: () => !!inject(WA_WINDOW).ResizeObserver });
/**
* Generated bundle index. Do not edit.
*/
export { WA_RESIZE_OBSERVER_SUPPORT, WA_RESIZE_OPTION_BOX, WA_RESIZE_OPTION_BOX_DEFAULT, WaResizeObserver, WaResizeObserverService };
//# sourceMappingURL=ng-web-apis-resize-observer.mjs.map