@angular/router 18.1.0-rc.0 → 18.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,11 @@
1
1
  /**
2
- * @license Angular v18.1.0-rc.0
2
+ * @license Angular v18.1.1
3
3
  * (c) 2010-2024 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, Directive, Input, Output, InjectionToken, reflectComponentType, Component, createEnvironmentInjector, ɵisNgModule, isStandalone, ɵisInjectable, runInInjectionContext, Compiler, NgModuleFactory, NgZone, afterNextRender, EnvironmentInjector, ɵConsole, ɵPendingTasks, ɵɵ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';
8
+ import { ɵisPromise, ɵRuntimeError, Injectable, createEnvironmentInjector, ɵisNgModule, isStandalone, EventEmitter, inject, ViewContainerRef, ChangeDetectorRef, Directive, Input, Output, InjectionToken, reflectComponentType, ɵisInjectable, runInInjectionContext, Component, Compiler, NgModuleFactory, NgZone, afterNextRender, EnvironmentInjector, ɵConsole, ɵPendingTasks, ɵɵ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';
@@ -421,10 +421,10 @@ function mapChildrenIntoArray(segment, fn) {
421
421
  * @publicApi
422
422
  */
423
423
  class UrlSerializer {
424
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: UrlSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
425
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: UrlSerializer, providedIn: 'root', useFactory: () => new DefaultUrlSerializer() }); }
424
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: UrlSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
425
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: UrlSerializer, providedIn: 'root', useFactory: () => new DefaultUrlSerializer() }); }
426
426
  }
427
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: UrlSerializer, decorators: [{
427
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: UrlSerializer, decorators: [{
428
428
  type: Injectable,
429
429
  args: [{ providedIn: 'root', useFactory: () => new DefaultUrlSerializer() }]
430
430
  }] });
@@ -1790,17 +1790,204 @@ function stringifyEvent(routerEvent) {
1790
1790
  }
1791
1791
  }
1792
1792
 
