@angular/router 17.0.0-next.7 → 17.0.0-rc.0

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 (33) hide show
  1. package/esm2022/src/components/empty_outlet.mjs +3 -3
  2. package/esm2022/src/directives/router_link.mjs +3 -3
  3. package/esm2022/src/directives/router_link_active.mjs +3 -3
  4. package/esm2022/src/directives/router_outlet.mjs +6 -6
  5. package/esm2022/src/index.mjs +1 -1
  6. package/esm2022/src/navigation_transition.mjs +6 -5
  7. package/esm2022/src/page_title_strategy.mjs +6 -6
  8. package/esm2022/src/provide_router.mjs +3 -3
  9. package/esm2022/src/route_reuse_strategy.mjs +6 -6
  10. package/esm2022/src/router.mjs +18 -21
  11. package/esm2022/src/router_config.mjs +1 -1
  12. package/esm2022/src/router_config_loader.mjs +3 -3
  13. package/esm2022/src/router_module.mjs +6 -10
  14. package/esm2022/src/router_outlet_context.mjs +3 -3
  15. package/esm2022/src/router_preloader.mjs +9 -9
  16. package/esm2022/src/router_scroller.mjs +3 -3
  17. package/esm2022/src/router_state.mjs +2 -2
  18. package/esm2022/src/statemanager/state_manager.mjs +204 -0
  19. package/esm2022/src/url_handling_strategy.mjs +6 -6
  20. package/esm2022/src/url_tree.mjs +3 -3
  21. package/esm2022/src/utils/view_transition.mjs +12 -4
  22. package/esm2022/src/version.mjs +1 -1
  23. package/esm2022/testing/src/router_testing_harness.mjs +6 -6
  24. package/esm2022/testing/src/router_testing_module.mjs +4 -4
  25. package/fesm2022/router.mjs +128 -134
  26. package/fesm2022/router.mjs.map +1 -1
  27. package/fesm2022/testing.mjs +11 -11
  28. package/fesm2022/upgrade.mjs +1 -1
  29. package/index.d.ts +56 -7
  30. package/package.json +4 -4
  31. package/testing/index.d.ts +1 -1
  32. package/upgrade/index.d.ts +1 -1
  33. package/esm2022/src/state_manager.mjs +0 -212
@@ -1,11 +1,11 @@
1
1
  /**
2
- * @license Angular v17.0.0-next.7
2
+ * @license Angular v17.0.0-rc.0
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, InjectionToken, reflectComponentType, Component, createEnvironmentInjector, ɵisNgModule, isStandalone, ɵisInjectable, Compiler, NgModuleFactory, NgZone, afterNextRender, ɵConsole, ɵInitialRenderPendingTasks, ɵɵsanitizeUrlOrResourceUrl, booleanAttribute, Attribute, HostBinding, HostListener, Optional, ContentChildren, makeEnvironmentProviders, APP_BOOTSTRAP_LISTENER, ENVIRONMENT_INITIALIZER, Injector, ApplicationRef, InjectFlags, APP_INITIALIZER, NgProbeToken, SkipSelf, NgModule, Inject, Version } from '@angular/core';
8
+ import { ɵisPromise, ɵRuntimeError, Injectable, EventEmitter, inject, ViewContainerRef, ChangeDetectorRef, EnvironmentInjector, Directive, Input, Output, InjectionToken, reflectComponentType, Component, createEnvironmentInjector, ɵisNgModule, isStandalone, ɵisInjectable, Compiler, NgModuleFactory, NgZone, runInInjectionContext, afterNextRender, ɵConsole, ɵInitialRenderPendingTasks, ɵɵsanitizeUrlOrResourceUrl, booleanAttribute, Attribute, HostBinding, HostListener, Optional, ContentChildren, makeEnvironmentProviders, APP_BOOTSTRAP_LISTENER, ENVIRONMENT_INITIALIZER, Injector, ApplicationRef, InjectFlags, APP_INITIALIZER, SkipSelf, NgModule, Inject, Version } from '@angular/core';
9
9
  import { isObservable, from, of, BehaviorSubject, combineLatest, EmptyError, concat, defer, pipe, throwError, EMPTY, ConnectableObservable, Subject, Subscription } from 'rxjs';
10
10
  import * as i3 from '@angular/common';
11
11
  import { DOCUMENT, Location, ViewportScroller, LOCATION_INITIALIZED, LocationStrategy, HashLocationStrategy, PathLocationStrategy } from '@angular/common';
@@ -425,10 +425,10 @@ function mapChildrenIntoArray(segment, fn) {
425
425
  * @publicApi
426
426
  */
