@angular/router 16.0.0-next.5 → 16.0.0-next.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.
Files changed (34) hide show
  1. package/esm2022/src/components/empty_outlet.mjs +3 -3
  2. package/esm2022/src/create_url_tree.mjs +6 -4
  3. package/esm2022/src/directives/router_link.mjs +3 -3
  4. package/esm2022/src/directives/router_link_active.mjs +3 -3
  5. package/esm2022/src/directives/router_outlet.mjs +82 -5
  6. package/esm2022/src/index.mjs +2 -2
  7. package/esm2022/src/navigation_transition.mjs +11 -5
  8. package/esm2022/src/operators/activate_routes.mjs +16 -4
  9. package/esm2022/src/operators/check_guards.mjs +1 -1
  10. package/esm2022/src/page_title_strategy.mjs +6 -6
  11. package/esm2022/src/provide_router.mjs +30 -1
  12. package/esm2022/src/route_reuse_strategy.mjs +6 -6
  13. package/esm2022/src/router.mjs +12 -7
  14. package/esm2022/src/router_config.mjs +1 -1
  15. package/esm2022/src/router_config_loader.mjs +3 -3
  16. package/esm2022/src/router_module.mjs +7 -6
  17. package/esm2022/src/router_outlet_context.mjs +3 -3
  18. package/esm2022/src/router_preloader.mjs +9 -9
  19. package/esm2022/src/router_scroller.mjs +3 -3
  20. package/esm2022/src/url_handling_strategy.mjs +6 -6
  21. package/esm2022/src/url_tree.mjs +4 -4
  22. package/esm2022/src/utils/type_guards.mjs +1 -1
  23. package/esm2022/src/version.mjs +1 -1
  24. package/esm2022/testing/src/router_testing_harness.mjs +6 -6
  25. package/esm2022/testing/src/router_testing_module.mjs +7 -7
  26. package/fesm2022/router.mjs +338 -212
  27. package/fesm2022/router.mjs.map +1 -1
  28. package/fesm2022/testing.mjs +13 -13
  29. package/fesm2022/testing.mjs.map +1 -1
  30. package/fesm2022/upgrade.mjs +1 -1
  31. package/index.d.ts +88 -4
  32. package/package.json +4 -4
  33. package/testing/index.d.ts +3 -3
  34. package/upgrade/index.d.ts +1 -1
@@ -1,12 +1,12 @@
1
1
  /**
2
- * @license Angular v16.0.0-next.5
2
+ * @license Angular v16.0.0-next.7
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import * as i0 from '@angular/core';
8
- import { ɵisPromise, ɵRuntimeError, Injectable, EventEmitter, inject, ViewContainerRef, ChangeDetectorRef, EnvironmentInjector, Directive, Input, Output, Component, createEnvironmentInjector, ɵisNgModule, isStandalone, ɵisInjectable, InjectionToken, Compiler, InjectFlags, NgModuleFactory, ɵConsole, ɵInitialRenderPendingTasks, NgZone, ɵcoerceToBoolean, ɵɵsanitizeUrlOrResourceUrl, Attribute, HostBinding, HostListener, Optional, ContentChildren, makeEnvironmentProviders, APP_BOOTSTRAP_LISTENER, ENVIRONMENT_INITIALIZER, Injector, ApplicationRef, APP_INITIALIZER, NgProbeToken, SkipSelf, NgModule, Inject, Version } from '@angular/core';
9
- import { isObservable, from, of, BehaviorSubject, EmptyError, combineLatest, concat, defer, pipe, throwError, EMPTY, ConnectableObservable, Subject } from 'rxjs';
8
+ import { ɵisPromise, ɵRuntimeError, Injectable, EventEmitter, inject, ViewContainerRef, ChangeDetectorRef, EnvironmentInjector, Directive, Input, Output, InjectionToken, reflectComponentType, Component, createEnvironmentInjector, ɵisNgModule, isStandalone, ɵisInjectable, Compiler, InjectFlags, NgModuleFactory, ɵConsole, ɵInitialRenderPendingTasks, NgZone, ɵcoerceToBoolean, ɵɵsanitizeUrlOrResourceUrl, Attribute, HostBinding, HostListener, Optional, ContentChildren, makeEnvironmentProviders, APP_BOOTSTRAP_LISTENER, ENVIRONMENT_INITIALIZER, Injector, ApplicationRef, APP_INITIALIZER, NgProbeToken, SkipSelf, NgModule, Inject, Version } from '@angular/core';
9
+ import { isObservable, from, of, BehaviorSubject, combineLatest, EmptyError, concat, defer, pipe, throwError, EMPTY, ConnectableObservable, Subject } from 'rxjs';
10
10
  import * as i3 from '@angular/common';
11
11
  import { Location, ViewportScroller, LOCATION_INITIALIZED, LocationStrategy, HashLocationStrategy, PathLocationStrategy } from '@angular/common';
12
12
  import { map, switchMap, take, startWith, filter, mergeMap, first, concatMap, tap, catchError, scan, defaultIfEmpty, last as last$1, takeLast, mapTo, finalize, refCount, mergeAll } from 'rxjs/operators';
@@ -419,10 +419,10 @@ function mapChildrenIntoArray(segment, fn) {
419
419
  * @publicApi
420
420
  */
421
421
  class UrlSerializer {
422
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: UrlSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
423
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: UrlSerializer, providedIn: 'root', useFactory: () => new DefaultUrlSerializer() }); }
422
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: UrlSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
423
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: UrlSerializer, providedIn: 'root', useFactory: () => new DefaultUrlSerializer() }); }
424
424
  }
425
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: UrlSerializer, decorators: [{
425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: UrlSerializer, decorators: [{
426
426
  type: Injectable,
427
427
  args: [{ providedIn: 'root', useFactory: () => new DefaultUrlSerializer() }]
428
428
  }] });
