{"version":3,"file":"ng-web-apis-intersection-observer.mjs","sources":["../../../libs/intersection-observer/src/classes/safe-observer.ts","../../../libs/intersection-observer/src/tokens/intersection-root.ts","../../../libs/intersection-observer/src/tokens/intersection-root-margin.ts","../../../libs/intersection-observer/src/utils/root-margin-factory.ts","../../../libs/intersection-observer/src/tokens/intersection-threshold.ts","../../../libs/intersection-observer/src/utils/threshold-factory.ts","../../../libs/intersection-observer/src/directives/intersection-observer.directive.ts","../../../libs/intersection-observer/src/services/intersection-observee.service.ts","../../../libs/intersection-observer/src/directives/intersection-observee.directive.ts","../../../libs/intersection-observer/src/directives/intersection-root.directive.ts","../../../libs/intersection-observer/src/intersection-observer.ts","../../../libs/intersection-observer/src/services/intersection-observer.service.ts","../../../libs/intersection-observer/src/tokens/support.ts","../../../libs/intersection-observer/src/ng-web-apis-intersection-observer.ts"],"sourcesContent":["export const SafeObserver =\n    typeof IntersectionObserver !== 'undefined'\n        ? IntersectionObserver\n        : class implements IntersectionObserver {\n              public readonly root = null;\n              public readonly rootMargin = '';\n              public readonly thresholds = [];\n              public observe(): void {}\n              public unobserve(): void {}\n              public disconnect(): void {}\n              public takeRecords(): IntersectionObserverEntry[] {\n                  return [];\n              }\n          };\n","import {type ElementRef, InjectionToken} from '@angular/core';\n\nexport const WA_INTERSECTION_ROOT = new InjectionToken<ElementRef<Element>>(\n    ngDevMode ? '[WA_INTERSECTION_ROOT]' : '',\n);\n","import {InjectionToken} from '@angular/core';\n\nexport const WA_INTERSECTION_ROOT_MARGIN_DEFAULT = '0px 0px 0px 0px';\nexport const WA_INTERSECTION_ROOT_MARGIN = new InjectionToken<string>(\n    ngDevMode ? '[WA_INTERSECTION_ROOT_MARGIN]' : '',\n    {factory: () => WA_INTERSECTION_ROOT_MARGIN_DEFAULT},\n);\n","import {ElementRef, inject} from '@angular/core';\n\nimport {WA_INTERSECTION_ROOT_MARGIN_DEFAULT} from '../tokens/intersection-root-margin';\n\nexport function rootMarginFactory(): string {\n    return (\n        inject(ElementRef).nativeElement.getAttribute('waIntersectionRootMargin') ||\n        WA_INTERSECTION_ROOT_MARGIN_DEFAULT\n    );\n}\n","import {InjectionToken} from '@angular/core';\n\nexport const WA_INTERSECTION_THRESHOLD_DEFAULT = 0;\nexport const WA_INTERSECTION_THRESHOLD = new InjectionToken<number[] | number>(\n    ngDevMode ? '[WA_INTERSECTION_THRESHOLD]' : '',\n    {factory: () => WA_INTERSECTION_THRESHOLD_DEFAULT},\n);\n","import {ElementRef, inject} from '@angular/core';\n\nimport {WA_INTERSECTION_THRESHOLD_DEFAULT} from '../tokens/intersection-threshold';\n\nexport function thresholdFactory(): number[] | number {\n    return (\n        inject(ElementRef)\n            .nativeElement.getAttribute('waIntersectionThreshold')\n            ?.split(',')\n            .map(parseFloat) || WA_INTERSECTION_THRESHOLD_DEFAULT\n    );\n}\n","import {Directive, inject, type OnDestroy} from '@angular/core';\n\nimport {SafeObserver} from '../classes/safe-observer';\nimport {WA_INTERSECTION_ROOT} from '../tokens/intersection-root';\nimport {rootMarginFactory} from '../utils/root-margin-factory';\nimport {thresholdFactory} from '../utils/threshold-factory';\n\n@Directive({\n    selector: '[waIntersectionObserver]',\n    inputs: ['margin: waIntersectionRootMargin', 'threshold: waIntersectionThreshold'],\n    exportAs: 'IntersectionObserver',\n})\nexport class WaIntersectionObserverDirective extends SafeObserver implements OnDestroy {\n    private readonly callbacks = new Map<Element, IntersectionObserverCallback>();\n\n    public margin = '';\n    public threshold = '';\n\n    constructor() {\n        const root = inject(WA_INTERSECTION_ROOT, {optional: true});\n\n        super(\n            (entries) => {\n                this.callbacks.forEach((callback, element) => {\n                    const filtered = entries.filter(({target}) => target === element);\n\n                    if (filtered.length) {\n                        callback(filtered, this);\n                    }\n                });\n            },\n            {\n                root: root?.nativeElement,\n                rootMargin: rootMarginFactory(),\n                threshold: thresholdFactory(),\n            },\n        );\n    }\n\n    public override observe(\n        target: Element,\n        callback: IntersectionObserverCallback = () => {},\n    ): void {\n        super.observe(target);\n        this.callbacks.set(target, callback);\n    }\n\n    public override unobserve(target: Element): void {\n        super.unobserve(target);\n        this.callbacks.delete(target);\n    }\n\n    public ngOnDestroy(): void {\n        this.disconnect();\n    }\n}\n","import {ElementRef, inject, Injectable} from '@angular/core';\nimport {Observable, share} from 'rxjs';\n\nimport {WaIntersectionObserverDirective} from '../directives/intersection-observer.directive';\n\n@Injectable()\nexport class WaIntersectionObserveeService extends Observable<\n    IntersectionObserverEntry[]\n> {\n    constructor() {\n        const nativeElement: Element = inject(ElementRef).nativeElement;\n        const observer = inject(WaIntersectionObserverDirective);\n\n        super((subscriber) => {\n            observer.observe(nativeElement, (entries) => {\n                subscriber.next(entries);\n            });\n\n            return () => {\n                observer.unobserve(nativeElement);\n            };\n        });\n\n        return this.pipe(share());\n    }\n}\n","import {Directive, inject} from '@angular/core';\nimport {outputFromObservable} from '@angular/core/rxjs-interop';\n\nimport {WaIntersectionObserveeService} from '../services/intersection-observee.service';\n\n@Directive({\n    selector: '[waIntersectionObservee]',\n    providers: [WaIntersectionObserveeService],\n})\nexport class WaIntersectionObservee {\n    public readonly waIntersectionObservee = outputFromObservable(\n        inject(WaIntersectionObserveeService),\n    );\n}\n","import {Directive, ElementRef} from '@angular/core';\n\nimport {WA_INTERSECTION_ROOT} from '../tokens/intersection-root';\n\n@Directive({\n    selector: '[waIntersectionRoot]',\n    providers: [{provide: WA_INTERSECTION_ROOT, useExisting: ElementRef}],\n})\nexport class WaIntersectionRoot {}\n","import {WaIntersectionObservee} from './directives/intersection-observee.directive';\nimport {WaIntersectionObserverDirective} from './directives/intersection-observer.directive';\nimport {WaIntersectionRoot} from './directives/intersection-root.directive';\n\nexport const WaIntersectionObserver = [\n    WaIntersectionObserverDirective,\n    WaIntersectionObservee,\n    WaIntersectionRoot,\n] as const;\n","import {ElementRef, inject, Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {SafeObserver} from '../classes/safe-observer';\nimport {WA_INTERSECTION_ROOT} from '../tokens/intersection-root';\nimport {WA_INTERSECTION_ROOT_MARGIN} from '../tokens/intersection-root-margin';\nimport {WA_INTERSECTION_THRESHOLD} from '../tokens/intersection-threshold';\n\n@Injectable()\nexport class WaIntersectionObserverService extends Observable<\n    IntersectionObserverEntry[]\n> {\n    private readonly nativeElement: Element = inject(ElementRef).nativeElement;\n    private readonly rootMargin = inject(WA_INTERSECTION_ROOT_MARGIN);\n    private readonly threshold = inject(WA_INTERSECTION_THRESHOLD);\n    private readonly root: Element | null =\n        inject(WA_INTERSECTION_ROOT, {optional: true})?.nativeElement ?? null;\n\n    constructor() {\n        super((subscriber) => {\n            const observer = new SafeObserver(\n                (entries) => {\n                    subscriber.next(entries);\n                },\n                {\n                    root: this.root,\n                    rootMargin: this.rootMargin,\n                    threshold: this.threshold,\n                },\n            );\n\n            observer.observe(this.nativeElement);\n\n            return () => {\n                observer.disconnect();\n            };\n        });\n    }\n}\n","import {inject, InjectionToken} from '@angular/core';\nimport {WA_WINDOW} from '@ng-web-apis/common';\n\nexport const WA_INTERSECTION_OBSERVER_SUPPORT = new InjectionToken<boolean>(\n    ngDevMode ? '[WA_INTERSECTION_OBSERVER_SUPPORT]' : '',\n    {factory: () => !!(inject(WA_WINDOW) as any).IntersectionObserver},\n);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}