UNPKG

@ynmstudio/utils

Version:
1 lines 6.53 kB
{"version":3,"file":"ynmstudio-utils-inviewport.mjs","sources":["../../../projects/ynm-utils/inviewport/src/lib/in-viewport.directive.ts","../../../projects/ynm-utils/inviewport/src/public_api.ts","../../../projects/ynm-utils/inviewport/src/ynmstudio-utils-inviewport.ts"],"sourcesContent":["import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n HostBinding,\n EventEmitter,\n Output,\n OnDestroy,\n AfterViewInit,\n Input,\n OnInit,\n InjectionToken,\n inject,\n PLATFORM_ID,\n Inject,\n} from '@angular/core';\n\nexport const INTERSECTION_OBSERVER_INIT = new InjectionToken<IntersectionObserverInit>('IntersectionObserverInit');\n\n/**\n * A simple lightweight library for Angular with that detects when an\n * element is within the browsers viewport and adds a `in-viewport` or\n * `not-in-viewport` class to the element.\n *\n * @example\n * ```html\n * <p\n * class=\"foo\"\n * snInViewport\n * (inViewportChange)=\"myEventHandler($event)\">\n * Amet tempor excepteur occaecat nulla.\n * </p>\n * ```\n */\n// @dynamic\n@Directive({\n selector: '[snInViewport]',\n exportAs: 'snInViewport',\n standalone: true,\n})\nexport class InViewportDirective implements AfterViewInit, OnDestroy, OnInit {\n private inViewport: boolean = false;\n private hasIntersectionObserver: boolean;\n @Input()\n inViewportOptions?: IntersectionObserverInit = inject(INTERSECTION_OBSERVER_INIT, { optional: true }) ?? undefined;\n\n @Output()\n inViewportChange = new EventEmitter<boolean>();\n observer?: IntersectionObserver;\n\n @HostBinding('class.sn-viewport--in')\n get isInViewport(): boolean {\n return this.inViewport;\n }\n\n @HostBinding('class.sn-viewport--out')\n get isNotInViewport(): boolean {\n return !this.inViewport;\n }\n\n constructor(@Inject(DOCUMENT) private readonly document: Document, @Inject(PLATFORM_ID) private platformId: Object, private el: ElementRef) {\n this.hasIntersectionObserver = this.intersectionObserverFeatureDetection();\n }\n\n ngOnInit() {\n if (!this.hasIntersectionObserver || !isPlatformBrowser(this.platformId)) {\n this.inViewport = true;\n this.inViewportChange.emit(this.inViewport);\n }\n }\n\n ngAfterViewInit() {\n if (this.hasIntersectionObserver && isPlatformBrowser(this.platformId)) {\n // const IntersectionObserver = this.window['IntersectionObserver'];\n this.observer = new IntersectionObserver(\n this.intersectionObserverCallback.bind(this),\n this.inViewportOptions\n );\n this.observer?.observe(this.el.nativeElement);\n }\n }\n\n ngOnDestroy() {\n if (this.observer) {\n this.observer.unobserve(this.el.nativeElement);\n }\n }\n\n intersectionObserverCallback(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n if (this.inViewport === entry.isIntersecting) return;\n this.inViewport = entry.isIntersecting;\n this.inViewportChange.emit(this.inViewport);\n });\n }\n\n private intersectionObserverFeatureDetection() {\n const window = this.document.defaultView;\n const hasIntersectionObserver = !!window?.IntersectionObserver;\n\n const userAgent = window?.navigator.userAgent;\n const matches = userAgent?.match(/Edge\\/(\\d*)\\./i);\n\n const isEdge = !!matches && matches.length > 1;\n const isEdgeVersion16OrBetter = isEdge && !!matches && parseInt(matches[1], 10) > 15;\n return hasIntersectionObserver && (!isEdge || isEdgeVersion16OrBetter);\n }\n}\n","/*\n * Public API Surface of ngx-inviewport\n */\n\nexport * from './lib/in-viewport.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}