427
427
  class UrlSerializer {
428
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: UrlSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
429
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: UrlSerializer, providedIn: 'root', useFactory: () => new DefaultUrlSerializer() }); }
428
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: UrlSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
429
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: UrlSerializer, providedIn: 'root', useFactory: () => new DefaultUrlSerializer() }); }
430
430
  }
431
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: UrlSerializer, decorators: [{
431
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: UrlSerializer, decorators: [{
432
432
  type: Injectable,
433
433
  args: [{ providedIn: 'root', useFactory: () => new DefaultUrlSerializer() }]
434
434
  }] });
@@ -1785,10 +1785,10 @@ class ChildrenOutletContexts {
1785
1785
  getContext(childName) {
1786
1786
  return this.contexts.get(childName) || null;
1787
1787
  }
1788
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: ChildrenOutletContexts, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1789
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: ChildrenOutletContexts, providedIn: 'root' }); }
1788
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: ChildrenOutletContexts, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1789
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: ChildrenOutletContexts, providedIn: 'root' }); }
1790
1790
  }
1791
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: ChildrenOutletContexts, decorators: [{
1791
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: ChildrenOutletContexts, decorators: [{
1792
1792
  type: Injectable,
1793
1793
  args: [{ providedIn: 'root' }]
1794
1794
  }] });
@@ -2063,7 +2063,7 @@ function inheritedParamsDataResolve(route, paramsInheritanceStrategy = 'emptyOnl
2063
2063
  inheritingStartingFrom--;
2064
2064
  // parent is componentless => current route should inherit its params and data
2065
2065
  }
2066
- else if (!parent.component) {
2066
+ else if (!parent.component && parent.routeConfig?.loadComponent === undefined) {
2067
2067
  inheritingStartingFrom--;
2068
2068
  }
2069
2069
  else {
@@ -2495,10 +2495,10 @@ class RouterOutlet {
2495
2495
  this.inputBinder?.bindActivatedRouteToOutletComponent(this);
2496
2496
  this.activateEvents.emit(this.activated.instance);
2497
2497
  }
2498
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2499
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.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 }); }
2498
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2499
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.0-rc.0", 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 }); }
2500
2500
  }
2501
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterOutlet, decorators: [{
2501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterOutlet, decorators: [{
2502
2502
  type: Directive,
2503
2503
  args: [{
2504
2504
  selector: 'router-outlet',
@@ -2601,10 +2601,10 @@ class RoutedComponentInputBinder {
2601
2601
  });
2602
2602
  this.outletDataSubscriptions.set(outlet, dataSubscription);
2603
2603
  }
2604
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RoutedComponentInputBinder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2605
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RoutedComponentInputBinder }); }
2604
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RoutedComponentInputBinder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2605
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RoutedComponentInputBinder }); }
2606
2606
  }
2607
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RoutedComponentInputBinder, decorators: [{
2607
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RoutedComponentInputBinder, decorators: [{
2608
2608
  type: Injectable
2609
2609
  }] });
2610
2610
 
@@ -2684,10 +2684,10 @@ function isNavigationCancelingError$1(error) {
2684
2684
  * to this `EmptyOutletComponent`.
2685
2685
  */
2686
2686
  class ɵEmptyOutletComponent {
2687
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2688
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.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"] }] }); }
2687
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2688
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.0-rc.0", 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"] }] }); }
2689
2689
  }
2690
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
2690
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
2691
2691
  type: Component,
2692
2692
  args: [{
2693
2693
  template: `<router-outlet></router-outlet>`,
@@ -4098,10 +4098,10 @@ class TitleStrategy {
4098
4098
  getResolvedTitleForRoute(snapshot) {
4099
4099
  return snapshot.data[RouteTitleKey];
4100
4100
  }
4101
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4102
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }); }
4101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4102
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }); }
4103
4103
  }
4104
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: TitleStrategy, decorators: [{
4104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: TitleStrategy, decorators: [{
4105
4105
  type: Injectable,
4106
4106
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }]
4107
4107
  }] });
@@ -4124,10 +4124,10 @@ class DefaultTitleStrategy extends TitleStrategy {
4124
4124
  this.title.setTitle(title);
4125
4125
  }