@@ -1076,8 +1076,9 @@ function updateSegmentGroupChildren(segmentGroup, startIndex, commands) {
1076
1076
  const outlets = getOutlets(commands);
1077
1077
  const children = {};
1078
1078
  // If the set of commands does not apply anything to the primary outlet and the child segment is
1079
- // an empty path primary segment on its own, we want to skip applying the commands at this
1080
- // level. Imagine the following config:
1079
+ // an empty path primary segment on its own, we want to apply the commands to the empty child
1080
+ // path rather than here. The outcome is that the empty primary child is effectively removed
1081
+ // from the final output UrlTree. Imagine the following config:
1081
1082
  //
1082
1083
  // {path: '', children: [{path: '**', outlet: 'popup'}]}.
1083
1084
  //
@@ -1098,7 +1099,8 @@ function updateSegmentGroupChildren(segmentGroup, startIndex, commands) {
1098
1099
  if (!outlets[PRIMARY_OUTLET] && segmentGroup.children[PRIMARY_OUTLET] &&
1099
1100
  segmentGroup.numberOfChildren === 1 &&
1100
1101
  segmentGroup.children[PRIMARY_OUTLET].segments.length === 0) {
1101
- return updateSegmentGroupChildren(segmentGroup.children[PRIMARY_OUTLET], startIndex, commands);
1102
+ const childrenOfEmptyChild = updateSegmentGroupChildren(segmentGroup.children[PRIMARY_OUTLET], startIndex, commands);
1103
+ return new UrlSegmentGroup(segmentGroup.segments, childrenOfEmptyChild.children);
1102
1104
  }
1103
1105
  Object.entries(outlets).forEach(([outlet, commands]) => {
1104
1106
  if (typeof commands === 'string') {
@@ -1700,6 +1702,79 @@ function stringifyEvent(routerEvent) {
1700
1702
  }
1701
1703
  }
1702
1704
 
1705
+ /**
1706
+ * Store contextual information about a `RouterOutlet`
1707
+ *
1708
+ * @publicApi
1709
+ */
1710
+ class OutletContext {
1711
+ constructor() {
1712
+ this.outlet = null;
1713
+ this.route = null;
1714
+ this.injector = null;
1715
+ this.children = new ChildrenOutletContexts();
1716
+ this.attachRef = null;
1717
+ }
1718
+ }
1719
+ /**
1720
+ * Store contextual information about the children (= nested) `RouterOutlet`
1721
+ *
1722
+ * @publicApi
1723
+ */
1724
+ class ChildrenOutletContexts {
1725
+ constructor() {
1726
+ // contexts for child outlets, by name.
1727
+ this.contexts = new Map();
1728
+ }
1729
+ /** Called when a `RouterOutlet` directive is instantiated */
1730
+ onChildOutletCreated(childName, outlet) {
1731
+ const context = this.getOrCreateContext(childName);
1732
+ context.outlet = outlet;
1733
+ this.contexts.set(childName, context);
1734
+ }
1735
+ /**
1736
+ * Called when a `RouterOutlet` directive is destroyed.
1737
+ * We need to keep the context as the outlet could be destroyed inside a NgIf and might be
1738
+ * re-created later.
1739
+ */
1740
+ onChildOutletDestroyed(childName) {
1741
+ const context = this.getContext(childName);
1742
+ if (context) {
1743
+ context.outlet = null;
1744
+ context.attachRef = null;
1745
+ }
1746
+ }
1747
+ /**
1748
+ * Called when the corresponding route is deactivated during navigation.
1749
+ * Because the component get destroyed, all children outlet are destroyed.
1750
+ */
1751
+ onOutletDeactivated() {
1752
+ const contexts = this.contexts;
1753
+ this.contexts = new Map();
1754
+ return contexts;
1755
+ }
1756
+ onOutletReAttached(contexts) {
1757
+ this.contexts = contexts;
1758
+ }
1759
+ getOrCreateContext(childName) {
1760
+ let context = this.getContext(childName);
1761
+ if (!context) {
1762
+ context = new OutletContext();
1763
+ this.contexts.set(childName, context);
1764
+ }
1765
+ return context;
1766
+ }
1767
+ getContext(childName) {
1768
+ return this.contexts.get(childName) || null;
1769
+ }
1770
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: ChildrenOutletContexts, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1771
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: ChildrenOutletContexts, providedIn: 'root' }); }
1772
+ }
1773
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: ChildrenOutletContexts, decorators: [{
1774
+ type: Injectable,
1775
+ args: [{ providedIn: 'root' }]
1776
+ }] });
1777
+
1703
1778
  class Tree {
1704
1779
  constructor(root) {
1705
1780
  this._root = root;
@@ -2182,145 +2257,6 @@ function equalParamsAndUrlSegments(a, b) {
2182
2257
  (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent));
2183
2258
  }
2184
2259
 
2185
- function createRouterState(routeReuseStrategy, curr, prevState) {
2186
- const root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);
2187
- return new RouterState(root, curr);
2188
- }
2189
- function createNode(routeReuseStrategy, curr, prevState) {
2190
- // reuse an activated route that is currently displayed on the screen
2191
- if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {
2192
- const value = prevState.value;
2193
- value._futureSnapshot = curr.value;
2194
- const children = createOrReuseChildren(routeReuseStrategy, curr, prevState);
2195
- return new TreeNode(value, children);
2196
- }
2197
- else {
2198
- if (routeReuseStrategy.shouldAttach(curr.value)) {
2199
- // retrieve an activated route that is used to be displayed, but is not currently displayed
2200
- const detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);
2201
- if (detachedRouteHandle !== null) {
2202
- const tree = detachedRouteHandle.route;
2203
- tree.value._futureSnapshot = curr.value;
2204
- tree.children = curr.children.map(c => createNode(routeReuseStrategy, c));
2205
- return tree;
2206
- }
2207
- }
2208
- const value = createActivatedRoute(curr.value);
2209
- const children = curr.children.map(c => createNode(routeReuseStrategy, c));
2210
- return new TreeNode(value, children);
2211
- }
2212
- }
2213
- function createOrReuseChildren(routeReuseStrategy, curr, prevState) {
2214
- return curr.children.map(child => {
2215
- for (const p of prevState.children) {
2216
- if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {
2217
- return createNode(routeReuseStrategy, child, p);
2218
- }
2219
- }
2220
- return createNode(routeReuseStrategy, child);
2221
- });
2222
- }
2223
- function createActivatedRoute(c) {
2224
- return new ActivatedRoute(new BehaviorSubject(c.url), new BehaviorSubject(c.params), new BehaviorSubject(c.queryParams), new BehaviorSubject(c.fragment), new BehaviorSubject(c.data), c.outlet, c.component, c);
2225
- }
2226
-
2227
- const NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';
2228
- function redirectingNavigationError(urlSerializer, redirect) {
2229
- const { redirectTo, navigationBehaviorOptions } = isUrlTree(redirect) ? { redirectTo: redirect, navigationBehaviorOptions: undefined } : redirect;
2230
- const error = navigationCancelingError(ngDevMode && `Redirecting to "${urlSerializer.serialize(redirectTo)}"`, 0 /* NavigationCancellationCode.Redirect */, redirect);
2231
- error.url = redirectTo;
2232
- error.navigationBehaviorOptions = navigationBehaviorOptions;
2233
- return error;
2234
- }
2235
- function navigationCancelingError(message, code, redirectUrl) {
2236
- const error = new Error('NavigationCancelingError: ' + (message || ''));
2237
- error[NAVIGATION_CANCELING_ERROR] = true;
2238
- error.cancellationCode = code;
2239
- if (redirectUrl) {
2240
- error.url = redirectUrl;
2241
- }
2242
- return error;
2243
- }
2244
- function isRedirectingNavigationCancelingError$1(error) {
2245
- return isNavigationCancelingError$1(error) && isUrlTree(error.url);
2246
- }
2247
- function isNavigationCancelingError$1(error) {
2248
- return error && error[NAVIGATION_CANCELING_ERROR];
2249
- }
2250
-
2251
- /**
2252
- * Store contextual information about a `RouterOutlet`
2253
- *
2254
- * @publicApi
2255
- */
2256
- class OutletContext {
2257
- constructor() {
2258
- this.outlet = null;
2259
- this.route = null;
2260
- this.injector = null;
2261
- this.children = new ChildrenOutletContexts();
2262
- this.attachRef = null;
2263
- }
2264
- }
2265
- /**
2266
- * Store contextual information about the children (= nested) `RouterOutlet`
2267
- *
2268
- * @publicApi
2269
- */
2270
- class ChildrenOutletContexts {
2271
- constructor() {
2272
- // contexts for child outlets, by name.
2273
- this.contexts = new Map();
2274
- }
2275
- /** Called when a `RouterOutlet` directive is instantiated */
2276
- onChildOutletCreated(childName, outlet) {
2277
- const context = this.getOrCreateContext(childName);
2278
- context.outlet = outlet;
2279
- this.contexts.set(childName, context);
2280
- }
2281
- /**
2282
- * Called when a `RouterOutlet` directive is destroyed.
2283
- * We need to keep the context as the outlet could be destroyed inside a NgIf and might be
2284
- * re-created later.
2285
- */
2286
- onChildOutletDestroyed(childName) {
2287
- const context = this.getContext(childName);
2288
- if (context) {
2289
- context.outlet = null;
2290
- context.attachRef = null;
2291
- }
2292
- }
2293
- /**
2294
- * Called when the corresponding route is deactivated during navigation.
2295
- * Because the component get destroyed, all children outlet are destroyed.
2296
- */
2297
- onOutletDeactivated() {
2298
- const contexts = this.contexts;
2299
- this.contexts = new Map();
2300
- return contexts;
2301
- }
2302
- onOutletReAttached(contexts) {
2303
- this.contexts = contexts;
2304
- }
2305
- getOrCreateContext(childName) {
2306
- let context = this.getContext(childName);
2307
- if (!context) {
2308
- context = new OutletContext();
2309
- this.contexts.set(childName, context);
2310
- }
2311
- return context;
2312
- }
2313
- getContext(childName) {
2314
- return this.contexts.get(childName) || null;
2315
- }
2316
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: ChildrenOutletContexts, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2317
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: ChildrenOutletContexts, providedIn: 'root' }); }
2318
- }
2319
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: ChildrenOutletContexts, decorators: [{
2320
- type: Injectable,
2321
- args: [{ providedIn: 'root' }]
2322
- }] });
2323
-
2324
2260
  /**
2325
2261
  * @description
2326
2262
  *
@@ -2398,6 +2334,13 @@ class RouterOutlet {
2398
2334
  this.location = inject(ViewContainerRef);
2399
2335
  this.changeDetector = inject(ChangeDetectorRef);
2400
2336
  this.environmentInjector = inject(EnvironmentInjector);
2337
+ this.inputBinder = inject(INPUT_BINDER, { optional: true });
2338
+ /** @nodoc */
2339
+ this.supportsBindingToComponentInputs = true;
2340
+ }
2341
+ /** @internal */
2342
+ get activatedComponentRef() {
2343
+ return this.activated;
2401
2344
  }