1793
+ /**
1794
+ * Creates an `EnvironmentInjector` if the `Route` has providers and one does not already exist
1795
+ * and returns the injector. Otherwise, if the `Route` does not have `providers`, returns the
1796
+ * `currentInjector`.
1797
+ *
1798
+ * @param route The route that might have providers
1799
+ * @param currentInjector The parent injector of the `Route`
1800
+ */
1801
+ function getOrCreateRouteInjectorIfNeeded(route, currentInjector) {
1802
+ if (route.providers && !route._injector) {
1803
+ route._injector = createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);
1804
+ }
1805
+ return route._injector ?? currentInjector;
1806
+ }
1807
+ function getLoadedRoutes(route) {
1808
+ return route._loadedRoutes;
1809
+ }
1810
+ function getLoadedInjector(route) {
1811
+ return route._loadedInjector;
1812
+ }
1813
+ function getLoadedComponent(route) {
1814
+ return route._loadedComponent;
1815
+ }
1816
+ function getProvidersInjector(route) {
1817
+ return route._injector;
1818
+ }
1819
+ function validateConfig(config, parentPath = '', requireStandaloneComponents = false) {
1820
+ // forEach doesn't iterate undefined values
1821
+ for (let i = 0; i < config.length; i++) {
1822
+ const route = config[i];
1823
+ const fullPath = getFullPath(parentPath, route);
1824
+ validateNode(route, fullPath, requireStandaloneComponents);
1825
+ }
1826
+ }
1827
+ function assertStandalone(fullPath, component) {
1828
+ if (component && ɵisNgModule(component)) {
1829
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. You are using 'loadComponent' with a module, ` +
1830
+ `but it must be used with standalone components. Use 'loadChildren' instead.`);
1831
+ }
1832
+ else if (component && !isStandalone(component)) {
1833
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. The component must be standalone.`);
1834
+ }
1835
+ }
1836
+ function validateNode(route, fullPath, requireStandaloneComponents) {
1837
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
1838
+ if (!route) {
1839
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `
1840
+ Invalid configuration of route '${fullPath}': Encountered undefined route.
1841
+ The reason might be an extra comma.
1842
+
1843
+ Example:
1844
+ const routes: Routes = [
1845
+ { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
1846
+ { path: 'dashboard', component: DashboardComponent },, << two commas
1847
+ { path: 'detail/:id', component: HeroDetailComponent }
1848
+ ];
1849
+ `);
1850
+ }
1851
+ if (Array.isArray(route)) {
1852
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': Array cannot be specified`);
1853
+ }
1854
+ if (!route.redirectTo &&
1855
+ !route.component &&
1856
+ !route.loadComponent &&
1857
+ !route.children &&
1858
+ !route.loadChildren &&
1859
+ route.outlet &&
1860
+ route.outlet !== PRIMARY_OUTLET) {
1861
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);
1862
+ }
1863
+ if (route.redirectTo && route.children) {
1864
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);
1865
+ }
1866
+ if (route.redirectTo && route.loadChildren) {
1867
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);
1868
+ }
1869
+ if (route.children && route.loadChildren) {
1870
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);
1871
+ }
1872
+ if (route.redirectTo && (route.component || route.loadComponent)) {
1873
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and component/loadComponent cannot be used together`);
1874
+ }
1875
+ if (route.component && route.loadComponent) {
1876
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': component and loadComponent cannot be used together`);
1877
+ }
1878
+ if (route.redirectTo && route.canActivate) {
1879
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and canActivate cannot be used together. Redirects happen before activation ` +
1880
+ `so canActivate will never be executed.`);
1881
+ }
1882
+ if (route.path && route.matcher) {
1883
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);
1884
+ }
1885
+ if (route.redirectTo === void 0 &&
1886
+ !route.component &&
1887
+ !route.loadComponent &&
1888
+ !route.children &&
1889
+ !route.loadChildren) {
1890
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);
1891
+ }
1892
+ if (route.path === void 0 && route.matcher === void 0) {
1893
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);
1894
+ }
1895
+ if (typeof route.path === 'string' && route.path.charAt(0) === '/') {
1896
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': path cannot start with a slash`);
1897
+ }
1898
+ if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {
1899
+ const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;
1900
+ throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '{path: "${fullPath}", redirectTo: "${route.redirectTo}"}': please provide 'pathMatch'. ${exp}`);
1901
+ }
1902
+ if (requireStandaloneComponents) {
1903
+ assertStandalone(fullPath, route.component);
1904
+ }
1905
+ }
1906
+ if (route.children) {
1907
+ validateConfig(route.children, fullPath, requireStandaloneComponents);
1908
+ }
1909
+ }
1910
+ function getFullPath(parentPath, currentRoute) {
1911
+ if (!currentRoute) {
1912
+ return parentPath;
1913
+ }
1914
+ if (!parentPath && !currentRoute.path) {
1915
+ return '';
1916
+ }
1917
+ else if (parentPath && !currentRoute.path) {
1918
+ return `${parentPath}/`;
1919
+ }
1920
+ else if (!parentPath && currentRoute.path) {
1921
+ return currentRoute.path;
1922
+ }
1923
+ else {
1924
+ return `${parentPath}/${currentRoute.path}`;
1925
+ }
1926
+ }
1927
+ /** Returns the `route.outlet` or PRIMARY_OUTLET if none exists. */
1928
+ function getOutlet(route) {
1929
+ return route.outlet || PRIMARY_OUTLET;
1930
+ }
1931
+ /**
1932
+ * Sorts the `routes` such that the ones with an outlet matching `outletName` come first.
1933
+ * The order of the configs is otherwise preserved.
1934
+ */
1935
+ function sortByMatchingOutlets(routes, outletName) {
1936
+ const sortedConfig = routes.filter((r) => getOutlet(r) === outletName);
1937
+ sortedConfig.push(...routes.filter((r) => getOutlet(r) !== outletName));
1938
+ return sortedConfig;
1939
+ }
1940
+ /**
1941
+ * Gets the first injector in the snapshot's parent tree.
1942
+ *
1943
+ * If the `Route` has a static list of providers, the returned injector will be the one created from
1944
+ * those. If it does not exist, the returned injector may come from the parents, which may be from a
1945
+ * loaded config or their static providers.
1946
+ *
1947
+ * Returns `null` if there is neither this nor any parents have a stored injector.
1948
+ *
1949
+ * Generally used for retrieving the injector to use for getting tokens for guards/resolvers and
1950
+ * also used for getting the correct injector to use for creating components.
1951
+ */
1952
+ function getClosestRouteInjector(snapshot) {
1953
+ if (!snapshot)
1954
+ return null;
1955
+ // If the current route has its own injector, which is created from the static providers on the
1956
+ // route itself, we should use that. Otherwise, we start at the parent since we do not want to
1957
+ // include the lazy loaded injector from this route.
1958
+ if (snapshot.routeConfig?._injector) {
1959
+ return snapshot.routeConfig._injector;
1960
+ }
1961
+ for (let s = snapshot.parent; s; s = s.parent) {
1962
+ const route = s.routeConfig;
1963
+ // Note that the order here is important. `_loadedInjector` stored on the route with
1964
+ // `loadChildren: () => NgModule` so it applies to child routes with priority. The `_injector`
1965
+ // is created from the static providers on that parent route, so it applies to the children as
1966
+ // well, but only if there is no lazy loaded NgModuleRef injector.
1967
+ if (route?._loadedInjector)
1968
+ return route._loadedInjector;
1969
+ if (route?._injector)
1970
+ return route._injector;
1971
+ }
1972
+ return null;
1973
+ }
1974
+
1793
1975
  /**
1794
1976
  * Store contextual information about a `RouterOutlet`
1795
1977
  *
1796
1978
  * @publicApi
1797
1979
  */
1798
1980
  class OutletContext {
1799
- constructor(injector) {
1800
- this.injector = injector;
1981
+ get injector() {
1982
+ return getClosestRouteInjector(this.route?.snapshot) ?? this.rootInjector;
1983
+ }
1984
+ // TODO(atscott): Only here to avoid a "breaking" change in a patch/minor. Remove in v19.
1985
+ set injector(_) { }
1986
+ constructor(rootInjector) {
1987
+ this.rootInjector = rootInjector;
1801
1988
  this.outlet = null;
1802
1989
  this.route = null;
1803
- this.children = new ChildrenOutletContexts(this.injector);
1990
+ this.children = new ChildrenOutletContexts(this.rootInjector);
1804
1991
  this.attachRef = null;
1805
1992
  }
1806
1993
  }
@@ -1811,8 +1998,8 @@ class OutletContext {
1811
1998
  */
1812
1999
  class ChildrenOutletContexts {
1813
2000
  /** @nodoc */
1814
- constructor(parentInjector) {
1815
- this.parentInjector = parentInjector;
2001
+ constructor(rootInjector) {
2002
+ this.rootInjector = rootInjector;
1816
2003
  // contexts for child outlets, by name.
1817
2004
  this.contexts = new Map();
1818
2005
  }
@@ -1849,7 +2036,7 @@ class ChildrenOutletContexts {
1849
2036
  getOrCreateContext(childName) {
1850
2037
  let context = this.getContext(childName);
1851
2038
  if (!context) {
1852
- context = new OutletContext(this.parentInjector);
2039
+ context = new OutletContext(this.rootInjector);
1853
2040
  this.contexts.set(childName, context);
1854
2041
  }
1855
2042
  return context;
@@ -1857,10 +2044,10 @@ class ChildrenOutletContexts {
1857
2044
  getContext(childName) {
1858
2045
  return this.contexts.get(childName) || null;
1859
2046
  }
1860
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ChildrenOutletContexts, deps: [{ token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable }); }
1861
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ChildrenOutletContexts, providedIn: 'root' }); }
2047
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ChildrenOutletContexts, deps: [{ token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable }); }
2048
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ChildrenOutletContexts, providedIn: 'root' }); }
1862
2049
  }
1863
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ChildrenOutletContexts, decorators: [{
2050
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ChildrenOutletContexts, decorators: [{
1864
2051
  type: Injectable,
1865
2052
  args: [{ providedIn: 'root' }]
1866
2053
  }], ctorParameters: () => [{ type: i0.EnvironmentInjector }] });
@@ -2568,10 +2755,10 @@ class RouterOutlet {
2568
2755
  this.inputBinder?.bindActivatedRouteToOutletComponent(this);
2569
2756
  this.activateEvents.emit(this.activated.instance);
2570
2757
  }
2571
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2572
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.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 }); }
2758
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2759
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", 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 }); }
2573
2760
  }
2574
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterOutlet, decorators: [{
2761
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterOutlet, decorators: [{
2575
2762
  type: Directive,
2576
2763
  args: [{
2577
2764
  selector: 'router-outlet',
@@ -2694,10 +2881,10 @@ class RoutedComponentInputBinder {
2694
2881
  });
2695
2882
  this.outletDataSubscriptions.set(outlet, dataSubscription);
2696
2883
  }
2697
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RoutedComponentInputBinder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2698
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RoutedComponentInputBinder }); }
2884
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RoutedComponentInputBinder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2885
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RoutedComponentInputBinder }); }
2699
2886
  }
2700
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RoutedComponentInputBinder, decorators: [{
2887
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RoutedComponentInputBinder, decorators: [{
2701
2888
  type: Injectable
2702
2889
  }] });
2703
2890
 
@@ -2805,225 +2992,6 @@ function isNavigationCancelingError(error) {
2805
2992
  return !!error && error[NAVIGATION_CANCELING_ERROR];
2806
2993
  }
2807
2994
 
2808
- /**
2809
- * This component is used internally within the router to be a placeholder when an empty
2810
- * router-outlet is needed. For example, with a config such as:
2811
- *
2812
- * `{path: 'parent', outlet: 'nav', children: [...]}`
2813
- *
2814
- * In order to render, there needs to be a component on this config, which will default
2815
- * to this `EmptyOutletComponent`.
2816
- */
2817
- class ɵEmptyOutletComponent {
2818
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2819
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.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"] }] }); }
2820
- }
2821
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
2822
- type: Component,
2823
- args: [{
2824
- template: `<router-outlet></router-outlet>`,
2825
- imports: [RouterOutlet],
2826
- standalone: true,
2827
- }]
2828
- }] });
2829
-
2830
- /**
2831
- * Creates an `EnvironmentInjector` if the `Route` has providers and one does not already exist
2832
- * and returns the injector. Otherwise, if the `Route` does not have `providers`, returns the
2833
- * `currentInjector`.
2834
- *
2835
- * @param route The route that might have providers
2836
- * @param currentInjector The parent injector of the `Route`
2837
- */
2838
- function getOrCreateRouteInjectorIfNeeded(route, currentInjector) {
2839
- if (route.providers && !route._injector) {
2840
- route._injector = createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);
2841
- }
2842
- return route._injector ?? currentInjector;
2843
- }
2844
- function getLoadedRoutes(route) {
2845
- return route._loadedRoutes;
2846
- }
2847
- function getLoadedInjector(route) {
2848
- return route._loadedInjector;
2849
- }
2850
- function getLoadedComponent(route) {
2851
- return route._loadedComponent;
2852
- }
2853
- function getProvidersInjector(route) {
2854
- return route._injector;
2855
- }
2856
- function validateConfig(config, parentPath = '', requireStandaloneComponents = false) {
2857
- // forEach doesn't iterate undefined values
2858
- for (let i = 0; i < config.length; i++) {
2859
- const route = config[i];
2860
- const fullPath = getFullPath(parentPath, route);
2861
- validateNode(route, fullPath, requireStandaloneComponents);
2862
- }
2863
- }
2864
- function assertStandalone(fullPath, component) {
2865
- if (component && ɵisNgModule(component)) {
2866
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. You are using 'loadComponent' with a module, ` +
2867
- `but it must be used with standalone components. Use 'loadChildren' instead.`);
2868
- }
2869
- else if (component && !isStandalone(component)) {
2870
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. The component must be standalone.`);
2871
- }
2872
- }
2873
- function validateNode(route, fullPath, requireStandaloneComponents) {
2874
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
2875
- if (!route) {
2876
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `
2877
- Invalid configuration of route '${fullPath}': Encountered undefined route.
2878
- The reason might be an extra comma.
2879
-
2880
- Example:
2881
- const routes: Routes = [
2882
- { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
2883
- { path: 'dashboard', component: DashboardComponent },, << two commas
2884
- { path: 'detail/:id', component: HeroDetailComponent }
2885
- ];
2886
- `);
2887
- }
2888
- if (Array.isArray(route)) {
2889
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': Array cannot be specified`);
2890
- }
2891
- if (!route.redirectTo &&
2892
- !route.component &&
2893
- !route.loadComponent &&
2894
- !route.children &&
2895
- !route.loadChildren &&
2896
- route.outlet &&
2897
- route.outlet !== PRIMARY_OUTLET) {
2898
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);
2899
- }
2900
- if (route.redirectTo && route.children) {
2901
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);
2902
- }
2903
- if (route.redirectTo && route.loadChildren) {
2904
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);
2905
- }
2906
- if (route.children && route.loadChildren) {
2907
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);
2908
- }
2909
- if (route.redirectTo && (route.component || route.loadComponent)) {
2910
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and component/loadComponent cannot be used together`);
2911
- }
2912
- if (route.component && route.loadComponent) {
2913
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': component and loadComponent cannot be used together`);
2914
- }
2915
- if (route.redirectTo && route.canActivate) {
2916
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and canActivate cannot be used together. Redirects happen before activation ` +
2917
- `so canActivate will never be executed.`);
2918
- }
2919
- if (route.path && route.matcher) {
2920
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);
2921
- }
2922
- if (route.redirectTo === void 0 &&
2923
- !route.component &&
2924
- !route.loadComponent &&
2925
- !route.children &&
2926
- !route.loadChildren) {
2927
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);
2928
- }
2929
- if (route.path === void 0 && route.matcher === void 0) {
2930
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);
2931
- }
2932
- if (typeof route.path === 'string' && route.path.charAt(0) === '/') {
2933
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': path cannot start with a slash`);
2934
- }
2935
- if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {
2936
- const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;
2937
- throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '{path: "${fullPath}", redirectTo: "${route.redirectTo}"}': please provide 'pathMatch'. ${exp}`);
2938
- }
2939
- if (requireStandaloneComponents) {
2940
- assertStandalone(fullPath, route.component);
2941
- }
2942
- }
2943
- if (route.children) {
2944
- validateConfig(route.children, fullPath, requireStandaloneComponents);
2945
- }
2946
- }
2947
- function getFullPath(parentPath, currentRoute) {
2948
- if (!currentRoute) {
2949
- return parentPath;
2950
- }
2951
- if (!parentPath && !currentRoute.path) {
2952
- return '';
2953
- }
2954
- else if (parentPath && !currentRoute.path) {
2955
- return `${parentPath}/`;
2956
- }
2957
- else if (!parentPath && currentRoute.path) {
2958
- return currentRoute.path;
2959
- }
2960
- else {
2961
- return `${parentPath}/${currentRoute.path}`;
2962
- }
2963
- }
2964
- /**
2965
- * Makes a copy of the config and adds any default required properties.
2966
- */
2967
- function standardizeConfig(r) {
2968
- const children = r.children && r.children.map(standardizeConfig);
2969
- const c = children ? { ...r, children } : { ...r };
2970
- if (!c.component &&
2971
- !c.loadComponent &&
2972
- (children || c.loadChildren) &&
2973
- c.outlet &&
2974
- c.outlet !== PRIMARY_OUTLET) {
2975
- c.component = ɵEmptyOutletComponent;
2976
- }
2977
- return c;
2978
- }
2979
- /** Returns the `route.outlet` or PRIMARY_OUTLET if none exists. */
2980
- function getOutlet(route) {
2981
- return route.outlet || PRIMARY_OUTLET;
2982
- }
2983
- /**
2984
- * Sorts the `routes` such that the ones with an outlet matching `outletName` come first.
2985
- * The order of the configs is otherwise preserved.
2986
- */
2987
- function sortByMatchingOutlets(routes, outletName) {
2988
- const sortedConfig = routes.filter((r) => getOutlet(r) === outletName);
2989
- sortedConfig.push(...routes.filter((r) => getOutlet(r) !== outletName));
2990
- return sortedConfig;
2991
- }
2992
- /**
2993
- * Gets the first injector in the snapshot's parent tree.
2994
- *
2995
- * If the `Route` has a static list of providers, the returned injector will be the one created from
2996
- * those. If it does not exist, the returned injector may come from the parents, which may be from a
2997
- * loaded config or their static providers.
2998
- *
2999
- * Returns `null` if there is neither this nor any parents have a stored injector.
3000
- *
3001
- * Generally used for retrieving the injector to use for getting tokens for guards/resolvers and
3002
- * also used for getting the correct injector to use for creating components.
3003
- */
3004
- function getClosestRouteInjector(snapshot) {
3005
- if (!snapshot)
3006
- return null;
3007
- // If the current route has its own injector, which is created from the static providers on the
3008
- // route itself, we should use that. Otherwise, we start at the parent since we do not want to
3009
- // include the lazy loaded injector from this route.
3010
- if (snapshot.routeConfig?._injector) {
3011
- return snapshot.routeConfig._injector;
3012
- }
3013
- for (let s = snapshot.parent; s; s = s.parent) {
3014
- const route = s.routeConfig;
3015
- // Note that the order here is important. `_loadedInjector` stored on the route with
3016
- // `loadChildren: () => NgModule` so it applies to child routes with priority. The `_injector`
3017
- // is created from the static providers on that parent route, so it applies to the children as
3018
- // well, but only if there is no lazy loaded NgModuleRef injector.
3019
- if (route?._loadedInjector)
3020
- return route._loadedInjector;
3021
- if (route?._injector)
3022
- return route._injector;
3023
- }
3024
- return null;
3025
- }
3026
-
3027
2995
  let warnedAboutUnsupportedInputBinding = false;
3028
2996
  const activateRoutes = (rootContexts, routeReuseStrategy, forwardEvent, inputBindingEnabled) => map((t) => {
3029
2997
  new ActivateRoutes(routeReuseStrategy, t.targetRouterState, t.currentRouterState, forwardEvent, inputBindingEnabled).activate(rootContexts);
@@ -3173,10 +3141,8 @@ class ActivateRoutes {
3173
3141
  this.activateChildRoutes(futureNode, null, context.children);
3174
3142
  }
3175
3143
  else {
3176
- const injector = getClosestRouteInjector(future.snapshot);
3177
3144
  context.attachRef = null;
3178
3145
  context.route = future;
3179
- context.injector = injector ?? context.injector;
3180
3146
  if (context.outlet) {
3181
3147
  // Activate the outlet when it has already been instantiated
3182
3148
  // Otherwise it will get activated from its `ngOnInit` when instantiated
@@ -4241,10 +4207,10 @@ class TitleStrategy {
4241
4207
  getResolvedTitleForRoute(snapshot) {
4242
4208
  return snapshot.data[RouteTitleKey];
4243
4209
  }
4244
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4245
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }); }
4210
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4211
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }); }
4246
4212
  }
4247
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: TitleStrategy, decorators: [{
4213
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: TitleStrategy, decorators: [{
4248
4214
  type: Injectable,
4249
4215
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }]
4250
4216
  }] });
@@ -4267,10 +4233,10 @@ class DefaultTitleStrategy extends TitleStrategy {
4267
4233
  this.title.setTitle(title);
4268
4234
  }
4269
4235
  }
4270
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: DefaultTitleStrategy, deps: [{ token: i1.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
4271
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' }); }
4236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: DefaultTitleStrategy, deps: [{ token: i1.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
4237
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' }); }
4272
4238
  }
4273
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
4239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
4274
4240
  type: Injectable,
4275
4241
  args: [{ providedIn: 'root' }]
4276
4242
  }], ctorParameters: () => [{ type: i1.Title }] });
@@ -4285,6 +4251,43 @@ const ROUTER_CONFIGURATION = new InjectionToken(typeof ngDevMode === 'undefined'
4285
4251
  factory: () => ({}),
4286
4252
  });
4287
4253
 
4254
+ /**
4255
+ * This component is used internally within the router to be a placeholder when an empty
4256
+ * router-outlet is needed. For example, with a config such as:
4257
+ *
4258
+ * `{path: 'parent', outlet: 'nav', children: [...]}`
4259
+ *
4260
+ * In order to render, there needs to be a component on this config, which will default
4261
+ * to this `EmptyOutletComponent`.
4262
+ */
4263
+ class ɵEmptyOutletComponent {
4264
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4265
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.1", 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"] }] }); }
4266
+ }
4267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
4268
+ type: Component,
4269
+ args: [{
4270
+ template: `<router-outlet></router-outlet>`,
4271
+ imports: [RouterOutlet],
4272
+ standalone: true,
4273
+ }]
4274
+ }] });
4275
+ /**
4276
+ * Makes a copy of the config and adds any default required properties.
4277
+ */
4278
+ function standardizeConfig(r) {
4279
+ const children = r.children && r.children.map(standardizeConfig);
4280
+ const c = children ? { ...r, children } : { ...r };
4281
+ if (!c.component &&
4282
+ !c.loadComponent &&
4283
+ (children || c.loadChildren) &&
4284
+ c.outlet &&
4285
+ c.outlet !== PRIMARY_OUTLET) {
4286
+ c.component = ɵEmptyOutletComponent;
4287
+ }
4288
+ return c;
4289
+ }
4290
+
4288
4291
  /**
4289
4292
  * The DI token for a router configuration.
4290
4293
  *
@@ -4346,10 +4349,10 @@ class RouterConfigLoader {
4346
4349
  this.childrenLoaders.set(route, loader);
4347
4350
  return loader;
4348
4351
  }
4349
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4350
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterConfigLoader, providedIn: 'root' }); }
4352
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4353
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterConfigLoader, providedIn: 'root' }); }
4351
4354
  }
4352
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterConfigLoader, decorators: [{
4355
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterConfigLoader, decorators: [{
4353
4356
  type: Injectable,
4354
4357
  args: [{ providedIn: 'root' }]
4355
4358
  }] });
@@ -4416,10 +4419,10 @@ function maybeUnwrapDefaultExport(input) {
4416
4419
  * @publicApi
4417
4420
  */
4418
4421
  class UrlHandlingStrategy {
4419
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: UrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4420
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: UrlHandlingStrategy, providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) }); }
4422
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: UrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4423
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: UrlHandlingStrategy, providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) }); }
4421
4424
  }
4422
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: UrlHandlingStrategy, decorators: [{
4425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: UrlHandlingStrategy, decorators: [{
4423
4426
  type: Injectable,
4424
4427
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) }]
4425
4428
  }] });
@@ -4436,10 +4439,10 @@ class DefaultUrlHandlingStrategy {
4436
4439
  merge(newUrlPart, wholeUrl) {
4437
4440
  return newUrlPart;
4438
4441
  }
4439
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: DefaultUrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4440
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: DefaultUrlHandlingStrategy, providedIn: 'root' }); }
4442
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: DefaultUrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4443
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: DefaultUrlHandlingStrategy, providedIn: 'root' }); }
4441
4444
  }
4442
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: DefaultUrlHandlingStrategy, decorators: [{
4445
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: DefaultUrlHandlingStrategy, decorators: [{
4443
4446
  type: Injectable,
4444
4447
  args: [{ providedIn: 'root' }]
4445
4448
  }] });
@@ -4894,10 +4897,10 @@ class NavigationTransitions {
4894
4897
  return (currentBrowserUrl.toString() !== targetBrowserUrl?.toString() &&
4895
4898
  !this.currentNavigation?.extras.skipLocationChange);
4896
4899
  }
4897
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: NavigationTransitions, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4898
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: NavigationTransitions, providedIn: 'root' }); }
4900
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NavigationTransitions, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4901
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NavigationTransitions, providedIn: 'root' }); }
4899
4902
  }
4900
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: NavigationTransitions, decorators: [{
4903
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NavigationTransitions, decorators: [{
4901
4904
  type: Injectable,
4902
4905
  args: [{ providedIn: 'root' }]
4903
4906
  }], ctorParameters: () => [] });
@@ -4913,10 +4916,10 @@ function isBrowserTriggeredNavigation(source) {
4913
4916
  * @publicApi
4914
4917
  */
4915
4918
  class RouteReuseStrategy {
4916
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouteReuseStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4917
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouteReuseStrategy, providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) }); }
4919
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouteReuseStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4920
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouteReuseStrategy, providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) }); }
4918
4921
  }
4919
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouteReuseStrategy, decorators: [{
4922
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouteReuseStrategy, decorators: [{
4920
4923
  type: Injectable,
4921
4924
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) }]
4922
4925
  }] });
@@ -4967,19 +4970,19 @@ class BaseRouteReuseStrategy {
4967
4970
  }
4968
4971
  }
4969
4972
  class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
4970
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: DefaultRouteReuseStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
4971
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: DefaultRouteReuseStrategy, providedIn: 'root' }); }
4973
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: DefaultRouteReuseStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
4974
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: DefaultRouteReuseStrategy, providedIn: 'root' }); }
4972
4975
  }
4973
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: DefaultRouteReuseStrategy, decorators: [{
4976
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: DefaultRouteReuseStrategy, decorators: [{
4974
4977
  type: Injectable,
4975
4978
  args: [{ providedIn: 'root' }]
4976
4979
  }] });
4977
4980
 
4978
4981
  class StateManager {
4979
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: StateManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4980
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: StateManager, providedIn: 'root', useFactory: () => inject(HistoryStateManager) }); }
4982
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: StateManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4983
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: StateManager, providedIn: 'root', useFactory: () => inject(HistoryStateManager) }); }
4981
4984
  }
4982
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: StateManager, decorators: [{
4985
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: StateManager, decorators: [{
4983
4986
  type: Injectable,
4984
4987
  args: [{ providedIn: 'root', useFactory: () => inject(HistoryStateManager) }]
4985
4988
  }] });
@@ -5152,10 +5155,10 @@ class HistoryStateManager extends StateManager {
5152
5155
  }
5153
5156
  return { navigationId };
5154
5157
  }
5155
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: HistoryStateManager, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
5156
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: HistoryStateManager, providedIn: 'root' }); }
5158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: HistoryStateManager, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
5159
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: HistoryStateManager, providedIn: 'root' }); }
5157
5160
  }
5158
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: HistoryStateManager, decorators: [{
5161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: HistoryStateManager, decorators: [{
5159
5162
  type: Injectable,
5160
5163
  args: [{ providedIn: 'root' }]
5161
5164
  }] });
@@ -5728,10 +5731,10 @@ class Router {
5728
5731
  return Promise.reject(e);
5729
5732
  });
5730
5733
  }
5731
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: Router, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5732
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: Router, providedIn: 'root' }); }
5734
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: Router, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5735
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: Router, providedIn: 'root' }); }
5733
5736
  }
5734
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: Router, decorators: [{
5737
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: Router, decorators: [{
5735
5738
  type: Injectable,
5736
5739
  args: [{ providedIn: 'root' }]
5737
5740
  }], ctorParameters: () => [] });
@@ -6031,10 +6034,10 @@ class RouterLink {
6031
6034
  preserveFragment: this.preserveFragment,
6032
6035
  });
6033
6036
  }
6034
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.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 }); }
6035
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.1.0-rc.0", type: RouterLink, isStandalone: true, selector: "[routerLink]", inputs: { target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", state: "state", info: "info", 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 }); }
6037
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", 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 }); }
6038
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.1.1", type: RouterLink, isStandalone: true, selector: "[routerLink]", inputs: { target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", state: "state", info: "info", 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 }); }
6036
6039
  }
6037
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterLink, decorators: [{
6040
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterLink, decorators: [{
6038
6041
  type: Directive,
6039
6042
  args: [{
6040
6043
  selector: '[routerLink]',
@@ -6272,10 +6275,10 @@ class RouterLinkActive {
6272
6275
  const isActiveCheckFn = this.isLinkActive(this.router);
6273
6276
  return (this.link && isActiveCheckFn(this.link)) || this.links.some(isActiveCheckFn);
6274
6277
  }
6275
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.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 }); }
6276
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.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 }); }
6278
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterLinkActive, deps: [{ token: Router }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: RouterLink, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
6279
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", 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 }); }
6277
6280
  }
6278
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterLinkActive, decorators: [{
6281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterLinkActive, decorators: [{
6279
6282
  type: Directive,
6280
6283
  args: [{
6281
6284
  selector: '[routerLinkActive]',
@@ -6327,10 +6330,10 @@ class PreloadAllModules {
6327
6330
  preload(route, fn) {
6328
6331
  return fn().pipe(catchError(() => of(null)));
6329
6332
  }
6330
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6331
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: PreloadAllModules, providedIn: 'root' }); }
6333
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6334
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: PreloadAllModules, providedIn: 'root' }); }
6332
6335
  }
6333
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: PreloadAllModules, decorators: [{
6336
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: PreloadAllModules, decorators: [{
6334
6337
  type: Injectable,
6335
6338
  args: [{ providedIn: 'root' }]
6336
6339
  }] });
@@ -6347,10 +6350,10 @@ class NoPreloading {
6347
6350
  preload(route, fn) {
6348
6351
  return of(null);
6349
6352
  }
6350
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6351
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: NoPreloading, providedIn: 'root' }); }
6353
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6354
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NoPreloading, providedIn: 'root' }); }
6352
6355
  }
6353
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: NoPreloading, decorators: [{
6356
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NoPreloading, decorators: [{
6354
6357
  type: Injectable,
6355
6358
  args: [{ providedIn: 'root' }]
6356
6359
  }] });
@@ -6441,10 +6444,10 @@ class RouterPreloader {
6441
6444
  }
6442
6445
  });
6443
6446
  }
6444
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterPreloader, deps: [{ token: Router }, { token: i0.Compiler }, { token: i0.EnvironmentInjector }, { token: PreloadingStrategy }, { token: RouterConfigLoader }], target: i0.ɵɵFactoryTarget.Injectable }); }
6445
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterPreloader, providedIn: 'root' }); }
6447
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterPreloader, deps: [{ token: Router }, { token: i0.Compiler }, { token: i0.EnvironmentInjector }, { token: PreloadingStrategy }, { token: RouterConfigLoader }], target: i0.ɵɵFactoryTarget.Injectable }); }
6448
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterPreloader, providedIn: 'root' }); }
6446
6449
  }
6447
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterPreloader, decorators: [{
6450
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterPreloader, decorators: [{
6448
6451
  type: Injectable,
6449
6452
  args: [{ providedIn: 'root' }]
6450
6453
  }], ctorParameters: () => [{ type: Router }, { type: i0.Compiler }, { type: i0.EnvironmentInjector }, { type: PreloadingStrategy }, { type: RouterConfigLoader }] });
@@ -6545,10 +6548,10 @@ class RouterScroller {
6545
6548
  this.routerEventsSubscription?.unsubscribe();
6546
6549
  this.scrollEventsSubscription?.unsubscribe();
6547
6550
  }
6548
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
6549
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterScroller }); }
6551
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
6552
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterScroller }); }
6550
6553
  }
6551
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterScroller, decorators: [{
6554
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterScroller, decorators: [{
6552
6555
  type: Injectable
6553
6556
  }], ctorParameters: () => [{ type: UrlSerializer }, { type: NavigationTransitions }, { type: i3.ViewportScroller }, { type: i0.NgZone }, { type: undefined }] });
6554
6557
 
@@ -7195,11 +7198,11 @@ class RouterModule {
7195
7198
  providers: [{ provide: ROUTES, multi: true, useValue: routes }],
7196
7199
  };
7197
7200
  }
7198
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterModule, deps: [{ token: ROUTER_FORROOT_GUARD, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
7199
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterModule, imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent], exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent] }); }
7200
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterModule }); }
7201
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterModule, deps: [{ token: ROUTER_FORROOT_GUARD, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
7202
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.1", ngImport: i0, type: RouterModule, imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent], exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent] }); }
7203
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterModule }); }
7201
7204
  }
7202
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: RouterModule, decorators: [{
7205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: RouterModule, decorators: [{
7203
7206
  type: NgModule,
7204
7207
  args: [{
7205
7208
  imports: ROUTER_DIRECTIVES,
@@ -7344,7 +7347,7 @@ function mapToResolve(provider) {
7344
7347
  /**
7345
7348
  * @publicApi
7346
7349
  */
7347
- const VERSION = new Version('18.1.0-rc.0');
7350
+ const VERSION = new Version('18.1.1');
7348
7351
 
7349
7352
  /**
7350
7353
  * @module