import { isPlatformBrowser, DOCUMENT, CommonModule } from '@angular/common'; import * as i0 from '@angular/core'; import { EventEmitter, PLATFORM_ID, TemplateRef, Directive, Inject, Output, ContentChild, NgModule } from '@angular/core'; /** * Defer postpones the loading the content that is initially not in the viewport until it becomes visible on scroll. * @group Components */ class DeferredLoader { document; platformId; el; renderer; viewContainer; cd; /** * Callback to invoke when deferred content is loaded. * @param {Event} event - Browser event. * @group Emits */ onLoad = new EventEmitter(); template; documentScrollListener; view; window; constructor(document, platformId, el, renderer, viewContainer, cd) { this.document = document; this.platformId = platformId; this.el = el; this.renderer = renderer; this.viewContainer = viewContainer; this.cd = cd; this.window = this.document.defaultView; } ngAfterViewInit() { if (isPlatformBrowser(this.platformId)) { if (this.shouldLoad()) { this.load(); } if (!this.isLoaded()) { this.documentScrollListener = this.renderer.listen(this.window, 'scroll', () => { if (this.shouldLoad()) { this.load(); this.documentScrollListener && this.documentScrollListener(); this.documentScrollListener = null; } }); } } } shouldLoad() { if (this.isLoaded()) { return false; } else { let rect = this.el.nativeElement.getBoundingClientRect(); let docElement = this.document.documentElement; let winHeight = docElement.clientHeight; return winHeight >= rect.top; } } load() { this.view = this.viewContainer.createEmbeddedView(this.template); this.onLoad.emit(); this.cd.detectChanges(); } isLoaded() { return this.view != null && isPlatformBrowser(this.platformId); } ngOnDestroy() { this.view = null; if (this.documentScrollListener) { this.documentScrollListener(); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: DeferredLoader, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.7", type: DeferredLoader, selector: "[pDefer]", outputs: { onLoad: "onLoad" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: DeferredLoader, decorators: [{ type: Directive, args: [{ selector: '[pDefer]', host: { class: 'p-element' } }] }], ctorParameters: () => [{ type: Document, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }], propDecorators: { onLoad: [{ type: Output }], template: [{ type: ContentChild, args: [TemplateRef] }] } }); class DeferModule { static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: DeferModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.7", ngImport: i0, type: DeferModule, declarations: [DeferredLoader], imports: [CommonModule], exports: [DeferredLoader] }); static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: DeferModule, imports: [CommonModule] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: DeferModule, decorators: [{ type: NgModule, args: [{ imports: [CommonModule], exports: [DeferredLoader], declarations: [DeferredLoader] }] }] }); /** * Generated bundle index. Do not edit. */ export { DeferModule, DeferredLoader }; //# sourceMappingURL=primeng-defer.mjs.map