{"version":3,"file":"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/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) {\n    let activeTarget: SpyTarget = null;\n\n    for (const target of this.spyTargets) {\n      const activeElement = activeTarget != null ? activeTarget.element : null;\n      if (this.isElementActive(target.element, scrollContainer, activeElement)) {\n        activeTarget = target;\n      }\n    }\n\n    this.activeSpyTarget$.next(activeTarget ? activeTarget.name : null);\n  }\n\n  isElementActive(element: ElementRef, scrollContainer?: ElementRef, 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    const hasContainer = (scrollContainer != null);\n\n    const isInsideWindow = this.isElementInsideWindow(hasContainer, targetHeight, targetOffsetTop);\n\n    if (isInsideWindow && !hasContainer) {\n      return true;\n    }\n\n    return isInsideWindow && hasContainer && this.isElementInsiedScrollContainer(scrollContainer, targetHeight, targetOffsetTop);\n  }\n\n  private isElementInsideWindow(hasContainer: boolean, 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 (hasContainer) {\n      return elementOffsetTop + elementHeight > scrollTop\n      && elementOffsetTop < scrollTop + viewportHeight;\n    }\n\n    return elementOffsetTop + elementHeight > scrollTop + this.thresholdTop\n    && elementOffsetTop < scrollTop + viewportHeight - this.thresholdBottom;\n  }\n\n  private isElementInsiedScrollContainer(container: ElementRef, elementHeight: number, elementOffsetTop: number) {\n    const scrollContainerScrollTop = this.windowService.getElementScrollTop(container);\n    const scrollContainerHeight = this.windowService.getElementHeight(container);\n    const elementOffsetTopFromParent = elementOffsetTop - this.windowService.getElementOffsetTop(container);\n\n    // element bottom edge is below container top edge && element top edge is above container bottom edge\n    return elementOffsetTopFromParent + elementHeight > scrollContainerScrollTop + this.thresholdTop\n      && elementOffsetTopFromParent < scrollContainerScrollTop + scrollContainerHeight - 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})\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})\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  declarations: [SpyTargetDirective, SpyOnDirective],\n  imports: [\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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"}