@angular/router 21.0.5 → 21.0.7
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.
- package/fesm2022/_router-chunk.mjs +58 -55
- package/fesm2022/_router-chunk.mjs.map +1 -1
- package/fesm2022/_router_module-chunk.mjs +31 -42
- package/fesm2022/_router_module-chunk.mjs.map +1 -1
- package/fesm2022/router.mjs +2 -2
- package/fesm2022/router.mjs.map +1 -1
- package/fesm2022/testing.mjs +11 -11
- package/fesm2022/upgrade.mjs +1 -1
- package/package.json +4 -4
- package/types/_router_module-chunk.d.ts +6 -6
- package/types/router.d.ts +1 -1
- package/types/testing.d.ts +1 -1
- package/types/upgrade.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_router_module-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/directives/router_link.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/directives/router_link_active.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/router_preloader.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/router_scroller.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/router_devtools.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/statemanager/navigation_state_manager.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/provide_router.ts","../../../../../darwin_arm64-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#getCurrentNavigation} to retrieve a saved\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.getCurrentNavigation();\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.subscribeToNavigationEventsIfNecessary();\n } else {\n this.setTabIndexIfNotOnNativeEl('0');\n }\n }\n\n private subscribeToNavigationEventsIfNecessary() {\n if (this.subscription !== undefined || !this.isAnchorElement) {\n return;\n }\n\n // preserving fragment in router state\n let createSubcription = this.preserveFragment;\n // preserving or merging with query params in router state\n const dependsOnRouterState = (handling?: QueryParamsHandling | null) =>\n handling === 'merge' || handling === 'preserve';\n createSubcription ||= dependsOnRouterState(this.queryParamsHandling);\n createSubcription ||=\n !this.queryParamsHandling && !dependsOnRouterState(this.options?.defaultQueryParamsHandling);\n if (!createSubcription) {\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 this.subscribeToNavigationEventsIfNecessary();\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} from '@angular/core';\nimport {from, of, Subscription} from 'rxjs';\nimport {mergeAll} from 'rxjs/operators';\n\nimport {Event, NavigationEnd} from '../events';\nimport {Router} from '../router';\nimport {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 `Router.isActive()` function.\n *\n * @see {@link Router#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: boolean | IsActiveMatchOptions = isActiveMatchOptions(\n this.routerLinkActiveOptions,\n )\n ? this.routerLinkActiveOptions\n : // While the types should disallow `undefined` here, it's possible without strict inputs\n this.routerLinkActiveOptions.exact || false;\n return (link: RouterLink) => {\n const urlTree = link.urlTree;\n return urlTree ? router.isActive(urlTree, 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 if (this.subscription) {\n this.subscription.unsubscribe();\n }\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 `Route: ${route.path}`,\n );\n }\n\n const injectorForCurrentRoute = route._injector ?? injector;\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 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 // 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 {Injectable, InjectionToken, NgZone, OnDestroy} 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 /** @docs-private */\n constructor(\n readonly urlSerializer: UrlSerializer,\n private transitions: NavigationTransitions,\n public readonly viewportScroller: ViewportScroller,\n private readonly zone: NgZone,\n private options: {\n scrollPositionRestoration?: 'disabled' | 'enabled' | 'top';\n anchorScrolling?: 'disabled' | 'enabled';\n } = {},\n ) {\n // Default both options to 'disabled'\n options.scrollPositionRestoration ||= 'disabled';\n 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)) 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 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 ),\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 {inject, Injectable} from '@angular/core';\n\nimport {PlatformNavigation} from '@angular/common';\nimport {HistoryStateManager} from './state_manager';\nimport {RestoredState} from '../navigation_transition';\nimport {NavigationTrigger} from '../events';\nimport {SubscriptionLike} from 'rxjs';\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 HistoryStateManager {\n private readonly navigation = inject(PlatformNavigation);\n\n override registerNonRouterCurrentEntryChangeListener(\n listener: (\n url: string,\n state: RestoredState | null | undefined,\n trigger: NavigationTrigger,\n ) => void,\n ): SubscriptionLike {\n return this.location.subscribe((event) => {\n if (event['type'] === 'popstate') {\n // Pass the state from navigation API rather than from history\n const state = this.navigation.currentEntry?.getState() as RestoredState;\n listener(event['url']!, state, 'popstate');\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 {\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 NgZone,\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 {ROUTER_SCROLLER, RouterScroller} from './router_scroller';\nimport {ActivatedRoute} from './router_state';\nimport {UrlSerializer} from './url_tree';\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: () => {\n const viewportScroller = inject(ViewportScroller);\n const zone = inject(NgZone);\n const transitions = inject(NavigationTransitions);\n const urlSerializer = inject(UrlSerializer);\n return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, options);\n },\n },\n ];\n return routerFeature(RouterFeatureKind.InMemoryScrollingFeature, providers);\n}\n\n/**\n * Enables the use of the browser's `History` API for navigation.\n *\n * @description\n * This function provides a `Location` strategy that uses the browser's `History` API.\n * It is required when using features that rely on `history.state`. For example, the\n * `state` object in `NavigationExtras` is passed to `history.pushState` or\n * `history.replaceState`.\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, withPlatformNavigation())\n * ]\n * });\n * ```\n *\n * @returns A `RouterFeature` that enables the platform navigation.\n */\nexport function withPlatformNavigation() {\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 `'withPlatformNavigation' 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. 'withPlatformNavigation' 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.InMemoryScrollingFeature, 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 `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 | RouterHashLocationFeature;\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}\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 NgZone,\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, NavigationTransitions} 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 zone = inject(NgZone);\n const config: ExtraOptions = inject(ROUTER_CONFIGURATION);\n const transitions = inject(NavigationTransitions);\n const urlSerializer = inject(UrlSerializer);\n if (config.scrollOffset) {\n viewportScroller.setOffset(config.scrollOffset);\n }\n return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, 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","subscribeToNavigationEventsIfNecessary","setTabIndexIfNotOnNativeEl","undefined","createSubcription","preserveFragment","dependsOnRouterState","handling","defaultQueryParamsHandling","events","subscribe","s","NavigationEnd","updateHref","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","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","injectorForChildren","_loadedInjector","loadChildren","_loadedRoutes","canLoad","loadComponent","_loadedComponent","push","preloadConfig","children","loadedChildren$","recursiveLoadChildren$","mergeMap","loadComponent$","EnvironmentInjector","i2","ROUTER_SCROLLER","InjectionToken","RouterScroller","urlSerializer","transitions","viewportScroller","zone","scrollEventsSubscription","lastId","lastSource","IMPERATIVE_NAVIGATION","restoredId","store","scrollPositionRestoration","anchorScrolling","init","setHistoryScrollRestoration","createScrollEvents","consumeScrollEvents","NavigationStart","getScrollPosition","navigationTrigger","restoredState","navigationId","id","scheduleScrollEvent","parse","urlAfterRedirects","NavigationSkipped","code","NavigationSkippedCode","IgnoredSameUrlNavigation","url","Scroll","instantScroll","behavior","position","scrollToPosition","anchor","scrollToAnchor","routerEvent","runOutsideAngular","Promise","resolve","setTimeout","requestAnimationFrame","run","getLoadedRoutes","getRouterInstance","Router","Error","NavigationStateManager","HistoryStateManager","navigation","PlatformNavigation","registerNonRouterCurrentEntryChangeListener","listener","location","event","currentEntry","getState","provideRouter","features","ɵpublishExternalGlobalUtil","makeEnvironmentProviders","provide","ROUTES","multi","useValue","ROUTER_IS_PROVIDED","ActivatedRoute","useFactory","rootRoute","APP_BOOTSTRAP_LISTENER","getBootstrapListener","feature","ɵproviders","routerState","root","routerFeature","kind","ɵkind","factory","routerIsProvidedDevModeCheck","ENVIRONMENT_INITIALIZER","console","warn","provideRoutes","withInMemoryScrolling","ViewportScroller","NgZone","NavigationTransitions","UrlSerializer","withPlatformNavigation","devModeLocationCheck","provideEnvironmentInitializer","locationInstance","Location","ɵNavigationAdapterForLocation","locationConstructorName","name","message","StateManager","useExisting","useClass","Injector","bootstrappedComponentRef","ref","ApplicationRef","components","bootstrapDone","BOOTSTRAP_DONE","INITIAL_NAVIGATION","initialNavigation","ROUTER_PRELOADER","resetRootComponentType","componentTypes","closed","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","handler","NAVIGATION_ERROR_HANDLER","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":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/directives/router_link.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/directives/router_link_active.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/router_preloader.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/router_scroller.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/router_devtools.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/statemanager/navigation_state_manager.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/router/src/provide_router.ts","../../../../../darwin_arm64-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} from '@angular/core';\nimport {from, of, Subscription} from 'rxjs';\nimport {mergeAll} from 'rxjs/operators';\n\nimport {Event, NavigationEnd} from '../events';\nimport {Router} from '../router';\nimport {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 `Router.isActive()` function.\n *\n * @see {@link Router#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: boolean | IsActiveMatchOptions = isActiveMatchOptions(\n this.routerLinkActiveOptions,\n )\n ? this.routerLinkActiveOptions\n : // While the types should disallow `undefined` here, it's possible without strict inputs\n this.routerLinkActiveOptions.exact || false;\n return (link: RouterLink) => {\n const urlTree = link.urlTree;\n return urlTree ? router.isActive(urlTree, 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 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 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 // 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 {Injectable, InjectionToken, NgZone, OnDestroy} 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 /** @docs-private */\n constructor(\n readonly urlSerializer: UrlSerializer,\n private transitions: NavigationTransitions,\n public readonly viewportScroller: ViewportScroller,\n private readonly zone: NgZone,\n private options: {\n scrollPositionRestoration?: 'disabled' | 'enabled' | 'top';\n anchorScrolling?: 'disabled' | 'enabled';\n } = {},\n ) {\n // Default both options to 'disabled'\n options.scrollPositionRestoration ||= 'disabled';\n 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)) 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 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 ),\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 {inject, Injectable} from '@angular/core';\n\nimport {PlatformNavigation} from '@angular/common';\nimport {HistoryStateManager} from './state_manager';\nimport {RestoredState} from '../navigation_transition';\nimport {NavigationTrigger} from '../events';\nimport {SubscriptionLike} from 'rxjs';\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 HistoryStateManager {\n private readonly navigation = inject(PlatformNavigation);\n\n override registerNonRouterCurrentEntryChangeListener(\n listener: (\n url: string,\n state: RestoredState | null | undefined,\n trigger: NavigationTrigger,\n ) => void,\n ): SubscriptionLike {\n return this.location.subscribe((event) => {\n if (event['type'] === 'popstate') {\n // Pass the state from navigation API rather than from history\n const state = this.navigation.currentEntry?.getState() as RestoredState;\n listener(event['url']!, state, 'popstate');\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 {\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 NgZone,\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 {ROUTER_SCROLLER, RouterScroller} from './router_scroller';\nimport {ActivatedRoute} from './router_state';\nimport {UrlSerializer} from './url_tree';\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: () => {\n const viewportScroller = inject(ViewportScroller);\n const zone = inject(NgZone);\n const transitions = inject(NavigationTransitions);\n const urlSerializer = inject(UrlSerializer);\n return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, options);\n },\n },\n ];\n return routerFeature(RouterFeatureKind.InMemoryScrollingFeature, providers);\n}\n\n/**\n * Enables the use of the browser's `History` API for navigation.\n *\n * @description\n * This function provides a `Location` strategy that uses the browser's `History` API.\n * It is required when using features that rely on `history.state`. For example, the\n * `state` object in `NavigationExtras` is passed to `history.pushState` or\n * `history.replaceState`.\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, withPlatformNavigation())\n * ]\n * });\n * ```\n *\n * @returns A `RouterFeature` that enables the platform navigation.\n */\nexport function withPlatformNavigation() {\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 `'withPlatformNavigation' 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. 'withPlatformNavigation' 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.InMemoryScrollingFeature, 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 `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 | RouterHashLocationFeature;\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}\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 NgZone,\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, NavigationTransitions} 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 zone = inject(NgZone);\n const config: ExtraOptions = inject(ROUTER_CONFIGURATION);\n const transitions = inject(NavigationTransitions);\n const urlSerializer = inject(UrlSerializer);\n if (config.scrollOffset) {\n viewportScroller.setOffset(config.scrollOffset);\n }\n return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, 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","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","injectorForChildren","_loadedInjector","loadChildren","_loadedRoutes","canLoad","loadComponent","_loadedComponent","push","preloadConfig","children","loadedChildren$","recursiveLoadChildren$","mergeMap","loadComponent$","EnvironmentInjector","i2","ROUTER_SCROLLER","InjectionToken","RouterScroller","urlSerializer","transitions","viewportScroller","zone","scrollEventsSubscription","lastId","lastSource","IMPERATIVE_NAVIGATION","restoredId","store","scrollPositionRestoration","anchorScrolling","init","setHistoryScrollRestoration","createScrollEvents","consumeScrollEvents","NavigationStart","getScrollPosition","navigationTrigger","restoredState","navigationId","id","scheduleScrollEvent","parse","urlAfterRedirects","NavigationSkipped","code","NavigationSkippedCode","IgnoredSameUrlNavigation","url","Scroll","instantScroll","behavior","position","scrollToPosition","anchor","scrollToAnchor","routerEvent","runOutsideAngular","Promise","resolve","setTimeout","requestAnimationFrame","run","getLoadedRoutes","getRouterInstance","Router","Error","NavigationStateManager","HistoryStateManager","navigation","PlatformNavigation","registerNonRouterCurrentEntryChangeListener","listener","location","event","currentEntry","getState","provideRouter","features","ɵpublishExternalGlobalUtil","makeEnvironmentProviders","provide","ROUTES","multi","useValue","ROUTER_IS_PROVIDED","ActivatedRoute","useFactory","rootRoute","APP_BOOTSTRAP_LISTENER","getBootstrapListener","feature","ɵproviders","routerState","root","routerFeature","kind","ɵkind","factory","routerIsProvidedDevModeCheck","ENVIRONMENT_INITIALIZER","console","warn","provideRoutes","withInMemoryScrolling","ViewportScroller","NgZone","NavigationTransitions","UrlSerializer","withPlatformNavigation","devModeLocationCheck","provideEnvironmentInitializer","locationInstance","Location","ɵNavigationAdapterForLocation","locationConstructorName","name","message","StateManager","useExisting","useClass","Injector","bootstrappedComponentRef","ref","ApplicationRef","components","bootstrapDone","BOOTSTRAP_DONE","INITIAL_NAVIGATION","initialNavigation","ROUTER_PRELOADER","resetRootComponentType","componentTypes","closed","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","handler","NAVIGATION_ERROR_HANDLER","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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"}
|