@angular/router 21.1.0 → 21.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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_INITIALIZED,\n LocationStrategy,\n ViewportScroller,\n Location,\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 makeEnvironmentProviders,\n provideAppInitializer,\n Provider,\n runInInjectionContext,\n ɵperformanceMarkFeature as performanceMarkFeature,\n ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION as IS_ENABLED_BLOCKING_INITIAL_NAVIGATION,\n ɵpublishExternalGlobalUtil,\n provideEnvironmentInitializer,\n Type,\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 {Router} from './router';\nimport {InMemoryScrollingOptions, ROUTER_CONFIGURATION, RouterConfigOptions} from './router_config';\nimport {ROUTES} from './router_config_loader';\nimport {PreloadingStrategy, RouterPreloader} from './router_preloader';\nimport {routeInjectorCleanup, ROUTE_INJECTOR_CLEANUP} from './route_injector_cleanup';\n\nimport {ROUTER_SCROLLER, RouterScroller} from './router_scroller';\n\nimport {ActivatedRoute} from './router_state';\nimport {afterNextNavigation} from './utils/navigations';\nimport {\n CREATE_VIEW_TRANSITION,\n createViewTransition,\n VIEW_TRANSITION_OPTIONS,\n ViewTransitionsFeatureOptions,\n} from './utils/view_transition';\nimport {getLoadedRoutes, getRouterInstance, navigateByUrl} from './router_devtools';\nimport {StateManager} from './statemanager/state_manager';\nimport {NavigationStateManager} from './statemanager/navigation_state_manager';\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 https://github.com/WICG/navigation-api?tab=readme-ov-file#problem-statement\n * @see https://developer.chrome.com/docs/web-platform/navigation-api/\n * @see 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 https://developer.chrome.com/docs/web-platform/view-transitions/\n * @see 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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"}
1
+ {"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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"}