2402
2345
  /** @nodoc */
2403
2346
  ngOnChanges(changes) {
@@ -2423,6 +2366,7 @@ class RouterOutlet {
2423
2366
  if (this.isTrackedInParentContexts(this.name)) {
2424
2367
  this.parentContexts.onChildOutletDestroyed(this.name);
2425
2368
  }
2369
+ this.inputBinder?.unsubscribeFromRouteData(this);
2426
2370
  }
2427
2371
  isTrackedInParentContexts(outletName) {
2428
2372
  return this.parentContexts.getContext(outletName)?.outlet === this;
@@ -2493,6 +2437,7 @@ class RouterOutlet {
2493
2437
  this.activated = ref;
2494
2438
  this._activatedRoute = activatedRoute;
2495
2439
  this.location.insert(ref.hostView);
2440
+ this.inputBinder?.bindActivatedRouteToOutletComponent(this);
2496
2441
  this.attachEvents.emit(ref.instance);
2497
2442
  }
2498
2443
  deactivate() {
@@ -2523,12 +2468,13 @@ class RouterOutlet {
2523
2468
  // Calling `markForCheck` to make sure we will run the change detection when the
2524
2469
  // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.
2525
2470
  this.changeDetector.markForCheck();
2471
+ this.inputBinder?.bindActivatedRouteToOutletComponent(this);
2526
2472
  this.activateEvents.emit(this.activated.instance);
2527
2473
  }
2528
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2529
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.5", type: RouterOutlet, isStandalone: true, selector: "router-outlet", inputs: { name: "name" }, outputs: { activateEvents: "activate", deactivateEvents: "deactivate", attachEvents: "attach", detachEvents: "detach" }, exportAs: ["outlet"], usesOnChanges: true, ngImport: i0 }); }
2474
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2475
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.7", type: RouterOutlet, isStandalone: true, selector: "router-outlet", inputs: { name: "name" }, outputs: { activateEvents: "activate", deactivateEvents: "deactivate", attachEvents: "attach", detachEvents: "detach" }, exportAs: ["outlet"], usesOnChanges: true, ngImport: i0 }); }
2530
2476
  }
2531
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterOutlet, decorators: [{
2477
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterOutlet, decorators: [{
2532
2478
  type: Directive,
2533
2479
  args: [{
2534
2480
  selector: 'router-outlet',
@@ -2566,6 +2512,136 @@ class OutletInjector {
2566
2512
  return this.parent.get(token, notFoundValue);
2567
2513
  }
2568
2514
  }
2515
+ const INPUT_BINDER = new InjectionToken('');
2516
+ /**
2517
+ * Injectable used as a tree-shakable provider for opting in to binding router data to component
2518
+ * inputs.
2519
+ *
2520
+ * The RouterOutlet registers itself with this service when an `ActivatedRoute` is attached or
2521
+ * activated. When this happens, the service subscribes to the `ActivatedRoute` observables (params,
2522
+ * queryParams, data) and sets the inputs of the component using `ComponentRef.setInput`.
2523
+ * Importantly, when an input does not have an item in the route data with a matching key, this
2524
+ * input is set to `undefined`. If it were not done this way, the previous information would be
2525
+ * retained if the data got removed from the route (i.e. if a query parameter is removed).
2526
+ *
2527
+ * The `RouterOutlet` should unregister itself when destroyed via `unsubscribeFromRouteData` so that
2528
+ * the subscriptions are cleaned up.
2529
+ */
2530
+ class RoutedComponentInputBinder {
2531
+ constructor() {
2532
+ this.outletDataSubscriptions = new Map;
2533
+ }
2534
+ bindActivatedRouteToOutletComponent(outlet) {
2535
+ this.unsubscribeFromRouteData(outlet);
2536
+ this.subscribeToRouteData(outlet);
2537
+ }
2538
+ unsubscribeFromRouteData(outlet) {
2539
+ this.outletDataSubscriptions.get(outlet)?.unsubscribe();
2540
+ this.outletDataSubscriptions.delete(outlet);
2541
+ }
2542
+ subscribeToRouteData(outlet) {
2543
+ const { activatedRoute } = outlet;
2544
+ const dataSubscription = combineLatest([
2545
+ activatedRoute.queryParams,
2546
+ activatedRoute.params,
2547
+ activatedRoute.data,
2548
+ ])
2549
+ .pipe(switchMap(([queryParams, params, data]) => {
2550
+ // Promise.resolve is used to avoid synchronously writing the wrong data when two of
2551
+ // the Observables in the `combineLatest` stream emit one after another.
2552
+ return Promise.resolve({ ...queryParams, ...params, ...data });
2553
+ }))
2554
+ .subscribe(data => {
2555
+ // Outlet may have been deactivated or changed names to be associated with a different
2556
+ // route
2557
+ if (!outlet.isActivated || !outlet.activatedComponentRef ||
2558
+ outlet.activatedRoute !== activatedRoute || activatedRoute.component === null) {
2559
+ this.unsubscribeFromRouteData(outlet);
2560
+ return;
2561
+ }
2562
+ const mirror = reflectComponentType(activatedRoute.component);
2563
+ if (!mirror) {
2564
+ this.unsubscribeFromRouteData(outlet);
2565
+ return;
2566
+ }
2567
+ for (const { templateName } of mirror.inputs) {
2568
+ outlet.activatedComponentRef.setInput(templateName, data[templateName]);
2569
+ }
2570
+ });
2571
+ this.outletDataSubscriptions.set(outlet, dataSubscription);
2572
+ }
2573
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RoutedComponentInputBinder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2574
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RoutedComponentInputBinder }); }
2575
+ }
2576
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RoutedComponentInputBinder, decorators: [{
2577
+ type: Injectable
2578
+ }] });
2579
+
2580
+ function createRouterState(routeReuseStrategy, curr, prevState) {
2581
+ const root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);
2582
+ return new RouterState(root, curr);
2583
+ }
2584
+ function createNode(routeReuseStrategy, curr, prevState) {
2585
+ // reuse an activated route that is currently displayed on the screen
2586
+ if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {
2587
+ const value = prevState.value;
2588
+ value._futureSnapshot = curr.value;
2589
+ const children = createOrReuseChildren(routeReuseStrategy, curr, prevState);
2590
+ return new TreeNode(value, children);
2591
+ }
2592
+ else {
2593
+ if (routeReuseStrategy.shouldAttach(curr.value)) {
2594
+ // retrieve an activated route that is used to be displayed, but is not currently displayed
2595
+ const detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);
2596
+ if (detachedRouteHandle !== null) {
2597
+ const tree = detachedRouteHandle.route;
2598
+ tree.value._futureSnapshot = curr.value;
2599
+ tree.children = curr.children.map(c => createNode(routeReuseStrategy, c));
2600
+ return tree;
2601
+ }
2602
+ }
2603
+ const value = createActivatedRoute(curr.value);
2604
+ const children = curr.children.map(c => createNode(routeReuseStrategy, c));
2605
+ return new TreeNode(value, children);
2606
+ }
2607
+ }
2608
+ function createOrReuseChildren(routeReuseStrategy, curr, prevState) {
2609
+ return curr.children.map(child => {
2610
+ for (const p of prevState.children) {
2611
+ if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {
2612
+ return createNode(routeReuseStrategy, child, p);
2613
+ }
2614
+ }
2615
+ return createNode(routeReuseStrategy, child);
2616
+ });
2617
+ }
2618
+ function createActivatedRoute(c) {
2619
+ return new ActivatedRoute(new BehaviorSubject(c.url), new BehaviorSubject(c.params), new BehaviorSubject(c.queryParams), new BehaviorSubject(c.fragment), new BehaviorSubject(c.data), c.outlet, c.component, c);
2620
+ }
2621
+
2622
+ const NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';
2623
+ function redirectingNavigationError(urlSerializer, redirect) {
2624
+ const { redirectTo, navigationBehaviorOptions } = isUrlTree(redirect) ? { redirectTo: redirect, navigationBehaviorOptions: undefined } : redirect;
2625
+ const error = navigationCancelingError(ngDevMode && `Redirecting to "${urlSerializer.serialize(redirectTo)}"`, 0 /* NavigationCancellationCode.Redirect */, redirect);
2626
+ error.url = redirectTo;
2627
+ error.navigationBehaviorOptions = navigationBehaviorOptions;
2628
+ return error;
2629
+ }
2630
+ function navigationCancelingError(message, code, redirectUrl) {
2631
+ const error = new Error('NavigationCancelingError: ' + (message || ''));
2632
+ error[NAVIGATION_CANCELING_ERROR] = true;
2633
+ error.cancellationCode = code;
2634
+ if (redirectUrl) {
2635
+ error.url = redirectUrl;
2636
+ }
2637
+ return error;
2638
+ }
2639
+ function isRedirectingNavigationCancelingError$1(error) {
2640
+ return isNavigationCancelingError$1(error) && isUrlTree(error.url);
2641
+ }
2642
+ function isNavigationCancelingError$1(error) {
2643
+ return error && error[NAVIGATION_CANCELING_ERROR];
2644
+ }
2569
2645
 
