{"version":3,"file":"ngx-scrolltop.mjs","sources":["../../../projects/ngx-scrolltop/src/lib/ngx-scrolltop.core.service.ts","../../../projects/ngx-scrolltop/src/lib/ngx-scrolltop.component.ts","../../../projects/ngx-scrolltop/src/lib/ngx-scrolltop.component.html","../../../projects/ngx-scrolltop/src/lib/ngx-scrolltop.directive.ts","../../../projects/ngx-scrolltop/src/lib/ngx-scrolltop.module.ts","../../../projects/ngx-scrolltop/src/public-api.ts","../../../projects/ngx-scrolltop/src/ngx-scrolltop.ts"],"sourcesContent":["import { inject, Injectable, signal, DOCUMENT } from '@angular/core';\nimport { polyfill as smoothscrollPolyfill } from 'seamless-scroll-polyfill';\nimport { NgxScrollTopMode } from './ngx-scrolltop.interface';\n\n@Injectable()\nexport class NgxScrollTopCoreService {\n  private scrolledFromTop = signal(false);\n  private scrollOffset = signal(0);\n  private readonly isBrowser: boolean = typeof window !== 'undefined';\n  private alreadyActivated = signal(false);\n\n  private document = inject(DOCUMENT);\n\n  public onWindowScroll(mode: NgxScrollTopMode): boolean {\n    const position: number =\n      this.document.documentElement?.scrollTop || this.document.scrollingElement?.scrollTop;\n    switch (mode) {\n      case 'classic':\n        return this.classicMode(position);\n      case 'smart':\n        return this.smartMode(position);\n    }\n  }\n\n  private classicMode(position: number): boolean {\n    if (this.isBrowser && position > window.innerHeight) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  private smartMode(position: number): boolean {\n    let show = false;\n\n    if (position === 0) {\n      show = false;\n      this.scrolledFromTop.set(false);\n    }\n\n    if (this.scrolledFromTop() && this.scrollOffset() > position) {\n      show = true;\n    }\n\n    if (this.isBrowser && position > window.innerHeight * 2) {\n      this.scrolledFromTop.set(true);\n      this.scrollOffset.set(position);\n    }\n\n    return show;\n  }\n\n  public scrollToTop(): void {\n    if (this.isBrowser) {\n      // Kick off the polyfill for iOS Safari\n      if (!this.alreadyActivated()) {\n        smoothscrollPolyfill();\n        this.alreadyActivated.set(true);\n      }\n      // Scroll to the top\n      window.scroll({ top: 0, left: 0, behavior: 'smooth' });\n    }\n  }\n}\n","import { NgClass } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  HostListener,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport { NgxScrollTopCoreService } from './ngx-scrolltop.core.service';\nimport {\n  NgxScrollTopMode,\n  NgxScrollTopPosition,\n  NgxScrollTopTheme,\n} from './ngx-scrolltop.interface';\n\n@Component({\n  selector: 'ngx-scrolltop',\n  templateUrl: './ngx-scrolltop.component.html',\n  styleUrls: ['./ngx-scrolltop.component.scss'],\n  imports: [NgClass],\n  providers: [NgxScrollTopCoreService],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class NgxScrollTopComponent {\n  public backgroundColor = input<string>();\n  public symbolColor = input<string>();\n  public size = input<number>();\n  public position = input<NgxScrollTopPosition>('right');\n  public theme = input<NgxScrollTopTheme>('gray');\n  public mode = input<NgxScrollTopMode>('classic');\n\n  public show = signal(false);\n\n  private readonly core = inject(NgxScrollTopCoreService);\n\n  @HostListener('window:scroll')\n  public onWindowScroll(): void {\n    const show = this.core.onWindowScroll(this.mode());\n\n    // Performance boost. Only update the state if it has changed.\n    if (this.show() !== show) {\n      this.show.set(show);\n    }\n  }\n\n  public scrollToTop(): void {\n    this.core.scrollToTop();\n  }\n}\n","@if (show()) {\n  <button\n    type=\"button\"\n    role=\"button\"\n    aria-label=\"Scroll to top of the page\"\n    tabindex=\"0\"\n    class=\"scrolltop-button\"\n    #scrollTopButton\n    (click)=\"scrollToTop()\"\n    [ngClass]=\"theme()\"\n    [style.left]=\"position() === 'left' ? '20px' : ''\"\n    [style.backgroundColor]=\"backgroundColor()\"\n    [style.width.px]=\"size()\"\n    [style.height.px]=\"size()\">\n    <div class=\"symbol-container\">\n      <span #ref>\n        <ng-content></ng-content>\n      </span>\n      @if (ref.childNodes.length === 0) {\n        <svg \n          aria-hidden=\"true\"\n          [style.fill]=\"symbolColor()\"\n          focusable=\"false\"\n          role=\"img\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 448 512\">\n          <path\n            d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\">\n          </path>\n        </svg>\n      }\n    </div>\n  </button>\n}","import { Directive, ElementRef, HostListener, inject, input, signal } from '@angular/core';\nimport { NgxScrollTopCoreService } from './ngx-scrolltop.core.service';\nimport { NgxScrollTopMode } from './ngx-scrolltop.interface';\n\n@Directive({\n  selector: '[ngxScrollTop]',\n  standalone: true,\n  providers: [NgxScrollTopCoreService],\n})\nexport class NgxScrollTopDirective {\n  public mode = input<NgxScrollTopMode>('classic', { alias: 'ngxScrollTopMode' });\n\n  private show = signal(false);\n\n  private el = inject(ElementRef);\n  private core = inject(NgxScrollTopCoreService);\n\n  constructor() {\n    this.hideElement();\n  }\n\n  @HostListener('window:scroll')\n  public onWindowScroll(): void {\n    const show = this.core.onWindowScroll(this.mode());\n\n    // Performance boost. Only update the DOM when the state changes.\n    if (this.show() !== show) {\n      show ? this.showElement() : this.hideElement();\n      this.show.set(show);\n    }\n  }\n\n  @HostListener('click')\n  public onClick(): void {\n    this.scrollToTop();\n  }\n\n  private hideElement(): void {\n    this.el.nativeElement.style.display = 'none';\n  }\n\n  private showElement(): void {\n    this.el.nativeElement.style.display = '';\n  }\n\n  private scrollToTop(): void {\n    this.core.scrollToTop();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NgxScrollTopComponent } from './ngx-scrolltop.component';\nimport { NgxScrollTopCoreService } from './ngx-scrolltop.core.service';\nimport { NgxScrollTopDirective } from './ngx-scrolltop.directive';\n\n@NgModule({\n  imports: [CommonModule, NgxScrollTopComponent, NgxScrollTopDirective],\n  providers: [NgxScrollTopCoreService],\n  exports: [NgxScrollTopComponent, NgxScrollTopDirective],\n})\nexport class NgxScrollTopModule { }\n","/*\n * Public API Surface of ngx-scrolltop\n */\n\nexport * from './lib/ngx-scrolltop.component';\nexport * from './lib/ngx-scrolltop.directive';\nexport * from './lib/ngx-scrolltop.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["smoothscrollPolyfill"],"mappings":"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"}