@ng-web-apis/resize-observer
Version:
A library for declarative use of Resize Observer API with Angular
97 lines (89 loc) • 4.23 kB
JavaScript
import * as i0 from '@angular/core';
import { InjectionToken, inject, ElementRef, Injectable, Directive } from '@angular/core';
import { Observable } from 'rxjs';
import { WA_WINDOW } from '@ng-web-apis/common';
const SafeObserver = typeof ResizeObserver !== 'undefined'
? ResizeObserver
: class {
observe() { }
unobserve() { }
disconnect() { }
};
const WA_RESIZE_OPTION_BOX_DEFAULT = 'content-box';
/**
* @deprecated: drop in v5.0, use {@link WA_RESIZE_OPTION_BOX_DEFAULT}
*/
const RESIZE_OPTION_BOX_DEFAULT = WA_RESIZE_OPTION_BOX_DEFAULT;
const WA_RESIZE_OPTION_BOX = new InjectionToken('[WA_RESIZE_OPTION_BOX]', {
providedIn: 'root',
factory: () => RESIZE_OPTION_BOX_DEFAULT,
});
/**
* @deprecated: drop in v5.0, use {@link WA_RESIZE_OPTION_BOX}
*/
const RESIZE_OPTION_BOX = WA_RESIZE_OPTION_BOX;
class ResizeObserverService extends Observable {
constructor() {
const nativeElement = inject(ElementRef).nativeElement;
const box = inject(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: "16.2.12", ngImport: i0, type: ResizeObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResizeObserverService });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResizeObserverService, decorators: [{
type: Injectable
}], ctorParameters: function () { return []; } });
class WaResizeObserver {
waResizeObserver = inject(ResizeObserverService);
box = RESIZE_OPTION_BOX_DEFAULT;
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WaResizeObserver, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WaResizeObserver, isStandalone: true, selector: "[waResizeObserver]", inputs: { waResizeBox: ["box", "waResizeBox"] }, outputs: { waResizeObserver: "waResizeObserver" }, providers: [
ResizeObserverService,
{
provide: RESIZE_OPTION_BOX,
useFactory: () => inject(ElementRef).nativeElement.getAttribute('waResizeBox') ||
RESIZE_OPTION_BOX_DEFAULT,
},
], ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WaResizeObserver, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: '[waResizeObserver]',
inputs: ['waResizeBox: box'],
outputs: ['waResizeObserver'],
providers: [
ResizeObserverService,
{
provide: RESIZE_OPTION_BOX,
useFactory: () => inject(ElementRef).nativeElement.getAttribute('waResizeBox') ||
RESIZE_OPTION_BOX_DEFAULT,
},
],
}]
}] });
/**
* @deprecated: use {@link WaResizeObserver}
*/
const ResizeObserverDirective = WaResizeObserver;
const WA_RESIZE_OBSERVER_SUPPORT = new InjectionToken('[WA_RESIZE_OBSERVER_SUPPORT]', {
providedIn: 'root',
factory: () => !!inject(WA_WINDOW).ResizeObserver,
});
/**
* @deprecated: drop in v5.0, use {@link WA_RESIZE_OBSERVER_SUPPORT}
*/
const RESIZE_OBSERVER_SUPPORT = WA_RESIZE_OBSERVER_SUPPORT;
/**
* Generated bundle index. Do not edit.
*/
export { RESIZE_OBSERVER_SUPPORT, RESIZE_OPTION_BOX, RESIZE_OPTION_BOX_DEFAULT, ResizeObserverDirective, ResizeObserverService, WA_RESIZE_OBSERVER_SUPPORT, WA_RESIZE_OPTION_BOX, WA_RESIZE_OPTION_BOX_DEFAULT, WaResizeObserver };
//# sourceMappingURL=ng-web-apis-resize-observer.mjs.map