2570
2646
  /**
2571
2647
  * This component is used internally within the router to be a placeholder when an empty
@@ -2577,10 +2653,10 @@ class OutletInjector {
2577
2653
  * to this `EmptyOutletComponent`.
2578
2654
  */
2579
2655
  class ɵEmptyOutletComponent {
2580
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2581
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0-next.5", type: ɵEmptyOutletComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `<router-outlet></router-outlet>`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
2656
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2657
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0-next.7", type: ɵEmptyOutletComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `<router-outlet></router-outlet>`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
2582
2658
  }
2583
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
2659
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
2584
2660
  type: Component,
2585
2661
  args: [{
2586
2662
  template: `<router-outlet></router-outlet>`,
@@ -2776,17 +2852,19 @@ function getClosestRouteInjector(snapshot) {
2776
2852
  return null;
2777
2853
  }
2778
2854
 
2779
- const activateRoutes = (rootContexts, routeReuseStrategy, forwardEvent) => map(t => {
2780
- new ActivateRoutes(routeReuseStrategy, t.targetRouterState, t.currentRouterState, forwardEvent)
2855
+ let warnedAboutUnsupportedInputBinding = false;
2856
+ const activateRoutes = (rootContexts, routeReuseStrategy, forwardEvent, inputBindingEnabled) => map(t => {
2857
+ new ActivateRoutes(routeReuseStrategy, t.targetRouterState, t.currentRouterState, forwardEvent, inputBindingEnabled)
2781
2858
  .activate(rootContexts);
2782
2859
  return t;
2783
2860
  });
2784
2861
  class ActivateRoutes {
2785
- constructor(routeReuseStrategy, futureState, currState, forwardEvent) {
2862
+ constructor(routeReuseStrategy, futureState, currState, forwardEvent, inputBindingEnabled) {
2786
2863
  this.routeReuseStrategy = routeReuseStrategy;
2787
2864
  this.futureState = futureState;
2788
2865
  this.currState = currState;
2789
2866
  this.forwardEvent = forwardEvent;
2867
+ this.inputBindingEnabled = inputBindingEnabled;
2790
2868
  }
2791
2869
  activate(parentContexts) {
2792
2870
  const futureRoot = this.futureState._root;
@@ -2941,6 +3019,16 @@ class ActivateRoutes {
2941
3019
  this.activateChildRoutes(futureNode, null, parentContexts);
2942
3020
  }
2943
3021
  }
3022
+ if ((typeof ngDevMode === 'undefined' || ngDevMode)) {
3023
+ const context = parentContexts.getOrCreateContext(future.outlet);
3024
+ const outlet = context.outlet;
3025
+ if (outlet && this.inputBindingEnabled && !outlet.supportsBindingToComponentInputs &&
3026
+ !warnedAboutUnsupportedInputBinding) {
3027
+ console.warn(`'withComponentInputBinding' feature is enabled but ` +
3028
+ `this application is using an outlet that may not support binding to component inputs.`);
3029
+ warnedAboutUnsupportedInputBinding = true;
3030
+ }
3031
+ }
2944
3032
  }
2945
3033
  }
2946
3034
 
@@ -4042,10 +4130,10 @@ class RouterConfigLoader {
4042
4130
  }
4043
4131
  }));
4044
4132
  }
