{"version":3,"file":"avtest-ng-spy.mjs","sources":["../../../projects/ng-spy/src/lib/tokens/resize-threshold.token.ts","../../../projects/ng-spy/src/lib/tokens/scroll-threshold.token.ts","../../../projects/ng-spy/src/lib/window.service.ts","../../../projects/ng-spy/src/lib/scroll-spy.service.ts","../../../projects/ng-spy/src/lib/spy-on.directive.ts","../../../projects/ng-spy/src/lib/spy-target.directive.ts","../../../projects/ng-spy/src/lib/scroll-spy.module.ts","../../../projects/ng-spy/src/public-api.ts","../../../projects/ng-spy/src/avtest-ng-spy.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const RESIZE_TIME_THRESHOLD: InjectionToken<number> = new InjectionToken('Time in milli-seconds', {\n  providedIn: 'root',\n  factory: () => 300\n});\n","import { InjectionToken } from '@angular/core';\n\nexport const SCROLL_TIME_THRESHOLD: InjectionToken<number> = new InjectionToken('Time in milli-seconds', {\n  providedIn: 'root',\n  factory: () => 10\n});\n","import { isPlatformBrowser } from '@angular/common';\nimport { ElementRef, Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { EMPTY, fromEvent, Observable } from 'rxjs';\nimport { auditTime } from 'rxjs/operators';\nimport { RESIZE_TIME_THRESHOLD } from './tokens/resize-threshold.token';\nimport { SCROLL_TIME_THRESHOLD } from './tokens/scroll-threshold.token';\n\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WindowService {\n  private isBrowser = true;\n  private scrollEvent$: Observable<Event>;\n  private resizeEvent$: Observable<Event>;\n\n  constructor(\n    @Inject(PLATFORM_ID) platformId,\n    @Inject(RESIZE_TIME_THRESHOLD) private resizeTime: number,\n    @Inject(SCROLL_TIME_THRESHOLD) private scrollTime: number\n  ) {\n    if (!isPlatformBrowser(platformId)) {\n      this.isBrowser = false;\n      this.scrollEvent$ = this.resizeEvent$ = EMPTY;\n    } else {\n      this.scrollEvent$ = fromEvent(window, 'scroll', { passive: true }).pipe(auditTime(this.scrollTime));\n      this.resizeEvent$ = fromEvent(window, 'resize', { passive: true }).pipe(auditTime(this.resizeTime));\n    }\n  }\n\n  getScrollEventForContainer(scrollContainer: ElementRef) {\n    if (!this.isBrowser) {\n      return EMPTY;\n    }\n\n    return fromEvent(scrollContainer.nativeElement, 'scroll', { passive: true }).pipe(auditTime(this.scrollTime));\n  }\n\n  get scrollEvent() {\n    return this.scrollEvent$;\n  }\n\n  get resizeEvent() {\n    return this.resizeEvent$;\n  }\n\n  get scrollTop() {\n    if (!this.isBrowser) {\n      return 0;\n    }\n\n    return Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop);\n  }\n\n  get viewportHeight() {\n    if (!this.isBrowser) {\n      return 0;\n    }\n\n    return Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n  }\n\n  getElementHeight(el: ElementRef) {\n    if (!this.isBrowser) {\n      return 0;\n    }\n\n    return el.nativeElement.offsetHeight;\n  }\n\n  getElementOffsetTop(el: ElementRef) {\n    if (!this.isBrowser) {\n      return 0;\n    }\n\n    return el.nativeElement.offsetTop;\n  }\n\n  getElementScrollTop(el: ElementRef) {\n    if (!this.isBrowser) {\n      return 0;\n    }\n\n    return el.nativeElement.scrollTop;\n  }\n}\n","import {ElementRef, Injectable} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {SpyTarget} from './spy-target.model';\nimport {WindowService} from './window.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ScrollSpyService {\n  private stopSpying$ = new Subject();\n  private activeSpyTarget$ = new Subject<string>();\n  private scrollEvent: Observable<Event>;\n  private resizeEvent: Observable<Event>;\n  private spyTargets: SpyTarget[] = [];\n  private thresholdTop = 0;\n  private thresholdBottom = 0;\n  private scrollContainer: ElementRef;\n  private isSpying = false;\n\n  constructor(private windowService: WindowService) {\n    this.scrollEvent = this.windowService.scrollEvent.pipe(takeUntil(this.stopSpying$));\n    this.resizeEvent = this.windowService.resizeEvent.pipe(takeUntil(this.stopSpying$));\n  }\n\n  spy({ scrollContainer, thresholdTop = 0, thresholdBottom = 0 }: SpyOptions = {}) {\n    // this is to prevent duplicate listeners\n    if (this.isSpying) {\n      return;\n    }\n\n    this.isSpying = true;\n    this.scrollContainer = scrollContainer;\n    this.thresholdTop = thresholdTop;\n    this.thresholdBottom = thresholdBottom;\n\n    this.scrollEvent.subscribe(() => this.checkActiveElement(scrollContainer));\n    this.resizeEvent.subscribe(() => this.checkActiveElement(scrollContainer));\n\n    if (scrollContainer != null) {\n      this.windowService.getScrollEventForContainer(scrollContainer)\n        .pipe(takeUntil(this.stopSpying$))\n        .subscribe(() => this.checkActiveElement(scrollContainer));\n    }\n\n    this.checkActiveElement(scrollContainer);\n  }\n\n  addTarget(target: SpyTarget) {\n    this.spyTargets.push({ ...target });\n    this.checkActiveElement(this.scrollContainer);\n  }\n\n  removeTarget(target: string) {\n    this.spyTargets = this.spyTargets.filter(spyTarget => target !== spyTarget.name);\n    this.checkActiveElement(this.scrollContainer);\n  }\n\n  checkActiveElement(scrollContainer: ElementRef = this.scrollContainer) {\n    let activeTarget: SpyTarget = null;\n    let scrollContainerOffset = this.getTotalOffset(scrollContainer);\n\n    for (const target of this.spyTargets) {\n      const activeElement = activeTarget != null ? activeTarget.element : null;\n      if (this.isElementActive(target.element, scrollContainer, scrollContainerOffset, activeElement)) {\n        activeTarget = target;\n      }\n    }\n\n    this.activeSpyTarget$.next(activeTarget ? activeTarget.name : null);\n  }\n\n  isElementActive(element: ElementRef, scrollContainer?: ElementRef, scrollContainerOffset?: number, currentActiveElement?: ElementRef) {\n    const targetOffsetTop = this.windowService.getElementOffsetTop(element);\n    const targetHeight = this.windowService.getElementHeight(element);\n\n    if (currentActiveElement != null && this.windowService.getElementOffsetTop(currentActiveElement) < targetOffsetTop) {\n      return false;\n    }\n\n    return this.isElementInsideWindow(element, scrollContainer, scrollContainerOffset, targetHeight, targetOffsetTop);\n  }\n\n  private getTotalOffset(element: ElementRef): number{\n    if(!element){\n      return 0;\n    }\n    let totalOffset = 0;\n    let current = element.nativeElement;\n    while(current.offsetParent != null){\n      totalOffset += current.offsetTop;\n      current = current.offsetParent;\n    }\n    return totalOffset;\n  }\n\n  private isElementInsideWindow(element: ElementRef, scrollContainer: ElementRef, scrollContainerOffset: number, elementHeight: number, elementOffsetTop: number) {\n    const scrollTop = this.windowService.scrollTop;\n    const viewportHeight = this.windowService.viewportHeight;\n\n    // target bottom edge is below window top edge && target top edge is above window bottom edge\n    // if target has a container, don't check for thresholds on the window\n    if (scrollContainer != null) {\n      // element has to be inside the portion of the container that is visible\n      const containerHeight = this.windowService.getElementHeight(scrollContainer);\n      const containerScrollTop = this.windowService.getElementScrollTop(scrollContainer);\n      // < 0: container is \"above\" the screen\n      // > 0: container is on or below the screen\n      const distanceToContainer = scrollContainerOffset - scrollTop;\n      const visibleContainerHeight = Math.min(viewportHeight - distanceToContainer, containerHeight);\n      // < 0: it is too far down to see\n      if (visibleContainerHeight < 0){\n        return false;\n      }\n      // elementOffsetTop is a \"global\" value so we have to calculate the offset _inside_ the container\n      const relativeElementOffset = this.getTotalOffset(element);\n      // now we need figure out which scrolled _part_ of the container is visible\n      return (relativeElementOffset + elementHeight) > (scrollContainerOffset + containerScrollTop)\n        && relativeElementOffset < (scrollContainerOffset + containerScrollTop + visibleContainerHeight);\n    }\n\n    return elementOffsetTop + elementHeight > scrollTop + this.thresholdTop\n      && elementOffsetTop < scrollTop + viewportHeight - this.thresholdBottom;\n  }\n\n  get activeSpyTarget() {\n    return this.activeSpyTarget$.asObservable();\n  }\n\n  stopSpying() {\n    this.stopSpying$.next();\n    this.spyTargets = [];\n    this.isSpying = false;\n  }\n}\n\ninterface SpyOptions {\n  scrollContainer?: ElementRef;\n  thresholdTop?: number;\n  thresholdBottom?: number;\n}\n","import { Directive, ElementRef, Renderer2, Input, OnInit } from '@angular/core';\n\nimport { ScrollSpyService } from './scroll-spy.service';\n\n@Directive({\n    selector: '[spyOn]',\n    standalone: true\n})\nexport class SpyOnDirective implements OnInit {\n\n  @Input() activeClass: string;\n  @Input() spyOn: string;\n  private isActive = false;\n\n  constructor(private el: ElementRef, private renderer: Renderer2, private spyService: ScrollSpyService) { }\n\n  ngOnInit() {\n    this.spyService.activeSpyTarget.subscribe(\n      (targetName) => {\n        if (!this.isActive && targetName === this.spyOn) {\n          this.setActive();\n        } else if (this.isActive && targetName !== this.spyOn) {\n          this.setInActive();\n        }\n      }\n    );\n  }\n\n  private get htmlElement() {\n    return this.el.nativeElement;\n  }\n\n  setActive() {\n    this.isActive = true;\n    if (this.activeClass) {\n      this.renderer.addClass(this.htmlElement, this.activeClass);\n    }\n  }\n\n  setInActive() {\n    this.isActive = false;\n    if (this.activeClass) {\n      this.renderer.removeClass(this.htmlElement, this.activeClass);\n    }\n  }\n}\n","import { Directive, ElementRef, Input, OnInit, Renderer2, OnDestroy } from '@angular/core';\n\nimport { ScrollSpyService } from './scroll-spy.service';\n\n@Directive({\n    selector: '[spyTarget]',\n    standalone: true\n})\nexport class SpyTargetDirective implements OnInit, OnDestroy {\n\n  @Input() spyTarget: string;\n\n  constructor(private el: ElementRef, private spyService: ScrollSpyService, private renderer: Renderer2) { }\n\n  ngOnInit() {\n    this.renderer.setAttribute(this.htmlElement, 'id', this.spyTarget);\n    this.spyService.addTarget({ name: this.spyTarget, element: this.el });\n  }\n\n  private get htmlElement() {\n    return this.el.nativeElement;\n  }\n\n  ngOnDestroy() {\n    this.spyService.removeTarget(this.spyTarget);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { SpyTargetDirective } from './spy-target.directive';\nimport { SpyOnDirective } from './spy-on.directive';\n\n@NgModule({\n    imports: [\n        SpyTargetDirective, SpyOnDirective\n    ],\n    exports: [SpyTargetDirective, SpyOnDirective]\n})\nexport class ScrollSpyModule { }\n","/*\n * Public API Surface of scroll-spy\n */\n\nexport * from './lib/scroll-spy.service';\nexport * from './lib/tokens/resize-threshold.token';\nexport * from './lib/tokens/scroll-threshold.token';\nexport * from './lib/spy-on.directive';\nexport * from './lib/spy-target.directive';\nexport * from './lib/scroll-spy.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.WindowService","i1.ScrollSpyService"],"mappings":"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"}