4126
4126
  }
4127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: DefaultTitleStrategy, deps: [{ token: i1.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
4128
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' }); }
4127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: DefaultTitleStrategy, deps: [{ token: i1.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
4128
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' }); }
4129
4129
  }
4130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
4130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
4131
4131
  type: Injectable,
4132
4132
  args: [{ providedIn: 'root' }]
4133
4133
  }], ctorParameters: () => [{ type: i1.Title }] });
@@ -4205,10 +4205,10 @@ class RouterConfigLoader {
4205
4205
  this.childrenLoaders.set(route, loader);
4206
4206
  return loader;
4207
4207
  }
4208
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4209
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterConfigLoader, providedIn: 'root' }); }
4208
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4209
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterConfigLoader, providedIn: 'root' }); }
4210
4210
  }
4211
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterConfigLoader, decorators: [{
4211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterConfigLoader, decorators: [{
4212
4212
  type: Injectable,
4213
4213
  args: [{ providedIn: 'root' }]
4214
4214
  }] });
@@ -4276,10 +4276,10 @@ function maybeUnwrapDefaultExport(input) {
4276
4276
  * @publicApi
4277
4277
  */
4278
4278
  class UrlHandlingStrategy {
4279
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: UrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4280
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: UrlHandlingStrategy, providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) }); }
4279
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: UrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4280
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: UrlHandlingStrategy, providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) }); }
4281
4281
  }
4282
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: UrlHandlingStrategy, decorators: [{
4282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: UrlHandlingStrategy, decorators: [{
4283
4283
  type: Injectable,
4284
4284
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) }]
4285
4285
  }] });
@@ -4296,10 +4296,10 @@ class DefaultUrlHandlingStrategy {
4296
4296
  merge(newUrlPart, wholeUrl) {
4297
4297
  return newUrlPart;
4298
4298
  }
4299
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: DefaultUrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4300
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: DefaultUrlHandlingStrategy, providedIn: 'root' }); }
4299
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: DefaultUrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4300
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: DefaultUrlHandlingStrategy, providedIn: 'root' }); }
4301
4301
  }
4302
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: DefaultUrlHandlingStrategy, decorators: [{
4302
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: DefaultUrlHandlingStrategy, decorators: [{
4303
4303
  type: Injectable,
4304
4304
  args: [{ providedIn: 'root' }]
4305
4305
  }] });
@@ -4313,7 +4313,7 @@ const VIEW_TRANSITION_OPTIONS = new InjectionToken(ngDevMode ? 'view transition
4313
4313
  *
4314
4314
  * @returns A Promise that resolves when the view transition callback begins.
4315
4315
  */
4316
- function createViewTransition(injector) {
4316
+ function createViewTransition(injector, from, to) {
4317
4317
  const transitionOptions = injector.get(VIEW_TRANSITION_OPTIONS);
4318
4318
  const document = injector.get(DOCUMENT);
4319
4319
  // Create promises outside the Angular zone to avoid causing extra change detections
@@ -4326,10 +4326,18 @@ function createViewTransition(injector) {
4326
4326
  const viewTransitionStarted = new Promise((resolve) => {
4327
4327
  resolveViewTransitionStarted = resolve;
4328
4328
  });
4329
- document.startViewTransition(() => {
4329
+ const transition = document.startViewTransition(() => {
4330
4330
  resolveViewTransitionStarted();
4331
+ // We don't actually update dom within the transition callback. The resolving of the above
4332
+ // promise unblocks the Router navigation, which synchronously activates and deactivates
4333
+ // routes (the DOM update). This view transition waits for the next change detection to
4334
+ // complete (below), which includes the update phase of the routed components.
4331
4335
  return createRenderPromise(injector);
4332
4336
  });
4337
+ const { onViewTransitionCreated } = transitionOptions;
4338
+ if (onViewTransitionCreated) {
4339
+ runInInjectionContext(injector, () => onViewTransitionCreated({ transition, from, to }));
4340
+ }
4333
4341
  return viewTransitionStarted;
4334
4342
  });
4335
4343
  }
@@ -4578,7 +4586,8 @@ class NavigationTransitions {
4578
4586
  return combineLatest(loadComponents(t.targetSnapshot.root))
4579
4587
  .pipe(defaultIfEmpty(), take(1));
4580
4588
  }), switchTap(() => this.afterPreactivation()), switchMap(() => {
4581
- const viewTransitionStarted = this.createViewTransition?.(this.environmentInjector);
4589
+ const { currentSnapshot, targetSnapshot } = overallTransitionState;
4590
+ const viewTransitionStarted = this.createViewTransition?.(this.environmentInjector, currentSnapshot.root, targetSnapshot.root);
4582
4591
  // If view transitions are enabled, block the navigation until the view
4583
4592
  // transition callback starts. Otherwise, continue immediately.
4584
4593
  return viewTransitionStarted ?
@@ -4699,10 +4708,10 @@ class NavigationTransitions {
4699
4708
  return extractedBrowserUrl.toString() !== this.currentTransition?.extractedUrl.toString() &&
4700
4709
  !this.currentTransition?.extras.skipLocationChange;
4701
4710
  }
4702
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: NavigationTransitions, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4703
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: NavigationTransitions, providedIn: 'root' }); }
4711
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: NavigationTransitions, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4712
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: NavigationTransitions, providedIn: 'root' }); }
4704
4713
  }