4045
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4046
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterConfigLoader, providedIn: 'root' }); }
4133
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4134
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterConfigLoader, providedIn: 'root' }); }
4047
4135
  }
4048
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterConfigLoader, decorators: [{
4136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterConfigLoader, decorators: [{
4049
4137
  type: Injectable,
4050
4138
  args: [{ providedIn: 'root' }]
4051
4139
  }] });
@@ -4073,6 +4161,7 @@ class NavigationTransitions {
4073
4161
  this.environmentInjector = inject(EnvironmentInjector);
4074
4162
  this.urlSerializer = inject(UrlSerializer);
4075
4163
  this.rootContexts = inject(ChildrenOutletContexts);
4164
+ this.inputBindingEnabled = inject(INPUT_BINDER, { optional: true }) !== null;
4076
4165
  this.navigationId = 0;
4077
4166
  /**
4078
4167
  * Hook that enables you to pause navigation after the preactivation phase.
@@ -4322,7 +4411,11 @@ class NavigationTransitions {
4322
4411
  }
4323
4412
  router.browserUrlTree = t.urlAfterRedirects;
4324
4413
  }
4325
- }), activateRoutes(this.rootContexts, router.routeReuseStrategy, (evt) => this.events.next(evt)), tap({
4414
+ }), activateRoutes(this.rootContexts, router.routeReuseStrategy, (evt) => this.events.next(evt), this.inputBindingEnabled),
4415
+ // Ensure that if some observable used to drive the transition doesn't
4416
+ // complete, the navigation still finalizes This should never happen, but
4417
+ // this is done as a safety measure to avoid surfacing this error (#49567).
4418
+ take(1), tap({
4326
4419
  next: (t) => {
4327
4420
  completed = true;
4328
4421
  this.lastSuccessfulNavigation = this.currentNavigation;
@@ -4416,10 +4509,10 @@ class NavigationTransitions {
4416
4509
  this.events.next(navCancel);
4417
4510
  t.resolve(false);
4418
4511
  }
4419
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: NavigationTransitions, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4420
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: NavigationTransitions, providedIn: 'root' }); }
4512
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: NavigationTransitions, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4513
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: NavigationTransitions, providedIn: 'root' }); }
4421
4514
  }
4422
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: NavigationTransitions, decorators: [{
4515
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: NavigationTransitions, decorators: [{
4423
4516
  type: Injectable,
4424
4517
  args: [{ providedIn: 'root' }]
4425
4518
  }], ctorParameters: function () { return []; } });
@@ -4470,10 +4563,10 @@ class TitleStrategy {
4470
4563
  getResolvedTitleForRoute(snapshot) {
4471
4564
  return snapshot.data[RouteTitleKey];
4472
4565
  }
4473
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4474
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }); }
4566
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4567
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }); }
4475
4568
  }
4476
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: TitleStrategy, decorators: [{
4569
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: TitleStrategy, decorators: [{
4477
4570
  type: Injectable,
4478
4571
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }]
4479
4572
  }] });
@@ -4496,10 +4589,10 @@ class DefaultTitleStrategy extends TitleStrategy {
4496
4589
  this.title.setTitle(title);
4497
4590
  }
4498
4591
  }
4499
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: DefaultTitleStrategy, deps: [{ token: i1.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
4500
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' }); }
4592
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: DefaultTitleStrategy, deps: [{ token: i1.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
4593
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' }); }
4501
4594
  }
4502
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
4595
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
4503
4596
  type: Injectable,
4504
4597
  args: [{ providedIn: 'root' }]
4505
4598
  }], ctorParameters: function () { return [{ type: i1.Title }]; } });
@@ -4512,10 +4605,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5",
4512
4605
  * @publicApi
4513
4606
  */
4514
4607
  class RouteReuseStrategy {
4515
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouteReuseStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4516
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouteReuseStrategy, providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) }); }
4608
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouteReuseStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4609
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouteReuseStrategy, providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) }); }
4517
4610
  }
