mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
146 KiB
1 lines
146 KiB
{"version":3,"file":"_router_module-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/directives/router_link.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/directives/router_link_active.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/router_preloader.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/router_scroller.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/router_devtools.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/statemanager/navigation_state_manager.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/provide_router.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/router_module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {LocationStrategy} from '@angular/common';\nimport {\n Attribute,\n booleanAttribute,\n Directive,\n ElementRef,\n HostAttributeToken,\n HostBinding,\n HostListener,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Renderer2,\n ɵRuntimeError as RuntimeError,\n signal,\n SimpleChanges,\n untracked,\n ɵINTERNAL_APPLICATION_ERROR_HANDLER,\n} from '@angular/core';\nimport {Subject, Subscription} from 'rxjs';\nimport {RuntimeErrorCode} from '../errors';\nimport {Event, NavigationEnd} from '../events';\nimport {QueryParamsHandling} from '../models';\nimport {Router} from '../router';\nimport {ROUTER_CONFIGURATION} from '../router_config';\nimport {ActivatedRoute} from '../router_state';\nimport {Params} from '../shared';\nimport {isUrlTree, UrlTree} from '../url_tree';\n\n/**\n * @description\n *\n * When applied to an element in a template, makes that element a link\n * that initiates navigation to a route. Navigation opens one or more routed components\n * in one or more `<router-outlet>` locations on the page.\n *\n * Given a route configuration `[{ path: 'user/:name', component: UserCmp }]`,\n * the following creates a static link to the route:\n * `<a routerLink=\"/user/bob\">link to user component</a>`\n *\n * You can use dynamic values to generate the link.\n * For a dynamic link, pass an array of path segments,\n * followed by the params for each segment.\n * For example, `['/team', teamId, 'user', userName, {details: true}]`\n * generates a link to `/team/11/user/bob;details=true`.\n *\n * Multiple static segments can be merged into one term and combined with dynamic segments.\n * For example, `['/team/11/user', userName, {details: true}]`\n *\n * The input that you provide to the link is treated as a delta to the current URL.\n * For instance, suppose the current URL is `/user/(box//aux:team)`.\n * The link `<a [routerLink]=\"['/user/jim']\">Jim</a>` creates the URL\n * `/user/(jim//aux:team)`.\n * See {@link Router#createUrlTree} for more information.\n *\n * @usageNotes\n *\n * You can use absolute or relative paths in a link, set query parameters,\n * control how parameters are handled, and keep a history of navigation states.\n *\n * ### Relative link paths\n *\n * The first segment name can be prepended with `/`, `./`, or `../`.\n * * If the first segment begins with `/`, the router looks up the route from the root of the\n * app.\n * * If the first segment begins with `./`, or doesn't begin with a slash, the router\n * looks in the children of the current activated route.\n * * If the first segment begins with `../`, the router goes up one level in the route tree.\n *\n * ### Setting and handling query params and fragments\n *\n * The following link adds a query parameter and a fragment to the generated URL:\n *\n * ```html\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" fragment=\"education\">\n * link to user component\n * </a>\n * ```\n * By default, the directive constructs the new URL using the given query parameters.\n * The example generates the link: `/user/bob?debug=true#education`.\n *\n * You can instruct the directive to handle query parameters differently\n * by specifying the `queryParamsHandling` option in the link.\n * Allowed values are:\n *\n * - `'merge'`: Merge the given `queryParams` into the current query params.\n * - `'preserve'`: Preserve the current query params.\n *\n * For example:\n *\n * ```html\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" queryParamsHandling=\"merge\">\n * link to user component\n * </a>\n * ```\n *\n * `queryParams`, `fragment`, `queryParamsHandling`, `preserveFragment`, and `relativeTo`\n * cannot be used when the `routerLink` input is a `UrlTree`.\n *\n * See {@link UrlCreationOptions#queryParamsHandling}.\n *\n * ### Preserving navigation history\n *\n * You can provide a `state` value to be persisted to the browser's\n * [`History.state` property](https://developer.mozilla.org/en-US/docs/Web/API/History#Properties).\n * For example:\n *\n * ```html\n * <a [routerLink]=\"['/user/bob']\" [state]=\"{tracingId: 123}\">\n * link to user component\n * </a>\n * ```\n *\n * Use {@link Router#currentNavigation} to retrieve a saved Signal\n * navigation-state value. For example, to capture the `tracingId` during the `NavigationStart`\n * event:\n *\n * ```ts\n * // Get NavigationStart events\n * router.events.pipe(filter(e => e instanceof NavigationStart)).subscribe(e => {\n * const navigation = router.currentNavigation();\n * tracingService.trace({id: navigation.extras.state.tracingId});\n * });\n * ```\n *\n * ### RouterLink compatible custom elements\n *\n * In order to make a custom element work with routerLink, the corresponding custom\n * element must implement the `href` attribute and must list `href` in the array of\n * the static property/getter `observedAttributes`.\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\n@Directive({\n selector: '[routerLink]',\n host: {\n '[attr.href]': 'reactiveHref()',\n },\n})\nexport class RouterLink implements OnChanges, OnDestroy {\n /** @nodoc */\n protected readonly reactiveHref = signal<string | null>(null);\n /**\n * Represents an `href` attribute value applied to a host element,\n * when a host element is an `<a>`/`<area>` tag or a compatible custom element.\n * For other tags, the value is `null`.\n */\n get href() {\n return untracked(this.reactiveHref);\n }\n /** @deprecated */\n set href(value: string | null) {\n this.reactiveHref.set(value);\n }\n\n /**\n * Represents the `target` attribute on a host element.\n * This is only used when the host element is\n * an `<a>`/`<area>` tag or a compatible custom element.\n */\n @HostBinding('attr.target') @Input() target?: string;\n\n /**\n * Passed to {@link Router#createUrlTree} as part of the\n * `UrlCreationOptions`.\n * @see {@link UrlCreationOptions#queryParams}\n * @see {@link Router#createUrlTree}\n */\n @Input() queryParams?: Params | null;\n /**\n * Passed to {@link Router#createUrlTree} as part of the\n * `UrlCreationOptions`.\n * @see {@link UrlCreationOptions#fragment}\n * @see {@link Router#createUrlTree}\n */\n @Input() fragment?: string;\n /**\n * Passed to {@link Router#createUrlTree} as part of the\n * `UrlCreationOptions`.\n * @see {@link UrlCreationOptions#queryParamsHandling}\n * @see {@link Router#createUrlTree}\n */\n @Input() queryParamsHandling?: QueryParamsHandling | null;\n /**\n * Passed to {@link Router#navigateByUrl} as part of the\n * `NavigationBehaviorOptions`.\n * @see {@link NavigationBehaviorOptions#state}\n * @see {@link Router#navigateByUrl}\n */\n @Input() state?: {[k: string]: any};\n /**\n * Passed to {@link Router#navigateByUrl} as part of the\n * `NavigationBehaviorOptions`.\n * @see {@link NavigationBehaviorOptions#info}\n * @see {@link Router#navigateByUrl}\n */\n @Input() info?: unknown;\n /**\n * Passed to {@link Router#createUrlTree} as part of the\n * `UrlCreationOptions`.\n * Specify a value here when you do not want to use the default value\n * for `routerLink`, which is the current activated route.\n * Note that a value of `undefined` here will use the `routerLink` default.\n * @see {@link UrlCreationOptions#relativeTo}\n * @see {@link Router#createUrlTree}\n */\n @Input() relativeTo?: ActivatedRoute | null;\n\n /** Whether a host element is an `<a>`/`<area>` tag or a compatible custom element. */\n private isAnchorElement: boolean;\n\n private subscription?: Subscription;\n\n /** @internal */\n onChanges = new Subject<RouterLink>();\n\n private readonly applicationErrorHandler = inject(ɵINTERNAL_APPLICATION_ERROR_HANDLER);\n private readonly options = inject(ROUTER_CONFIGURATION, {optional: true});\n\n constructor(\n private router: Router,\n private route: ActivatedRoute,\n @Attribute('tabindex') private readonly tabIndexAttribute: string | null | undefined,\n private readonly renderer: Renderer2,\n private readonly el: ElementRef,\n private locationStrategy?: LocationStrategy,\n ) {\n // Set the initial href value to whatever exists on the host element already\n this.reactiveHref.set(inject(new HostAttributeToken('href'), {optional: true}));\n const tagName = el.nativeElement.tagName?.toLowerCase();\n this.isAnchorElement =\n tagName === 'a' ||\n tagName === 'area' ||\n !!(\n // Avoid breaking in an SSR context where customElements might not be defined.\n (\n typeof customElements === 'object' &&\n // observedAttributes is an optional static property/getter on a custom element.\n // The spec states that this must be an array of strings.\n (\n customElements.get(tagName) as {observedAttributes?: string[]} | undefined\n )?.observedAttributes?.includes?.('href')\n )\n );\n\n if (this.isAnchorElement) {\n this.setTabIndexIfNotOnNativeEl('0');\n this.subscribeToNavigationEventsIfNecessary();\n }\n }\n\n private subscribeToNavigationEventsIfNecessary() {\n if (this.subscription !== undefined) {\n return;\n }\n\n this.subscription = this.router.events.subscribe((s: Event) => {\n if (s instanceof NavigationEnd) {\n this.updateHref();\n }\n });\n }\n\n /**\n * Passed to {@link Router#createUrlTree} as part of the\n * `UrlCreationOptions`.\n * @see {@link UrlCreationOptions#preserveFragment}\n * @see {@link Router#createUrlTree}\n */\n @Input({transform: booleanAttribute}) preserveFragment: boolean = false;\n\n /**\n * Passed to {@link Router#navigateByUrl} as part of the\n * `NavigationBehaviorOptions`.\n * @see {@link NavigationBehaviorOptions#skipLocationChange}\n * @see {@link Router#navigateByUrl}\n */\n @Input({transform: booleanAttribute}) skipLocationChange: boolean = false;\n\n /**\n * Passed to {@link Router#navigateByUrl} as part of the\n * `NavigationBehaviorOptions`.\n * @see {@link NavigationBehaviorOptions#replaceUrl}\n * @see {@link Router#navigateByUrl}\n */\n @Input({transform: booleanAttribute}) replaceUrl: boolean = false;\n\n /**\n * Modifies the tab index if there was not a tabindex attribute on the element during\n * instantiation.\n */\n private setTabIndexIfNotOnNativeEl(newTabIndex: string | null) {\n if (this.tabIndexAttribute != null /* both `null` and `undefined` */ || this.isAnchorElement) {\n return;\n }\n this.applyAttributeValue('tabindex', newTabIndex);\n }\n\n /** @docs-private */\n // TODO(atscott): Remove changes parameter in major version as a breaking change.\n ngOnChanges(changes?: SimpleChanges): void {\n if (\n ngDevMode &&\n isUrlTree(this.routerLinkInput) &&\n (this.fragment !== undefined ||\n this.queryParams ||\n this.queryParamsHandling ||\n this.preserveFragment ||\n this.relativeTo)\n ) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_ROUTER_LINK_INPUTS,\n 'Cannot configure queryParams or fragment when using a UrlTree as the routerLink input value.',\n );\n }\n if (this.isAnchorElement) {\n this.updateHref();\n }\n // This is subscribed to by `RouterLinkActive` so that it knows to update when there are changes\n // to the RouterLinks it's tracking.\n this.onChanges.next(this);\n }\n\n private routerLinkInput: readonly any[] | UrlTree | null = null;\n\n /**\n * Commands to pass to {@link Router#createUrlTree} or a `UrlTree`.\n * - **array**: commands to pass to {@link Router#createUrlTree}.\n * - **string**: shorthand for array of commands with just the string, i.e. `['/route']`\n * - **UrlTree**: a `UrlTree` for this link rather than creating one from the commands\n * and other inputs that correspond to properties of `UrlCreationOptions`.\n * - **null|undefined**: effectively disables the `routerLink`\n * @see {@link Router#createUrlTree}\n */\n @Input()\n set routerLink(commandsOrUrlTree: readonly any[] | string | UrlTree | null | undefined) {\n if (commandsOrUrlTree == null) {\n this.routerLinkInput = null;\n this.setTabIndexIfNotOnNativeEl(null);\n } else {\n if (isUrlTree(commandsOrUrlTree)) {\n this.routerLinkInput = commandsOrUrlTree;\n } else {\n this.routerLinkInput = Array.isArray(commandsOrUrlTree)\n ? commandsOrUrlTree\n : [commandsOrUrlTree];\n }\n this.setTabIndexIfNotOnNativeEl('0');\n }\n }\n\n /** @docs-private */\n @HostListener('click', [\n '$event.button',\n '$event.ctrlKey',\n '$event.shiftKey',\n '$event.altKey',\n '$event.metaKey',\n ])\n onClick(\n button: number,\n ctrlKey: boolean,\n shiftKey: boolean,\n altKey: boolean,\n metaKey: boolean,\n ): boolean {\n const urlTree = this.urlTree;\n\n if (urlTree === null) {\n return true;\n }\n\n if (this.isAnchorElement) {\n if (button !== 0 || ctrlKey || shiftKey || altKey || metaKey) {\n return true;\n }\n\n if (typeof this.target === 'string' && this.target != '_self') {\n return true;\n }\n }\n\n const extras = {\n skipLocationChange: this.skipLocationChange,\n replaceUrl: this.replaceUrl,\n state: this.state,\n info: this.info,\n };\n // navigateByUrl is mocked frequently in tests... Reduce breakages when adding `catch`\n this.router.navigateByUrl(urlTree, extras)?.catch((e) => {\n this.applicationErrorHandler(e);\n });\n\n // Return `false` for `<a>` elements to prevent default action\n // and cancel the native behavior, since the navigation is handled\n // by the Router.\n return !this.isAnchorElement;\n }\n\n /** @docs-private */\n ngOnDestroy(): any {\n this.subscription?.unsubscribe();\n }\n\n private updateHref(): void {\n const urlTree = this.urlTree;\n this.reactiveHref.set(\n urlTree !== null && this.locationStrategy\n ? (this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(urlTree)) ?? '')\n : null,\n );\n }\n\n private applyAttributeValue(attrName: string, attrValue: string | null) {\n const renderer = this.renderer;\n const nativeElement = this.el.nativeElement;\n if (attrValue !== null) {\n renderer.setAttribute(nativeElement, attrName, attrValue);\n } else {\n renderer.removeAttribute(nativeElement, attrName);\n }\n }\n\n get urlTree(): UrlTree | null {\n if (this.routerLinkInput === null) {\n return null;\n } else if (isUrlTree(this.routerLinkInput)) {\n return this.routerLinkInput;\n }\n return this.router.createUrlTree(this.routerLinkInput, {\n // If the `relativeTo` input is not defined, we want to use `this.route` by default.\n // Otherwise, we should use the value provided by the user in the input.\n relativeTo: this.relativeTo !== undefined ? this.relativeTo : this.route,\n queryParams: this.queryParams,\n fragment: this.fragment,\n queryParamsHandling: this.queryParamsHandling,\n preserveFragment: this.preserveFragment,\n });\n }\n}\n\n/**\n * @description\n * An alias for the `RouterLink` directive.\n * Deprecated since v15, use `RouterLink` directive instead.\n *\nexport { RouterLink as RouterLinkWithHref };\nnstead.\n * @publicApi\n */\nexport {RouterLink as RouterLinkWithHref};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n AfterContentInit,\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n untracked,\n} from '@angular/core';\nimport {from, of, Subscription} from 'rxjs';\nimport {mergeAll} from 'rxjs/operators';\n\nimport {Event, NavigationEnd} from '../events';\nimport {exactMatchOptions, Router, subsetMatchOptions} from '../router';\nimport {isActive, IsActiveMatchOptions} from '../url_tree';\n\nimport {RouterLink} from './router_link';\n\n/**\n *\n * @description\n *\n * Tracks whether the linked route of an element is currently active, and allows you\n * to specify one or more CSS classes to add to the element when the linked route\n * is active.\n *\n * Use this directive to create a visual distinction for elements associated with an active route.\n * For example, the following code highlights the word \"Bob\" when the router\n * activates the associated route:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\">Bob</a>\n * ```\n *\n * Whenever the URL is either '/user' or '/user/bob', the \"active-link\" class is\n * added to the anchor tag. If the URL changes, the class is removed.\n *\n * You can set more than one class using a space-separated string or an array.\n * For example:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive=\"class1 class2\">Bob</a>\n * <a routerLink=\"/user/bob\" [routerLinkActive]=\"['class1', 'class2']\">Bob</a>\n * ```\n *\n * To add the classes only when the URL matches the link exactly, add the option `exact: true`:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact:\n * true}\">Bob</a>\n * ```\n *\n * To directly check the `isActive` status of the link, assign the `RouterLinkActive`\n * instance to a template variable.\n * For example, the following checks the status without assigning any CSS classes:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive #rla=\"routerLinkActive\">\n * Bob {{ rla.isActive ? '(already open)' : ''}}\n * </a>\n * ```\n *\n * You can apply the `RouterLinkActive` directive to an ancestor of linked elements.\n * For example, the following sets the active-link class on the `<div>` parent tag\n * when the URL is either '/user/jim' or '/user/bob'.\n *\n * ```html\n * <div routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact: true}\">\n * <a routerLink=\"/user/jim\">Jim</a>\n * <a routerLink=\"/user/bob\">Bob</a>\n * </div>\n * ```\n *\n * The `RouterLinkActive` directive can also be used to set the aria-current attribute\n * to provide an alternative distinction for active elements to visually impaired users.\n *\n * For example, the following code adds the 'active' class to the Home Page link when it is\n * indeed active and in such case also sets its aria-current attribute to 'page':\n *\n * ```html\n * <a routerLink=\"/\" routerLinkActive=\"active\" ariaCurrentWhenActive=\"page\">Home Page</a>\n * ```\n *\n * NOTE: RouterLinkActive is a `ContentChildren` query.\n * Content children queries do not retrieve elements or directives that are in other components' templates, since a component's template is always a black box to its ancestors.\n *\n * @ngModule RouterModule\n *\n * @see [Detect active current route with RouterLinkActive](guide/routing/read-route-state#detect-active-current-route-with-routerlinkactive)\n *\n * @publicApi\n */\n@Directive({\n selector: '[routerLinkActive]',\n exportAs: 'routerLinkActive',\n})\nexport class RouterLinkActive implements OnChanges, OnDestroy, AfterContentInit {\n @ContentChildren(RouterLink, {descendants: true}) links!: QueryList<RouterLink>;\n\n private classes: string[] = [];\n private routerEventsSubscription: Subscription;\n private linkInputChangesSubscription?: Subscription;\n private _isActive = false;\n\n get isActive(): boolean {\n return this._isActive;\n }\n\n /**\n * Options to configure how to determine if the router link is active.\n *\n * These options are passed to the `isActive()` function.\n *\n * @see {@link isActive}\n */\n @Input() routerLinkActiveOptions: {exact: boolean} | IsActiveMatchOptions = {exact: false};\n\n /**\n * Aria-current attribute to apply when the router link is active.\n *\n * Possible values: `'page'` | `'step'` | `'location'` | `'date'` | `'time'` | `true` | `false`.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current}\n */\n @Input() ariaCurrentWhenActive?: 'page' | 'step' | 'location' | 'date' | 'time' | true | false;\n\n /**\n *\n * You can use the output `isActiveChange` to get notified each time the link becomes\n * active or inactive.\n *\n * Emits:\n * true -> Route is active\n * false -> Route is inactive\n *\n * ```html\n * <a\n * routerLink=\"/user/bob\"\n * routerLinkActive=\"active-link\"\n * (isActiveChange)=\"this.onRouterLinkActive($event)\">Bob</a>\n * ```\n */\n @Output() readonly isActiveChange: EventEmitter<boolean> = new EventEmitter();\n\n private link = inject(RouterLink, {optional: true});\n\n constructor(\n private router: Router,\n private element: ElementRef,\n private renderer: Renderer2,\n private readonly cdr: ChangeDetectorRef,\n ) {\n this.routerEventsSubscription = router.events.subscribe((s: Event) => {\n if (s instanceof NavigationEnd) {\n this.update();\n }\n });\n }\n\n /** @docs-private */\n ngAfterContentInit(): void {\n // `of(null)` is used to force subscribe body to execute once immediately (like `startWith`).\n of(this.links.changes, of(null))\n .pipe(mergeAll())\n .subscribe((_) => {\n this.update();\n this.subscribeToEachLinkOnChanges();\n });\n }\n\n private subscribeToEachLinkOnChanges() {\n this.linkInputChangesSubscription?.unsubscribe();\n const allLinkChanges = [...this.links.toArray(), this.link]\n .filter((link): link is RouterLink => !!link)\n .map((link) => link.onChanges);\n this.linkInputChangesSubscription = from(allLinkChanges)\n .pipe(mergeAll())\n .subscribe((link) => {\n if (this._isActive !== this.isLinkActive(this.router)(link)) {\n this.update();\n }\n });\n }\n\n @Input()\n set routerLinkActive(data: string[] | string) {\n const classes = Array.isArray(data) ? data : data.split(' ');\n this.classes = classes.filter((c) => !!c);\n }\n\n /** @docs-private */\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n /** @docs-private */\n ngOnDestroy(): void {\n this.routerEventsSubscription.unsubscribe();\n this.linkInputChangesSubscription?.unsubscribe();\n }\n\n private update(): void {\n if (!this.links || !this.router.navigated) return;\n\n queueMicrotask(() => {\n const hasActiveLinks = this.hasActiveLinks();\n this.classes.forEach((c) => {\n if (hasActiveLinks) {\n this.renderer.addClass(this.element.nativeElement, c);\n } else {\n this.renderer.removeClass(this.element.nativeElement, c);\n }\n });\n if (hasActiveLinks && this.ariaCurrentWhenActive !== undefined) {\n this.renderer.setAttribute(\n this.element.nativeElement,\n 'aria-current',\n this.ariaCurrentWhenActive.toString(),\n );\n } else {\n this.renderer.removeAttribute(this.element.nativeElement, 'aria-current');\n }\n\n // Only emit change if the active state changed.\n if (this._isActive !== hasActiveLinks) {\n this._isActive = hasActiveLinks;\n this.cdr.markForCheck();\n // Emit on isActiveChange after classes are updated\n this.isActiveChange.emit(hasActiveLinks);\n }\n });\n }\n\n private isLinkActive(router: Router): (link: RouterLink) => boolean {\n const options: IsActiveMatchOptions = isActiveMatchOptions(this.routerLinkActiveOptions)\n ? this.routerLinkActiveOptions\n : // While the types should disallow `undefined` here, it's possible without strict inputs\n (this.routerLinkActiveOptions.exact ?? false)\n ? {...exactMatchOptions}\n : {...subsetMatchOptions};\n\n return (link: RouterLink) => {\n const urlTree = link.urlTree;\n return urlTree ? untracked(isActive(urlTree, router, options)) : false;\n };\n }\n\n private hasActiveLinks(): boolean {\n const isActiveCheckFn = this.isLinkActive(this.router);\n return (this.link && isActiveCheckFn(this.link)) || this.links.some(isActiveCheckFn);\n }\n}\n\n/**\n * Use instead of `'paths' in options` to be compatible with property renaming\n */\nfunction isActiveMatchOptions(\n options: {exact: boolean} | IsActiveMatchOptions,\n): options is IsActiveMatchOptions {\n return !!(options as IsActiveMatchOptions).paths;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {createEnvironmentInjector, EnvironmentInjector, Injectable, OnDestroy} from '@angular/core';\nimport {from, Observable, of, Subscription} from 'rxjs';\nimport {catchError, concatMap, filter, mergeAll, mergeMap} from 'rxjs/operators';\n\nimport {Event, NavigationEnd} from './events';\nimport {LoadedRouterConfig, Route, Routes} from './models';\nimport {Router} from './router';\nimport {RouterConfigLoader} from './router_config_loader';\n\n/**\n * @description\n *\n * Provides a preloading strategy.\n *\n * @see [Preloading strategy](guide/routing/customizing-route-behavior#preloading-strategy)\n * @publicApi\n */\nexport abstract class PreloadingStrategy {\n abstract preload(route: Route, fn: () => Observable<any>): Observable<any>;\n}\n\n/**\n * @description\n *\n * Provides a preloading strategy that preloads all modules as quickly as possible.\n *\n * ```ts\n * RouterModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})\n * ```\n *\n * ```ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideRouter(\n * routes,\n * withPreloading(PreloadAllModules)\n * )\n * ]\n * };\n * ```\n *\n *\n * @see [Preloading strategy](guide/routing/customizing-route-behavior#preloading-strategy)\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class PreloadAllModules implements PreloadingStrategy {\n preload(route: Route, fn: () => Observable<any>): Observable<any> {\n return fn().pipe(catchError(() => of(null)));\n }\n}\n\n/**\n * @description\n *\n * Provides a preloading strategy that does not preload any modules.\n *\n * This strategy is enabled by default.\n *\n * @see [Preloading strategy](guide/routing/customizing-route-behavior#preloading-strategy)\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class NoPreloading implements PreloadingStrategy {\n preload(route: Route, fn: () => Observable<any>): Observable<any> {\n return of(null);\n }\n}\n\n/**\n * The preloader optimistically loads all router configurations to\n * make navigations into lazily-loaded sections of the application faster.\n *\n * The preloader runs in the background. When the router bootstraps, the preloader\n * starts listening to all navigation events. After every such event, the preloader\n * will check if any configurations can be loaded lazily.\n *\n * If a route is protected by `canLoad` guards, the preloaded will not load it.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class RouterPreloader implements OnDestroy {\n private subscription?: Subscription;\n\n constructor(\n private router: Router,\n private injector: EnvironmentInjector,\n private preloadingStrategy: PreloadingStrategy,\n private loader: RouterConfigLoader,\n ) {}\n\n setUpPreloading(): void {\n this.subscription = this.router.events\n .pipe(\n filter((e: Event) => e instanceof NavigationEnd),\n concatMap(() => this.preload()),\n )\n .subscribe(() => {});\n }\n\n preload(): Observable<any> {\n return this.processRoutes(this.injector, this.router.config);\n }\n\n /** @docs-private */\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n private processRoutes(injector: EnvironmentInjector, routes: Routes): Observable<void> {\n const res: Observable<any>[] = [];\n for (const route of routes) {\n if (route.providers && !route._injector) {\n route._injector = createEnvironmentInjector(\n route.providers,\n injector,\n typeof ngDevMode === 'undefined' || ngDevMode ? `Route: ${route.path}` : '',\n );\n }\n\n const injectorForCurrentRoute = route._injector ?? injector;\n if (route._loadedNgModuleFactory && !route._loadedInjector) {\n route._loadedInjector =\n route._loadedNgModuleFactory.create(injectorForCurrentRoute).injector;\n }\n const injectorForChildren = route._loadedInjector ?? injectorForCurrentRoute;\n\n // Note that `canLoad` is only checked as a condition that prevents `loadChildren` and not\n // `loadComponent`. `canLoad` guards only block loading of child routes by design. This\n // happens as a consequence of needing to descend into children for route matching immediately\n // while component loading is deferred until route activation. Because `canLoad` guards can\n // have side effects, we cannot execute them here so we instead skip preloading altogether\n // when present. Lastly, it remains to be decided whether `canLoad` should behave this way\n // at all. Code splitting and lazy loading is separate from client-side authorization checks\n // and should not be used as a security measure to prevent loading of code.\n if (\n (route.loadChildren && !route._loadedRoutes && route.canLoad === undefined) ||\n (route.loadComponent && !route._loadedComponent)\n ) {\n res.push(this.preloadConfig(injectorForCurrentRoute, route));\n }\n if (route.children || route._loadedRoutes) {\n res.push(this.processRoutes(injectorForChildren, (route.children ?? route._loadedRoutes)!));\n }\n }\n return from(res).pipe(mergeAll());\n }\n\n private preloadConfig(injector: EnvironmentInjector, route: Route): Observable<void> {\n return this.preloadingStrategy.preload(route, () => {\n if (injector.destroyed) {\n return of(null);\n }\n let loadedChildren$: Observable<LoadedRouterConfig | null>;\n if (route.loadChildren && route.canLoad === undefined) {\n loadedChildren$ = from(this.loader.loadChildren(injector, route));\n } else {\n loadedChildren$ = of(null);\n }\n\n const recursiveLoadChildren$ = loadedChildren$.pipe(\n mergeMap((config: LoadedRouterConfig | null) => {\n if (config === null) {\n return of(void 0);\n }\n route._loadedRoutes = config.routes;\n route._loadedInjector = config.injector;\n route._loadedNgModuleFactory = config.factory;\n // If the loaded config was a module, use that as the module/module injector going\n // forward. Otherwise, continue using the current module/module injector.\n return this.processRoutes(config.injector ?? injector, config.routes);\n }),\n );\n if (route.loadComponent && !route._loadedComponent) {\n const loadComponent$ = this.loader.loadComponent(injector, route);\n return from([recursiveLoadChildren$, loadComponent$]).pipe(mergeAll());\n } else {\n return recursiveLoadChildren$;\n }\n });\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ViewportScroller} from '@angular/common';\nimport {inject, Injectable, InjectionToken, NgZone, OnDestroy, untracked} from '@angular/core';\nimport {Unsubscribable} from 'rxjs';\n\nimport {\n IMPERATIVE_NAVIGATION,\n NavigationEnd,\n NavigationSkipped,\n NavigationSkippedCode,\n NavigationStart,\n NavigationTrigger,\n Scroll,\n} from './events';\nimport {NavigationTransitions} from './navigation_transition';\nimport {UrlSerializer} from './url_tree';\n\nexport const ROUTER_SCROLLER = new InjectionToken<RouterScroller>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'Router Scroller' : '',\n);\n\n@Injectable()\nexport class RouterScroller implements OnDestroy {\n private routerEventsSubscription?: Unsubscribable;\n private scrollEventsSubscription?: Unsubscribable;\n\n private lastId = 0;\n private lastSource: NavigationTrigger | undefined = IMPERATIVE_NAVIGATION;\n private restoredId = 0;\n private store: {[key: string]: [number, number]} = {};\n\n private readonly urlSerializer = inject(UrlSerializer);\n private readonly zone = inject(NgZone);\n readonly viewportScroller = inject(ViewportScroller);\n private readonly transitions = inject(NavigationTransitions);\n\n /** @docs-private */\n constructor(\n private options: {\n scrollPositionRestoration?: 'disabled' | 'enabled' | 'top';\n anchorScrolling?: 'disabled' | 'enabled';\n },\n ) {\n // Default both options to 'disabled'\n this.options.scrollPositionRestoration ||= 'disabled';\n this.options.anchorScrolling ||= 'disabled';\n }\n\n init(): void {\n // we want to disable the automatic scrolling because having two places\n // responsible for scrolling results race conditions, especially given\n // that browser don't implement this behavior consistently\n if (this.options.scrollPositionRestoration !== 'disabled') {\n this.viewportScroller.setHistoryScrollRestoration('manual');\n }\n this.routerEventsSubscription = this.createScrollEvents();\n this.scrollEventsSubscription = this.consumeScrollEvents();\n }\n\n private createScrollEvents() {\n return this.transitions.events.subscribe((e) => {\n if (e instanceof NavigationStart) {\n // store the scroll position of the current stable navigations.\n this.store[this.lastId] = this.viewportScroller.getScrollPosition();\n this.lastSource = e.navigationTrigger;\n this.restoredId = e.restoredState ? e.restoredState.navigationId : 0;\n } else if (e instanceof NavigationEnd) {\n this.lastId = e.id;\n this.scheduleScrollEvent(e, this.urlSerializer.parse(e.urlAfterRedirects).fragment);\n } else if (\n e instanceof NavigationSkipped &&\n e.code === NavigationSkippedCode.IgnoredSameUrlNavigation\n ) {\n this.lastSource = undefined;\n this.restoredId = 0;\n this.scheduleScrollEvent(e, this.urlSerializer.parse(e.url).fragment);\n }\n });\n }\n\n private consumeScrollEvents() {\n return this.transitions.events.subscribe((e) => {\n if (!(e instanceof Scroll) || e.scrollBehavior === 'manual') return;\n const instantScroll: ScrollOptions = {behavior: 'instant'};\n // a popstate event. The pop state event will always ignore anchor scrolling.\n if (e.position) {\n if (this.options.scrollPositionRestoration === 'top') {\n this.viewportScroller.scrollToPosition([0, 0], instantScroll);\n } else if (this.options.scrollPositionRestoration === 'enabled') {\n this.viewportScroller.scrollToPosition(e.position, instantScroll);\n }\n // imperative navigation \"forward\"\n } else {\n if (e.anchor && this.options.anchorScrolling === 'enabled') {\n this.viewportScroller.scrollToAnchor(e.anchor);\n } else if (this.options.scrollPositionRestoration !== 'disabled') {\n this.viewportScroller.scrollToPosition([0, 0]);\n }\n }\n });\n }\n\n private scheduleScrollEvent(\n routerEvent: NavigationEnd | NavigationSkipped,\n anchor: string | null,\n ): void {\n const scroll = untracked(this.transitions.currentNavigation)?.extras.scroll;\n this.zone.runOutsideAngular(async () => {\n // The scroll event needs to be delayed until after change detection. Otherwise, we may\n // attempt to restore the scroll position before the router outlet has fully rendered the\n // component by executing its update block of the template function.\n //\n // #57109 (we need to wait at least a macrotask before scrolling. AfterNextRender resolves in microtask event loop with Zones)\n // We could consider _also_ waiting for a render promise though one should have already happened or been scheduled by this point\n // and should definitely happen before rAF/setTimeout.\n // #53985 (cannot rely solely on setTimeout because a frame may paint before the timeout)\n await new Promise((resolve) => {\n setTimeout(resolve);\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(resolve);\n }\n });\n this.zone.run(() => {\n this.transitions.events.next(\n new Scroll(\n routerEvent,\n this.lastSource === 'popstate' ? this.store[this.restoredId] : null,\n anchor,\n scroll,\n ),\n );\n });\n });\n }\n\n /** @docs-private */\n ngOnDestroy(): void {\n this.routerEventsSubscription?.unsubscribe();\n this.scrollEventsSubscription?.unsubscribe();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Injector} from '@angular/core';\nimport {Router} from './router';\nimport {Route} from './models';\n\n/**\n * Returns the loaded routes for a given route.\n */\nexport function getLoadedRoutes(route: Route): Route[] | undefined {\n return route._loadedRoutes;\n}\n\n/**\n * Returns the Router instance from the given injector, or null if not available.\n */\nexport function getRouterInstance(injector: Injector): Router | null {\n return injector.get(Router, null, {optional: true});\n}\n\n/**\n * Navigates the given router to the specified URL.\n * Throws if the provided router is not an Angular Router.\n */\nexport function navigateByUrl(router: Router, url: string): Promise<boolean> {\n if (!(router instanceof Router)) {\n throw new Error('The provided router is not an Angular Router.');\n }\n return router.navigateByUrl(url);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\nimport {\n afterNextRender,\n ɵpromiseWithResolvers as promiseWithResolvers,\n DestroyRef,\n EnvironmentInjector,\n inject,\n Injectable,\n} from '@angular/core';\n\nimport {\n PlatformLocation,\n PlatformNavigation,\n ɵPRECOMMIT_HANDLER_SUPPORTED as PRECOMMIT_HANDLER_SUPPORTED,\n} from '@angular/common';\nimport {StateManager} from './state_manager';\nimport {RestoredState, Navigation as RouterNavigation} from '../navigation_transition';\nimport {\n BeforeActivateRoutes,\n isRedirectingEvent,\n NavigationCancel,\n NavigationCancellationCode,\n NavigationEnd,\n NavigationError,\n NavigationSkipped,\n NavigationStart,\n NavigationTrigger,\n PrivateRouterEvents,\n RoutesRecognized,\n} from '../events';\nimport {Subject, SubscriptionLike} from 'rxjs';\nimport {UrlTree} from '../url_tree';\nimport {ROUTER_SCROLLER} from '../router_scroller';\n\ntype NavigationInfo = {ɵrouterInfo: {intercept: boolean}};\n\n@Injectable({providedIn: 'root'})\n/**\n * A `StateManager` that uses the browser's Navigation API to get the state of a `popstate`\n * event.\n *\n * This class is currently an extension of `HistoryStateManager` and is used when the\n * Navigation API is available. It overrides the behavior of listening to `popstate` events\n * to retrieve the state from `navigation.currentEntry` instead of `history.state` since\n * history and navigation states are separate.\n *\n * This implementation is not complete - it does not integrate at all with navigation API other than\n * providing the right state on popstate. It needs to manage the whole lifecycle of the navigation\n * by intercepting the navigation event.\n */\nexport class NavigationStateManager extends StateManager {\n private readonly injector = inject(EnvironmentInjector);\n private readonly navigation = inject(PlatformNavigation);\n private readonly inMemoryScrollingEnabled = inject(ROUTER_SCROLLER, {optional: true}) !== null;\n /** The base origin of the application, extracted from PlatformLocation. */\n private readonly base = new URL(inject(PlatformLocation).href).origin;\n /** The root URL of the Angular application, considering the base href. */\n private readonly appRootURL = new URL(this.location.prepareExternalUrl?.('/') ?? '/', this.base)\n .href;\n private readonly precommitHandlerSupported = inject(PRECOMMIT_HANDLER_SUPPORTED);\n /**\n * The `NavigationHistoryEntry` from the Navigation API that corresponds to the last successfully\n * activated router state. This is crucial for restoring the browser state if an ongoing navigation\n * is canceled or fails, allowing a precise rollback to a known good entry.\n * It's updated on `navigatesuccess`.\n */\n private activeHistoryEntry: NavigationHistoryEntry = this.navigation.currentEntry!;\n\n /**\n * Holds state related to the currently processing navigation that was intercepted from a\n * `navigate` event. This includes the router's internal `Navigation` object.\n */\n private currentNavigation: {\n removeAbortListener?: () => void;\n /** The Angular Router's internal representation of the ongoing navigation. */\n routerTransition?: RouterNavigation;\n /** Function to reject the intercepted navigation event. */\n rejectNavigateEvent?: (reason?: any) => void;\n /** Function to resolve the intercepted navigation event. */\n resolveHandler?: (v: void) => void;\n navigationEvent?: NavigateEvent;\n } = {};\n\n /**\n * Subject used to notify listeners (typically the `Router`) of URL/state changes\n * that were initiated outside the Angular Router but detected via the Navigation API's\n * `navigate` event (e.g., user clicking browser back/forward, or manual URL changes if\n * interceptable by the Navigation API).\n */\n private nonRouterCurrentEntryChangeSubject = new Subject<{\n path: string;\n state: RestoredState | null | undefined;\n }>();\n\n nonRouterEntryChangeListener?: SubscriptionLike;\n private get registered() {\n return (\n this.nonRouterEntryChangeListener !== undefined && !this.nonRouterEntryChangeListener.closed\n );\n }\n\n constructor() {\n super();\n\n // Listen to the 'navigate' event from the Navigation API.\n // This is the primary entry point for intercepting and handling navigations.\n const navigateListener = (event: NavigateEvent) => {\n this.handleNavigate(event);\n };\n this.navigation.addEventListener('navigate', navigateListener);\n inject(DestroyRef).onDestroy(() =>\n this.navigation.removeEventListener('navigate', navigateListener),\n );\n }\n\n override registerNonRouterCurrentEntryChangeListener(\n listener: (\n url: string,\n state: RestoredState | null | undefined,\n trigger: NavigationTrigger,\n ) => void,\n ): SubscriptionLike {\n this.activeHistoryEntry = this.navigation.currentEntry!;\n this.nonRouterEntryChangeListener = this.nonRouterCurrentEntryChangeSubject.subscribe(\n ({path, state}) => {\n listener(path, state, 'popstate');\n },\n );\n return this.nonRouterEntryChangeListener;\n }\n\n /**\n * Handles router events emitted by the `NavigationTransitions` service.\n * This method orchestrates the interaction with the Navigation API based on the\n * current stage of the router's internal navigation pipeline.\n *\n * @param e The router event (e.g., `NavigationStart`, `NavigationEnd`).\n * @param transition The Angular Router's internal navigation object.\n */\n override async handleRouterEvent(\n e: Event | PrivateRouterEvents,\n transition: RouterNavigation,\n ): Promise<void> {\n this.currentNavigation = {...this.currentNavigation, routerTransition: transition};\n if (e instanceof NavigationStart) {\n this.updateStateMemento();\n } else if (e instanceof NavigationSkipped) {\n this.finishNavigation();\n this.commitTransition(transition);\n } else if (e instanceof RoutesRecognized) {\n if (this.urlUpdateStrategy === 'eager' && !transition.extras.skipLocationChange) {\n this.createNavigationForTransition(transition);\n }\n } else if (e instanceof BeforeActivateRoutes) {\n // Commit the internal router state.\n this.commitTransition(transition);\n if (this.urlUpdateStrategy === 'deferred' && !transition.extras.skipLocationChange) {\n this.createNavigationForTransition(transition);\n }\n } else if (e instanceof NavigationCancel || e instanceof NavigationError) {\n void this.cancel(transition, e);\n } else if (e instanceof NavigationEnd) {\n const {resolveHandler, removeAbortListener} = this.currentNavigation;\n this.currentNavigation = {};\n // We no longer care about aborts for this navigation once it's successfully ended.\n // Since we're delaying the resolution of the handler until after next render, it's\n // technically possible for it to still get aborted in that window, so we remove the listener here.\n removeAbortListener?.();\n // Update `activeHistoryEntry` to the new current entry from Navigation API.\n this.activeHistoryEntry = this.navigation.currentEntry!;\n // TODO(atscott): Consider initiating scroll here since it will be attempted periodically.\n // We have to wait for render to resolve because focus reset is only done once in the spec.\n // Render is not synchronous with NavigationEnd today. The Router's navigation promise resolve\n // is what _causes_ the render to happen with ZoneJS...\n // Resolve handler after next render to defer scroll and focus reset.\n afterNextRender({read: () => resolveHandler?.()}, {injector: this.injector});\n }\n }\n\n private createNavigationForTransition(transition: RouterNavigation) {\n const {navigationEvent} = this.currentNavigation;\n // If we are currently handling a traversal navigation, we do not need a new navigation for it\n // because we are strictly restoring a previous state. If we are instead handling a navigation\n // initiated outside the router, we do need to replace it with a router-triggered navigation\n // to add the router-specific state.\n if (\n navigationEvent &&\n (navigationEvent.navigationType === 'traverse' ||\n navigationEvent.navigationType === 'reload') &&\n this.eventAndRouterDestinationsMatch(navigationEvent, transition)\n ) {\n return;\n }\n // Before we create a navigation for the Router transition, we have to remove any abort listeners\n // from the previous navigation event. Creating the new navigation will cause the signal\n // to be aborted, and we don't want that to cause our router transition to be aborted.\n this.currentNavigation.removeAbortListener?.();\n const path = this.createBrowserPath(transition);\n this.navigate(path, transition);\n }\n\n /**\n * Initiates a navigation using the browser's Navigation API (`navigation.navigate`).\n * This is called when the Angular Router starts an imperative navigation.\n *\n * @param internalPath The internal path generated by the router.\n * @param transition The Angular Router's navigation object.\n */\n private navigate(internalPath: string, transition: RouterNavigation) {\n // Determine the actual browser path, considering skipLocationChange.\n const path = transition.extras.skipLocationChange\n ? this.navigation.currentEntry!.url! // If skipping, use the current URL.\n : this.location.prepareExternalUrl(internalPath); // Otherwise, prepare the external URL.\n\n // Prepare the state to be stored in the NavigationHistoryEntry.\n const state = {\n ...transition.extras.state,\n // Include router's navigationId for tracking. Required for in-memory scroll restoration\n navigationId: transition.id,\n };\n\n const info: NavigationInfo = {ɵrouterInfo: {intercept: true}};\n // https://issues.chromium.org/issues/460137775 - Bug in all browsers where URL might actually not be updated\n // by the time we get here. replaceUrl was set to true in the Router when navigating to sync with the browser\n // because it assumes the URL is already committed. In this scenario, we need to go back to 'push' behavior\n // because it was not yet been committed and we should not replace the current entry.\n if (!this.navigation.transition && this.currentNavigation.navigationEvent) {\n transition.extras.replaceUrl = false;\n }\n\n // Determine if this should be a 'push' or 'replace' history operation.\n const history =\n this.location.isCurrentPathEqualTo(path) ||\n transition.extras.replaceUrl ||\n transition.extras.skipLocationChange\n ? 'replace'\n : 'push';\n\n // Call the Navigation API and prevent unhandled promise rejections of the\n // returned promises from `navigation.navigate`.\n handleResultRejections(\n this.navigation.navigate(path, {\n state,\n history,\n info,\n }),\n );\n }\n\n /**\n * Finalizes the current navigation by committing the URL (if not already done)\n * and resolving the post-commit handler promise. Clears the `currentNavigation` state.\n */\n private finishNavigation() {\n this.currentNavigation?.resolveHandler?.();\n this.currentNavigation = {};\n }\n\n /**\n * Performs the necessary rollback action to restore the browser URL to the\n * state before the transition.\n */\n private async cancel(transition: RouterNavigation, cause: NavigationCancel | NavigationError) {\n this.currentNavigation.rejectNavigateEvent?.();\n const clearedState = {}; // Marker to detect if a new navigation started during async ops.\n this.currentNavigation = clearedState;\n // Do not reset state if we're redirecting or navigation is superseded by a new one.\n if (isRedirectingEvent(cause)) {\n return;\n }\n // Determine if the rollback should be a traversal to a specific previous entry\n // or a replacement of the current URL.\n const isTraversalReset =\n this.canceledNavigationResolution === 'computed' &&\n this.navigation.currentEntry!.key !== this.activeHistoryEntry.key;\n this.resetInternalState(transition.finalUrl, isTraversalReset);\n\n // If the current browser entry ID is already the same as our target active entry,\n // no browser history manipulation is needed.\n if (this.navigation.currentEntry!.id === this.activeHistoryEntry.id) {\n return;\n }\n\n // If the cancellation was not due to a guard or resolver (e.g., superseded by another\n // navigation, or aborted by user), there's a race condition. Another navigation might\n // have already started. A delay is used to see if `currentNavigation` changes,\n // indicating a new navigation has taken over.\n // We have no way of knowing if a navigation was aborted by another incoming navigation\n // https://github.com/WICG/navigation-api/issues/288\n if (cause instanceof NavigationCancel && cause.code === NavigationCancellationCode.Aborted) {\n await Promise.resolve();\n if (this.currentNavigation !== clearedState) {\n // A new navigation has started, so don't attempt to roll back this one.\n return;\n }\n }\n\n if (isTraversalReset) {\n // Traverse back to the specific `NavigationHistoryEntry` that was active before.\n handleResultRejections(\n this.navigation.traverseTo(this.activeHistoryEntry.key, {\n info: {ɵrouterInfo: {intercept: false}} satisfies NavigationInfo,\n }),\n );\n } else {\n // Replace the current history entry with the state of the last known good URL/state.\n const internalPath = this.urlSerializer.serialize(this.getCurrentUrlTree());\n const pathOrUrl = this.location.prepareExternalUrl(internalPath);\n handleResultRejections(\n this.navigation.navigate(pathOrUrl, {\n state: this.activeHistoryEntry.getState(),\n history: 'replace',\n info: {ɵrouterInfo: {intercept: false}} satisfies NavigationInfo,\n }),\n );\n }\n }\n\n private resetInternalState(finalUrl: UrlTree | undefined, traversalReset: boolean): void {\n this.routerState = this.stateMemento.routerState;\n this.currentUrlTree = this.stateMemento.currentUrlTree;\n this.rawUrlTree = traversalReset\n ? this.stateMemento.rawUrlTree\n : this.urlHandlingStrategy.merge(this.currentUrlTree, finalUrl ?? this.rawUrlTree);\n }\n\n /**\n * Handles the `navigate` event from the browser's Navigation API.\n * This is the core interception point.\n *\n * @param event The `NavigateEvent` from the Navigation API.\n */\n private handleNavigate(event: NavigateEvent) {\n // If the event cannot be intercepted (e.g., cross-origin, or some browser-internal\n // navigations), let the browser handle it.\n if (!event.canIntercept) {\n return;\n }\n\n const routerInfo = (event?.info as NavigationInfo | undefined)?.ɵrouterInfo;\n if (routerInfo && !routerInfo.intercept) {\n return;\n }\n const isTriggeredByRouterTransition = !!routerInfo;\n if (!isTriggeredByRouterTransition) {\n // If there's an ongoing navigation in the Angular Router, abort it. This new navigation\n // supersedes it. If the navigation was triggered by the Router, it may be the navigation\n // happening from _inside_ the navigation transition, or a separate Router.navigate call\n // that would have already handled cleanup of the previous navigation.\n this.currentNavigation.routerTransition?.abort();\n\n if (!this.registered) {\n // If the router isn't set up to listen for these yet. Do not convert it to a router navigation.\n this.finishNavigation();\n return;\n }\n }\n\n this.currentNavigation = {...this.currentNavigation};\n this.currentNavigation.navigationEvent = event;\n // Setup an abort handler. If the `NavigateEvent` is aborted (e.g., user clicks stop,\n // or another navigation supersedes this one), we need to abort the Angular Router's\n // internal navigation transition as well.\n const abortHandler = () => {\n this.currentNavigation.routerTransition?.abort();\n };\n event.signal.addEventListener('abort', abortHandler);\n this.currentNavigation.removeAbortListener = () =>\n event.signal.removeEventListener('abort', abortHandler);\n\n let scroll = this.inMemoryScrollingEnabled\n ? 'manual'\n : (this.currentNavigation.routerTransition?.extras.scroll ?? 'after-transition');\n const interceptOptions: NavigationInterceptOptions = {\n scroll,\n };\n\n const {\n promise: handlerPromise,\n resolve: resolveHandler,\n reject: rejectHandler,\n } = promiseWithResolvers<void>();\n this.currentNavigation.resolveHandler = () => {\n this.currentNavigation.removeAbortListener?.();\n resolveHandler();\n };\n this.currentNavigation.rejectNavigateEvent = () => {\n this.currentNavigation.removeAbortListener?.();\n rejectHandler();\n };\n // Prevent unhandled promise rejections from internal promises.\n handlerPromise.catch(() => {});\n interceptOptions.handler = () => handlerPromise;\n\n // Intercept the navigation event with the configured options.\n event.intercept(interceptOptions);\n\n // If `routerInfo` is null, this `NavigateEvent` was not triggered by one of the Router's\n // own `this.navigation.navigate()` calls. It's an external navigation (e.g., user click,\n // browser back/forward that the Navigation API surfaces). We need to inform the Router.\n if (!isTriggeredByRouterTransition) {\n this.handleNavigateEventTriggeredOutsideRouterAPIs(event);\n }\n }\n\n /**\n * Handles `NavigateEvent`s that were not initiated by the Angular Router's own API calls\n * (e.g., `router.navigate()`). These are typically from user interactions like back/forward\n * buttons or direct URL manipulation if the Navigation API intercepts them.\n *\n * It converts such an event into a format the Angular Router can understand and processes it\n * via the `nonRouterCurrentEntryChangeSubject`.\n *\n * @param event The `NavigateEvent` from the Navigation API.\n */\n private handleNavigateEventTriggeredOutsideRouterAPIs(event: NavigateEvent) {\n // TODO(atscott): Consider if the destination URL doesn't start with `appRootURL`.\n // Should we ignore it or not intercept in the first place?\n\n // Extract the application-relative path from the full destination URL.\n const path = event.destination.url.substring(this.appRootURL.length - 1);\n const state = event.destination.getState() as RestoredState | null | undefined;\n this.nonRouterCurrentEntryChangeSubject.next({path, state});\n }\n\n private eventAndRouterDestinationsMatch(\n navigateEvent: NavigateEvent,\n transition: RouterNavigation,\n ): boolean {\n const internalPath = this.createBrowserPath(transition);\n const eventDestination = new URL(navigateEvent.destination.url);\n // this might be a path or an actual URL depending on the baseHref\n const routerDestination = this.location.prepareExternalUrl(internalPath);\n return new URL(routerDestination, eventDestination.origin).href === eventDestination.href;\n }\n}\n\n/**\n * Attaches a no-op `.catch(() => {})` to the `committed` and `finished` promises of a\n * `NavigationResult`. This is to prevent unhandled promise rejection errors in the console\n * if the consumer of the navigation method (e.g., `router.navigate()`) doesn't explicitly\n * handle rejections on both promises. Navigations can be legitimately aborted (e.g., by a\n * subsequent navigation), and this shouldn't necessarily manifest as an unhandled error\n * if the application code doesn't specifically need to react to the `committed` promise\n * rejecting in such cases. The `finished` promise is more commonly used to determine\n * overall success/failure.\n */\nfunction handleResultRejections(result: NavigationResult): NavigationResult {\n result.finished.catch(() => {});\n result.committed.catch(() => {});\n return result;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n HashLocationStrategy,\n Location,\n LOCATION_INITIALIZED,\n LocationStrategy,\n ViewportScroller,\n ɵNavigationAdapterForLocation,\n} from '@angular/common';\nimport {\n APP_BOOTSTRAP_LISTENER,\n ApplicationRef,\n ComponentRef,\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n inject,\n InjectionToken,\n Injector,\n ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION as IS_ENABLED_BLOCKING_INITIAL_NAVIGATION,\n makeEnvironmentProviders,\n ɵperformanceMarkFeature as performanceMarkFeature,\n provideAppInitializer,\n provideEnvironmentInitializer,\n Provider,\n runInInjectionContext,\n Type,\n ɵpublishExternalGlobalUtil,\n} from '@angular/core';\nimport {of, Subject} from 'rxjs';\n\nimport {INPUT_BINDER, RoutedComponentInputBinder} from './directives/router_outlet';\nimport {Event, NavigationError, stringifyEvent} from './events';\nimport {RedirectCommand, Routes} from './models';\nimport {NAVIGATION_ERROR_HANDLER, NavigationTransitions} from './navigation_transition';\nimport {ROUTE_INJECTOR_CLEANUP, routeInjectorCleanup} from './route_injector_cleanup';\nimport {Router} from './router';\nimport {InMemoryScrollingOptions, ROUTER_CONFIGURATION, RouterConfigOptions} from './router_config';\nimport {ROUTES} from './router_config_loader';\nimport {PreloadingStrategy, RouterPreloader} from './router_preloader';\n\nimport {ROUTER_SCROLLER, RouterScroller} from './router_scroller';\n\nimport {getLoadedRoutes, getRouterInstance, navigateByUrl} from './router_devtools';\nimport {ActivatedRoute} from './router_state';\nimport {NavigationStateManager} from './statemanager/navigation_state_manager';\nimport {StateManager} from './statemanager/state_manager';\nimport {afterNextNavigation} from './utils/navigations';\nimport {\n CREATE_VIEW_TRANSITION,\n createViewTransition,\n VIEW_TRANSITION_OPTIONS,\n ViewTransitionsFeatureOptions,\n} from './utils/view_transition';\n\n/**\n * Sets up providers necessary to enable `Router` functionality for the application.\n * Allows to configure a set of routes as well as extra features that should be enabled.\n *\n * @usageNotes\n *\n * Basic example of how you can add a Router to your application:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent, {\n * providers: [provideRouter(appRoutes)]\n * });\n * ```\n *\n * You can also enable optional features in the Router by adding functions from the `RouterFeatures`\n * type:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes,\n * withDebugTracing(),\n * withRouterConfig({paramsInheritanceStrategy: 'always'}))\n * ]\n * }\n * );\n * ```\n * @see [Router](guide/routing)\n *\n * @see {@link RouterFeatures}\n *\n * @publicApi\n * @param routes A set of `Route`s to use for the application routing table.\n * @param features Optional features to configure additional router behaviors.\n * @returns A set of providers to setup a Router.\n */\nexport function provideRouter(routes: Routes, ...features: RouterFeatures[]): EnvironmentProviders {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Publish this util when the router is provided so that the devtools can use it.\n ɵpublishExternalGlobalUtil('ɵgetLoadedRoutes', getLoadedRoutes);\n ɵpublishExternalGlobalUtil('ɵgetRouterInstance', getRouterInstance);\n ɵpublishExternalGlobalUtil('ɵnavigateByUrl', navigateByUrl);\n }\n\n return makeEnvironmentProviders([\n {provide: ROUTES, multi: true, useValue: routes},\n typeof ngDevMode === 'undefined' || ngDevMode\n ? {provide: ROUTER_IS_PROVIDED, useValue: true}\n : [],\n {provide: ActivatedRoute, useFactory: rootRoute},\n {provide: APP_BOOTSTRAP_LISTENER, multi: true, useFactory: getBootstrapListener},\n features.map((feature) => feature.ɵproviders),\n ]);\n}\n\nexport function rootRoute(): ActivatedRoute {\n return inject(Router).routerState.root;\n}\n\n/**\n * Helper type to represent a Router feature.\n *\n * @publicApi\n */\nexport interface RouterFeature<FeatureKind extends RouterFeatureKind> {\n ɵkind: FeatureKind;\n ɵproviders: Array<Provider | EnvironmentProviders>;\n}\n\n/**\n * Helper function to create an object that represents a Router feature.\n */\nfunction routerFeature<FeatureKind extends RouterFeatureKind>(\n kind: FeatureKind,\n providers: Array<Provider | EnvironmentProviders>,\n): RouterFeature<FeatureKind> {\n return {ɵkind: kind, ɵproviders: providers};\n}\n\n/**\n * An Injection token used to indicate whether `provideRouter` or `RouterModule.forRoot` was ever\n * called.\n */\nexport const ROUTER_IS_PROVIDED = new InjectionToken<boolean>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'Router is provided' : '',\n {\n factory: () => false,\n },\n);\n\nconst routerIsProvidedDevModeCheck = {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory() {\n return () => {\n if (!inject(ROUTER_IS_PROVIDED)) {\n console.warn(\n '`provideRoutes` was called without `provideRouter` or `RouterModule.forRoot`. ' +\n 'This is likely a mistake.',\n );\n }\n };\n },\n};\n\n/**\n * Registers a DI provider for a set of routes.\n * @param routes The route configuration to provide.\n *\n * @usageNotes\n *\n * ```ts\n * @NgModule({\n * providers: [provideRoutes(ROUTES)]\n * })\n * class LazyLoadedChildModule {}\n * ```\n *\n * @deprecated If necessary, provide routes using the `ROUTES` `InjectionToken`.\n * @see {@link ROUTES}\n * @publicApi\n */\nexport function provideRoutes(routes: Routes): Provider[] {\n return [\n {provide: ROUTES, multi: true, useValue: routes},\n typeof ngDevMode === 'undefined' || ngDevMode ? routerIsProvidedDevModeCheck : [],\n ];\n}\n\n/**\n * A type alias for providers returned by `withInMemoryScrolling` for use with `provideRouter`.\n *\n * @see {@link withInMemoryScrolling}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type InMemoryScrollingFeature = RouterFeature<RouterFeatureKind.InMemoryScrollingFeature>;\n\n/**\n * Enables customizable scrolling behavior for router navigations.\n *\n * @usageNotes\n *\n * Basic example of how you can enable scrolling feature:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withInMemoryScrolling())\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n * @see {@link ViewportScroller}\n *\n * @publicApi\n * @param options Set of configuration parameters to customize scrolling behavior, see\n * `InMemoryScrollingOptions` for additional information.\n * @returns A set of providers for use with `provideRouter`.\n */\nexport function withInMemoryScrolling(\n options: InMemoryScrollingOptions = {},\n): InMemoryScrollingFeature {\n const providers = [\n {\n provide: ROUTER_SCROLLER,\n useFactory: () => new RouterScroller(options),\n },\n ];\n return routerFeature(RouterFeatureKind.InMemoryScrollingFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withExperimentalPlatformNavigation` for use with `provideRouter`.\n *\n * @see {@link withExperimentalPlatformNavigation}\n * @see {@link provideRouter}\n *\n * @experimental 21.1\n */\nexport type ExperimentalPlatformNavigationFeature =\n RouterFeature<RouterFeatureKind.ExperimentalPlatformNavigationFeature>;\n\n/**\n * Enables interop with the browser's `Navigation` API for router navigations.\n *\n * @description\n * \n * CRITICAL: This feature is _highly_ experimental and should not be used in production. Browser support\n * is limited and in active development. Use only for experimentation and feedback purposes.\n * \n * This function provides a `Location` strategy that uses the browser's `Navigation` API.\n * By using the platform's Navigation APIs, the Router is able to provide native\n * browser navigation capabilities. Some advantages include:\n * \n * - The ability to intercept navigations triggered outside the Router. This allows plain anchor\n * elements _without_ `RouterLink` directives to be intercepted by the Router and converted to SPA navigations.\n * - Native scroll and focus restoration support by the browser, without the need for custom implementations.\n * - Communication of ongoing navigations to the browser, enabling built-in features like \n * accessibility announcements, loading indicators, stop buttons, and performance measurement APIs.\n\n * NOTE: Deferred entry updates are not part of the interop 2025 Navigation API commitments so the \"ongoing navigation\"\n * communication support is limited.\n *\n * @usageNotes\n *\n * ```typescript\n * const appRoutes: Routes = [\n * { path: 'page', component: PageComponent },\n * ];\n *\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideRouter(appRoutes, withExperimentalPlatformNavigation())\n * ]\n * });\n * ```\n * \n * @see [Navigation API on WICG](https://github.com/WICG/navigation-api?tab=readme-ov-file#problem-statement)\n * @see [Navigation API on Chrome from developers](https://developer.chrome.com/docs/web-platform/navigation-api/)\n * @see [Navigation API on MDN](https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API)\n *\n * @experimental 21.1 \n * @returns A `RouterFeature` that enables the platform navigation.\n */\nexport function withExperimentalPlatformNavigation(): ExperimentalPlatformNavigationFeature {\n const devModeLocationCheck =\n typeof ngDevMode === 'undefined' || ngDevMode\n ? [\n provideEnvironmentInitializer(() => {\n const locationInstance = inject(Location);\n if (!(locationInstance instanceof ɵNavigationAdapterForLocation)) {\n const locationConstructorName = (locationInstance as any).constructor.name;\n let message =\n `'withExperimentalPlatformNavigation' provides a 'Location' implementation that ensures navigation APIs are consistently used.` +\n ` An instance of ${locationConstructorName} was found instead.`;\n if (locationConstructorName === 'SpyLocation') {\n message += ` One of 'RouterTestingModule' or 'provideLocationMocks' was likely used. 'withExperimentalPlatformNavigation' does not work with these because they override the Location implementation.`;\n }\n throw new Error(message);\n }\n }),\n ]\n : [];\n const providers = [\n {provide: StateManager, useExisting: NavigationStateManager},\n {provide: Location, useClass: ɵNavigationAdapterForLocation},\n devModeLocationCheck,\n ];\n return routerFeature(RouterFeatureKind.ExperimentalPlatformNavigationFeature, providers);\n}\n\nexport function getBootstrapListener() {\n const injector = inject(Injector);\n return (bootstrappedComponentRef: ComponentRef<unknown>) => {\n const ref = injector.get(ApplicationRef);\n\n if (bootstrappedComponentRef !== ref.components[0]) {\n return;\n }\n\n const router = injector.get(Router);\n const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n\n if (injector.get(INITIAL_NAVIGATION) === InitialNavigation.EnabledNonBlocking) {\n router.initialNavigation();\n }\n\n injector.get(ROUTER_PRELOADER, null, {optional: true})?.setUpPreloading();\n injector.get(ROUTER_SCROLLER, null, {optional: true})?.init();\n router.resetRootComponentType(ref.componentTypes[0]);\n if (!bootstrapDone.closed) {\n bootstrapDone.next();\n bootstrapDone.complete();\n bootstrapDone.unsubscribe();\n }\n };\n}\n\n/**\n * A subject used to indicate that the bootstrapping phase is done. When initial navigation is\n * `enabledBlocking`, the first navigation waits until bootstrapping is finished before continuing\n * to the activation phase.\n */\nconst BOOTSTRAP_DONE = new InjectionToken<Subject<void>>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'bootstrap done indicator' : '',\n {\n factory: () => {\n return new Subject<void>();\n },\n },\n);\n\n/**\n * This and the INITIAL_NAVIGATION token are used internally only. The public API side of this is\n * configured through the `ExtraOptions`.\n *\n * When set to `EnabledBlocking`, the initial navigation starts before the root\n * component is created. The bootstrap is blocked until the initial navigation is complete. This\n * value should be set in case you use [server-side rendering](guide/ssr), but do not enable\n * [hydration](guide/hydration) for your application.\n *\n * When set to `EnabledNonBlocking`, the initial navigation starts after the root component has been\n * created. The bootstrap is not blocked on the completion of the initial navigation.\n *\n * When set to `Disabled`, the initial navigation is not performed. The location listener is set up\n * before the root component gets created. Use if there is a reason to have more control over when\n * the router starts its initial navigation due to some complex initialization logic.\n *\n * @see {@link ExtraOptions}\n */\nconst enum InitialNavigation {\n EnabledBlocking,\n EnabledNonBlocking,\n Disabled,\n}\n\nconst INITIAL_NAVIGATION = new InjectionToken<InitialNavigation>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'initial navigation' : '',\n {factory: () => InitialNavigation.EnabledNonBlocking},\n);\n\n/**\n * A type alias for providers returned by `withEnabledBlockingInitialNavigation` for use with\n * `provideRouter`.\n *\n * @see {@link withEnabledBlockingInitialNavigation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type EnabledBlockingInitialNavigationFeature =\n RouterFeature<RouterFeatureKind.EnabledBlockingInitialNavigationFeature>;\n\n/**\n * A type alias for providers returned by `withEnabledBlockingInitialNavigation` or\n * `withDisabledInitialNavigation` functions for use with `provideRouter`.\n *\n * @see {@link withEnabledBlockingInitialNavigation}\n * @see {@link withDisabledInitialNavigation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type InitialNavigationFeature =\n | EnabledBlockingInitialNavigationFeature\n | DisabledInitialNavigationFeature;\n\n/**\n * Configures initial navigation to start before the root component is created.\n *\n * The bootstrap is blocked until the initial navigation is complete. This should be set in case\n * you use [server-side rendering](guide/ssr), but do not enable [hydration](guide/hydration) for\n * your application.\n *\n * @usageNotes\n *\n * Basic example of how you can enable this navigation behavior:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withEnabledBlockingInitialNavigation())\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @publicApi\n * @returns A set of providers for use with `provideRouter`.\n */\nexport function withEnabledBlockingInitialNavigation(): EnabledBlockingInitialNavigationFeature {\n const providers = [\n {provide: IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, useValue: true},\n {provide: INITIAL_NAVIGATION, useValue: InitialNavigation.EnabledBlocking},\n provideAppInitializer(() => {\n const injector = inject(Injector);\n const locationInitialized: Promise<any> = injector.get(\n LOCATION_INITIALIZED,\n Promise.resolve(),\n );\n\n return locationInitialized.then(() => {\n return new Promise((resolve) => {\n const router = injector.get(Router);\n const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n afterNextNavigation(router, () => {\n // Unblock APP_INITIALIZER in case the initial navigation was canceled or errored\n // without a redirect.\n resolve(true);\n });\n\n injector.get(NavigationTransitions).afterPreactivation = () => {\n // Unblock APP_INITIALIZER once we get to `afterPreactivation`. At this point, we\n // assume activation will complete successfully (even though this is not\n // guaranteed).\n resolve(true);\n return bootstrapDone.closed ? of(void 0) : bootstrapDone;\n };\n router.initialNavigation();\n });\n });\n }),\n ];\n return routerFeature(RouterFeatureKind.EnabledBlockingInitialNavigationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withDisabledInitialNavigation` for use with\n * `provideRouter`.\n *\n * @see {@link withDisabledInitialNavigation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type DisabledInitialNavigationFeature =\n RouterFeature<RouterFeatureKind.DisabledInitialNavigationFeature>;\n\n/**\n * Disables initial navigation.\n *\n * Use if there is a reason to have more control over when the router starts its initial navigation\n * due to some complex initialization logic.\n *\n * @usageNotes\n *\n * Basic example of how you can disable initial navigation:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withDisabledInitialNavigation())\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withDisabledInitialNavigation(): DisabledInitialNavigationFeature {\n const providers = [\n provideAppInitializer(() => {\n inject(Router).setUpLocationChangeListener();\n }),\n {provide: INITIAL_NAVIGATION, useValue: InitialNavigation.Disabled},\n ];\n return routerFeature(RouterFeatureKind.DisabledInitialNavigationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withDebugTracing` for use with `provideRouter`.\n *\n * @see {@link withDebugTracing}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type DebugTracingFeature = RouterFeature<RouterFeatureKind.DebugTracingFeature>;\n\n/**\n * Enables logging of all internal navigation events to the console.\n * Extra logging might be useful for debugging purposes to inspect Router event sequence.\n *\n * @usageNotes\n *\n * Basic example of how you can enable debug tracing:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withDebugTracing())\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withDebugTracing(): DebugTracingFeature {\n let providers: Provider[] = [];\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n providers = [\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: () => {\n const router = inject(Router);\n return () =>\n router.events.subscribe((e: Event) => {\n // tslint:disable:no-console\n console.group?.(`Router Event: ${(<any>e.constructor).name}`);\n console.log(stringifyEvent(e));\n console.log(e);\n console.groupEnd?.();\n // tslint:enable:no-console\n });\n },\n },\n ];\n } else {\n providers = [];\n }\n return routerFeature(RouterFeatureKind.DebugTracingFeature, providers);\n}\n\nconst ROUTER_PRELOADER = new InjectionToken<RouterPreloader>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'router preloader' : '',\n);\n\n/**\n * A type alias that represents a feature which enables preloading in Router.\n * The type is used to describe the return value of the `withPreloading` function.\n *\n * @see {@link withPreloading}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type PreloadingFeature = RouterFeature<RouterFeatureKind.PreloadingFeature>;\n\n/**\n * Allows to configure a preloading strategy to use. The strategy is configured by providing a\n * reference to a class that implements a `PreloadingStrategy`.\n *\n * @usageNotes\n *\n * Basic example of how you can configure preloading:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withPreloading(PreloadAllModules))\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @param preloadingStrategy A reference to a class that implements a `PreloadingStrategy` that\n * should be used.\n * @returns A set of providers for use with `provideRouter`.\n *\n * @see [Preloading strategy](guide/routing/customizing-route-behavior#preloading-strategy)\n *\n * @publicApi\n */\nexport function withPreloading(preloadingStrategy: Type<PreloadingStrategy>): PreloadingFeature {\n const providers = [\n {provide: ROUTER_PRELOADER, useExisting: RouterPreloader},\n {provide: PreloadingStrategy, useExisting: preloadingStrategy},\n ];\n return routerFeature(RouterFeatureKind.PreloadingFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withRouterConfig` for use with `provideRouter`.\n *\n * @see {@link withRouterConfig}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type RouterConfigurationFeature =\n RouterFeature<RouterFeatureKind.RouterConfigurationFeature>;\n\n/**\n * Allows to provide extra parameters to configure Router.\n *\n * @usageNotes\n *\n * Basic example of how you can provide extra configuration options:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withRouterConfig({\n * onSameUrlNavigation: 'reload'\n * }))\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @param options A set of parameters to configure Router, see `RouterConfigOptions` for\n * additional information.\n * @returns A set of providers for use with `provideRouter`.\n *\n * @see [Router configuration options](guide/routing/customizing-route-behavior#router-configuration-options)\n *\n * @publicApi\n */\nexport function withRouterConfig(options: RouterConfigOptions): RouterConfigurationFeature {\n const providers = [{provide: ROUTER_CONFIGURATION, useValue: options}];\n return routerFeature(RouterFeatureKind.RouterConfigurationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withHashLocation` for use with `provideRouter`.\n *\n * @see {@link withHashLocation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type RouterHashLocationFeature = RouterFeature<RouterFeatureKind.RouterHashLocationFeature>;\n\n/**\n * Provides the location strategy that uses the URL fragment instead of the history API.\n *\n * @usageNotes\n *\n * Basic example of how you can use the hash location option:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withHashLocation())\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n * @see {@link /api/common/HashLocationStrategy HashLocationStrategy}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withHashLocation(): RouterHashLocationFeature {\n const providers = [{provide: LocationStrategy, useClass: HashLocationStrategy}];\n return routerFeature(RouterFeatureKind.RouterHashLocationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withNavigationErrorHandler` for use with `provideRouter`.\n *\n * @see {@link withNavigationErrorHandler}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type NavigationErrorHandlerFeature =\n RouterFeature<RouterFeatureKind.NavigationErrorHandlerFeature>;\n\n/**\n * Provides a function which is called when a navigation error occurs.\n *\n * This function is run inside application's [injection context](guide/di/dependency-injection-context)\n * so you can use the [`inject`](api/core/inject) function.\n *\n * This function can return a `RedirectCommand` to convert the error to a redirect, similar to returning\n * a `UrlTree` or `RedirectCommand` from a guard. This will also prevent the `Router` from emitting\n * `NavigationError`; it will instead emit `NavigationCancel` with code NavigationCancellationCode.Redirect.\n * Return values other than `RedirectCommand` are ignored and do not change any behavior with respect to\n * how the `Router` handles the error.\n *\n * @usageNotes\n *\n * Basic example of how you can use the error handler option:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withNavigationErrorHandler((e: NavigationError) =>\n * inject(MyErrorTracker).trackError(e)))\n * ]\n * }\n * );\n * ```\n *\n * @see {@link NavigationError}\n * @see {@link /api/core/inject inject}\n * @see {@link runInInjectionContext}\n * @see [Centralize error handling in withNavigationErrorHandler](guide/routing/data-resolvers#centralize-error-handling-in-withnavigationerrorhandler)\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withNavigationErrorHandler(\n handler: (error: NavigationError) => unknown | RedirectCommand,\n): NavigationErrorHandlerFeature {\n const providers = [\n {\n provide: NAVIGATION_ERROR_HANDLER,\n useValue: handler,\n },\n ];\n return routerFeature(RouterFeatureKind.NavigationErrorHandlerFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withExperimentalAutoCleanupInjectors` for use with `provideRouter`.\n *\n * @see {@link withExperimentalAutoCleanupInjectors}\n * @see {@link provideRouter}\n *\n * @experimental 21.1\n */\nexport type ExperimentalAutoCleanupInjectorsFeature =\n RouterFeature<RouterFeatureKind.ExperimentalAutoCleanupInjectorsFeature>;\n\n/**\n * Enables automatic destruction of unused route injectors.\n *\n * @description\n *\n * When enabled, the router will automatically destroy `EnvironmentInjector`s associated with `Route`s\n * that are no longer active or stored by the `RouteReuseStrategy`.\n *\n * This feature is opt-in and requires `RouteReuseStrategy.shouldDestroyInjector` to return `true`\n * for the routes that should be destroyed. If the `RouteReuseStrategy` uses stored handles, it\n * should also implement `retrieveStoredHandle` to ensure we don't destroy injectors for handles that will be reattached.\n *\n * @experimental 21.1\n */\nexport function withExperimentalAutoCleanupInjectors(): ExperimentalAutoCleanupInjectorsFeature {\n return routerFeature(RouterFeatureKind.ExperimentalAutoCleanupInjectorsFeature, [\n {provide: ROUTE_INJECTOR_CLEANUP, useValue: routeInjectorCleanup},\n ]);\n}\n\n/**\n * A type alias for providers returned by `withComponentInputBinding` for use with `provideRouter`.\n *\n * @see {@link withComponentInputBinding}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type ComponentInputBindingFeature =\n RouterFeature<RouterFeatureKind.ComponentInputBindingFeature>;\n\n/**\n * A type alias for providers returned by `withViewTransitions` for use with `provideRouter`.\n *\n * @see {@link withViewTransitions}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type ViewTransitionsFeature = RouterFeature<RouterFeatureKind.ViewTransitionsFeature>;\n\n/**\n * Enables binding information from the `Router` state directly to the inputs of the component in\n * `Route` configurations.\n *\n * @usageNotes\n *\n * Basic example of how you can enable the feature:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withComponentInputBinding())\n * ]\n * }\n * );\n * ```\n *\n * The router bindings information from any of the following sources:\n *\n * - query parameters\n * - path and matrix parameters\n * - static route data\n * - data from resolvers\n *\n * Duplicate keys are resolved in the same order from above, from least to greatest,\n * meaning that resolvers have the highest precedence and override any of the other information\n * from the route.\n *\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`. This prevents previous information from being\n * retained if the data got removed from the route (i.e. if a query parameter is removed).\n * Default values can be provided with a resolver on the route to ensure the value is always present\n * or an input and use an input transform in the component.\n *\n * @see {@link /guide/components/inputs#input-transforms Input Transforms}\n * @returns A set of providers for use with `provideRouter`.\n */\nexport function withComponentInputBinding(): ComponentInputBindingFeature {\n const providers = [\n RoutedComponentInputBinder,\n {provide: INPUT_BINDER, useExisting: RoutedComponentInputBinder},\n ];\n\n return routerFeature(RouterFeatureKind.ComponentInputBindingFeature, providers);\n}\n\n/**\n * Enables view transitions in the Router by running the route activation and deactivation inside of\n * `document.startViewTransition`.\n *\n * Note: The View Transitions API is not available in all browsers. If the browser does not support\n * view transitions, the Router will not attempt to start a view transition and continue processing\n * the navigation as usual.\n *\n * @usageNotes\n *\n * Basic example of how you can enable the feature:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withViewTransitions())\n * ]\n * }\n * );\n * ```\n *\n * @returns A set of providers for use with `provideRouter`.\n * @see [View Transitions on MDN](https://developer.chrome.com/docs/web-platform/view-transitions/)\n * @see [View Transitions API on MDN](https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API)\n * @see [Route transition animations](guide/routing/route-transition-animations)\n * @developerPreview 19.0\n */\nexport function withViewTransitions(\n options?: ViewTransitionsFeatureOptions,\n): ViewTransitionsFeature {\n performanceMarkFeature('NgRouterViewTransitions');\n const providers = [\n {provide: CREATE_VIEW_TRANSITION, useValue: createViewTransition},\n {\n provide: VIEW_TRANSITION_OPTIONS,\n useValue: {skipNextTransition: !!options?.skipInitialTransition, ...options},\n },\n ];\n return routerFeature(RouterFeatureKind.ViewTransitionsFeature, providers);\n}\n\n/**\n * A type alias that represents all Router features available for use with `provideRouter`.\n * Features can be enabled by adding special functions to the `provideRouter` call.\n * See documentation for each symbol to find corresponding function name. See also `provideRouter`\n * documentation on how to use those functions.\n *\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type RouterFeatures =\n | PreloadingFeature\n | DebugTracingFeature\n | InitialNavigationFeature\n | InMemoryScrollingFeature\n | RouterConfigurationFeature\n | NavigationErrorHandlerFeature\n | ComponentInputBindingFeature\n | ViewTransitionsFeature\n | ExperimentalAutoCleanupInjectorsFeature\n | RouterHashLocationFeature\n | ExperimentalPlatformNavigationFeature;\n\n/**\n * The list of features as an enum to uniquely type each feature.\n */\nexport const enum RouterFeatureKind {\n PreloadingFeature,\n DebugTracingFeature,\n EnabledBlockingInitialNavigationFeature,\n DisabledInitialNavigationFeature,\n InMemoryScrollingFeature,\n RouterConfigurationFeature,\n RouterHashLocationFeature,\n NavigationErrorHandlerFeature,\n ComponentInputBindingFeature,\n ViewTransitionsFeature,\n ExperimentalAutoCleanupInjectorsFeature,\n ExperimentalPlatformNavigationFeature,\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n HashLocationStrategy,\n Location,\n LocationStrategy,\n PathLocationStrategy,\n ViewportScroller,\n} from '@angular/common';\nimport {\n APP_BOOTSTRAP_LISTENER,\n ComponentRef,\n inject,\n InjectionToken,\n ModuleWithProviders,\n NgModule,\n Provider,\n ɵRuntimeError as RuntimeError,\n} from '@angular/core';\n\nimport {EmptyOutletComponent} from './components/empty_outlet';\nimport {RouterLink} from './directives/router_link';\nimport {RouterLinkActive} from './directives/router_link_active';\nimport {RouterOutlet} from './directives/router_outlet';\nimport {RuntimeErrorCode} from './errors';\nimport {Routes} from './models';\nimport {NAVIGATION_ERROR_HANDLER} from './navigation_transition';\nimport {\n getBootstrapListener,\n rootRoute,\n ROUTER_IS_PROVIDED,\n withComponentInputBinding,\n withDebugTracing,\n withDisabledInitialNavigation,\n withEnabledBlockingInitialNavigation,\n withPreloading,\n withViewTransitions,\n} from './provide_router';\nimport {Router} from './router';\nimport {ExtraOptions, ROUTER_CONFIGURATION} from './router_config';\nimport {RouterConfigLoader, ROUTES} from './router_config_loader';\nimport {ChildrenOutletContexts} from './router_outlet_context';\nimport {ROUTER_SCROLLER, RouterScroller} from './router_scroller';\nimport {ActivatedRoute} from './router_state';\nimport {DefaultUrlSerializer, UrlSerializer} from './url_tree';\n\n/**\n * The directives defined in the `RouterModule`.\n */\nconst ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkActive, EmptyOutletComponent];\n\n/**\n * @docsNotRequired\n */\nexport const ROUTER_FORROOT_GUARD = new InjectionToken<void>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'router duplicate forRoot guard' : '',\n);\n\n// TODO(atscott): All of these except `ActivatedRoute` are `providedIn: 'root'`. They are only kept\n// here to avoid a breaking change whereby the provider order matters based on where the\n// `RouterModule`/`RouterTestingModule` is imported. These can/should be removed as a \"breaking\"\n// change in a major version.\nexport const ROUTER_PROVIDERS: Provider[] = [\n Location,\n {provide: UrlSerializer, useClass: DefaultUrlSerializer},\n Router,\n ChildrenOutletContexts,\n {provide: ActivatedRoute, useFactory: rootRoute},\n RouterConfigLoader,\n // Only used to warn when `provideRoutes` is used without `RouterModule` or `provideRouter`. Can\n // be removed when `provideRoutes` is removed.\n typeof ngDevMode === 'undefined' || ngDevMode\n ? {provide: ROUTER_IS_PROVIDED, useValue: true}\n : [],\n];\n\n/**\n * @description\n *\n * Adds directives and providers for in-app navigation among views defined in an application.\n * Use the Angular `Router` service to declaratively specify application states and manage state\n * transitions.\n *\n * You can import this NgModule multiple times, once for each lazy-loaded bundle.\n * However, only one `Router` service can be active.\n * To ensure this, there are two ways to register routes when importing this module:\n *\n * * The `forRoot()` method creates an `NgModule` that contains all the directives, the given\n * routes, and the `Router` service itself.\n * * The `forChild()` method creates an `NgModule` that contains all the directives and the given\n * routes, but does not include the `Router` service.\n *\n * @see [Routing and Navigation guide](guide/routing/common-router-tasks) for an\n * overview of how the `Router` service should be used.\n *\n * @publicApi\n */\n@NgModule({\n imports: ROUTER_DIRECTIVES,\n exports: ROUTER_DIRECTIVES,\n})\nexport class RouterModule {\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n inject(ROUTER_FORROOT_GUARD, {optional: true});\n }\n }\n\n /**\n * Creates and configures a module with all the router providers and directives.\n * Optionally sets up an application listener to perform an initial navigation.\n *\n * When registering the NgModule at the root, import as follows:\n *\n * ```ts\n * @NgModule({\n * imports: [RouterModule.forRoot(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n * @param routes An array of `Route` objects that define the navigation paths for the application.\n * @param config An `ExtraOptions` configuration object that controls how navigation is performed.\n * @return The new `NgModule`.\n *\n */\n static forRoot(routes: Routes, config?: ExtraOptions): ModuleWithProviders<RouterModule> {\n return {\n ngModule: RouterModule,\n providers: [\n ROUTER_PROVIDERS,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? config?.enableTracing\n ? withDebugTracing().ɵproviders\n : []\n : [],\n {provide: ROUTES, multi: true, useValue: routes},\n typeof ngDevMode === 'undefined' || ngDevMode\n ? {\n provide: ROUTER_FORROOT_GUARD,\n useFactory: provideForRootGuard,\n }\n : [],\n config?.errorHandler\n ? {\n provide: NAVIGATION_ERROR_HANDLER,\n useValue: config.errorHandler,\n }\n : [],\n {provide: ROUTER_CONFIGURATION, useValue: config ? config : {}},\n config?.useHash ? provideHashLocationStrategy() : providePathLocationStrategy(),\n provideRouterScroller(),\n config?.preloadingStrategy ? withPreloading(config.preloadingStrategy).ɵproviders : [],\n config?.initialNavigation ? provideInitialNavigation(config) : [],\n config?.bindToComponentInputs ? withComponentInputBinding().ɵproviders : [],\n config?.enableViewTransitions ? withViewTransitions().ɵproviders : [],\n provideRouterInitializer(),\n ],\n };\n }\n\n /**\n * Creates a module with all the router directives and a provider registering routes,\n * without creating a new Router service.\n * When registering for submodules and lazy-loaded submodules, create the NgModule as follows:\n *\n * ```ts\n * @NgModule({\n * imports: [RouterModule.forChild(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n * @param routes An array of `Route` objects that define the navigation paths for the submodule.\n * @return The new NgModule.\n *\n */\n static forChild(routes: Routes): ModuleWithProviders<RouterModule> {\n return {\n ngModule: RouterModule,\n providers: [{provide: ROUTES, multi: true, useValue: routes}],\n };\n }\n}\n\n/**\n * For internal use by `RouterModule` only. Note that this differs from `withInMemoryRouterScroller`\n * because it reads from the `ExtraOptions` which should not be used in the standalone world.\n */\nexport function provideRouterScroller(): Provider {\n return {\n provide: ROUTER_SCROLLER,\n useFactory: () => {\n const viewportScroller = inject(ViewportScroller);\n const config: ExtraOptions = inject(ROUTER_CONFIGURATION);\n if (config.scrollOffset) {\n viewportScroller.setOffset(config.scrollOffset);\n }\n return new RouterScroller(config);\n },\n };\n}\n\n// Note: For internal use only with `RouterModule`. Standalone setup via `provideRouter` should\n// provide hash location directly via `{provide: LocationStrategy, useClass: HashLocationStrategy}`.\nfunction provideHashLocationStrategy(): Provider {\n return {provide: LocationStrategy, useClass: HashLocationStrategy};\n}\n\n// Note: For internal use only with `RouterModule`. Standalone setup via `provideRouter` does not\n// need this at all because `PathLocationStrategy` is the default factory for `LocationStrategy`.\nfunction providePathLocationStrategy(): Provider {\n return {provide: LocationStrategy, useClass: PathLocationStrategy};\n}\n\nexport function provideForRootGuard(): any {\n const router = inject(Router, {optional: true, skipSelf: true});\n\n if (router) {\n throw new RuntimeError(\n RuntimeErrorCode.FOR_ROOT_CALLED_TWICE,\n `The Router was provided more than once. This can happen if 'forRoot' is used outside of the root injector.` +\n ` Lazy loaded modules should use RouterModule.forChild() instead.`,\n );\n }\n return 'guarded';\n}\n\n// Note: For internal use only with `RouterModule`. Standalone router setup with `provideRouter`\n// users call `withXInitialNavigation` directly.\nfunction provideInitialNavigation(config: Pick<ExtraOptions, 'initialNavigation'>): Provider[] {\n return [\n config.initialNavigation === 'disabled' ? withDisabledInitialNavigation().ɵproviders : [],\n config.initialNavigation === 'enabledBlocking'\n ? withEnabledBlockingInitialNavigation().ɵproviders\n : [],\n ];\n}\n\n// TODO(atscott): This should not be in the public API\n/**\n * A DI token for the router initializer that\n * is called after the app is bootstrapped.\n *\n * @publicApi\n */\nexport const ROUTER_INITIALIZER = new InjectionToken<(compRef: ComponentRef<any>) => void>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'Router Initializer' : '',\n);\n\nfunction provideRouterInitializer(): Provider[] {\n return [\n // ROUTER_INITIALIZER token should be removed. It's public API but shouldn't be. We can just\n // have `getBootstrapListener` directly attached to APP_BOOTSTRAP_LISTENER.\n {provide: ROUTER_INITIALIZER, useFactory: getBootstrapListener},\n {provide: APP_BOOTSTRAP_LISTENER, multi: true, useExisting: ROUTER_INITIALIZER},\n ];\n}\n"],"names":["RouterLink","router","route","tabIndexAttribute","renderer","el","locationStrategy","reactiveHref","signal","href","untracked","value","set","target","queryParams","fragment","queryParamsHandling","state","info","relativeTo","isAnchorElement","subscription","onChanges","Subject","applicationErrorHandler","inject","ɵINTERNAL_APPLICATION_ERROR_HANDLER","options","ROUTER_CONFIGURATION","optional","constructor","HostAttributeToken","tagName","nativeElement","toLowerCase","customElements","get","observedAttributes","includes","setTabIndexIfNotOnNativeEl","subscribeToNavigationEventsIfNecessary","undefined","events","subscribe","s","NavigationEnd","updateHref","preserveFragment","skipLocationChange","replaceUrl","newTabIndex","applyAttributeValue","ngOnChanges","changes","ngDevMode","isUrlTree","routerLinkInput","RuntimeError","next","routerLink","commandsOrUrlTree","Array","isArray","onClick","button","ctrlKey","shiftKey","altKey","metaKey","urlTree","extras","navigateByUrl","catch","e","ngOnDestroy","unsubscribe","prepareExternalUrl","serializeUrl","attrName","attrValue","setAttribute","removeAttribute","createUrlTree","ɵfac","i0","ɵɵngDeclareFactory","minVersion","version","ngImport","type","attribute","token","Renderer2","ElementRef","i3","LocationStrategy","ɵɵFactoryTarget","Directive","ɵdir","ɵɵngDeclareDirective","isStandalone","selector","inputs","booleanAttribute","host","listeners","properties","usesOnChanges","decorators","args","Attribute","HostBinding","Input","transform","HostListener","RouterLinkActive","element","cdr","links","classes","routerEventsSubscription","linkInputChangesSubscription","_isActive","isActive","routerLinkActiveOptions","exact","ariaCurrentWhenActive","isActiveChange","EventEmitter","link","update","ngAfterContentInit","of","pipe","mergeAll","_","subscribeToEachLinkOnChanges","allLinkChanges","toArray","filter","map","from","isLinkActive","routerLinkActive","data","split","c","navigated","queueMicrotask","hasActiveLinks","forEach","addClass","removeClass","toString","markForCheck","emit","isActiveMatchOptions","exactMatchOptions","subsetMatchOptions","isActiveCheckFn","some","deps","i1","ChangeDetectorRef","descendants","exportAs","ContentChildren","Output","paths","PreloadingStrategy","PreloadAllModules","preload","fn","catchError","Injectable","ɵprov","ɵɵngDeclareInjectable","providedIn","NoPreloading","RouterPreloader","injector","preloadingStrategy","loader","setUpPreloading","concatMap","processRoutes","config","routes","res","providers","_injector","createEnvironmentInjector","path","injectorForCurrentRoute","_loadedNgModuleFactory","_loadedInjector","create","injectorForChildren","loadChildren","_loadedRoutes","canLoad","loadComponent","_loadedComponent","push","preloadConfig","children","destroyed","loadedChildren$","recursiveLoadChildren$","mergeMap","factory","loadComponent$","EnvironmentInjector","i2","ROUTER_SCROLLER","InjectionToken","RouterScroller","scrollEventsSubscription","lastId","lastSource","IMPERATIVE_NAVIGATION","restoredId","store","urlSerializer","UrlSerializer","zone","NgZone","viewportScroller","ViewportScroller","transitions","NavigationTransitions","scrollPositionRestoration","anchorScrolling","init","setHistoryScrollRestoration","createScrollEvents","consumeScrollEvents","NavigationStart","getScrollPosition","navigationTrigger","restoredState","navigationId","id","scheduleScrollEvent","parse","urlAfterRedirects","NavigationSkipped","code","NavigationSkippedCode","IgnoredSameUrlNavigation","url","Scroll","scrollBehavior","instantScroll","behavior","position","scrollToPosition","anchor","scrollToAnchor","routerEvent","scroll","currentNavigation","runOutsideAngular","Promise","resolve","setTimeout","requestAnimationFrame","run","getLoadedRoutes","getRouterInstance","Router","Error","NavigationStateManager","StateManager","navigation","PlatformNavigation","inMemoryScrollingEnabled","base","URL","PlatformLocation","origin","appRootURL","location","precommitHandlerSupported","PRECOMMIT_HANDLER_SUPPORTED","activeHistoryEntry","currentEntry","nonRouterCurrentEntryChangeSubject","nonRouterEntryChangeListener","registered","closed","navigateListener","event","handleNavigate","addEventListener","DestroyRef","onDestroy","removeEventListener","registerNonRouterCurrentEntryChangeListener","listener","handleRouterEvent","transition","routerTransition","updateStateMemento","finishNavigation","commitTransition","RoutesRecognized","urlUpdateStrategy","createNavigationForTransition","BeforeActivateRoutes","NavigationCancel","NavigationError","cancel","resolveHandler","removeAbortListener","afterNextRender","read","navigationEvent","navigationType","eventAndRouterDestinationsMatch","createBrowserPath","navigate","internalPath","ɵrouterInfo","intercept","history","isCurrentPathEqualTo","handleResultRejections","cause","rejectNavigateEvent","clearedState","isRedirectingEvent","isTraversalReset","canceledNavigationResolution","key","resetInternalState","finalUrl","NavigationCancellationCode","Aborted","traverseTo","serialize","getCurrentUrlTree","pathOrUrl","getState","traversalReset","routerState","stateMemento","currentUrlTree","rawUrlTree","urlHandlingStrategy","merge","canIntercept","routerInfo","isTriggeredByRouterTransition","abort","abortHandler","interceptOptions","promise","handlerPromise","reject","rejectHandler","promiseWithResolvers","handler","handleNavigateEventTriggeredOutsideRouterAPIs","destination","substring","length","navigateEvent","eventDestination","routerDestination","result","finished","committed","provideRouter","features","ɵpublishExternalGlobalUtil","makeEnvironmentProviders","provide","ROUTES","multi","useValue","ROUTER_IS_PROVIDED","ActivatedRoute","useFactory","rootRoute","APP_BOOTSTRAP_LISTENER","getBootstrapListener","feature","ɵproviders","root","routerFeature","kind","ɵkind","routerIsProvidedDevModeCheck","ENVIRONMENT_INITIALIZER","console","warn","provideRoutes","withInMemoryScrolling","withExperimentalPlatformNavigation","devModeLocationCheck","provideEnvironmentInitializer","locationInstance","Location","ɵNavigationAdapterForLocation","locationConstructorName","name","message","useExisting","useClass","Injector","bootstrappedComponentRef","ref","ApplicationRef","components","bootstrapDone","BOOTSTRAP_DONE","INITIAL_NAVIGATION","initialNavigation","ROUTER_PRELOADER","resetRootComponentType","componentTypes","complete","withEnabledBlockingInitialNavigation","IS_ENABLED_BLOCKING_INITIAL_NAVIGATION","provideAppInitializer","locationInitialized","LOCATION_INITIALIZED","then","afterNextNavigation","afterPreactivation","withDisabledInitialNavigation","setUpLocationChangeListener","withDebugTracing","group","log","stringifyEvent","groupEnd","withPreloading","withRouterConfig","withHashLocation","HashLocationStrategy","withNavigationErrorHandler","NAVIGATION_ERROR_HANDLER","withExperimentalAutoCleanupInjectors","ROUTE_INJECTOR_CLEANUP","routeInjectorCleanup","withComponentInputBinding","RoutedComponentInputBinder","INPUT_BINDER","withViewTransitions","performanceMarkFeature","CREATE_VIEW_TRANSITION","createViewTransition","VIEW_TRANSITION_OPTIONS","skipNextTransition","skipInitialTransition","ROUTER_DIRECTIVES","RouterOutlet","EmptyOutletComponent","ROUTER_FORROOT_GUARD","ROUTER_PROVIDERS","DefaultUrlSerializer","ChildrenOutletContexts","RouterConfigLoader","RouterModule","forRoot","ngModule","enableTracing","provideForRootGuard","errorHandler","useHash","provideHashLocationStrategy","providePathLocationStrategy","provideRouterScroller","provideInitialNavigation","bindToComponentInputs","enableViewTransitions","provideRouterInitializer","forChild","NgModule","ɵmod","ɵɵngDeclareNgModule","imports","exports","scrollOffset","setOffset","PathLocationStrategy","skipSelf","ROUTER_INITIALIZER"],"mappings":"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"}
|