4705
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: NavigationTransitions, decorators: [{
4714
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: NavigationTransitions, decorators: [{
4706
4715
  type: Injectable,
4707
4716
  args: [{ providedIn: 'root' }]
4708
4717
  }], ctorParameters: () => [] });
@@ -4718,10 +4727,10 @@ function isBrowserTriggeredNavigation(source) {
4718
4727
  * @publicApi
4719
4728
  */
4720
4729
  class RouteReuseStrategy {
4721
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouteReuseStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4722
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouteReuseStrategy, providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) }); }
4730
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouteReuseStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4731
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouteReuseStrategy, providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) }); }
4723
4732
  }
4724
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouteReuseStrategy, decorators: [{
4733
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouteReuseStrategy, decorators: [{
4725
4734
  type: Injectable,
4726
4735
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) }]
4727
4736
  }] });
@@ -4772,58 +4781,32 @@ class BaseRouteReuseStrategy {
4772
4781
  }
4773
4782
  }
4774
4783
  class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
4775
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: DefaultRouteReuseStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
4776
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: DefaultRouteReuseStrategy, providedIn: 'root' }); }
4784
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: DefaultRouteReuseStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
4785
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: DefaultRouteReuseStrategy, providedIn: 'root' }); }
4777
4786
  }
4778
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: DefaultRouteReuseStrategy, decorators: [{
4787
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: DefaultRouteReuseStrategy, decorators: [{
4779
4788
  type: Injectable,
4780
4789
  args: [{ providedIn: 'root' }]
4781
4790
  }] });
4782
4791
 
