{"version":3,"file":"ionic-angular-common.mjs","sources":["../../common/src/providers/dom-controller.ts","../../common/src/providers/menu-controller.ts","../../common/src/providers/platform.ts","../../common/src/providers/nav-controller.ts","../../common/src/providers/config.ts","../../common/src/directives/navigation/nav-params.ts","../../common/src/providers/angular-delegate.ts","../../common/src/utils/proxy.ts","../../common/src/overlays/modal.ts","../../common/src/overlays/popover.ts","../../common/src/directives/navigation/stack-utils.ts","../../common/src/directives/navigation/stack-controller.ts","../../common/src/directives/navigation/router-outlet.ts","../../common/src/utils/util.ts","../../common/src/directives/control-value-accessors/value-accessor.ts","../../common/src/directives/navigation/back-button.ts","../../common/src/directives/navigation/nav.ts","../../common/src/directives/navigation/router-link-delegate.ts","../../common/src/directives/navigation/tabs.ts","../../common/src/utils/overlay.ts","../../common/src/utils/routing.ts","../../common/src/ionic-angular-common.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DomController {\n  /**\n   * Schedules a task to run during the READ phase of the next frame.\n   * This task should only read the DOM, but never modify it.\n   */\n  read(cb: RafCallback): void {\n    getQueue().read(cb);\n  }\n\n  /**\n   * Schedules a task to run during the WRITE phase of the next frame.\n   * This task should write the DOM, but never READ it.\n   */\n  write(cb: RafCallback): void {\n    getQueue().write(cb);\n  }\n}\n\nconst getQueue = () => {\n  const win = typeof (window as any) !== 'undefined' ? window : (null as any);\n\n  if (win != null) {\n    const Ionic = win.Ionic;\n    if (Ionic?.queue) {\n      return Ionic.queue;\n    }\n\n    return {\n      read: (cb: any) => win.requestAnimationFrame(cb),\n      write: (cb: any) => win.requestAnimationFrame(cb),\n    };\n  }\n\n  return {\n    read: (cb: any) => cb(),\n    write: (cb: any) => cb(),\n  };\n};\n\nexport type RafCallback = (timeStamp?: number) => void;\n","import type { MenuControllerI, AnimationBuilder, MenuI, Animation } from '@ionic/core/components';\n\nexport class MenuController implements MenuControllerI {\n  constructor(private menuController: MenuControllerI) {}\n\n  /**\n   * Programmatically open the Menu.\n   * @param [menuId]  Optionally get the menu by its id, or side.\n   * @return returns a promise when the menu is fully opened\n   */\n  open(menuId?: string): Promise<boolean> {\n    return this.menuController.open(menuId);\n  }\n\n  /**\n   * Programmatically close the Menu. If no `menuId` is given as the first\n   * argument then it'll close any menu which is open. If a `menuId`\n   * is given then it'll close that exact menu.\n   * @param [menuId]  Optionally get the menu by its id, or side.\n   * @return returns a promise when the menu is fully closed\n   */\n  close(menuId?: string): Promise<boolean> {\n    return this.menuController.close(menuId);\n  }\n\n  /**\n   * Toggle the menu. If it's closed, it will open, and if opened, it\n   * will close.\n   * @param [menuId]  Optionally get the menu by its id, or side.\n   * @return returns a promise when the menu has been toggled\n   */\n  toggle(menuId?: string): Promise<boolean> {\n    return this.menuController.toggle(menuId);\n  }\n\n  /**\n   * Used to enable or disable a menu. For example, there could be multiple\n   * left menus, but only one of them should be able to be opened at the same\n   * time. If there are multiple menus on the same side, then enabling one menu\n   * will also automatically disable all the others that are on the same side.\n   * @param [menuId]  Optionally get the menu by its id, or side.\n   * @return Returns the instance of the menu, which is useful for chaining.\n   */\n  enable(shouldEnable: boolean, menuId?: string): Promise<HTMLIonMenuElement | undefined> {\n    return this.menuController.enable(shouldEnable, menuId);\n  }\n\n  /**\n   * Used to enable or disable the ability to swipe open the menu.\n   * @param shouldEnable  True if it should be swipe-able, false if not.\n   * @param [menuId]  Optionally get the menu by its id, or side.\n   * @return Returns the instance of the menu, which is useful for chaining.\n   */\n  swipeGesture(shouldEnable: boolean, menuId?: string): Promise<HTMLIonMenuElement | undefined> {\n    return this.menuController.swipeGesture(shouldEnable, menuId);\n  }\n\n  /**\n   * @param [menuId] Optionally get the menu by its id, or side.\n   * @return Returns true if the specified menu is currently open, otherwise false.\n   * If the menuId is not specified, it returns true if ANY menu is currenly open.\n   */\n  isOpen(menuId?: string): Promise<boolean> {\n    return this.menuController.isOpen(menuId);\n  }\n\n  /**\n   * @param [menuId]  Optionally get the menu by its id, or side.\n   * @return Returns true if the menu is currently enabled, otherwise false.\n   */\n  isEnabled(menuId?: string): Promise<boolean> {\n    return this.menuController.isEnabled(menuId);\n  }\n\n  /**\n   * Used to get a menu instance. If a `menuId` is not provided then it'll\n   * return the first menu found. If a `menuId` is `left` or `right`, then\n   * it'll return the enabled menu on that side. Otherwise, if a `menuId` is\n   * provided, then it'll try to find the menu using the menu's `id`\n   * property. If a menu is not found then it'll return `null`.\n   * @param [menuId]  Optionally get the menu by its id, or side.\n   * @return Returns the instance of the menu if found, otherwise `null`.\n   */\n  get(menuId?: string): Promise<HTMLIonMenuElement | undefined> {\n    return this.menuController.get(menuId);\n  }\n\n  /**\n   * @return Returns the instance of the menu already opened, otherwise `null`.\n   */\n  getOpen(): Promise<HTMLIonMenuElement | undefined> {\n    return this.menuController.getOpen();\n  }\n\n  /**\n   * @return Returns an array of all menu instances.\n   */\n  getMenus(): Promise<HTMLIonMenuElement[]> {\n    return this.menuController.getMenus();\n  }\n\n  registerAnimation(name: string, animation: AnimationBuilder): void {\n    return this.menuController.registerAnimation(name, animation);\n  }\n\n  isAnimating(): Promise<boolean> {\n    return this.menuController.isAnimating();\n  }\n\n  _getOpenSync(): HTMLIonMenuElement | undefined {\n    return this.menuController._getOpenSync();\n  }\n\n  _createAnimation(type: string, menuCmp: MenuI): Promise<Animation> {\n    return this.menuController._createAnimation(type, menuCmp);\n  }\n\n  _register(menu: MenuI): void {\n    return this.menuController._register(menu);\n  }\n\n  _unregister(menu: MenuI): void {\n    return this.menuController._unregister(menu);\n  }\n\n  _setOpen(menu: MenuI, shouldOpen: boolean, animated: boolean): Promise<boolean> {\n    return this.menuController._setOpen(menu, shouldOpen, animated);\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { NgZone, Inject, Injectable } from '@angular/core';\nimport { getPlatforms, isPlatform } from '@ionic/core/components';\nimport type { BackButtonEventDetail, KeyboardEventDetail, Platforms } from '@ionic/core/components';\nimport { Subscription, Subject } from 'rxjs';\n\n// TODO(FW-2827): types\n\nexport interface BackButtonEmitter extends Subject<BackButtonEventDetail> {\n  subscribeWithPriority(\n    priority: number,\n    callback: (processNextHandler: () => void) => Promise<any> | void\n  ): Subscription;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class Platform {\n  private _readyPromise: Promise<string>;\n  private win: any;\n\n  /**\n   * @hidden\n   */\n  backButton = new Subject<BackButtonEventDetail>() as BackButtonEmitter;\n\n  /**\n   * The keyboardDidShow event emits when the\n   * on-screen keyboard is presented.\n   */\n  keyboardDidShow = new Subject<KeyboardEventDetail>();\n\n  /**\n   * The keyboardDidHide event emits when the\n   * on-screen keyboard is hidden.\n   */\n  keyboardDidHide = new Subject<void>();\n\n  /**\n   * The pause event emits when the native platform puts the application\n   * into the background, typically when the user switches to a different\n   * application. This event would emit when a Cordova app is put into\n   * the background, however, it would not fire on a standard web browser.\n   */\n  pause = new Subject<void>();\n\n  /**\n   * The resume event emits when the native platform pulls the application\n   * out from the background. This event would emit when a Cordova app comes\n   * out from the background, however, it would not fire on a standard web browser.\n   */\n  resume = new Subject<void>();\n\n  /**\n   * The resize event emits when the browser window has changed dimensions. This\n   * could be from a browser window being physically resized, or from a device\n   * changing orientation.\n   */\n  resize = new Subject<void>();\n\n  constructor(@Inject(DOCUMENT) private doc: any, zone: NgZone) {\n    zone.run(() => {\n      this.win = doc.defaultView;\n      this.backButton.subscribeWithPriority = function (priority, callback) {\n        return this.subscribe((ev) => {\n          return ev.register(priority, (processNextHandler) => zone.run(() => callback(processNextHandler)));\n        });\n      };\n\n      proxyEvent(this.pause, doc, 'pause', zone);\n      proxyEvent(this.resume, doc, 'resume', zone);\n      proxyEvent(this.backButton, doc, 'ionBackButton', zone);\n      proxyEvent(this.resize, this.win, 'resize', zone);\n      proxyEvent(this.keyboardDidShow, this.win, 'ionKeyboardDidShow', zone);\n      proxyEvent(this.keyboardDidHide, this.win, 'ionKeyboardDidHide', zone);\n\n      let readyResolve: (value: string) => void;\n      this._readyPromise = new Promise((res) => {\n        readyResolve = res;\n      });\n      if (this.win?.['cordova']) {\n        doc.addEventListener(\n          'deviceready',\n          () => {\n            readyResolve('cordova');\n          },\n          { once: true }\n        );\n      } else {\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        readyResolve!('dom');\n      }\n    });\n  }\n\n  /**\n   * @returns returns true/false based on platform.\n   * @description\n   * Depending on the platform the user is on, `is(platformName)` will\n   * return `true` or `false`. Note that the same app can return `true`\n   * for more than one platform name. For example, an app running from\n   * an iPad would return `true` for the platform names: `mobile`,\n   * `ios`, `ipad`, and `tablet`. Additionally, if the app was running\n   * from Cordova then `cordova` would be true, and if it was running\n   * from a web browser on the iPad then `mobileweb` would be `true`.\n   *\n   * ```\n   * import { Platform } from 'ionic-angular';\n   *\n   * @Component({...})\n   * export MyPage {\n   *   constructor(public platform: Platform) {\n   *     if (this.platform.is('ios')) {\n   *       // This will only print when on iOS\n   *       console.log('I am an iOS device!');\n   *     }\n   *   }\n   * }\n   * ```\n   *\n   * | Platform Name   | Description                        |\n   * |-----------------|------------------------------------|\n   * | android         | on a device running Android.       |\n   * | capacitor       | on a device running Capacitor.     |\n   * | cordova         | on a device running Cordova.       |\n   * | ios             | on a device running iOS.           |\n   * | ipad            | on an iPad device.                 |\n   * | iphone          | on an iPhone device.               |\n   * | phablet         | on a phablet device.               |\n   * | tablet          | on a tablet device.                |\n   * | electron        | in Electron on a desktop device.   |\n   * | pwa             | as a PWA app.                      |\n   * | mobile          | on a mobile device.                |\n   * | mobileweb       | on a mobile device in a browser.   |\n   * | desktop         | on a desktop device.               |\n   * | hybrid          | is a cordova or capacitor app.     |\n   *\n   */\n  is(platformName: Platforms): boolean {\n    return isPlatform(this.win, platformName);\n  }\n\n  /**\n   * @returns the array of platforms\n   * @description\n   * Depending on what device you are on, `platforms` can return multiple values.\n   * Each possible value is a hierarchy of platforms. For example, on an iPhone,\n   * it would return `mobile`, `ios`, and `iphone`.\n   *\n   * ```\n   * import { Platform } from 'ionic-angular';\n   *\n   * @Component({...})\n   * export MyPage {\n   *   constructor(public platform: Platform) {\n   *     // This will print an array of the current platforms\n   *     console.log(this.platform.platforms());\n   *   }\n   * }\n   * ```\n   */\n  platforms(): string[] {\n    return getPlatforms(this.win);\n  }\n\n  /**\n   * Returns a promise when the platform is ready and native functionality\n   * can be called. If the app is running from within a web browser, then\n   * the promise will resolve when the DOM is ready. When the app is running\n   * from an application engine such as Cordova, then the promise will\n   * resolve when Cordova triggers the `deviceready` event.\n   *\n   * The resolved value is the `readySource`, which states which platform\n   * ready was used. For example, when Cordova is ready, the resolved ready\n   * source is `cordova`. The default ready source value will be `dom`. The\n   * `readySource` is useful if different logic should run depending on the\n   * platform the app is running from. For example, only Cordova can execute\n   * the status bar plugin, so the web should not run status bar plugin logic.\n   *\n   * ```\n   * import { Component } from '@angular/core';\n   * import { Platform } from 'ionic-angular';\n   *\n   * @Component({...})\n   * export MyApp {\n   *   constructor(public platform: Platform) {\n   *     this.platform.ready().then((readySource) => {\n   *       console.log('Platform ready from', readySource);\n   *       // Platform now ready, execute any required native code\n   *     });\n   *   }\n   * }\n   * ```\n   */\n  ready(): Promise<string> {\n    return this._readyPromise;\n  }\n\n  /**\n   * Returns if this app is using right-to-left language direction or not.\n   * We recommend the app's `index.html` file already has the correct `dir`\n   * attribute value set, such as `<html dir=\"ltr\">` or `<html dir=\"rtl\">`.\n   * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)\n   */\n  get isRTL(): boolean {\n    return this.doc.dir === 'rtl';\n  }\n\n  /**\n   * Get the query string parameter\n   */\n  getQueryParam(key: string): string | null {\n    return readQueryParam(this.win.location.href, key);\n  }\n\n  /**\n   * Returns `true` if the app is in landscape mode.\n   */\n  isLandscape(): boolean {\n    return !this.isPortrait();\n  }\n\n  /**\n   * Returns `true` if the app is in portrait mode.\n   */\n  isPortrait(): boolean {\n    return this.win.matchMedia?.('(orientation: portrait)').matches;\n  }\n\n  testUserAgent(expression: string): boolean {\n    const nav = this.win.navigator;\n    return !!(nav?.userAgent && nav.userAgent.indexOf(expression) >= 0);\n  }\n\n  /**\n   * Get the current url.\n   */\n  url(): string {\n    return this.win.location.href;\n  }\n\n  /**\n   * Gets the width of the platform's viewport using `window.innerWidth`.\n   */\n  width(): number {\n    return this.win.innerWidth;\n  }\n\n  /**\n   * Gets the height of the platform's viewport using `window.innerHeight`.\n   */\n  height(): number {\n    return this.win.innerHeight;\n  }\n}\n\nconst readQueryParam = (url: string, key: string) => {\n  key = key.replace(/[[\\]\\\\]/g, '\\\\$&');\n  const regex = new RegExp('[\\\\?&]' + key + '=([^&#]*)');\n  const results = regex.exec(url);\n  return results ? decodeURIComponent(results[1].replace(/\\+/g, ' ')) : null;\n};\n\nconst proxyEvent = <T>(emitter: Subject<T>, el: EventTarget, eventName: string, zone: NgZone) => {\n  if (el) {\n    el.addEventListener(eventName, (ev) => {\n      /**\n       * `zone.run` is required to make sure that we are running inside the Angular zone\n       * at all times. This is necessary since an app that has Capacitor will\n       * override the `document.addEventListener` with its own implementation.\n       * The override causes the event to no longer be in the Angular zone.\n       */\n      zone.run(() => {\n        // ?? cordova might emit \"null\" events\n        const value = ev != null ? (ev as any).detail : undefined;\n        emitter.next(value);\n      });\n    });\n  }\n};\n","import { Location } from '@angular/common';\nimport { Injectable, Optional } from '@angular/core';\nimport {\n  NavigationExtras,\n  Router,\n  UrlSerializer,\n  UrlTree,\n  NavigationStart,\n  NavigationCancel,\n  NavigationError,\n} from '@angular/router';\nimport type { AnimationBuilder, NavDirection, RouterDirection } from '@ionic/core/components';\n\nimport { IonRouterOutlet } from '../directives/navigation/router-outlet';\n\nimport { Platform } from './platform';\n\nexport interface AnimationOptions {\n  animated?: boolean;\n  animation?: AnimationBuilder;\n  animationDirection?: 'forward' | 'back';\n}\n\nexport interface NavigationOptions extends NavigationExtras, AnimationOptions {}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NavController {\n  private topOutlet?: IonRouterOutlet;\n  private direction: 'forward' | 'back' | 'root' | 'auto' = DEFAULT_DIRECTION;\n  private animated?: NavDirection = DEFAULT_ANIMATED;\n  private animationBuilder?: AnimationBuilder;\n  private guessDirection: RouterDirection = 'forward';\n  private guessAnimation?: NavDirection;\n  private lastNavId = -1;\n\n  constructor(\n    platform: Platform,\n    private location: Location,\n    private serializer: UrlSerializer,\n    @Optional() private router?: Router\n  ) {\n    // Subscribe to router events to detect direction\n    if (router) {\n      router.events.subscribe((ev) => {\n        if (ev instanceof NavigationStart) {\n          // restoredState is set if the browser back/forward button is used\n          const id = ev.restoredState ? ev.restoredState.navigationId : ev.id;\n          this.guessDirection = this.guessAnimation = id < this.lastNavId ? 'back' : 'forward';\n          this.lastNavId = this.guessDirection === 'forward' ? ev.id : id;\n        }\n\n        // Reset explicit direction when navigation is canceled (e.g., guard rejection)\n        // to prevent stale direction from leaking into the next navigation\n        if (ev instanceof NavigationCancel || ev instanceof NavigationError) {\n          this.direction = DEFAULT_DIRECTION;\n          this.animated = DEFAULT_ANIMATED;\n          this.animationBuilder = undefined;\n        }\n      });\n    }\n\n    // Subscribe to backButton events\n    platform.backButton.subscribeWithPriority(0, (processNextHandler) => {\n      this.pop();\n      processNextHandler();\n    });\n  }\n\n  /**\n   * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,\n   * it's equivalent to calling `this.router.navigateByUrl()`, but it's explicit about the **direction** of the transition.\n   *\n   * Going **forward** means that a new page is going to be pushed to the stack of the outlet (ion-router-outlet),\n   * and that it will show a \"forward\" animation by default.\n   *\n   * Navigating forward can also be triggered in a declarative manner by using the `[routerDirection]` directive:\n   *\n   * ```html\n   * <a routerLink=\"/path/to/page\" routerDirection=\"forward\">Link</a>\n   * ```\n   */\n  navigateForward(url: string | UrlTree | any[], options: NavigationOptions = {}): Promise<boolean> {\n    this.setDirection('forward', options.animated, options.animationDirection, options.animation);\n    return this.navigate(url, options);\n  }\n\n  /**\n   * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,\n   * it's equivalent to calling:\n   *\n   * ```ts\n   * this.navController.setDirection('back');\n   * this.router.navigateByUrl(path);\n   * ```\n   *\n   * Going **back** means that all the pages in the stack until the navigated page is found will be popped,\n   * and that it will show a \"back\" animation by default.\n   *\n   * Navigating back can also be triggered in a declarative manner by using the `[routerDirection]` directive:\n   *\n   * ```html\n   * <a routerLink=\"/path/to/page\" routerDirection=\"back\">Link</a>\n   * ```\n   */\n  navigateBack(url: string | UrlTree | any[], options: NavigationOptions = {}): Promise<boolean> {\n    this.setDirection('back', options.animated, options.animationDirection, options.animation);\n    return this.navigate(url, options);\n  }\n\n  /**\n   * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,\n   * it's equivalent to calling:\n   *\n   * ```ts\n   * this.navController.setDirection('root');\n   * this.router.navigateByUrl(path);\n   * ```\n   *\n   * Going **root** means that all existing pages in the stack will be removed,\n   * and the navigated page will become the single page in the stack.\n   *\n   * Navigating root can also be triggered in a declarative manner by using the `[routerDirection]` directive:\n   *\n   * ```html\n   * <a routerLink=\"/path/to/page\" routerDirection=\"root\">Link</a>\n   * ```\n   */\n  navigateRoot(url: string | UrlTree | any[], options: NavigationOptions = {}): Promise<boolean> {\n    this.setDirection('root', options.animated, options.animationDirection, options.animation);\n    return this.navigate(url, options);\n  }\n\n  /**\n   * Same as [Location](https://angular.io/api/common/Location)'s back() method.\n   * It will use the standard `window.history.back()` under the hood, but featuring a `back` animation\n   * by default.\n   */\n  back(options: AnimationOptions = { animated: true, animationDirection: 'back' }): void {\n    this.setDirection('back', options.animated, options.animationDirection, options.animation);\n    return this.location.back();\n  }\n\n  /**\n   * This methods goes back in the context of Ionic's stack navigation.\n   *\n   * It recursively finds the top active `ion-router-outlet` and calls `pop()`.\n   * This is the recommended way to go back when you are using `ion-router-outlet`.\n   *\n   * Resolves to `true` if it was able to pop.\n   */\n  async pop(): Promise<boolean> {\n    let outlet = this.topOutlet;\n\n    while (outlet) {\n      if (await outlet.pop()) {\n        return true;\n      } else {\n        outlet = outlet.parentOutlet;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * This methods specifies the direction of the next navigation performed by the Angular router.\n   *\n   * `setDirection()` does not trigger any transition, it just sets some flags to be consumed by `ion-router-outlet`.\n   *\n   * It's recommended to use `navigateForward()`, `navigateBack()` and `navigateRoot()` instead of `setDirection()`.\n   */\n  setDirection(\n    direction: RouterDirection,\n    animated?: boolean,\n    animationDirection?: 'forward' | 'back',\n    animationBuilder?: AnimationBuilder\n  ): void {\n    this.direction = direction;\n    this.animated = getAnimation(direction, animated, animationDirection);\n    this.animationBuilder = animationBuilder;\n  }\n\n  /**\n   * @internal\n   */\n  setTopOutlet(outlet: IonRouterOutlet): void {\n    this.topOutlet = outlet;\n  }\n\n  /**\n   * @internal\n   */\n  consumeTransition(): {\n    direction: RouterDirection;\n    animation: NavDirection | undefined;\n    animationBuilder: AnimationBuilder | undefined;\n  } {\n    let direction: RouterDirection = 'root';\n    let animation: NavDirection | undefined;\n    const animationBuilder = this.animationBuilder;\n\n    if (this.direction === 'auto') {\n      direction = this.guessDirection;\n      animation = this.guessAnimation;\n    } else {\n      animation = this.animated;\n      direction = this.direction;\n    }\n    this.direction = DEFAULT_DIRECTION;\n    this.animated = DEFAULT_ANIMATED;\n    this.animationBuilder = undefined;\n\n    return {\n      direction,\n      animation,\n      animationBuilder,\n    };\n  }\n\n  private navigate(url: string | UrlTree | any[], options: NavigationOptions) {\n    if (Array.isArray(url)) {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      return this.router!.navigate(url, options);\n    } else {\n      /**\n       * navigateByUrl ignores any properties that\n       * would change the url, so things like queryParams\n       * would be ignored unless we create a url tree\n       * More Info: https://github.com/angular/angular/issues/18798\n       */\n      const urlTree = this.serializer.parse(url.toString());\n\n      if (options.queryParams !== undefined) {\n        urlTree.queryParams = { ...options.queryParams };\n      }\n\n      if (options.fragment !== undefined) {\n        urlTree.fragment = options.fragment;\n      }\n\n      /**\n       * `navigateByUrl` will still apply `NavigationExtras` properties\n       * that do not modify the url, such as `replaceUrl` which is why\n       * `options` is passed in here.\n       */\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      return this.router!.navigateByUrl(urlTree, options);\n    }\n  }\n}\n\nconst getAnimation = (\n  direction: RouterDirection,\n  animated: boolean | undefined,\n  animationDirection: 'forward' | 'back' | undefined\n): NavDirection | undefined => {\n  if (animated === false) {\n    return undefined;\n  }\n  if (animationDirection !== undefined) {\n    return animationDirection;\n  }\n  if (direction === 'forward' || direction === 'back') {\n    return direction;\n  } else if (direction === 'root' && animated === true) {\n    return 'forward';\n  }\n  return undefined;\n};\n\nconst DEFAULT_DIRECTION = 'auto';\nconst DEFAULT_ANIMATED = undefined;\n","import { Injectable, InjectionToken } from '@angular/core';\nimport type { Config as CoreConfig, IonicConfig } from '@ionic/core/components';\n\nimport { IonicWindow } from '../types/interfaces';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class Config {\n  get(key: keyof IonicConfig, fallback?: any): any {\n    const c = getConfig();\n    if (c) {\n      return c.get(key, fallback);\n    }\n    return null;\n  }\n\n  getBoolean(key: keyof IonicConfig, fallback?: boolean): boolean {\n    const c = getConfig();\n    if (c) {\n      return c.getBoolean(key, fallback);\n    }\n    return false;\n  }\n\n  getNumber(key: keyof IonicConfig, fallback?: number): number {\n    const c = getConfig();\n    if (c) {\n      return c.getNumber(key, fallback);\n    }\n    return 0;\n  }\n}\n\nexport const ConfigToken = new InjectionToken<any>('USERCONFIG');\n\nconst getConfig = (): CoreConfig | null => {\n  if (typeof (window as any) !== 'undefined') {\n    const Ionic = (window as any as IonicWindow).Ionic;\n    if (Ionic?.config) {\n      return Ionic.config;\n    }\n  }\n  return null;\n};\n","/**\n * @description\n * NavParams are an object that exists on a page and can contain data for that particular view.\n * Similar to how data was pass to a view in V1 with `$stateParams`, NavParams offer a much more flexible\n * option with a simple `get` method.\n *\n * @usage\n * ```ts\n * import { NavParams } from '@ionic/angular';\n *\n * export class MyClass{\n *\n *  constructor(navParams: NavParams){\n *    // userParams is an object we have in our nav-parameters\n *    navParams.get('userParams');\n *  }\n *\n * }\n * ```\n */\nexport class NavParams {\n  constructor(public data: { [key: string]: any } = {}) {\n    console.warn(\n      `[Ionic Warning]: NavParams has been deprecated in favor of using Angular's input API. Developers should migrate to either the @Input decorator or the Signals-based input API.`\n    );\n  }\n\n  /**\n   * Get the value of a nav-parameter for the current view\n   *\n   * ```ts\n   * import { NavParams } from 'ionic-angular';\n   *\n   * export class MyClass{\n   *  constructor(public navParams: NavParams){\n   *    // userParams is an object we have in our nav-parameters\n   *    this.navParams.get('userParams');\n   *  }\n   * }\n   * ```\n   *\n   * @param param Which param you want to look up\n   */\n  get<T = any>(param: string): T {\n    return this.data[param];\n  }\n}\n","import {\n  ApplicationRef,\n  ComponentRef,\n  createComponent,\n  EnvironmentInjector,\n  inject,\n  Injectable,\n  InjectionToken,\n  Injector,\n  NgZone,\n} from '@angular/core';\nimport {\n  FrameworkDelegate,\n  LIFECYCLE_DID_ENTER,\n  LIFECYCLE_DID_LEAVE,\n  LIFECYCLE_WILL_ENTER,\n  LIFECYCLE_WILL_LEAVE,\n  LIFECYCLE_WILL_UNLOAD,\n} from '@ionic/core/components';\n\nimport { NavParams } from '../directives/navigation/nav-params';\n\nimport { ConfigToken } from './config';\n\n// Token for injecting the modal element\nexport const IonModalToken = new InjectionToken<HTMLIonModalElement>('IonModalToken');\n\n// TODO(FW-2827): types\n\n@Injectable()\nexport class AngularDelegate {\n  private zone = inject(NgZone);\n  private applicationRef = inject(ApplicationRef);\n  private config = inject(ConfigToken);\n\n  create(\n    environmentInjector: EnvironmentInjector,\n    injector: Injector,\n    elementReferenceKey?: string,\n    customInjector?: Injector\n  ): AngularFrameworkDelegate {\n    return new AngularFrameworkDelegate(\n      environmentInjector,\n      injector,\n      this.applicationRef,\n      this.zone,\n      elementReferenceKey,\n      this.config.useSetInputAPI ?? false,\n      customInjector\n    );\n  }\n}\n\nexport class AngularFrameworkDelegate implements FrameworkDelegate {\n  private elRefMap = new WeakMap<HTMLElement, ComponentRef<any>>();\n  private elEventsMap = new WeakMap<HTMLElement, () => void>();\n\n  constructor(\n    private environmentInjector: EnvironmentInjector,\n    private injector: Injector,\n    private applicationRef: ApplicationRef,\n    private zone: NgZone,\n    private elementReferenceKey?: string,\n    private enableSignalsSupport?: boolean,\n    private customInjector?: Injector\n  ) {}\n\n  attachViewToDom(container: any, component: any, params?: any, cssClasses?: string[]): Promise<any> {\n    return this.zone.run(() => {\n      return new Promise((resolve) => {\n        const componentProps = {\n          ...params,\n        };\n\n        /**\n         * Ionic Angular passes a reference to a modal\n         * or popover that can be accessed using a\n         * variable in the overlay component. If\n         * elementReferenceKey is defined, then we should\n         * pass a reference to the component using\n         * elementReferenceKey as the key.\n         */\n        if (this.elementReferenceKey !== undefined) {\n          componentProps[this.elementReferenceKey] = container;\n        }\n\n        const el = attachView(\n          this.zone,\n          this.environmentInjector,\n          this.injector,\n          this.applicationRef,\n          this.elRefMap,\n          this.elEventsMap,\n          container,\n          component,\n          componentProps,\n          cssClasses,\n          this.elementReferenceKey,\n          this.enableSignalsSupport,\n          this.customInjector\n        );\n        resolve(el);\n      });\n    });\n  }\n\n  removeViewFromDom(_container: any, component: any): Promise<void> {\n    return this.zone.run(() => {\n      return new Promise((resolve) => {\n        const componentRef = this.elRefMap.get(component);\n        if (componentRef) {\n          componentRef.destroy();\n          this.elRefMap.delete(component);\n          const unbindEvents = this.elEventsMap.get(component);\n          if (unbindEvents) {\n            unbindEvents();\n            this.elEventsMap.delete(component);\n          }\n        }\n        resolve();\n      });\n    });\n  }\n}\n\nexport const attachView = (\n  zone: NgZone,\n  environmentInjector: EnvironmentInjector,\n  injector: Injector,\n  applicationRef: ApplicationRef,\n  elRefMap: WeakMap<HTMLElement, ComponentRef<any>>,\n  elEventsMap: WeakMap<HTMLElement, () => void>,\n  container: any,\n  component: any,\n  params: any,\n  cssClasses: string[] | undefined,\n  elementReferenceKey: string | undefined,\n  enableSignalsSupport: boolean | undefined,\n  customInjector?: Injector\n): any => {\n  /**\n   * Wraps the injector with a custom injector that\n   * provides NavParams to the component.\n   *\n   * NavParams is a legacy feature from Ionic v3 that allows\n   * Angular developers to provide data to a component\n   * and access it by providing NavParams as a dependency\n   * in the constructor.\n   *\n   * The modern approach is to access the data directly\n   * from the component's class instance.\n   */\n  const providers = getProviders(params);\n\n  // If this is an ion-modal, provide the modal element as an injectable\n  // so components inside the modal can inject it directly\n  if (container.tagName.toLowerCase() === 'ion-modal') {\n    providers.push({\n      provide: IonModalToken,\n      useValue: container,\n    });\n  }\n\n  const childInjector = Injector.create({\n    providers,\n    parent: customInjector ?? injector,\n  });\n\n  const componentRef = createComponent<any>(component, {\n    environmentInjector,\n    elementInjector: childInjector,\n  });\n\n  const instance = componentRef.instance;\n  const hostElement = componentRef.location.nativeElement;\n\n  if (params) {\n    /**\n     * For modals and popovers, a reference to the component is\n     * added to `params` during the call to attachViewToDom. If\n     * a reference using this name is already set, this means\n     * the app is trying to use the name as a component prop,\n     * which will cause collisions.\n     */\n    if (elementReferenceKey && instance[elementReferenceKey] !== undefined) {\n      console.error(\n        `[Ionic Error]: ${elementReferenceKey} is a reserved property when using ${container.tagName.toLowerCase()}. Rename or remove the \"${elementReferenceKey}\" property from ${\n          component.name\n        }.`\n      );\n    }\n\n    /**\n     * Angular 14.1 added support for setInput\n     * so we need to fall back to Object.assign\n     * for Angular 14.0.\n     */\n    if (enableSignalsSupport === true && componentRef.setInput !== undefined) {\n      const { modal, popover, ...otherParams } = params;\n      /**\n       * Any key/value pairs set in componentProps\n       * must be set as inputs on the component instance.\n       */\n      for (const key in otherParams) {\n        componentRef.setInput(key, otherParams[key]);\n      }\n\n      /**\n       * Using setInput will cause an error when\n       * setting modal/popover on a component that\n       * does not define them as an input. For backwards\n       * compatibility purposes we fall back to using\n       * Object.assign for these properties.\n       */\n      if (modal !== undefined) {\n        Object.assign(instance, { modal });\n      }\n\n      if (popover !== undefined) {\n        Object.assign(instance, { popover });\n      }\n    } else {\n      Object.assign(instance, params);\n    }\n  }\n  if (cssClasses) {\n    for (const cssClass of cssClasses) {\n      hostElement.classList.add(cssClass);\n    }\n  }\n  const unbindEvents = bindLifecycleEvents(zone, instance, hostElement);\n  container.appendChild(hostElement);\n\n  applicationRef.attachView(componentRef.hostView);\n\n  elRefMap.set(hostElement, componentRef);\n  elEventsMap.set(hostElement, unbindEvents);\n  return hostElement;\n};\n\nconst LIFECYCLES = [\n  LIFECYCLE_WILL_ENTER,\n  LIFECYCLE_DID_ENTER,\n  LIFECYCLE_WILL_LEAVE,\n  LIFECYCLE_DID_LEAVE,\n  LIFECYCLE_WILL_UNLOAD,\n];\n\nexport const bindLifecycleEvents = (zone: NgZone, instance: any, element: HTMLElement): (() => void) => {\n  return zone.run(() => {\n    const unregisters = LIFECYCLES.filter((eventName) => typeof instance[eventName] === 'function').map((eventName) => {\n      const handler = (ev: any) => instance[eventName](ev.detail);\n      element.addEventListener(eventName, handler);\n      return () => element.removeEventListener(eventName, handler);\n    });\n    return () => unregisters.forEach((fn) => fn());\n  });\n};\n\nconst NavParamsToken = new InjectionToken<any>('NavParamsToken');\n\nconst getProviders = (params: { [key: string]: any }) => {\n  return [\n    {\n      provide: NavParamsToken,\n      useValue: params,\n    },\n    {\n      provide: NavParams,\n      useFactory: provideNavParamsInjectable,\n      deps: [NavParamsToken],\n    },\n  ];\n};\n\nconst provideNavParamsInjectable = (params: { [key: string]: any }) => {\n  return new NavParams(params);\n};\n","// TODO: Is there a way we can grab this from angular-component-lib instead?\n\n/* eslint-disable */\n/* tslint:disable */\nimport { fromEvent } from 'rxjs';\n\nexport const proxyInputs = (Cmp: any, inputs: string[]) => {\n  const Prototype = Cmp.prototype;\n  inputs.forEach((item) => {\n    Object.defineProperty(Prototype, item, {\n      get() {\n        return this.el[item];\n      },\n      set(val: any) {\n        this.z.runOutsideAngular(() => (this.el[item] = val));\n      },\n    });\n  });\n};\n\nexport const proxyMethods = (Cmp: any, methods: string[]) => {\n  const Prototype = Cmp.prototype;\n  methods.forEach((methodName) => {\n    Prototype[methodName] = function () {\n      const args = arguments;\n      return this.z.runOutsideAngular(() => this.el[methodName].apply(this.el, args));\n    };\n  });\n};\n\nexport const proxyOutputs = (instance: any, el: any, events: string[]) => {\n  events.forEach((eventName) => (instance[eventName] = fromEvent(el, eventName)));\n};\n\n// tslint:disable-next-line: only-arrow-functions\nexport function ProxyCmp(opts: { defineCustomElementFn?: () => void; inputs?: any; methods?: any }) {\n  const decorator = function (cls: any) {\n    const { defineCustomElementFn, inputs, methods } = opts;\n\n    if (defineCustomElementFn !== undefined) {\n      defineCustomElementFn();\n    }\n\n    if (inputs) {\n      proxyInputs(cls, inputs);\n    }\n    if (methods) {\n      proxyMethods(cls, methods);\n    }\n    return cls;\n  };\n  return decorator;\n}\n","import {\n  ChangeDetectorRef,\n  ContentChild,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  NgZone,\n  TemplateRef,\n} from '@angular/core';\nimport type { Components, ModalBreakpointChangeEventDetail, ModalDragEventDetail } from '@ionic/core/components';\n\nimport { ProxyCmp, proxyOutputs } from '../utils/proxy';\n\nexport declare interface IonModal extends Components.IonModal {\n  /**\n   * Emitted after the modal has presented.\n   **/\n  ionModalDidPresent: EventEmitter<CustomEvent>;\n  /**\n   * Emitted before the modal has presented.\n   */\n  ionModalWillPresent: EventEmitter<CustomEvent>;\n  /**\n   * Emitted before the modal has dismissed.\n   */\n  ionModalWillDismiss: EventEmitter<CustomEvent>;\n  /**\n   * Emitted after the modal has dismissed.\n   */\n  ionModalDidDismiss: EventEmitter<CustomEvent>;\n  /**\n   * Emitted after the modal breakpoint has changed.\n   */\n  ionBreakpointDidChange: EventEmitter<CustomEvent<ModalBreakpointChangeEventDetail>>;\n  /**\n   * Emitted when the sheet or card modal has started being dragged.\n   */\n  ionDragStart: EventEmitter<void>;\n  /**\n   * Emitted while the sheet or card modal is being dragged.\n   */\n  ionDragMove: EventEmitter<CustomEvent<ModalDragEventDetail>>;\n  /**\n   * Emitted when the sheet or card modal has finished being dragged.\n   */\n  ionDragEnd: EventEmitter<CustomEvent<ModalDragEventDetail>>;\n  /**\n   * Emitted after the modal has presented. Shorthand for ionModalDidPresent.\n   */\n  didPresent: EventEmitter<CustomEvent>;\n  /**\n   * Emitted before the modal has presented. Shorthand for ionModalWillPresent.\n   */\n  willPresent: EventEmitter<CustomEvent>;\n  /**\n   * Emitted before the modal has dismissed. Shorthand for ionModalWillDismiss.\n   */\n  willDismiss: EventEmitter<CustomEvent>;\n  /**\n   * Emitted after the modal has dismissed. Shorthand for ionModalDidDismiss.\n   */\n  didDismiss: EventEmitter<CustomEvent>;\n}\n\nconst MODAL_INPUTS = [\n  'animated',\n  'keepContentsMounted',\n  'backdropBreakpoint',\n  'backdropDismiss',\n  'breakpoints',\n  'canDismiss',\n  'cssClass',\n  'enterAnimation',\n  'expandToScroll',\n  'event',\n  'focusTrap',\n  'handle',\n  'handleBehavior',\n  'initialBreakpoint',\n  'isOpen',\n  'keyboardClose',\n  'leaveAnimation',\n  'mode',\n  'presentingElement',\n  'showBackdrop',\n  'translucent',\n  'trigger',\n];\n\nconst MODAL_METHODS = [\n  'present',\n  'dismiss',\n  'onDidDismiss',\n  'onWillDismiss',\n  'setCurrentBreakpoint',\n  'getCurrentBreakpoint',\n];\n\n@ProxyCmp({\n  inputs: MODAL_INPUTS,\n  methods: MODAL_METHODS,\n})\n/**\n * @Component extends from @Directive\n * so by defining the inputs here we\n * do not need to re-define them for the\n * lazy loaded popover.\n */\n@Directive({\n  selector: 'ion-modal',\n  // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n  inputs: MODAL_INPUTS,\n})\n\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class IonModal {\n  // TODO(FW-2827): type\n  @ContentChild(TemplateRef, { static: false }) template: TemplateRef<any>;\n\n  isCmpOpen = false;\n\n  protected el: HTMLElement;\n\n  constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {\n    this.el = r.nativeElement;\n\n    this.el.addEventListener('ionMount', () => {\n      this.isCmpOpen = true;\n      c.detectChanges();\n    });\n    this.el.addEventListener('didDismiss', () => {\n      this.isCmpOpen = false;\n      c.detectChanges();\n    });\n    proxyOutputs(this, this.el, [\n      'ionModalDidPresent',\n      'ionModalWillPresent',\n      'ionModalWillDismiss',\n      'ionModalDidDismiss',\n      'ionBreakpointDidChange',\n      'didPresent',\n      'willPresent',\n      'willDismiss',\n      'didDismiss',\n      'ionDragStart',\n      'ionDragMove',\n      'ionDragEnd',\n    ]);\n  }\n}\n","import {\n  ChangeDetectorRef,\n  ContentChild,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  NgZone,\n  TemplateRef,\n} from '@angular/core';\nimport type { Components } from '@ionic/core/components';\n\nimport { ProxyCmp, proxyOutputs } from '../utils/proxy';\n\nexport declare interface IonPopover extends Components.IonPopover {\n  /**\n   * Emitted after the popover has presented.\n   */\n  ionPopoverDidPresent: EventEmitter<CustomEvent>;\n  /**\n   * Emitted before the popover has presented.\n   */\n  ionPopoverWillPresent: EventEmitter<CustomEvent>;\n  /**\n   * Emitted after the popover has dismissed.\n   */\n  ionPopoverWillDismiss: EventEmitter<CustomEvent>;\n  /**\n   * Emitted after the popover has dismissed.\n   */\n  ionPopoverDidDismiss: EventEmitter<CustomEvent>;\n  /**\n   * Emitted after the popover has presented. Shorthand for ionPopoverDidPresent.\n   */\n  didPresent: EventEmitter<CustomEvent>;\n  /**\n   * Emitted before the popover has presented. Shorthand for ionPopoverWillPresent.\n   */\n  willPresent: EventEmitter<CustomEvent>;\n  /**\n   * Emitted after the popover has presented. Shorthand for ionPopoverWillDismiss.\n   */\n  willDismiss: EventEmitter<CustomEvent>;\n  /**\n   * Emitted after the popover has dismissed. Shorthand for ionPopoverDidDismiss.\n   */\n  didDismiss: EventEmitter<CustomEvent>;\n}\n\nconst POPOVER_INPUTS = [\n  'alignment',\n  'animated',\n  'arrow',\n  'keepContentsMounted',\n  'backdropDismiss',\n  'cssClass',\n  'dismissOnSelect',\n  'enterAnimation',\n  'event',\n  'focusTrap',\n  'isOpen',\n  'keyboardClose',\n  'leaveAnimation',\n  'mode',\n  'showBackdrop',\n  'translucent',\n  'trigger',\n  'triggerAction',\n  'reference',\n  'size',\n  'side',\n];\n\nconst POPOVER_METHODS = ['present', 'dismiss', 'onDidDismiss', 'onWillDismiss'];\n\n@ProxyCmp({\n  inputs: POPOVER_INPUTS,\n  methods: POPOVER_METHODS,\n})\n/**\n * @Component extends from @Directive\n * so by defining the inputs here we\n * do not need to re-define them for the\n * lazy loaded popover.\n */\n@Directive({\n  selector: 'ion-popover',\n  // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n  inputs: POPOVER_INPUTS,\n})\n\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class IonPopover {\n  // TODO(FW-2827): type\n  @ContentChild(TemplateRef, { static: false }) template: TemplateRef<any>;\n\n  isCmpOpen = false;\n\n  protected el: HTMLElement;\n\n  constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {\n    this.el = r.nativeElement;\n\n    this.el.addEventListener('ionMount', () => {\n      this.isCmpOpen = true;\n      c.detectChanges();\n    });\n    this.el.addEventListener('didDismiss', () => {\n      this.isCmpOpen = false;\n      c.detectChanges();\n    });\n    proxyOutputs(this, this.el, [\n      'ionPopoverDidPresent',\n      'ionPopoverWillPresent',\n      'ionPopoverWillDismiss',\n      'ionPopoverDidDismiss',\n      'didPresent',\n      'willPresent',\n      'willDismiss',\n      'didDismiss',\n    ]);\n  }\n}\n","import { ComponentRef } from '@angular/core';\nimport { ActivatedRoute, NavigationExtras, Router } from '@angular/router';\nimport type { AnimationBuilder, NavDirection, RouterDirection } from '@ionic/core/components';\n\nexport const insertView = (views: RouteView[], view: RouteView, direction: RouterDirection): RouteView[] => {\n  if (direction === 'root') {\n    return setRoot(views, view);\n  } else if (direction === 'forward') {\n    return setForward(views, view);\n  } else {\n    return setBack(views, view);\n  }\n};\n\nconst setRoot = (views: RouteView[], view: RouteView) => {\n  views = views.filter((v) => v.stackId !== view.stackId);\n  views.push(view);\n  return views;\n};\n\nconst setForward = (views: RouteView[], view: RouteView) => {\n  const index = views.indexOf(view);\n  if (index >= 0) {\n    views = views.filter((v) => v.stackId !== view.stackId || v.id <= view.id);\n  } else {\n    views.push(view);\n  }\n  return views;\n};\n\nconst setBack = (views: RouteView[], view: RouteView) => {\n  const index = views.indexOf(view);\n  if (index >= 0) {\n    return views.filter((v) => v.stackId !== view.stackId || v.id <= view.id);\n  } else {\n    return setRoot(views, view);\n  }\n};\n\nexport const getUrl = (router: Router, activatedRoute: ActivatedRoute): string => {\n  const urlTree = router.createUrlTree(['.'], { relativeTo: activatedRoute });\n  return router.serializeUrl(urlTree);\n};\n\nexport const isTabSwitch = (enteringView: RouteView, leavingView: RouteView | undefined): boolean => {\n  if (!leavingView) {\n    return true;\n  }\n  return enteringView.stackId !== leavingView.stackId;\n};\n\nexport const computeStackId = (prefixUrl: string[] | undefined, url: string): string | undefined => {\n  if (!prefixUrl) {\n    return undefined;\n  }\n  const segments = toSegments(url);\n  for (let i = 0; i < segments.length; i++) {\n    if (i >= prefixUrl.length) {\n      return segments[i];\n    }\n    if (segments[i] !== prefixUrl[i]) {\n      return undefined;\n    }\n  }\n  return undefined;\n};\n\nexport const toSegments = (path: string): string[] => {\n  return path\n    .split('/')\n    .map((s) => s.trim())\n    .filter((s) => s !== '');\n};\n\nexport const destroyView = (view: RouteView | undefined): void => {\n  if (view) {\n    view.ref.destroy();\n    view.unlistenEvents();\n  }\n};\n\nexport interface StackWillChangeEvent {\n  enteringView: RouteView;\n  /**\n   * `true` if the event is trigged as a result of a switch\n   * between tab navigation stacks.\n   */\n  tabSwitch: boolean;\n}\n\nexport interface StackDidChangeEvent {\n  enteringView: RouteView;\n  direction: RouterDirection;\n  animation: NavDirection | undefined;\n  /**\n   * `true` if the event is trigged as a result of a switch\n   * between tab navigation stacks.\n   */\n  tabSwitch: boolean;\n}\n\n// TODO(FW-2827): types\nexport interface RouteView {\n  id: number;\n  url: string;\n  stackId: string | undefined;\n  element: HTMLElement;\n  ref: ComponentRef<any>;\n  savedData?: any;\n  savedExtras?: NavigationExtras;\n  unlistenEvents: () => void;\n  animationBuilder?: AnimationBuilder;\n}\n","import { Location } from '@angular/common';\nimport { ComponentRef, NgZone } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport type { AnimationBuilder, RouterDirection } from '@ionic/core/components';\n\nimport { bindLifecycleEvents } from '../../providers/angular-delegate';\nimport { NavController } from '../../providers/nav-controller';\n\nimport {\n  RouteView,\n  StackDidChangeEvent,\n  computeStackId,\n  destroyView,\n  getUrl,\n  insertView,\n  isTabSwitch,\n  toSegments,\n} from './stack-utils';\n\n// TODO(FW-2827): types\n\nexport class StackController {\n  private views: RouteView[] = [];\n  private runningTask?: Promise<any>;\n  private skipTransition = false;\n  private tabsPrefix: string[] | undefined;\n  private activeView: RouteView | undefined;\n  private nextId = 0;\n\n  constructor(\n    tabsPrefix: string | undefined,\n    private containerEl: HTMLIonRouterOutletElement,\n    private router: Router,\n    private navCtrl: NavController,\n    private zone: NgZone,\n    private location: Location\n  ) {\n    this.tabsPrefix = tabsPrefix !== undefined ? toSegments(tabsPrefix) : undefined;\n  }\n\n  createView(ref: ComponentRef<any>, activatedRoute: ActivatedRoute): RouteView {\n    const url = getUrl(this.router, activatedRoute);\n    const element = ref?.location?.nativeElement as HTMLElement;\n    const unlistenEvents = bindLifecycleEvents(this.zone, ref.instance, element);\n    return {\n      id: this.nextId++,\n      stackId: computeStackId(this.tabsPrefix, url),\n      unlistenEvents,\n      element,\n      ref,\n      url,\n    };\n  }\n\n  getExistingView(activatedRoute: ActivatedRoute): RouteView | undefined {\n    const activatedUrlKey = getUrl(this.router, activatedRoute);\n    const view = this.views.find((vw) => vw.url === activatedUrlKey);\n    if (view) {\n      view.ref.changeDetectorRef.reattach();\n    }\n    return view;\n  }\n\n  setActive(enteringView: RouteView): Promise<StackDidChangeEvent> {\n    const consumeResult = this.navCtrl.consumeTransition();\n    let { direction, animation, animationBuilder } = consumeResult;\n    const leavingView = this.activeView;\n    const tabSwitch = isTabSwitch(enteringView, leavingView);\n    if (tabSwitch) {\n      direction = 'back';\n      animation = undefined;\n    }\n\n    const viewsSnapshot = this.views.slice();\n\n    let currentNavigation;\n\n    const router = this.router as any;\n\n    // Angular >= 7.2.0\n    if (router.getCurrentNavigation) {\n      currentNavigation = router.getCurrentNavigation();\n\n      // Angular < 7.2.0\n    } else if (router.navigations?.value) {\n      currentNavigation = router.navigations.value;\n    }\n\n    /**\n     * If the navigation action\n     * sets `replaceUrl: true`\n     * then we need to make sure\n     * we remove the last item\n     * from our views stack\n     */\n    if (currentNavigation?.extras?.replaceUrl) {\n      if (this.views.length > 0) {\n        this.views.splice(-1, 1);\n      }\n    }\n\n    const reused = this.views.includes(enteringView);\n    const views = this.insertView(enteringView, direction);\n\n    // Trigger change detection before transition starts\n    // This will call ngOnInit() the first time too, just after the view\n    // was attached to the dom, but BEFORE the transition starts\n    if (!reused) {\n      enteringView.ref.changeDetectorRef.detectChanges();\n    }\n\n    /**\n     * If we are going back from a page that\n     * was presented using a custom animation\n     * we should default to using that\n     * unless the developer explicitly\n     * provided another animation.\n     */\n    const customAnimation = enteringView.animationBuilder;\n    if (animationBuilder === undefined && direction === 'back' && !tabSwitch && customAnimation !== undefined) {\n      animationBuilder = customAnimation;\n    }\n\n    /**\n     * Save any custom animation so that navigating\n     * back will use this custom animation by default.\n     */\n    if (leavingView) {\n      leavingView.animationBuilder = animationBuilder;\n    }\n\n    // Wait until previous transitions finish\n    return this.zone.runOutsideAngular(() => {\n      return this.wait(() => {\n        // disconnect leaving page from change detection to\n        // reduce jank during the page transition\n        if (leavingView) {\n          leavingView.ref.changeDetectorRef.detach();\n        }\n        // In case the enteringView is the same as the leavingPage we need to reattach()\n        enteringView.ref.changeDetectorRef.reattach();\n\n        return this.transition(enteringView, leavingView, animation, this.canGoBack(1), false, animationBuilder)\n          .then(() => cleanupAsync(enteringView, views, viewsSnapshot, this.location, this.zone))\n          .then(() => ({\n            enteringView,\n            direction,\n            animation,\n            tabSwitch,\n          }));\n      });\n    });\n  }\n\n  canGoBack(deep: number, stackId = this.getActiveStackId()): boolean {\n    return this.getStack(stackId).length > deep;\n  }\n\n  pop(deep: number, stackId = this.getActiveStackId()): Promise<boolean> {\n    return this.zone.run(() => {\n      const views = this.getStack(stackId);\n      if (views.length <= deep) {\n        return Promise.resolve(false);\n      }\n      const view = views[views.length - deep - 1];\n      let url = view.url;\n\n      const viewSavedData = view.savedData;\n      if (viewSavedData) {\n        const primaryOutlet = viewSavedData.get('primary');\n        if (primaryOutlet?.route?._routerState?.snapshot.url) {\n          url = primaryOutlet.route._routerState.snapshot.url;\n        }\n      }\n      const { animationBuilder } = this.navCtrl.consumeTransition();\n      return this.navCtrl.navigateBack(url, { ...view.savedExtras, animation: animationBuilder }).then(() => true);\n    });\n  }\n\n  startBackTransition(): Promise<boolean> | Promise<void> {\n    const leavingView = this.activeView;\n    if (leavingView) {\n      const views = this.getStack(leavingView.stackId);\n      const enteringView = views[views.length - 2];\n      const customAnimation = enteringView.animationBuilder;\n\n      return this.wait(() => {\n        return this.transition(\n          enteringView, // entering view\n          leavingView, // leaving view\n          'back',\n          this.canGoBack(2),\n          true,\n          customAnimation\n        );\n      });\n    }\n    return Promise.resolve();\n  }\n\n  endBackTransition(shouldComplete: boolean): void {\n    if (shouldComplete) {\n      this.skipTransition = true;\n      this.pop(1);\n    } else if (this.activeView) {\n      cleanup(this.activeView, this.views, this.views, this.location, this.zone);\n    }\n  }\n\n  getLastUrl(stackId?: string): RouteView | undefined {\n    const views = this.getStack(stackId);\n    return views.length > 0 ? views[views.length - 1] : undefined;\n  }\n\n  /**\n   * @internal\n   */\n  getRootUrl(stackId?: string): RouteView | undefined {\n    const views = this.getStack(stackId);\n    return views.length > 0 ? views[0] : undefined;\n  }\n\n  getActiveStackId(): string | undefined {\n    return this.activeView ? this.activeView.stackId : undefined;\n  }\n\n  /**\n   * @internal\n   */\n  getActiveView(): RouteView | undefined {\n    return this.activeView;\n  }\n\n  hasRunningTask(): boolean {\n    return this.runningTask !== undefined;\n  }\n\n  destroy(): void {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    this.containerEl = undefined!;\n    this.views.forEach(destroyView);\n    this.activeView = undefined;\n    this.views = [];\n  }\n\n  private getStack(stackId: string | undefined) {\n    return this.views.filter((v) => v.stackId === stackId);\n  }\n\n  private insertView(enteringView: RouteView, direction: RouterDirection) {\n    this.activeView = enteringView;\n    this.views = insertView(this.views, enteringView, direction);\n    return this.views.slice();\n  }\n\n  private transition(\n    enteringView: RouteView | undefined,\n    leavingView: RouteView | undefined,\n    direction: 'forward' | 'back' | undefined,\n    showGoBack: boolean,\n    progressAnimation: boolean,\n    animationBuilder?: AnimationBuilder\n  ) {\n    if (this.skipTransition) {\n      this.skipTransition = false;\n      return Promise.resolve(false);\n    }\n    if (leavingView === enteringView) {\n      return Promise.resolve(false);\n    }\n    const enteringEl = enteringView ? enteringView.element : undefined;\n    const leavingEl = leavingView ? leavingView.element : undefined;\n    const containerEl = this.containerEl;\n    if (enteringEl && enteringEl !== leavingEl) {\n      enteringEl.classList.add('ion-page');\n      enteringEl.classList.add('ion-page-invisible');\n\n      if ((containerEl as any).commit) {\n        return containerEl.commit(enteringEl, leavingEl, {\n          duration: direction === undefined ? 0 : undefined,\n          direction,\n          showGoBack,\n          progressAnimation,\n          animationBuilder,\n        });\n      }\n    }\n    return Promise.resolve(false);\n  }\n\n  private async wait<T>(task: () => Promise<T>): Promise<T> {\n    if (this.runningTask !== undefined) {\n      await this.runningTask;\n      this.runningTask = undefined;\n    }\n    const promise = (this.runningTask = task());\n    promise.finally(() => (this.runningTask = undefined));\n    return promise;\n  }\n}\n\nconst cleanupAsync = (\n  activeRoute: RouteView,\n  views: RouteView[],\n  viewsSnapshot: RouteView[],\n  location: Location,\n  zone: NgZone\n) => {\n  if (typeof (requestAnimationFrame as any) === 'function') {\n    return new Promise<void>((resolve) => {\n      requestAnimationFrame(() => {\n        cleanup(activeRoute, views, viewsSnapshot, location, zone);\n        resolve();\n      });\n    });\n  }\n  return Promise.resolve();\n};\n\nconst cleanup = (\n  activeRoute: RouteView,\n  views: RouteView[],\n  viewsSnapshot: RouteView[],\n  location: Location,\n  zone: NgZone\n) => {\n  /**\n   * Re-enter the Angular zone when destroying page components. This will allow\n   * lifecycle events (`ngOnDestroy`) to be run inside the Angular zone.\n   */\n  zone.run(() => viewsSnapshot.filter((view) => !views.includes(view)).forEach(destroyView));\n\n  views.forEach((view) => {\n    /**\n     * In the event that a user navigated multiple\n     * times in rapid succession, we want to make sure\n     * we don't pre-emptively detach a view while\n     * it is in mid-transition.\n     *\n     * In this instance we also do not care about query\n     * params or fragments as it will be the same view regardless\n     */\n    const locationWithoutParams = location.path().split('?')[0];\n    const locationWithoutFragment = locationWithoutParams.split('#')[0];\n\n    if (view !== activeRoute && view.url !== locationWithoutFragment) {\n      const element = view.element;\n      element.setAttribute('aria-hidden', 'true');\n      element.classList.add('ion-page-hidden');\n      view.ref.changeDetectorRef.detach();\n    }\n  });\n};\n","import { Location } from '@angular/common';\nimport {\n  ComponentRef,\n  ElementRef,\n  Injector,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  ViewContainerRef,\n  inject,\n  Attribute,\n  Directive,\n  EventEmitter,\n  Optional,\n  Output,\n  SkipSelf,\n  EnvironmentInjector,\n  Input,\n  InjectionToken,\n  Injectable,\n  reflectComponentType,\n} from '@angular/core';\nimport type { Provider } from '@angular/core';\nimport { OutletContext, Router, ActivatedRoute, ChildrenOutletContexts, PRIMARY_OUTLET, Data } from '@angular/router';\nimport { componentOnReady } from '@ionic/core/components';\nimport type { AnimationBuilder } from '@ionic/core/components';\nimport { Observable, BehaviorSubject, Subscription, combineLatest, of } from 'rxjs';\nimport { distinctUntilChanged, filter, switchMap } from 'rxjs/operators';\n\nimport { Config } from '../../providers/config';\nimport { NavController } from '../../providers/nav-controller';\n\nimport { StackController } from './stack-controller';\nimport { RouteView, StackDidChangeEvent, StackWillChangeEvent, getUrl, isTabSwitch } from './stack-utils';\n\n// TODO(FW-2827): types\n\n@Directive({\n  selector: 'ion-router-outlet',\n  exportAs: 'outlet',\n  // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n  inputs: ['animated', 'animation', 'mode', 'swipeGesture'],\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class IonRouterOutlet implements OnDestroy, OnInit {\n  abstract outletContent: any;\n\n  nativeEl: HTMLIonRouterOutletElement;\n  activatedView: RouteView | null = null;\n  tabsPrefix: string | undefined;\n\n  private _swipeGesture?: boolean;\n  private stackCtrl: StackController;\n\n  // Maintain map of activated route proxies for each component instance\n  private proxyMap = new WeakMap<any, ActivatedRoute>();\n  // Keep the latest activated route in a subject for the proxy routes to switch map to\n  private currentActivatedRoute$ = new BehaviorSubject<{ component: any; activatedRoute: ActivatedRoute } | null>(null);\n\n  private activated: ComponentRef<any> | null = null;\n  /** @internal */\n  get activatedComponentRef(): ComponentRef<any> | null {\n    return this.activated;\n  }\n  private _activatedRoute: ActivatedRoute | null = null;\n\n  /**\n   * The name of the outlet\n   */\n  @Input() name = PRIMARY_OUTLET;\n\n  /** @internal */\n  @Output() stackWillChange = new EventEmitter<StackWillChangeEvent>();\n  /** @internal */\n  @Output() stackDidChange = new EventEmitter<StackDidChangeEvent>();\n\n  // eslint-disable-next-line @angular-eslint/no-output-rename\n  @Output('activate') activateEvents = new EventEmitter<any>();\n  // eslint-disable-next-line @angular-eslint/no-output-rename\n  @Output('deactivate') deactivateEvents = new EventEmitter<any>();\n\n  private parentContexts = inject(ChildrenOutletContexts);\n  private location = inject(ViewContainerRef);\n  private environmentInjector = inject(EnvironmentInjector);\n  private inputBinder = inject(INPUT_BINDER, { optional: true });\n  /** @nodoc */\n  readonly supportsBindingToComponentInputs = true;\n\n  // Ionic providers\n  private config = inject(Config);\n  private navCtrl = inject(NavController);\n\n  set animation(animation: AnimationBuilder) {\n    this.nativeEl.animation = animation;\n  }\n\n  set animated(animated: boolean) {\n    this.nativeEl.animated = animated;\n  }\n\n  set swipeGesture(swipe: boolean) {\n    this._swipeGesture = swipe;\n\n    this.nativeEl.swipeHandler = swipe\n      ? {\n          canStart: () => this.stackCtrl.canGoBack(1) && !this.stackCtrl.hasRunningTask(),\n          onStart: () => this.stackCtrl.startBackTransition(),\n          onEnd: (shouldContinue) => this.stackCtrl.endBackTransition(shouldContinue),\n        }\n      : undefined;\n  }\n\n  constructor(\n    @Attribute('name') name: string,\n    @Optional() @Attribute('tabs') tabs: string,\n    commonLocation: Location,\n    elementRef: ElementRef,\n    router: Router,\n    zone: NgZone,\n    activatedRoute: ActivatedRoute,\n    @SkipSelf() @Optional() readonly parentOutlet?: IonRouterOutlet\n  ) {\n    this.nativeEl = elementRef.nativeElement;\n    this.name = name || PRIMARY_OUTLET;\n    this.tabsPrefix = tabs === 'true' ? getUrl(router, activatedRoute) : undefined;\n    this.stackCtrl = new StackController(this.tabsPrefix, this.nativeEl, router, this.navCtrl, zone, commonLocation);\n    this.parentContexts.onChildOutletCreated(this.name, this as any);\n  }\n\n  ngOnDestroy(): void {\n    this.stackCtrl.destroy();\n    this.inputBinder?.unsubscribeFromRouteData(this);\n  }\n\n  getContext(): OutletContext | null {\n    return this.parentContexts.getContext(this.name);\n  }\n\n  ngOnInit(): void {\n    this.initializeOutletWithName();\n  }\n\n  // Note: Ionic deviates from the Angular Router implementation here\n  private initializeOutletWithName() {\n    if (!this.activated) {\n      // If the outlet was not instantiated at the time the route got activated we need to populate\n      // the outlet when it is initialized (ie inside a NgIf)\n      const context = this.getContext();\n      if (context?.route) {\n        this.activateWith(context.route, context.injector);\n      }\n    }\n\n    new Promise((resolve) => componentOnReady(this.nativeEl, resolve)).then(() => {\n      if (this._swipeGesture === undefined) {\n        this.swipeGesture = this.config.getBoolean('swipeBackEnabled', (this.nativeEl as any).mode === 'ios');\n      }\n    });\n  }\n\n  get isActivated(): boolean {\n    return !!this.activated;\n  }\n\n  get component(): Record<string, unknown> {\n    if (!this.activated) {\n      throw new Error('Outlet is not activated');\n    }\n    return this.activated.instance;\n  }\n\n  get activatedRoute(): ActivatedRoute {\n    if (!this.activated) {\n      throw new Error('Outlet is not activated');\n    }\n    return this._activatedRoute as ActivatedRoute;\n  }\n\n  get activatedRouteData(): Data {\n    if (this._activatedRoute) {\n      return this._activatedRoute.snapshot.data;\n    }\n    return {};\n  }\n\n  /**\n   * Called when the `RouteReuseStrategy` instructs to detach the subtree\n   */\n  detach(): ComponentRef<any> {\n    throw new Error('incompatible reuse strategy');\n  }\n\n  /**\n   * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  attach(_ref: ComponentRef<any>, _activatedRoute: ActivatedRoute): void {\n    throw new Error('incompatible reuse strategy');\n  }\n\n  deactivate(): void {\n    if (this.activated) {\n      if (this.activatedView) {\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        const context = this.getContext()!;\n        this.activatedView.savedData = new Map(context.children['contexts']);\n\n        /**\n         * Angular v11.2.10 introduced a change\n         * where this route context is cleared out when\n         * a router-outlet is deactivated, However,\n         * we need this route information in order to\n         * return a user back to the correct tab when\n         * leaving and then going back to the tab context.\n         */\n        const primaryOutlet = this.activatedView.savedData.get('primary');\n        if (primaryOutlet && context.route) {\n          primaryOutlet.route = { ...context.route };\n        }\n\n        /**\n         * Ensure we are saving the NavigationExtras\n         * data otherwise it will be lost\n         */\n        this.activatedView.savedExtras = {};\n        if (context.route) {\n          const contextSnapshot = context.route.snapshot;\n\n          this.activatedView.savedExtras.queryParams = contextSnapshot.queryParams;\n          (this.activatedView.savedExtras.fragment as string | null) = contextSnapshot.fragment;\n        }\n      }\n      const c = this.component;\n      this.activatedView = null;\n      this.activated = null;\n      this._activatedRoute = null;\n      this.deactivateEvents.emit(c);\n    }\n  }\n\n  activateWith(activatedRoute: ActivatedRoute, environmentInjector: EnvironmentInjector | null): void {\n    if (this.isActivated) {\n      throw new Error('Cannot activate an already activated outlet');\n    }\n    this._activatedRoute = activatedRoute;\n\n    let cmpRef: any;\n    let enteringView = this.stackCtrl.getExistingView(activatedRoute);\n    if (enteringView) {\n      cmpRef = this.activated = enteringView.ref;\n      const saved = enteringView.savedData;\n      if (saved) {\n        // self-restore\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        const context = this.getContext()!;\n        context.children['contexts'] = saved;\n      }\n      // Updated activated route proxy for this component\n      this.updateActivatedRouteProxy(cmpRef.instance, activatedRoute);\n    } else {\n      const snapshot = (activatedRoute as any)._futureSnapshot;\n\n      /**\n       * Angular 14 introduces a new `loadComponent` property to the route config.\n       * This function will assign a `component` property to the route snapshot.\n       * We check for the presence of this property to determine if the route is\n       * using standalone components.\n       */\n      const childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n\n      // We create an activated route proxy object that will maintain future updates for this component\n      // over its lifecycle in the stack.\n      const component$ = new BehaviorSubject<any>(null);\n      const activatedRouteProxy = this.createActivatedRouteProxy(component$, activatedRoute);\n\n      const injector = new OutletInjector(activatedRouteProxy, childContexts, this.location.injector);\n\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      const component = snapshot.routeConfig!.component ?? snapshot.component;\n\n      /**\n       * View components need to be added as a child of ion-router-outlet\n       * for page transitions and swipe to go back.\n       * However, createComponent mounts components as siblings of the\n       * ViewContainerRef. As a result, outletContent must reference\n       * an ng-container inside of ion-router-outlet and not\n       * ion-router-outlet itself.\n       */\n      cmpRef = this.activated = this.outletContent.createComponent(component, {\n        index: this.outletContent.length,\n        injector,\n        environmentInjector: environmentInjector ?? this.environmentInjector,\n      });\n\n      // Once the component is created we can push it to our local subject supplied to the proxy\n      component$.next(cmpRef.instance);\n\n      // Calling `markForCheck` to make sure we will run the change detection when the\n      // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.\n\n      /**\n       * At this point this.activated has been set earlier\n       * in this function, so it is guaranteed to be non-null.\n       */\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      enteringView = this.stackCtrl.createView(this.activated!, activatedRoute);\n\n      // Store references to the proxy by component\n      this.proxyMap.set(cmpRef.instance, activatedRouteProxy);\n      this.currentActivatedRoute$.next({ component: cmpRef.instance, activatedRoute });\n    }\n\n    this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n\n    this.activatedView = enteringView;\n\n    /**\n     * The top outlet is set prior to the entering view's transition completing,\n     * so that when we have nested outlets (e.g. ion-tabs inside an ion-router-outlet),\n     * the tabs outlet will be assigned as the top outlet when a view inside tabs is\n     * activated.\n     *\n     * In this scenario, activeWith is called for both the tabs and the root router outlet.\n     * To avoid a race condition, we assign the top outlet synchronously.\n     */\n    this.navCtrl.setTopOutlet(this);\n\n    const leavingView = this.stackCtrl.getActiveView();\n\n    this.stackWillChange.emit({\n      enteringView,\n      tabSwitch: isTabSwitch(enteringView, leavingView),\n    });\n\n    this.stackCtrl.setActive(enteringView).then((data) => {\n      this.activateEvents.emit(cmpRef.instance);\n      this.stackDidChange.emit(data);\n    });\n  }\n\n  /**\n   * Returns `true` if there are pages in the stack to go back.\n   */\n  canGoBack(deep = 1, stackId?: string): boolean {\n    return this.stackCtrl.canGoBack(deep, stackId);\n  }\n\n  /**\n   * Resolves to `true` if it the outlet was able to sucessfully pop the last N pages.\n   */\n  pop(deep = 1, stackId?: string): Promise<boolean> {\n    return this.stackCtrl.pop(deep, stackId);\n  }\n\n  /**\n   * Returns the URL of the active page of each stack.\n   */\n  getLastUrl(stackId?: string): string | undefined {\n    const active = this.stackCtrl.getLastUrl(stackId);\n    return active ? active.url : undefined;\n  }\n\n  /**\n   * Returns the RouteView of the active page of each stack.\n   * @internal\n   */\n  getLastRouteView(stackId?: string): RouteView | undefined {\n    return this.stackCtrl.getLastUrl(stackId);\n  }\n\n  /**\n   * Returns the root view in the tab stack.\n   * @internal\n   */\n  getRootView(stackId?: string): RouteView | undefined {\n    return this.stackCtrl.getRootUrl(stackId);\n  }\n\n  /**\n   * Returns the active stack ID. In the context of ion-tabs, it means the active tab.\n   */\n  getActiveStackId(): string | undefined {\n    return this.stackCtrl.getActiveStackId();\n  }\n\n  /**\n   * Since the activated route can change over the life time of a component in an ion router outlet, we create\n   * a proxy so that we can update the values over time as a user navigates back to components already in the stack.\n   */\n  private createActivatedRouteProxy(component$: Observable<any>, activatedRoute: ActivatedRoute): ActivatedRoute {\n    const proxy: any = new ActivatedRoute();\n\n    proxy._futureSnapshot = (activatedRoute as any)._futureSnapshot;\n    proxy._routerState = (activatedRoute as any)._routerState;\n    proxy.snapshot = activatedRoute.snapshot;\n    proxy.outlet = activatedRoute.outlet;\n    proxy.component = activatedRoute.component;\n\n    // Setup wrappers for the observables so consumers don't have to worry about switching to new observables as the state updates\n    (proxy as any)._paramMap = this.proxyObservable(component$, 'paramMap');\n    (proxy as any)._queryParamMap = this.proxyObservable(component$, 'queryParamMap');\n    proxy.url = this.proxyObservable(component$, 'url');\n    proxy.params = this.proxyObservable(component$, 'params');\n    proxy.queryParams = this.proxyObservable(component$, 'queryParams');\n    proxy.fragment = this.proxyObservable(component$, 'fragment');\n    proxy.data = this.proxyObservable(component$, 'data');\n\n    return proxy as ActivatedRoute;\n  }\n\n  /**\n   * Create a wrapped observable that will switch to the latest activated route matched by the given component\n   */\n  private proxyObservable(component$: Observable<any>, path: string): Observable<any> {\n    return component$.pipe(\n      // First wait until the component instance is pushed\n      filter((component) => !!component),\n      switchMap((component) =>\n        this.currentActivatedRoute$.pipe(\n          filter((current) => current !== null && current.component === component),\n          switchMap((current) => current && (current.activatedRoute as any)[path]),\n          distinctUntilChanged()\n        )\n      )\n    );\n  }\n\n  /**\n   * Updates the activated route proxy for the given component to the new incoming router state\n   */\n  private updateActivatedRouteProxy(component: any, activatedRoute: ActivatedRoute): void {\n    const proxy = this.proxyMap.get(component);\n    if (!proxy) {\n      throw new Error(`Could not find activated route proxy for view`);\n    }\n\n    (proxy as any)._futureSnapshot = (activatedRoute as any)._futureSnapshot;\n    (proxy as any)._routerState = (activatedRoute as any)._routerState;\n    proxy.snapshot = activatedRoute.snapshot;\n    proxy.outlet = activatedRoute.outlet;\n    proxy.component = activatedRoute.component;\n\n    this.currentActivatedRoute$.next({ component, activatedRoute });\n  }\n}\n\nclass OutletInjector implements Injector {\n  constructor(private route: ActivatedRoute, private childContexts: ChildrenOutletContexts, private parent: Injector) {}\n\n  get(token: any, notFoundValue?: any): any {\n    if (token === ActivatedRoute) {\n      return this.route;\n    }\n\n    if (token === ChildrenOutletContexts) {\n      return this.childContexts;\n    }\n\n    return this.parent.get(token, notFoundValue);\n  }\n}\n\n// TODO: FW-4785 - Remove this once Angular 15 support is dropped\nconst INPUT_BINDER = new InjectionToken<RoutedComponentInputBinder>('');\n\n/**\n * Injectable used as a tree-shakable provider for opting in to binding router data to component\n * inputs.\n *\n * The RouterOutlet registers itself with this service when an `ActivatedRoute` is attached or\n * activated. When this happens, the service subscribes to the `ActivatedRoute` observables (params,\n * queryParams, data) and sets the inputs of the component using `ComponentRef.setInput`.\n * Importantly, when an input does not have an item in the route data with a matching key, this\n * input is set to `undefined`. If it were not done this way, the previous information would be\n * retained if the data got removed from the route (i.e. if a query parameter is removed).\n *\n * The `RouterOutlet` should unregister itself when destroyed via `unsubscribeFromRouteData` so that\n * the subscriptions are cleaned up.\n */\n@Injectable()\nclass RoutedComponentInputBinder {\n  private outletDataSubscriptions = new Map<IonRouterOutlet, Subscription>();\n\n  bindActivatedRouteToOutletComponent(outlet: IonRouterOutlet): void {\n    this.unsubscribeFromRouteData(outlet);\n    this.subscribeToRouteData(outlet);\n  }\n\n  unsubscribeFromRouteData(outlet: IonRouterOutlet): void {\n    this.outletDataSubscriptions.get(outlet)?.unsubscribe();\n    this.outletDataSubscriptions.delete(outlet);\n  }\n\n  private subscribeToRouteData(outlet: IonRouterOutlet) {\n    const { activatedRoute } = outlet;\n    const dataSubscription = combineLatest([activatedRoute.queryParams, activatedRoute.params, activatedRoute.data])\n      .pipe(\n        switchMap(([queryParams, params, data], index) => {\n          data = { ...queryParams, ...params, ...data };\n          // Get the first result from the data subscription synchronously so it's available to\n          // the component as soon as possible (and doesn't require a second change detection).\n          if (index === 0) {\n            return of(data);\n          }\n          // Promise.resolve is used to avoid synchronously writing the wrong data when\n          // two of the Observables in the `combineLatest` stream emit one after\n          // another.\n          return Promise.resolve(data);\n        })\n      )\n      .subscribe((data) => {\n        // Outlet may have been deactivated or changed names to be associated with a different\n        // route\n        if (\n          !outlet.isActivated ||\n          !outlet.activatedComponentRef ||\n          outlet.activatedRoute !== activatedRoute ||\n          activatedRoute.component === null\n        ) {\n          this.unsubscribeFromRouteData(outlet);\n          return;\n        }\n\n        const mirror = reflectComponentType(activatedRoute.component);\n        if (!mirror) {\n          this.unsubscribeFromRouteData(outlet);\n          return;\n        }\n\n        for (const { templateName } of mirror.inputs) {\n          outlet.activatedComponentRef.setInput(templateName, data[templateName]);\n        }\n      });\n\n    this.outletDataSubscriptions.set(outlet, dataSubscription);\n  }\n}\n\nexport const provideComponentInputBinding = (): Provider => {\n  return {\n    provide: INPUT_BINDER,\n    useFactory: componentInputBindingFactory,\n    deps: [Router],\n  };\n};\n\nfunction componentInputBindingFactory(router?: Router) {\n  /**\n   * We cast the router to any here, since the componentInputBindingEnabled\n   * property is not available until Angular v16.\n   */\n  if ((router as any)?.componentInputBindingEnabled) {\n    return new RoutedComponentInputBinder();\n  }\n  return null;\n}\n","declare const __zone_symbol__requestAnimationFrame: any;\ndeclare const requestAnimationFrame: any;\n\nexport const raf = (h: any): any => {\n  if (typeof __zone_symbol__requestAnimationFrame === 'function') {\n    return __zone_symbol__requestAnimationFrame(h);\n  }\n  if (typeof requestAnimationFrame === 'function') {\n    return requestAnimationFrame(h);\n  }\n  return setTimeout(h);\n};\n","import { AfterViewInit, ElementRef, Injector, OnDestroy, Directive, HostListener } from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { raf } from '../../utils/util';\n\n// TODO(FW-2827): types\n\n@Directive()\nexport class ValueAccessor implements ControlValueAccessor, AfterViewInit, OnDestroy {\n  private onChange: (value: any) => void = () => {\n    /**/\n  };\n  private onTouched: () => void = () => {\n    /**/\n  };\n  protected lastValue: any;\n  private statusChanges?: Subscription;\n\n  constructor(protected injector: Injector, protected elementRef: ElementRef) {}\n\n  writeValue(value: any): void {\n    this.elementRef.nativeElement.value = this.lastValue = value;\n    setIonicClasses(this.elementRef);\n  }\n\n  /**\n   * Notifies the ControlValueAccessor of a change in the value of the control.\n   *\n   * This is called by each of the ValueAccessor directives when we want to update\n   * the status and validity of the form control. For example with text components this\n   * is called when the ionInput event is fired. For select components this is called\n   * when the ionChange event is fired.\n   *\n   * This also updates the Ionic form status classes on the element.\n   *\n   * @param el The component element.\n   * @param value The new value of the control.\n   */\n  handleValueChange(el: HTMLElement, value: any): void {\n    if (el === this.elementRef.nativeElement) {\n      if (value !== this.lastValue) {\n        this.lastValue = value;\n        this.onChange(value);\n      }\n      setIonicClasses(this.elementRef);\n    }\n  }\n\n  @HostListener('ionBlur', ['$event.target'])\n  _handleBlurEvent(el: any): void {\n    if (el === this.elementRef.nativeElement) {\n      this.onTouched();\n      setIonicClasses(this.elementRef);\n\n      // When ion-radio is blurred, el and this.elementRef.nativeElement are\n      // different so we need to check if the closest ion-radio-group is the same\n      // as this.elementRef.nativeElement and if so, we need to mark the radio group\n      // as touched\n    } else if (el.closest('ion-radio-group') === this.elementRef.nativeElement) {\n      this.onTouched();\n    }\n  }\n\n  registerOnChange(fn: (value: any) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.elementRef.nativeElement.disabled = isDisabled;\n  }\n\n  ngOnDestroy(): void {\n    if (this.statusChanges) {\n      this.statusChanges.unsubscribe();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    let ngControl;\n    try {\n      ngControl = this.injector.get<NgControl>(NgControl);\n    } catch {\n      /* No FormControl or ngModel binding */\n    }\n\n    if (!ngControl) {\n      return;\n    }\n\n    // Listen for changes in validity, disabled, or pending states\n    if (ngControl.statusChanges) {\n      this.statusChanges = ngControl.statusChanges.subscribe(() => setIonicClasses(this.elementRef));\n    }\n\n    /**\n     * TODO FW-2787: Remove this in favor of https://github.com/angular/angular/issues/10887\n     * whenever it is implemented.\n     */\n    const formControl = ngControl.control as any;\n    if (formControl) {\n      const methodsToPatch = ['markAsTouched', 'markAllAsTouched', 'markAsUntouched', 'markAsDirty', 'markAsPristine'];\n      methodsToPatch.forEach((method) => {\n        if (typeof formControl[method] !== 'undefined') {\n          const oldFn = formControl[method].bind(formControl);\n          formControl[method] = (...params: any[]) => {\n            oldFn(...params);\n            setIonicClasses(this.elementRef);\n          };\n        }\n      });\n    }\n  }\n}\n\nexport const setIonicClasses = (element: ElementRef): void => {\n  raf(() => {\n    const input = element.nativeElement as HTMLInputElement;\n    const hasValue = input.value != null && input.value.toString().length > 0;\n    const classes = getClasses(input);\n    setClasses(input, classes);\n    const item = input.closest('ion-item');\n    if (item) {\n      if (hasValue) {\n        setClasses(item, [...classes, 'item-has-value']);\n      } else {\n        setClasses(item, classes);\n      }\n    }\n  });\n};\n\nconst getClasses = (element: HTMLElement) => {\n  const classList = element.classList;\n  const classes: string[] = [];\n  for (let i = 0; i < classList.length; i++) {\n    const item = classList.item(i);\n    if (item !== null && startsWith(item, 'ng-')) {\n      classes.push(`ion-${item.substring(3)}`);\n    }\n  }\n  return classes;\n};\n\nconst setClasses = (element: HTMLElement, classes: string[]) => {\n  const classList = element.classList;\n  classList.remove('ion-valid', 'ion-invalid', 'ion-touched', 'ion-untouched', 'ion-dirty', 'ion-pristine');\n  classList.add(...classes);\n};\n\nconst startsWith = (input: string, search: string): boolean => {\n  return input.substring(0, search.length) === search;\n};\n","import { HostListener, Optional, ElementRef, NgZone, ChangeDetectorRef, Directive } from '@angular/core';\nimport type { Components } from '@ionic/core';\n\nimport { Config } from '../../providers/config';\nimport { NavController } from '../../providers/nav-controller';\nimport { ProxyCmp } from '../../utils/proxy';\n\nimport { IonRouterOutlet } from './router-outlet';\n\nconst BACK_BUTTON_INPUTS = ['color', 'defaultHref', 'disabled', 'icon', 'mode', 'routerAnimation', 'text', 'type'];\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport declare interface IonBackButton extends Components.IonBackButton {}\n\n@ProxyCmp({\n  inputs: BACK_BUTTON_INPUTS,\n})\n@Directive({\n  // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n  inputs: BACK_BUTTON_INPUTS,\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class IonBackButton {\n  protected el: HTMLElement;\n\n  constructor(\n    @Optional() private routerOutlet: IonRouterOutlet,\n    private navCtrl: NavController,\n    private config: Config,\n    private r: ElementRef,\n    protected z: NgZone,\n    c: ChangeDetectorRef\n  ) {\n    c.detach();\n    this.el = this.r.nativeElement;\n  }\n\n  /**\n   * @internal\n   */\n  @HostListener('click', ['$event'])\n  onClick(ev: Event): void {\n    const defaultHref = this.defaultHref || this.config.get('backButtonDefaultHref');\n\n    if (this.routerOutlet?.canGoBack()) {\n      this.navCtrl.setDirection('back', undefined, undefined, this.routerAnimation);\n      this.routerOutlet.pop();\n      ev.preventDefault();\n    } else if (defaultHref != null) {\n      this.navCtrl.navigateBack(defaultHref, { animation: this.routerAnimation });\n      ev.preventDefault();\n    }\n  }\n}\n","import {\n  ElementRef,\n  Injector,\n  EnvironmentInjector,\n  NgZone,\n  ChangeDetectorRef,\n  Directive,\n  EventEmitter,\n} from '@angular/core';\nimport type { Components } from '@ionic/core';\n\nimport { AngularDelegate } from '../../providers/angular-delegate';\nimport { ProxyCmp, proxyOutputs } from '../../utils/proxy';\n\nconst NAV_INPUTS = ['animated', 'animation', 'root', 'rootParams', 'swipeGesture'];\n\nconst NAV_METHODS = [\n  'push',\n  'insert',\n  'insertPages',\n  'pop',\n  'popTo',\n  'popToRoot',\n  'removeIndex',\n  'setRoot',\n  'setPages',\n  'getActive',\n  'getByIndex',\n  'canGoBack',\n  'getPrevious',\n];\n\nexport declare interface IonNav extends Components.IonNav {\n  /**\n   * Event fired when the nav will change components\n   */\n  ionNavWillChange: EventEmitter<CustomEvent<void>>;\n  /**\n   * Event fired when the nav has changed components\n   */\n  ionNavDidChange: EventEmitter<CustomEvent<void>>;\n}\n\n@ProxyCmp({\n  inputs: NAV_INPUTS,\n  methods: NAV_METHODS,\n})\n@Directive({\n  // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n  inputs: NAV_INPUTS,\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class IonNav {\n  protected el: HTMLElement;\n  constructor(\n    ref: ElementRef,\n    environmentInjector: EnvironmentInjector,\n    injector: Injector,\n    angularDelegate: AngularDelegate,\n    protected z: NgZone,\n    c: ChangeDetectorRef\n  ) {\n    c.detach();\n    this.el = ref.nativeElement;\n    ref.nativeElement.delegate = angularDelegate.create(environmentInjector, injector);\n    proxyOutputs(this, this.el, ['ionNavDidChange', 'ionNavWillChange']);\n  }\n}\n","import { LocationStrategy } from '@angular/common';\nimport { ElementRef, OnChanges, OnInit, Directive, HostListener, Input, Optional } from '@angular/core';\nimport { Router, RouterLink } from '@angular/router';\nimport type { AnimationBuilder, RouterDirection } from '@ionic/core/components';\n\nimport { NavController } from '../../providers/nav-controller';\n\n/**\n * Adds support for Ionic routing directions and animations to the base Angular router link directive.\n *\n * When the router link is clicked, the directive will assign the direction and\n * animation so that the routing integration will transition correctly.\n */\n@Directive({\n  selector: ':not(a):not(area)[routerLink]',\n})\nexport class RouterLinkDelegateDirective implements OnInit, OnChanges {\n  @Input()\n  routerDirection: RouterDirection = 'forward';\n\n  @Input()\n  routerAnimation?: AnimationBuilder;\n\n  constructor(\n    private locationStrategy: LocationStrategy,\n    private navCtrl: NavController,\n    private elementRef: ElementRef,\n    private router: Router,\n    @Optional() private routerLink?: RouterLink\n  ) {}\n\n  ngOnInit(): void {\n    this.updateTargetUrlAndHref();\n    this.updateTabindex();\n  }\n\n  ngOnChanges(): void {\n    this.updateTargetUrlAndHref();\n  }\n\n  /**\n   * The `tabindex` is set to `0` by default on the host element when\n   * the `routerLink` directive is used. This causes issues with Ionic\n   * components that wrap an `a` or `button` element, such as `ion-item`.\n   * See issue https://github.com/angular/angular/issues/28345\n   *\n   * This method removes the `tabindex` attribute from the host element\n   * to allow the Ionic component to manage the focus state correctly.\n   */\n  private updateTabindex() {\n    // Ionic components that render a native anchor or button element\n    const ionicComponents = [\n      'ION-BACK-BUTTON',\n      'ION-BREADCRUMB',\n      'ION-BUTTON',\n      'ION-CARD',\n      'ION-FAB-BUTTON',\n      'ION-ITEM',\n      'ION-ITEM-OPTION',\n      'ION-MENU-BUTTON',\n      'ION-SEGMENT-BUTTON',\n      'ION-TAB-BUTTON',\n    ];\n    const hostElement = this.elementRef.nativeElement;\n\n    if (ionicComponents.includes(hostElement.tagName)) {\n      if (hostElement.getAttribute('tabindex') === '0') {\n        hostElement.removeAttribute('tabindex');\n      }\n    }\n  }\n\n  private updateTargetUrlAndHref() {\n    if (this.routerLink?.urlTree) {\n      const href = this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.routerLink.urlTree));\n      this.elementRef.nativeElement.href = href;\n    }\n  }\n\n  /**\n   * @internal\n   */\n  @HostListener('click', ['$event'])\n  onClick(ev: UIEvent): void {\n    this.navCtrl.setDirection(this.routerDirection, undefined, undefined, this.routerAnimation);\n\n    /**\n     * This prevents the browser from\n     * performing a page reload when pressing\n     * an Ionic component with routerLink.\n     * The page reload interferes with routing\n     * and causes ion-back-button to disappear\n     * since the local history is wiped on reload.\n     */\n    ev.preventDefault();\n  }\n}\n\n@Directive({\n  selector: 'a[routerLink],area[routerLink]',\n})\nexport class RouterLinkWithHrefDelegateDirective implements OnInit, OnChanges {\n  @Input()\n  routerDirection: RouterDirection = 'forward';\n\n  @Input()\n  routerAnimation?: AnimationBuilder;\n\n  constructor(\n    private locationStrategy: LocationStrategy,\n    private navCtrl: NavController,\n    private elementRef: ElementRef,\n    private router: Router,\n    @Optional() private routerLink?: RouterLink\n  ) {}\n\n  ngOnInit(): void {\n    this.updateTargetUrlAndHref();\n  }\n\n  ngOnChanges(): void {\n    this.updateTargetUrlAndHref();\n  }\n\n  private updateTargetUrlAndHref() {\n    if (this.routerLink?.urlTree) {\n      const href = this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.routerLink.urlTree));\n      this.elementRef.nativeElement.href = href;\n    }\n  }\n\n  /**\n   * @internal\n   */\n  @HostListener('click')\n  onClick(): void {\n    this.navCtrl.setDirection(this.routerDirection, undefined, undefined, this.routerAnimation);\n  }\n}\n","import {\n  AfterContentChecked,\n  AfterContentInit,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Output,\n  ViewChild,\n  AfterViewInit,\n  QueryList,\n} from '@angular/core';\n\nimport { NavController } from '../../providers/nav-controller';\n\nimport { StackDidChangeEvent, StackWillChangeEvent } from './stack-utils';\n\n@Directive({\n  selector: 'ion-tabs',\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class IonTabs implements AfterViewInit, AfterContentInit, AfterContentChecked {\n  /**\n   * Note: These must be redeclared on each child class since it needs\n   * access to generated components such as IonRouterOutlet and IonTabBar.\n   */\n  abstract outlet: any;\n  abstract tabBar: any;\n  abstract tabBars: QueryList<any>;\n  abstract tabs: QueryList<any>;\n\n  @ViewChild('tabsInner', { read: ElementRef, static: true }) tabsInner: ElementRef<HTMLDivElement>;\n\n  /**\n   * Emitted before the tab view is changed.\n   */\n  @Output() ionTabsWillChange = new EventEmitter<{ tab: string }>();\n  /**\n   * Emitted after the tab view is changed.\n   */\n  @Output() ionTabsDidChange = new EventEmitter<{ tab: string }>();\n\n  private tabBarSlot = 'bottom';\n\n  private hasTab = false;\n  private selectedTab?: { tab: string };\n  private leavingTab?: any;\n\n  constructor(private navCtrl: NavController) {}\n\n  ngAfterViewInit(): void {\n    /**\n     * Developers must pass at least one ion-tab\n     * inside of ion-tabs if they want to use a\n     * basic tab-based navigation without the\n     * history stack or URL updates associated\n     * with the router.\n     */\n    const firstTab = this.tabs.length > 0 ? this.tabs.first : undefined;\n\n    if (firstTab) {\n      this.hasTab = true;\n      this.setActiveTab(firstTab.tab);\n      this.tabSwitch();\n    }\n  }\n\n  ngAfterContentInit(): void {\n    this.detectSlotChanges();\n  }\n\n  ngAfterContentChecked(): void {\n    this.detectSlotChanges();\n  }\n\n  /**\n   * @internal\n   */\n  onStackWillChange({ enteringView, tabSwitch }: StackWillChangeEvent): void {\n    const stackId = enteringView.stackId;\n    if (tabSwitch && stackId !== undefined) {\n      this.ionTabsWillChange.emit({ tab: stackId });\n    }\n  }\n\n  /**\n   * @internal\n   */\n  onStackDidChange({ enteringView, tabSwitch }: StackDidChangeEvent): void {\n    const stackId = enteringView.stackId;\n    if (tabSwitch && stackId !== undefined) {\n      if (this.tabBar) {\n        this.tabBar.selectedTab = stackId;\n      }\n      this.ionTabsDidChange.emit({ tab: stackId });\n    }\n  }\n\n  /**\n   * When a tab button is clicked, there are several scenarios:\n   * 1. If the selected tab is currently active (the tab button has been clicked\n   *    again), then it should go to the root view for that tab.\n   *\n   *   a. Get the saved root view from the router outlet. If the saved root view\n   *      matches the tabRootUrl, set the route view to this view including the\n   *      navigation extras.\n   *   b. If the saved root view from the router outlet does\n   *      not match, navigate to the tabRootUrl. No navigation extras are\n   *      included.\n   *\n   * 2. If the current tab tab is not currently selected, get the last route\n   *    view from the router outlet.\n   *\n   *   a. If the last route view exists, navigate to that view including any\n   *      navigation extras\n   *   b. If the last route view doesn't exist, then navigate\n   *      to the default tabRootUrl\n   */\n  @HostListener('ionTabButtonClick', ['$event'])\n  select(tabOrEvent: string | CustomEvent): Promise<boolean> | undefined {\n    const isTabString = typeof tabOrEvent === 'string';\n    const tab = isTabString ? tabOrEvent : (tabOrEvent as CustomEvent).detail.tab;\n\n    /**\n     * If the tabs are not using the router, then\n     * the tab switch logic is handled by the tabs\n     * component itself.\n     */\n    if (this.hasTab) {\n      this.setActiveTab(tab);\n      this.tabSwitch();\n\n      return;\n    }\n\n    const alreadySelected = this.outlet.getActiveStackId() === tab;\n    const tabRootUrl = `${this.outlet.tabsPrefix}/${tab}`;\n\n    /**\n     * If this is a nested tab, prevent the event\n     * from bubbling otherwise the outer tabs\n     * will respond to this event too, causing\n     * the app to get directed to the wrong place.\n     */\n    if (!isTabString) {\n      (tabOrEvent as CustomEvent).stopPropagation();\n    }\n\n    if (alreadySelected) {\n      const activeStackId = this.outlet.getActiveStackId();\n      const activeView = this.outlet.getLastRouteView(activeStackId);\n\n      // If on root tab, do not navigate to root tab again\n      if (activeView?.url === tabRootUrl) {\n        return;\n      }\n\n      const rootView = this.outlet.getRootView(tab);\n      const navigationExtras = rootView && tabRootUrl === rootView.url && rootView.savedExtras;\n      return this.navCtrl.navigateRoot(tabRootUrl, {\n        ...navigationExtras,\n        animated: true,\n        animationDirection: 'back',\n      });\n    } else {\n      const lastRoute = this.outlet.getLastRouteView(tab);\n      /**\n       * If there is a lastRoute, goto that, otherwise goto the fallback url of the\n       * selected tab\n       */\n      const url = lastRoute?.url || tabRootUrl;\n      const navigationExtras = lastRoute?.savedExtras;\n\n      return this.navCtrl.navigateRoot(url, {\n        ...navigationExtras,\n        animated: true,\n        animationDirection: 'back',\n      });\n    }\n  }\n\n  private setActiveTab(tab: string): void {\n    const tabs = this.tabs;\n    const selectedTab = tabs.find((t: any) => t.tab === tab);\n\n    if (!selectedTab) {\n      console.error(`[Ionic Error]: Tab with id: \"${tab}\" does not exist`);\n      return;\n    }\n\n    this.leavingTab = this.selectedTab;\n    this.selectedTab = selectedTab;\n\n    this.ionTabsWillChange.emit({ tab });\n\n    selectedTab.el.active = true;\n  }\n\n  private tabSwitch(): void {\n    const { selectedTab, leavingTab } = this;\n\n    if (this.tabBar && selectedTab) {\n      this.tabBar.selectedTab = selectedTab.tab;\n    }\n\n    if (leavingTab?.tab !== selectedTab?.tab) {\n      if (leavingTab?.el) {\n        leavingTab.el.active = false;\n      }\n    }\n\n    if (selectedTab) {\n      this.ionTabsDidChange.emit({ tab: selectedTab.tab });\n    }\n  }\n\n  getSelected(): string | undefined {\n    if (this.hasTab) {\n      return this.selectedTab?.tab;\n    }\n\n    return this.outlet.getActiveStackId();\n  }\n\n  /**\n   * Detects changes to the slot attribute of the tab bar.\n   *\n   * If the slot attribute has changed, then the tab bar\n   * should be relocated to the new slot position.\n   */\n  private detectSlotChanges(): void {\n    this.tabBars.forEach((tabBar: any) => {\n      // el is a protected attribute from the generated component wrapper\n      const currentSlot = tabBar.el.getAttribute('slot');\n\n      if (currentSlot !== this.tabBarSlot) {\n        this.tabBarSlot = currentSlot;\n        this.relocateTabBar();\n      }\n    });\n  }\n\n  /**\n   * Relocates the tab bar to the new slot position.\n   */\n  private relocateTabBar(): void {\n    /**\n     * `el` is a protected attribute from the generated component wrapper.\n     * To avoid having to manually create the wrapper for tab bar, we\n     * cast the tab bar to any and access the protected attribute.\n     */\n    const tabBar = (this.tabBar as any).el as HTMLElement;\n\n    if (this.tabBarSlot === 'top') {\n      /**\n       * A tab bar with a slot of \"top\" should be inserted\n       * at the top of the container.\n       */\n      this.tabsInner.nativeElement.before(tabBar);\n    } else {\n      /**\n       * A tab bar with a slot of \"bottom\" or without a slot\n       * should be inserted at the end of the container.\n       */\n      this.tabsInner.nativeElement.after(tabBar);\n    }\n  }\n}\n","// TODO(FW-2827): types\n\nexport interface ControllerShape<Opts, HTMLElm> {\n  create(options: Opts): Promise<HTMLElm>;\n  dismiss(data?: any, role?: string, id?: string): Promise<boolean>;\n  getTop(): Promise<HTMLElm | undefined>;\n}\n\nexport class OverlayBaseController<Opts, Overlay> implements ControllerShape<Opts, Overlay> {\n  constructor(private ctrl: ControllerShape<Opts, Overlay>) {}\n\n  /**\n   * Creates a new overlay\n   */\n  create(opts?: Opts): Promise<Overlay> {\n    return this.ctrl.create((opts || {}) as any);\n  }\n\n  /**\n   * When `id` is not provided, it dismisses the top overlay.\n   */\n  dismiss(data?: any, role?: string, id?: string): Promise<boolean> {\n    return this.ctrl.dismiss(data, role, id);\n  }\n\n  /**\n   * Returns the top overlay.\n   */\n  getTop(): Promise<Overlay | undefined> {\n    return this.ctrl.getTop();\n  }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';\n\n/**\n * Provides a way to customize when activated routes get reused.\n */\nexport class IonicRouteStrategy implements RouteReuseStrategy {\n  /**\n   * Whether the given route should detach for later reuse.\n   */\n  shouldDetach(_route: ActivatedRouteSnapshot): boolean {\n    return false;\n  }\n\n  /**\n   * Returns `false`, meaning the route (and its subtree) is never reattached\n   */\n  shouldAttach(_route: ActivatedRouteSnapshot): boolean {\n    return false;\n  }\n\n  /**\n   * A no-op; the route is never stored since this strategy never detaches routes for later re-use.\n   */\n  store(_route: ActivatedRouteSnapshot, _detachedTree: DetachedRouteHandle): void {\n    return;\n  }\n\n  /**\n   * Returns `null` because this strategy does not store routes for later re-use.\n   */\n  retrieve(_route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n    return null;\n  }\n\n  /**\n   * Determines if a route should be reused.\n   * This strategy returns `true` when the future route config and\n   * current route config are identical and all route parameters are identical.\n   */\n  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n    if (future.routeConfig !== curr.routeConfig) {\n      return false;\n    }\n\n    // checking router params\n    const futureParams = future.params;\n    const currentParams = curr.params;\n    const keysA = Object.keys(futureParams);\n    const keysB = Object.keys(currentParams);\n\n    if (keysA.length !== keysB.length) {\n      return false;\n    }\n\n    // Test for A's keys different from B.\n    for (const key of keysA) {\n      if (currentParams[key] !== futureParams[key]) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.Platform","i2","i1.IonRouterOutlet","i2.NavController","i3.Config","i1.AngularDelegate","i1.NavController"],"mappings":"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"}