{"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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"}