4783
4792
  class StateManager {
4793
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: StateManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4794
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: StateManager, providedIn: 'root', useFactory: () => inject(HistoryStateManager) }); }
4795
+ }
4796
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: StateManager, decorators: [{
4797
+ type: Injectable,
4798
+ args: [{ providedIn: 'root', useFactory: () => inject(HistoryStateManager) }]
4799
+ }] });
4800
+ class HistoryStateManager extends StateManager {
4784
4801
  constructor() {
4802
+ super(...arguments);
4785
4803
  this.location = inject(Location);
4786
4804
  this.urlSerializer = inject(UrlSerializer);
4787
4805
  this.options = inject(ROUTER_CONFIGURATION, { optional: true }) || {};
4788
4806
  this.canceledNavigationResolution = this.options.canceledNavigationResolution || 'replace';
4789
- // These are currently writable via the Router public API but are deprecated and should be made
4790
- // `private readonly` in the future.
4791
4807
  this.urlHandlingStrategy = inject(UrlHandlingStrategy);
4792
4808
  this.urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';
4793
- /**
4794
- * Represents the activated `UrlTree` that the `Router` is configured to handle (through
4795
- * `UrlHandlingStrategy`). That is, after we find the route config tree that we're going to
4796
- * activate, run guards, and are just about to activate the route, we set the currentUrlTree.
4797
- * @internal
4798
- */
4799
4809
  this.currentUrlTree = new UrlTree();
4800
- /**
4801
- * Meant to represent the entire browser url after a successful navigation. In the life of a
4802
- * navigation transition:
4803
- * 1. The rawUrl represents the full URL that's being navigated to
4804
- * 2. We apply redirects, which might only apply to _part_ of the URL (due to
4805
- * `UrlHandlingStrategy`).
4806
- * 3. Right before activation (because we assume activation will succeed), we update the
4807
- * rawUrlTree to be a combination of the urlAfterRedirects (again, this might only apply to part
4808
- * of the initial url) and the rawUrl of the transition (which was the original navigation url in
4809
- * its full form).
4810
- * @internal
4811
- *
4812
- * Note that this is _only_ here to support `UrlHandlingStrategy.extract` and
4813
- * `UrlHandlingStrategy.shouldProcessUrl`. If those didn't exist, we could get by with
4814
- * `currentUrlTree` alone. If a new Router were to be provided (i.e. one that works with the
4815
- * browser navigation API), we should think about whether this complexity should be carried over.
4816
- *
4817
- * - extract: `rawUrlTree` is needed because `extract` may only return part
4818
- * of the navigation URL. Thus, `currentUrlTree` may only represent _part_ of the browser URL.
4819
- * When a navigation gets cancelled and we need to reset the URL or a new navigation occurs, we
4820
- * need to know the _whole_ browser URL, not just the part handled by UrlHandlingStrategy.
4821
- * - shouldProcessUrl: When this returns `false`, the router just ignores the navigation but still
4822
- * updates the `rawUrlTree` with the assumption that the navigation was caused by the location
4823
- * change listener due to a URL update by the AngularJS router. In this case, we still need to
4824
- * know what the browser's URL is for future navigations.
4825
- *
4826
- */
4827
4810
  this.rawUrlTree = this.currentUrlTree;
4828
4811
  /**
4829
4812
  * The id of the currently active page in the router.
@@ -4838,6 +4821,15 @@ class StateManager {
4838
4821
  this.routerState = createEmptyState(this.currentUrlTree, null);
4839
4822
  this.stateMemento = this.createStateMemento();
4840
4823
  }
4824
+ getCurrentUrlTree() {
4825
+ return this.currentUrlTree;
4826
+ }
4827
+ getRawUrlTree() {
4828
+ return this.rawUrlTree;
4829
+ }
4830
+ restoredState() {
4831
+ return this.location.getState();
4832
+ }
4841
4833
  /**
4842
4834
  * The ɵrouterPageId of whatever page is currently active in the browser history. This is
4843
4835
  * important for computing the target page id for new navigations because we need to ensure each
@@ -4847,7 +4839,10 @@ class StateManager {
4847
4839
  if (this.canceledNavigationResolution !== 'computed') {
4848
4840
  return this.currentPageId;
4849
4841
  }
4850
- return this.location.getState()?.ɵrouterPageId ?? this.currentPageId;
4842
+ return this.restoredState()?.ɵrouterPageId ?? this.currentPageId;
4843
+ }
4844
+ getRouterState() {
4845
+ return this.routerState;
4851
4846
  }
4852
4847
  createStateMemento() {
4853
4848
  return {
@@ -4856,7 +4851,14 @@ class StateManager {
4856
4851
  routerState: this.routerState,
4857
4852
  };
4858
4853
  }
4859
- handleNavigationEvent(e, currentTransition) {
4854
+ registerNonRouterCurrentEntryChangeListener(listener) {
4855
+ return this.location.subscribe(event => {
4856
+ if (event['type'] === 'popstate') {
4857
+ listener(event['url'], event.state);
4858
+ }
4859
+ });
4860
+ }
4861
+ handleRouterEvent(e, currentTransition) {
4860
4862
  if (e instanceof NavigationStart) {
4861
4863
  this.stateMemento = this.createStateMemento();
4862
4864
  }
@@ -4917,7 +4919,6 @@ class StateManager {
4917
4919
  /**
4918
4920
  * Performs the necessary rollback action to restore the browser URL to the
4919
4921
  * state before the transition.
4920
- * @internal
4921
4922
  */
4922
4923
  restoreHistory(navigation, restoringFromCaughtError = false) {
4923
4924
  if (this.canceledNavigationResolution === 'computed') {
@@ -4969,10 +4970,10 @@ class StateManager {
4969
4970
  }
4970
4971
  return { navigationId };
4971
4972
  }
4972
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: StateManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4973
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: StateManager, providedIn: 'root' }); }
4973
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: HistoryStateManager, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
4974
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: HistoryStateManager, providedIn: 'root' }); }
4974
4975
  }
