{"version":3,"file":"ngx-page-scroll.mjs","sources":["../../../projects/ngx-page-scroll/src/lib/ngx-page-scroll.directive.ts","../../../projects/ngx-page-scroll/src/lib/ngx-page-scroll.module.ts","../../../projects/ngx-page-scroll/src/public-api.ts","../../../projects/ngx-page-scroll/src/ngx-page-scroll.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/directive-selector */\n\nimport { Directive, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges, DOCUMENT, inject } from '@angular/core';\nimport { NavigationCancel, NavigationEnd, NavigationError, Router, UrlTree } from '@angular/router';\n\n\nimport { EasingLogic, PageScrollInstance, PageScrollOptions, PageScrollService } from 'ngx-page-scroll-core';\nimport { filter, take } from 'rxjs/operators';\n\n@Directive({\n    selector: '[pageScroll]',\n    host: {\n        '(click)': 'handleClick($event)',\n    }\n})\nexport class NgxPageScrollDirective implements OnChanges, OnDestroy {\n  private readonly pageScrollService = inject(PageScrollService);\n  private readonly router = inject(Router, { optional: true });\n\n\n  @Input()\n  public routerLink;\n\n  @Input()\n  public href: string;\n\n  @Input()\n  public fragment: string;\n\n  @Input()\n  public pageScrollTarget: string;\n\n  @Input()\n  public pageScrollHorizontal: boolean;\n\n  @Input()\n  public pageScrollOffset: number;\n\n  @Input()\n  public pageScrollDuration: number;\n\n  @Input()\n  public pageScrollSpeed: number;\n\n  @Input()\n  public pageScrollEasing: EasingLogic;\n\n  @Input()\n  public pageScrollInterruptible: boolean;\n\n  @Input()\n  public pageScrollInView: boolean;\n\n  @Input()\n  public pageScrollAdjustHash = false;\n\n  @Input()\n  public pageScroll: string;\n\n  @Output()\n  pageScrollFinish: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  private pageScrollInstance: PageScrollInstance;\n  private readonly document: Document;\n\n  constructor() {\n    const document = inject(DOCUMENT);\n\n    this.document = (document as Document);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {// eslint-disable-line @typescript-eslint/no-unused-vars\n    // Some inputs changed, reset the pageScrollInstance\n    this.pageScrollInstance = undefined;\n  }\n\n  ngOnDestroy(): void {\n    if (this.pageScrollInstance) {\n      this.pageScrollService.stop(this.pageScrollInstance);\n    }\n  }\n\n  private getPageScrollTarget(): string {\n    return this.pageScrollTarget || this.href || (this.fragment ? '#' + this.fragment : '');\n  }\n\n  private generatePageScrollInstance(): PageScrollInstance {\n    if (this.pageScrollInstance === undefined || this.pageScrollInstance === null) {\n      const options: PageScrollOptions = {\n        document: this.document,\n        scrollTarget: this.getPageScrollTarget(),\n      };\n\n      if (this.pageScroll) {\n        options.namespace = this.pageScroll;\n      }\n      if (this.pageScrollHorizontal !== undefined && this.pageScrollHorizontal !== null) {\n        options.verticalScrolling = !this.pageScrollHorizontal;\n      }\n      if (this.pageScrollOffset !== undefined && this.pageScrollOffset !== null) {\n        options.scrollOffset = this.pageScrollOffset;\n      }\n      if (this.pageScrollInterruptible !== undefined && this.pageScrollInterruptible !== null) {\n        options.interruptible = this.pageScrollInterruptible;\n      }\n      if (this.pageScrollInView !== undefined && this.pageScrollInView !== null) {\n        options.scrollInView = this.pageScrollInView;\n      }\n      if (this.pageScrollEasing) {\n        options.easingLogic = this.pageScrollEasing;\n      }\n      if (this.pageScrollDuration !== undefined && this.pageScrollDuration !== null) {\n        options.duration = this.pageScrollDuration;\n      }\n      if (this.pageScrollSpeed !== undefined && this.pageScrollSpeed !== null) {\n        options.speed = this.pageScrollSpeed;\n      }\n      if (this.pageScrollFinish) {\n        options.scrollFinishListener = this.pageScrollFinish;\n      }\n      this.pageScrollInstance = this.pageScrollService.create(options);\n    }\n\n    return this.pageScrollInstance;\n  }\n\n  private pushRouterState(): void {\n    if (this.pageScrollAdjustHash && typeof this.pageScrollInstance.pageScrollOptions.scrollTarget === 'string'\n      && (this.pageScrollInstance.pageScrollOptions.scrollTarget as string).substr(0, 1) === '#') {\n      // \"Navigate\" to the current route again and this time set the fragment/hash\n      this.router.navigate([], {\n        fragment: (this.pageScrollInstance.pageScrollOptions.scrollTarget as string).substr(1),\n        queryParamsHandling: 'preserve',\n      });\n    }\n  }\n\n  private scroll(): void {\n    const pageScrollInstance = this.generatePageScrollInstance();\n    this.pushRouterState();\n    this.pageScrollService.start(pageScrollInstance);\n  }\n\n  public handleClick(clickEvent: Event): boolean { // eslint-disable-line @typescript-eslint/no-unused-vars\n    if (this.routerLink && this.router !== null && this.router !== undefined) {\n      let urlTree: UrlTree;\n      if (typeof this.routerLink === 'string') {\n        urlTree = this.router.parseUrl(this.routerLink);\n      } else {\n        urlTree = this.router.createUrlTree(this.routerLink);\n      }\n      if (!this.router.isActive(urlTree, true)) {\n        // We need to navigate their first.\n        // Navigation is handled by the routerLink directive so we only need to listen for route change\n        this.router.events.pipe(filter(routerEvent => {\n            // We're only interested in successful navigations or when the navigation fails\n            return routerEvent instanceof NavigationEnd || routerEvent instanceof NavigationError\n              || routerEvent instanceof NavigationCancel;\n          }),\n          // Consume only one event, automatically \"unsubscribing\" from the event stream afterwards\n          take(1)\n        ).subscribe((routerEvent) => {\n          if (routerEvent instanceof NavigationEnd) {\n            // use a timeout to start scrolling as soon as the stack is cleared\n            setTimeout(() => {\n              this.scroll();\n            }, 0);\n          }\n        });\n\n        return false; // to preventDefault()\n      }\n    }\n    this.scroll();\n\n    return false; // to preventDefault()\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { NgxPageScrollCoreModule } from 'ngx-page-scroll-core';\n\nimport { NgxPageScrollDirective } from './ngx-page-scroll.directive';\n\n@NgModule({\n    imports: [\n        NgxPageScrollCoreModule,\n        NgxPageScrollDirective,\n    ],\n    exports: [\n        NgxPageScrollDirective,\n    ],\n})\nexport class NgxPageScrollModule {\n}\n","/*\n * Public API Surface of ngx-page-scroll\n */\n\nexport { NgxPageScrollModule } from './lib/ngx-page-scroll.module';\n\nexport { NgxPageScrollDirective } from './lib/ngx-page-scroll.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}