@ng-web-apis/intersection-observer
Version:
A library for declarative use of Intersection Observer API with Angular
1 lines • 13.8 kB
Source Map (JSON)
{"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 ? 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 : IntersectionObserver;\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';\n\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;\n\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(Number.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 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\n private readonly root =\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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"}