4975
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: StateManager, decorators: [{
4976
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: HistoryStateManager, decorators: [{
4976
4977
  type: Injectable,
4977
4978
  args: [{ providedIn: 'root' }]
4978
4979
  }] });
@@ -5047,10 +5048,10 @@ const subsetMatchOptions = {
5047
5048
  */
5048
5049
  class Router {
5049
5050
  get currentUrlTree() {
5050
- return this.stateManager.currentUrlTree;
5051
+ return this.stateManager.getCurrentUrlTree();
5051
5052
  }
5052
5053
  get rawUrlTree() {
5053
- return this.stateManager.rawUrlTree;
5054
+ return this.stateManager.getRawUrlTree();
5054
5055
  }
5055
5056
  /**
5056
5057
  * An event stream for routing events.
@@ -5066,7 +5067,7 @@ class Router {
5066
5067
  * The current state of routing in this NgModule.
5067
5068
  */
5068
5069
  get routerState() {
5069
- return this.stateManager.routerState;
5070
+ return this.stateManager.getRouterState();
5070
5071
  }
5071
5072
  constructor() {
5072
5073
  this.disposed = false;
@@ -5141,7 +5142,7 @@ class Router {
5141
5142
  const currentTransition = this.navigationTransitions.currentTransition;
5142
5143
  const currentNavigation = this.navigationTransitions.currentNavigation;
5143
5144
  if (currentTransition !== null && currentNavigation !== null) {
5144
- this.stateManager.handleNavigationEvent(e, currentNavigation);
5145
+ this.stateManager.handleRouterEvent(e, currentNavigation);
5145
5146
  if (e instanceof NavigationCancel && e.code !== 0 /* NavigationCancellationCode.Redirect */ &&
5146
5147
  e.code !== 1 /* NavigationCancellationCode.SupersededByNewNavigation */) {
5147
5148
  // It seems weird that `navigated` is set to `true` when the navigation is rejected,
@@ -5196,8 +5197,7 @@ class Router {
5196
5197
  initialNavigation() {
5197
5198
  this.setUpLocationChangeListener();
5198
5199
  if (!this.navigationTransitions.hasRequestedNavigation) {
5199
- const state = this.location.getState();
5200
- this.navigateToSyncWithBrowser(this.location.path(true), IMPERATIVE_NAVIGATION, state);
5200
+ this.navigateToSyncWithBrowser(this.location.path(true), IMPERATIVE_NAVIGATION, this.stateManager.restoredState());
5201
5201
  }
5202
5202
  }
5203
5203
  /**
@@ -5209,17 +5209,15 @@ class Router {
5209
5209
  // Don't need to use Zone.wrap any more, because zone.js
5210
5210
  // already patch onPopState, so location change callback will
5211
5211
  // run into ngZone
5212
- if (!this.locationSubscription) {
5213
- this.locationSubscription = this.location.subscribe(event => {
5214
- const source = event['type'] === 'popstate' ? 'popstate' : 'hashchange';
5215
- if (source === 'popstate') {
5212
+ if (!this.nonRouterCurrentEntryChangeSubscription) {
5213
+ this.nonRouterCurrentEntryChangeSubscription =
5214
+ this.stateManager.registerNonRouterCurrentEntryChangeListener((url, state) => {
5216
5215
  // The `setTimeout` was added in #12160 and is likely to support Angular/AngularJS
5217
5216
  // hybrid apps.
5218
5217
  setTimeout(() => {
5219
- this.navigateToSyncWithBrowser(event['url'], source, event.state);
5218
+ this.navigateToSyncWithBrowser(url, 'popstate', state);
5220
5219
  }, 0);
5221
- }
5222
- });
5220
+ });
5223
5221
  }
5224
5222
  }
5225
5223
  /**
@@ -5298,9 +5296,9 @@ class Router {
5298
5296
  /** Disposes of the router. */
5299
5297
  dispose() {
5300
5298
  this.navigationTransitions.complete();
5301
- if (this.locationSubscription) {
5302
- this.locationSubscription.unsubscribe();
5303
- this.locationSubscription = undefined;
5299
+ if (this.nonRouterCurrentEntryChangeSubscription) {
5300
+ this.nonRouterCurrentEntryChangeSubscription.unsubscribe();
5301
+ this.nonRouterCurrentEntryChangeSubscription = undefined;
5304
5302
  }
5305
5303
  this.disposed = true;
5306
5304
  this.eventsSubscription.unsubscribe();
@@ -5548,10 +5546,10 @@ class Router {
5548
5546
  return Promise.reject(e);
5549
5547
  });
5550
5548
  }
5551
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: Router, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5552
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: Router, providedIn: 'root' }); }
5549
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: Router, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5550
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: Router, providedIn: 'root' }); }
5553
5551
  }
