{"version":3,"file":"ngx-back-button.mjs","sources":["../../../projects/ngx-back-button/src/lib/ngx-back-button.const.ts","../../../projects/ngx-back-button/src/lib/ngx-back-button.service.ts","../../../projects/ngx-back-button/src/lib/ngx-back-button.directive.ts","../../../projects/ngx-back-button/src/public-api.ts","../../../projects/ngx-back-button/src/ngx-back-button.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { NgxBackButtonServiceConfig } from './ngx-back-button.interface'\n\nexport const NgxBackButtonServiceProvider = new InjectionToken<NgxBackButtonServiceConfig>(\n  'NgxBackButtonServiceConfig',\n)\n","import { Location } from '@angular/common'\nimport { inject, Injectable } from '@angular/core'\nimport { NavigationEnd, Router } from '@angular/router'\nimport { filter, skip } from 'rxjs'\nimport { NgxBackButtonServiceProvider } from './ngx-back-button.const'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NgxBackButtonService {\n  readonly #router = inject(Router)\n  readonly #location = inject(Location)\n  readonly #config = inject(NgxBackButtonServiceProvider, { optional: true })\n\n  private _history: string[] = []\n  private _rootUrl!: string // Default Fallback in case we do not have any navigation history\n  private _fallbackPrefix!: string // Always added in case of a Fallback (Useful when used within other libraries)\n\n  private _navigatingBack = false\n\n  constructor() {\n    this._rootUrl = this.#config?.rootUrl || ''\n    this._fallbackPrefix = this.#config?.fallbackPrefix || ''\n\n    this.#router.events\n      .pipe(\n        filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n        skip(1), // Skip the first event (initial load)\n      )\n      .subscribe((event) => {\n        if (!this._navigatingBack) this._history.push(event.urlAfterRedirects)\n\n        this._navigatingBack = false\n      })\n  }\n\n  getHistory(): string[] {\n    return this._history\n  }\n\n  /**\n   *\n   * @param fallback\n   * @return Boolean: True === Had an history to go back to\n   */\n  back(fallback?: string): boolean {\n    this._navigatingBack = true\n    const record = this._history.pop()\n\n    if (this._history.length > 0) {\n      this.#location.back()\n      return true\n    } else {\n      try {\n        window.history.replaceState(null, '', this._fallbackPrefix + (fallback || this._rootUrl))\n      } catch (error) {\n        console.error('NgxBackButton: ' + error)\n      }\n\n      window.history.pushState(null, '', record ?? this.#router.url)\n      this.#location.back()\n      return false\n    }\n  }\n}\n","import { Directive, HostListener, Input } from '@angular/core'\nimport { NgxBackButtonService } from './ngx-back-button.service'\n\n@Directive({\n  selector: '[ngxBackButton]',\n})\nexport class NgxBackButtonDirective {\n  @Input() ngxBackButton?: string\n\n  constructor(private _ngxBackButtonService: NgxBackButtonService) {}\n\n  @HostListener('click')\n  onClick(): void {\n    this._ngxBackButtonService.back(this.ngxBackButton)\n  }\n}\n","/*\n * Public API Surface of ngx-back-button\n */\n\nexport * from './lib/ngx-back-button.const'\nexport * from './lib/ngx-back-button.directive'\nexport * from './lib/ngx-back-button.service'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxBackButtonService"],"mappings":"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"}