4518
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouteReuseStrategy, decorators: [{
4611
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouteReuseStrategy, decorators: [{
4519
4612
  type: Injectable,
4520
4613
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) }]
4521
4614
  }] });
@@ -4566,10 +4659,10 @@ class BaseRouteReuseStrategy {
4566
4659
  }
4567
4660
  }
4568
4661
  class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
4569
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: DefaultRouteReuseStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
4570
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: DefaultRouteReuseStrategy, providedIn: 'root' }); }
4662
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: DefaultRouteReuseStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
4663
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: DefaultRouteReuseStrategy, providedIn: 'root' }); }
4571
4664
  }
4572
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: DefaultRouteReuseStrategy, decorators: [{
4665
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: DefaultRouteReuseStrategy, decorators: [{
4573
4666
  type: Injectable,
4574
4667
  args: [{ providedIn: 'root' }]
4575
4668
  }] });
@@ -4592,10 +4685,10 @@ const ROUTER_CONFIGURATION = new InjectionToken((typeof ngDevMode === 'undefined
4592
4685
  * @publicApi
4593
4686
  */
4594
4687
  class UrlHandlingStrategy {
4595
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: UrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4596
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: UrlHandlingStrategy, providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) }); }
4688
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: UrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4689
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: UrlHandlingStrategy, providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) }); }
4597
4690
  }
4598
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: UrlHandlingStrategy, decorators: [{
4691
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: UrlHandlingStrategy, decorators: [{
4599
4692
  type: Injectable,
4600
4693
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) }]
4601
4694
  }] });
@@ -4612,10 +4705,10 @@ class DefaultUrlHandlingStrategy {
4612
4705
  merge(newUrlPart, wholeUrl) {
4613
4706
  return newUrlPart;
4614
4707
  }
4615
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: DefaultUrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4616
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: DefaultUrlHandlingStrategy, providedIn: 'root' }); }
4708
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: DefaultUrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4709
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: DefaultUrlHandlingStrategy, providedIn: 'root' }); }
4617
4710
  }
4618
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: DefaultUrlHandlingStrategy, decorators: [{
4711
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: DefaultUrlHandlingStrategy, decorators: [{
4619
4712
  type: Injectable,
4620
4713
  args: [{ providedIn: 'root' }]
4621
4714
  }] });
@@ -4846,6 +4939,13 @@ class Router {
4846
4939
  this.navigationTransitions = inject(NavigationTransitions);
4847
4940
  this.urlSerializer = inject(UrlSerializer);
4848
4941
  this.location = inject(Location);
4942
+ /**
4943
+ * Indicates whether the the application has opted in to binding Router data to component inputs.
4944
+ *
4945
+ * This option is enabled by the `withComponentInputBinding` feature of `provideRouter` or
4946
+ * `bindToComponentInputs` in the `ExtraOptions` of `RouterModule.forRoot`.
4947
+ */
4948
+ this.componentInputBindingEnabled = !!inject(INPUT_BINDER, { optional: true });
4849
4949
  this.isNgZoneEnabled = inject(NgZone) instanceof NgZone && NgZone.isInAngularZone();
4850
4950
  this.resetConfig(this.config);
4851
4951
  this.currentUrlTree = new UrlTree();
@@ -5102,9 +5202,6 @@ class Router {
5102
5202
  if (this.isNgZoneEnabled && !NgZone.isInAngularZone()) {
5103
5203
  this.console.warn(`Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?`);
5104
5204
  }
5105
- if (url instanceof UrlTree && url._warnIfUsedForNavigation) {
5106
- this.console.warn(url._warnIfUsedForNavigation);
5107
- }
5108
5205
  }
5109
5206
  const urlTree = isUrlTree(url) ? url : this.parseUrl(url);
5110
5207
  const mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);
@@ -5332,10 +5429,10 @@ class Router {
5332
5429
  }
5333
5430
  return { navigationId };
5334
5431
  }
5335
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: Router, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5336
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: Router, providedIn: 'root' }); }
5432
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: Router, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5433
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: Router, providedIn: 'root' }); }
5337
5434
  }
5338
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: Router, decorators: [{
5435
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: Router, decorators: [{
5339
5436
  type: Injectable,
5340
5437
  args: [{ providedIn: 'root' }]
5341
5438
  }], ctorParameters: function () { return []; } });
@@ -5621,10 +5718,10 @@ class RouterLink {
5621
5718
  preserveFragment: this.preserveFragment,
5622
5719
  });
5623
5720
  }
