{"version":3,"file":"angular-disable-browser-back-button.mjs","sources":["../../src/public_api.ts","../../src/angular-disable-browser-back-button.ts"],"sourcesContent":["import { NgModule, Injectable, ModuleWithProviders, InjectionToken, inject } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\n\nconst _window = (): Window => window;\nconst SCROLL_TOKEN = new InjectionToken('preserveScroll')\n\n@Injectable()\nexport class WindowRef {\n  get nativeWindow(): any {\n    return _window();\n  }\n}\n\n@NgModule({\n  providers: [WindowRef]\n})\nexport class BackButtonDisableModule {\n\n  private preserveScroll = inject(SCROLL_TOKEN) || false;\n  private window: Window;\n  private scrollX = 0;\n  private scrollY = 0;\n\n  constructor(\n    private router: Router,\n    private windowRef: WindowRef,\n  ) {\n    this.window = this.windowRef.nativeWindow\n    this.disableBackButton();\n    this.addPopStateEventListener();\n  }\n\n  static forRoot(config?: { preserveScroll: boolean }): ModuleWithProviders<BackButtonDisableModule> {\n    return {\n      ngModule: BackButtonDisableModule,\n      providers: [\n        {\n          provide: SCROLL_TOKEN,\n          useValue: config?.preserveScroll || false,\n        }\n      ]\n    }\n  }\n\n  private addPopStateEventListener(): void {\n    this.window.addEventListener('popstate', () => {\n      if (this.preserveScroll) this.getScrollCoordinates();\n      this.window.history.pushState(null, null, null);\n      if (this.preserveScroll) setTimeout(this.scrollToThePreviousPosition.bind(this));\n    });\n  }\n\n  private scrollToThePreviousPosition(): void {\n    this.window.scrollTo(this.scrollX, this.scrollY);\n  }\n\n  private getScrollCoordinates(): void {\n    this.scrollX = this.window.scrollX;\n    this.scrollY = this.window.scrollY;\n  }\n\n  private disableBackButton(): void {\n    this.window.history.pushState(null, null, null);\n    this.router.events.subscribe(event => {\n      if (event instanceof NavigationEnd) {\n        this.window.history.pushState(null, null, null);\n      };\n    });\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}