5554
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: Router, decorators: [{
5552
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: Router, decorators: [{
5555
5553
  type: Injectable,
5556
5554
  args: [{ providedIn: 'root' }]
5557
5555
  }], ctorParameters: () => [] });
@@ -5822,10 +5820,10 @@ class RouterLink {
5822
5820
  preserveFragment: this.preserveFragment,
5823
5821
  });
5824
5822
  }
5825
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.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 }); }
5826
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.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", "preserveFragment", booleanAttribute], skipLocationChange: ["skipLocationChange", "skipLocationChange", booleanAttribute], replaceUrl: ["replaceUrl", "replaceUrl", booleanAttribute], 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 }); }
5823
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", 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 }); }
5824
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.0.0-rc.0", type: RouterLink, isStandalone: true, selector: "[routerLink]", inputs: { target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", state: "state", relativeTo: "relativeTo", preserveFragment: ["preserveFragment", "preserveFragment", booleanAttribute], skipLocationChange: ["skipLocationChange", "skipLocationChange", booleanAttribute], replaceUrl: ["replaceUrl", "replaceUrl", booleanAttribute], 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 }); }
5827
5825
  }
5828
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterLink, decorators: [{
5826
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterLink, decorators: [{
5829
5827
  type: Directive,
5830
5828
  args: [{
5831
5829
  selector: '[routerLink]',
@@ -6048,10 +6046,10 @@ class RouterLinkActive {
6048
6046
  const isActiveCheckFn = this.isLinkActive(this.router);
6049
6047
  return this.link && isActiveCheckFn(this.link) || this.links.some(isActiveCheckFn);
6050
6048
  }
6051
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.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 }); }
6052
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.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 }); }
6049
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterLinkActive, deps: [{ token: Router }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: RouterLink, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
6050
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.0-rc.0", 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 }); }
6053
6051
  }
6054
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterLinkActive, decorators: [{
6052
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterLinkActive, decorators: [{
6055
6053
  type: Directive,
6056
6054
  args: [{
6057
6055
  selector: '[routerLinkActive]',
@@ -6103,10 +6101,10 @@ class PreloadAllModules {
6103
6101
  preload(route, fn) {
6104
6102
  return fn().pipe(catchError(() => of(null)));
6105
6103
  }
6106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6107
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: PreloadAllModules, providedIn: 'root' }); }
6104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6105
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: PreloadAllModules, providedIn: 'root' }); }
6108
6106
  }
6109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: PreloadAllModules, decorators: [{
6107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: PreloadAllModules, decorators: [{
6110
6108
  type: Injectable,
6111
6109
  args: [{ providedIn: 'root' }]
6112
6110
  }] });
@@ -6123,10 +6121,10 @@ class NoPreloading {
6123
6121
  preload(route, fn) {
6124
6122
  return of(null);
6125
6123
  }
6126
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6127
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: NoPreloading, providedIn: 'root' }); }
6124
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6125
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: NoPreloading, providedIn: 'root' }); }
6128
6126
  }
6129
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: NoPreloading, decorators: [{
6127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: NoPreloading, decorators: [{
6130
6128
  type: Injectable,
6131
6129
  args: [{ providedIn: 'root' }]
6132
6130
  }] });
@@ -6219,10 +6217,10 @@ class RouterPreloader {
6219
6217
  }
6220
6218
  });
6221
6219
  }
6222
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.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 }); }
6223
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterPreloader, providedIn: 'root' }); }
6220
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterPreloader, deps: [{ token: Router }, { token: i0.Compiler }, { token: i0.EnvironmentInjector }, { token: PreloadingStrategy }, { token: RouterConfigLoader }], target: i0.ɵɵFactoryTarget.Injectable }); }
6221
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterPreloader, providedIn: 'root' }); }
6224
6222
  }
6225
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterPreloader, decorators: [{
6223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterPreloader, decorators: [{
6226
6224
  type: Injectable,
6227
6225
  args: [{ providedIn: 'root' }]
6228
6226
  }], ctorParameters: () => [{ type: Router }, { type: i0.Compiler }, { type: i0.EnvironmentInjector }, { type: PreloadingStrategy }, { type: RouterConfigLoader }] });