5624
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterLink, deps: [{ token: Router }, { token: ActivatedRoute }, { token: 'tabindex', attribute: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i3.LocationStrategy }], target: i0.ɵɵFactoryTarget.Directive }); }
5625
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.5", type: RouterLink, isStandalone: true, selector: "[routerLink]", inputs: { target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", state: "state", relativeTo: "relativeTo", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", routerLink: "routerLink" }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)" }, properties: { "attr.target": "this.target" } }, usesOnChanges: true, ngImport: i0 }); }
5721
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterLink, deps: [{ token: Router }, { token: ActivatedRoute }, { token: 'tabindex', attribute: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i3.LocationStrategy }], target: i0.ɵɵFactoryTarget.Directive }); }
5722
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.7", type: RouterLink, isStandalone: true, selector: "[routerLink]", inputs: { target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", state: "state", relativeTo: "relativeTo", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", routerLink: "routerLink" }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)" }, properties: { "attr.target": "this.target" } }, usesOnChanges: true, ngImport: i0 }); }
5626
5723
  }
5627
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterLink, decorators: [{
5724
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterLink, decorators: [{
5628
5725
  type: Directive,
5629
5726
  args: [{
5630
5727
  selector: '[routerLink]',
@@ -5844,10 +5941,10 @@ class RouterLinkActive {
5844
5941
  const isActiveCheckFn = this.isLinkActive(this.router);
5845
5942
  return this.link && isActiveCheckFn(this.link) || this.links.some(isActiveCheckFn);
5846
5943
  }
5847
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterLinkActive, deps: [{ token: Router }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: RouterLink, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5848
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.5", type: RouterLinkActive, isStandalone: true, selector: "[routerLinkActive]", inputs: { routerLinkActiveOptions: "routerLinkActiveOptions", ariaCurrentWhenActive: "ariaCurrentWhenActive", routerLinkActive: "routerLinkActive" }, outputs: { isActiveChange: "isActiveChange" }, queries: [{ propertyName: "links", predicate: RouterLink, descendants: true }], exportAs: ["routerLinkActive"], usesOnChanges: true, ngImport: i0 }); }
5944
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterLinkActive, deps: [{ token: Router }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: RouterLink, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5945
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.7", type: RouterLinkActive, isStandalone: true, selector: "[routerLinkActive]", inputs: { routerLinkActiveOptions: "routerLinkActiveOptions", ariaCurrentWhenActive: "ariaCurrentWhenActive", routerLinkActive: "routerLinkActive" }, outputs: { isActiveChange: "isActiveChange" }, queries: [{ propertyName: "links", predicate: RouterLink, descendants: true }], exportAs: ["routerLinkActive"], usesOnChanges: true, ngImport: i0 }); }
5849
5946
  }
5850
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterLinkActive, decorators: [{
5947
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterLinkActive, decorators: [{
5851
5948
  type: Directive,
5852
5949
  args: [{
5853
5950
  selector: '[routerLinkActive]',
@@ -5899,10 +5996,10 @@ class PreloadAllModules {
5899
5996
  preload(route, fn) {
5900
5997
  return fn().pipe(catchError(() => of(null)));
5901
5998
  }
5902
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5903
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: PreloadAllModules, providedIn: 'root' }); }
5999
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6000
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: PreloadAllModules, providedIn: 'root' }); }
5904
6001
  }
5905
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: PreloadAllModules, decorators: [{
6002
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: PreloadAllModules, decorators: [{
5906
6003
  type: Injectable,
5907
6004
  args: [{ providedIn: 'root' }]
5908
6005
  }] });
@@ -5919,10 +6016,10 @@ class NoPreloading {
5919
6016
  preload(route, fn) {
5920
6017
  return of(null);
5921
6018
  }
5922
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5923
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: NoPreloading, providedIn: 'root' }); }
6019
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6020
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: NoPreloading, providedIn: 'root' }); }
5924
6021
  }
5925
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: NoPreloading, decorators: [{
6022
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: NoPreloading, decorators: [{
5926
6023
  type: Injectable,
5927
6024
  args: [{ providedIn: 'root' }]
5928
6025
  }] });
@@ -6015,10 +6112,10 @@ class RouterPreloader {
6015
6112
  }
6016
6113
  });
6017
6114
  }
6018
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterPreloader, deps: [{ token: Router }, { token: i0.Compiler }, { token: i0.EnvironmentInjector }, { token: PreloadingStrategy }, { token: RouterConfigLoader }], target: i0.ɵɵFactoryTarget.Injectable }); }
6019
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterPreloader, providedIn: 'root' }); }
6115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterPreloader, deps: [{ token: Router }, { token: i0.Compiler }, { token: i0.EnvironmentInjector }, { token: PreloadingStrategy }, { token: RouterConfigLoader }], target: i0.ɵɵFactoryTarget.Injectable }); }
6116
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterPreloader, providedIn: 'root' }); }
6020
6117
  }
6021
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterPreloader, decorators: [{
6118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterPreloader, decorators: [{
6022
6119
  type: Injectable,
6023
6120
  args: [{ providedIn: 'root' }]
6024
6121
  }], ctorParameters: function () { return [{ type: Router }, { type: i0.Compiler }, { type: i0.EnvironmentInjector }, { type: PreloadingStrategy }, { type: RouterConfigLoader }]; } });
@@ -6111,10 +6208,10 @@ class RouterScroller {
6111
6208
  this.routerEventsSubscription?.unsubscribe();
6112
6209
  this.scrollEventsSubscription?.unsubscribe();
6113
6210
  }
6114
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
6115
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterScroller }); }
6211
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
6212
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterScroller }); }
6116
6213
  }
6117
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterScroller, decorators: [{
6214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterScroller, decorators: [{
6118
6215
  type: Injectable
6119
6216
  }], ctorParameters: function () { return [{ type: UrlSerializer }, { type: NavigationTransitions }, { type: i3.ViewportScroller }, { type: i0.NgZone }, { type: undefined }]; } });
6120
6217
 
@@ -6269,6 +6366,7 @@ function getBootstrapListener() {
6269
6366
  router.resetRootComponentType(ref.componentTypes[0]);
6270
6367
  if (!bootstrapDone.closed) {
6271
6368
  bootstrapDone.next();
6369
+ bootstrapDone.complete();
6272
6370
  bootstrapDone.unsubscribe();
6273
6371
  }
6274
6372
  };
@@ -6575,6 +6673,33 @@ function withNavigationErrorHandler(fn) {
6575
6673
  }];
6576
6674
  return routerFeature(7 /* RouterFeatureKind.NavigationErrorHandlerFeature */, providers);
6577
6675
  }
6676
+ /**
6677
+ * Enables binding information from the `Router` state directly to the inputs of the component in
6678
+ * `Route` configurations.
6679
+ *
6680
+ * @usageNotes
6681
+ *
6682
+ * Basic example of how you can enable the feature:
6683
+ * ```
6684
+ * const appRoutes: Routes = [];
6685
+ * bootstrapApplication(AppComponent,
6686
+ * {
6687
+ * providers: [
6688
+ * provideRouter(appRoutes, withComponentInputBinding())
6689
+ * ]
6690
+ * }
6691
+ * );
6692
+ * ```
6693
+ *
6694
+ * @returns A set of providers for use with `provideRouter`.
6695
+ */
6696
+ function withComponentInputBinding() {
6697
+ const providers = [
6698
+ RoutedComponentInputBinder,
6699
+ { provide: INPUT_BINDER, useExisting: RoutedComponentInputBinder },
6700
+ ];
6701
+ return routerFeature(8 /* RouterFeatureKind.ComponentInputBindingFeature */, providers);
6702
+ }
6578
6703
 
6579
6704
  /**
6580
6705
  * The directives defined in the `RouterModule`.
@@ -6665,6 +6790,7 @@ class RouterModule {
6665
6790
  config?.preloadingStrategy ? withPreloading(config.preloadingStrategy).ɵproviders : [],
6666
6791
  { provide: NgProbeToken, multi: true, useFactory: routerNgProbeToken },
6667
6792
  config?.initialNavigation ? provideInitialNavigation(config) : [],
6793
+ config?.bindToComponentInputs ? withComponentInputBinding().ɵproviders : [],
6668
6794
  provideRouterInitializer(),
6669
6795
  ],
6670
6796
  };
@@ -6691,11 +6817,11 @@ class RouterModule {
6691
6817
  providers: [{ provide: ROUTES, multi: true, useValue: routes }],
6692
6818
  };
6693
6819
  }
6694
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterModule, deps: [{ token: ROUTER_FORROOT_GUARD, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
6695
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterModule, imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent], exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent] }); }
6696
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterModule, imports: [ɵEmptyOutletComponent] }); }
6820
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterModule, deps: [{ token: ROUTER_FORROOT_GUARD, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
6821
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterModule, imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent], exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent] }); }
6822
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterModule, imports: [ɵEmptyOutletComponent] }); }
6697
6823
  }
6698
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.5", ngImport: i0, type: RouterModule, decorators: [{
6824
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.7", ngImport: i0, type: RouterModule, decorators: [{
6699
6825
  type: NgModule,
6700
6826
  args: [{
6701
6827
  imports: ROUTER_DIRECTIVES,
@@ -6840,7 +6966,7 @@ function mapToResolve(provider) {
6840
6966
  /**
6841
6967
  * @publicApi
6842
6968
  */
6843
- const VERSION = new Version('16.0.0-next.5');
6969
+ const VERSION = new Version('16.0.0-next.7');
6844
6970
 
6845
6971
  /**
6846
6972
  * @module
@@ -6855,5 +6981,5 @@ const VERSION = new Version('16.0.0-next.5');
6855
6981
  * Generated bundle index. Do not edit.
6856
6982
  */
6857
6983
 
6858
- export { ActivatedRoute, ActivatedRouteSnapshot, ActivationEnd, ActivationStart, BaseRouteReuseStrategy, ChildActivationEnd, ChildActivationStart, ChildrenOutletContexts, DefaultTitleStrategy, DefaultUrlSerializer, GuardsCheckEnd, GuardsCheckStart, NavigationCancel, NavigationEnd, NavigationError, NavigationSkipped, NavigationStart, NoPreloading, OutletContext, PRIMARY_OUTLET, PreloadAllModules, PreloadingStrategy, ROUTER_CONFIGURATION, ROUTER_INITIALIZER, ROUTES, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RouteReuseStrategy, Router, RouterEvent, RouterLink, RouterLinkActive, RouterLink as RouterLinkWithHref, RouterModule, RouterOutlet, RouterPreloader, RouterState, RouterStateSnapshot, RoutesRecognized, Scroll, TitleStrategy, UrlHandlingStrategy, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree, VERSION, convertToParamMap, createUrlTreeFromSnapshot, defaultUrlMatcher, mapToCanActivate, mapToCanActivateChild, mapToCanDeactivate, mapToCanMatch, mapToResolve, provideRouter, provideRoutes, withDebugTracing, withDisabledInitialNavigation, withEnabledBlockingInitialNavigation, withHashLocation, withInMemoryScrolling, withNavigationErrorHandler, withPreloading, withRouterConfig, ɵEmptyOutletComponent, ROUTER_PROVIDERS as ɵROUTER_PROVIDERS, afterNextNavigation as ɵafterNextNavigation, withPreloading as ɵwithPreloading };
6984
+ export { ActivatedRoute, ActivatedRouteSnapshot, ActivationEnd, ActivationStart, BaseRouteReuseStrategy, ChildActivationEnd, ChildActivationStart, ChildrenOutletContexts, DefaultTitleStrategy, DefaultUrlSerializer, GuardsCheckEnd, GuardsCheckStart, NavigationCancel, NavigationEnd, NavigationError, NavigationSkipped, NavigationStart, NoPreloading, OutletContext, PRIMARY_OUTLET, PreloadAllModules, PreloadingStrategy, ROUTER_CONFIGURATION, ROUTER_INITIALIZER, ROUTES, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RouteReuseStrategy, Router, RouterEvent, RouterLink, RouterLinkActive, RouterLink as RouterLinkWithHref, RouterModule, RouterOutlet, RouterPreloader, RouterState, RouterStateSnapshot, RoutesRecognized, Scroll, TitleStrategy, UrlHandlingStrategy, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree, VERSION, convertToParamMap, createUrlTreeFromSnapshot, defaultUrlMatcher, mapToCanActivate, mapToCanActivateChild, mapToCanDeactivate, mapToCanMatch, mapToResolve, provideRouter, provideRoutes, withComponentInputBinding, withDebugTracing, withDisabledInitialNavigation, withEnabledBlockingInitialNavigation, withHashLocation, withInMemoryScrolling, withNavigationErrorHandler, withPreloading, withRouterConfig, ɵEmptyOutletComponent, ROUTER_PROVIDERS as ɵROUTER_PROVIDERS, afterNextNavigation as ɵafterNextNavigation, withPreloading as ɵwithPreloading };
6859
6985
  //# sourceMappingURL=router.mjs.map