@@ -6315,10 +6313,10 @@ class RouterScroller {
6315
6313
  this.routerEventsSubscription?.unsubscribe();
6316
6314
  this.scrollEventsSubscription?.unsubscribe();
6317
6315
  }
6318
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
6319
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterScroller }); }
6316
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
6317
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterScroller }); }
6320
6318
  }
6321
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterScroller, decorators: [{
6319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterScroller, decorators: [{
6322
6320
  type: Injectable
6323
6321
  }], ctorParameters: () => [{ type: UrlSerializer }, { type: NavigationTransitions }, { type: i3.ViewportScroller }, { type: i0.NgZone }, { type: undefined }] });
6324
6322
 
@@ -6734,7 +6732,7 @@ function withHashLocation() {
6734
6732
  const providers = [
6735
6733
  { provide: LocationStrategy, useClass: HashLocationStrategy },
6736
6734
  ];
6737
- return routerFeature(5 /* RouterFeatureKind.RouterConfigurationFeature */, providers);
6735
+ return routerFeature(6 /* RouterFeatureKind.RouterHashLocationFeature */, providers);
6738
6736
  }
6739
6737
  /**
6740
6738
  * Subscribes to the Router's navigation events and calls the given function when a
@@ -6840,7 +6838,7 @@ function withViewTransitions(options) {
6840
6838
  { provide: CREATE_VIEW_TRANSITION, useValue: createViewTransition },
6841
6839
  {
6842
6840
  provide: VIEW_TRANSITION_OPTIONS,
6843
- useValue: { skipNextTransition: !!options?.skipInitialTransition }
6841
+ useValue: { skipNextTransition: !!options?.skipInitialTransition, ...options }
6844
6842
  },
6845
6843
  ];
6846
6844
  return routerFeature(9 /* RouterFeatureKind.ViewTransitionsFeature */, providers);
@@ -6871,9 +6869,6 @@ const ROUTER_PROVIDERS = [
6871
6869
  (typeof ngDevMode === 'undefined' || ngDevMode) ? { provide: ROUTER_IS_PROVIDED, useValue: true } :
6872
6870
  [],
6873
6871
  ];
6874
- function routerNgProbeToken() {
6875
- return new NgProbeToken('Router', Router);
6876
- }
6877
6872
  /**
6878
6873
  * @description
6879
6874
  *
@@ -6933,7 +6928,6 @@ class RouterModule {
6933
6928
  config?.useHash ? provideHashLocationStrategy() : providePathLocationStrategy(),
6934
6929
  provideRouterScroller(),
6935
6930
  config?.preloadingStrategy ? withPreloading(config.preloadingStrategy).ɵproviders : [],
6936
- { provide: NgProbeToken, multi: true, useFactory: routerNgProbeToken },
6937
6931
  config?.initialNavigation ? provideInitialNavigation(config) : [],
6938
6932
  config?.bindToComponentInputs ? withComponentInputBinding().ɵproviders : [],
6939
6933
  config?.enableViewTransitions ? withViewTransitions().ɵproviders : [],
@@ -6963,11 +6957,11 @@ class RouterModule {
6963
6957
  providers: [{ provide: ROUTES, multi: true, useValue: routes }],
6964
6958
  };
6965
6959
  }
6966
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterModule, deps: [{ token: ROUTER_FORROOT_GUARD, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
6967
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterModule, imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent], exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent] }); }
6968
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterModule }); }
6960
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterModule, deps: [{ token: ROUTER_FORROOT_GUARD, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
6961
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterModule, imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent], exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent] }); }
6962
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterModule }); }
6969
6963
  }
6970
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: RouterModule, decorators: [{
6964
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: RouterModule, decorators: [{
6971
6965
  type: NgModule,
6972
6966
  args: [{
6973
6967
  imports: ROUTER_DIRECTIVES,
@@ -7112,7 +7106,7 @@ function mapToResolve(provider) {
7112
7106
  /**
7113
7107
  * @publicApi
7114
7108
  */
7115
- const VERSION = new Version('17.0.0-next.7');
7109
+ const VERSION = new Version('17.0.0-rc.0');
7116
7110
 
7117
7111
  /**
7118
7112
  * @module