@angular/core 19.0.0-next.6 → 19.0.0-next.8

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 (37) hide show
  1. package/LICENSE +21 -0
  2. package/fesm2022/core.mjs +648 -273
  3. package/fesm2022/core.mjs.map +1 -1
  4. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  5. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  6. package/fesm2022/primitives/signals.mjs +1 -1
  7. package/fesm2022/primitives/signals.mjs.map +1 -1
  8. package/fesm2022/rxjs-interop.mjs +25 -4
  9. package/fesm2022/rxjs-interop.mjs.map +1 -1
  10. package/fesm2022/testing.mjs +12 -11
  11. package/fesm2022/testing.mjs.map +1 -1
  12. package/index.d.ts +232 -148
  13. package/package.json +1 -1
  14. package/primitives/event-dispatch/index.d.ts +1 -1
  15. package/primitives/signals/index.d.ts +1 -1
  16. package/rxjs-interop/index.d.ts +3 -1
  17. package/schematics/bundles/{checker-dcf9a14e.js → checker-e68dd7ce.js} +34 -13
  18. package/schematics/bundles/{compiler_host-6026cdf8.js → compiler_host-9a4d0c2b.js} +2 -2
  19. package/schematics/bundles/control-flow-migration.js +3 -3
  20. package/schematics/bundles/explicit-standalone-flag.js +5 -5
  21. package/schematics/bundles/group_replacements-472b2387.js +31445 -0
  22. package/schematics/bundles/{imports-44987700.js → imports-4ac08251.js} +1 -1
  23. package/schematics/bundles/inject-migration.js +28 -32
  24. package/schematics/bundles/leading_space-d190b83b.js +30 -0
  25. package/schematics/bundles/{nodes-b12e919a.js → nodes-0e7d45ca.js} +2 -2
  26. package/schematics/bundles/pending-tasks.js +103 -0
  27. package/schematics/bundles/{program-4dc8c0fa.js → program-105283c5.js} +1865 -1489
  28. package/schematics/bundles/{project_tsconfig_paths-6c9cde78.js → project_tsconfig_paths-e9ccccbf.js} +1 -1
  29. package/schematics/bundles/route-lazy-loading.js +4 -4
  30. package/schematics/bundles/signal-input-migration.js +706 -31790
  31. package/schematics/bundles/signal-queries-migration.js +905 -0
  32. package/schematics/bundles/standalone-migration.js +12 -12
  33. package/schematics/collection.json +6 -0
  34. package/schematics/migrations.json +5 -0
  35. package/schematics/ng-generate/signal-input-migration/schema.json +5 -0
  36. package/schematics/ng-generate/signal-queries-migration/schema.json +19 -0
  37. package/testing/index.d.ts +3 -1
package/fesm2022/core.mjs CHANGED
@@ -1,13 +1,14 @@
1
1
  /**
2
- * @license Angular v19.0.0-next.6
2
+ * @license Angular v19.0.0-next.8
3
3
  * (c) 2010-2024 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
- import { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, getActiveConsumer as getActiveConsumer$1, setActiveConsumer as setActiveConsumer$1, consumerDestroy as consumerDestroy$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, createComputed as createComputed$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1, createWatch as createWatch$1 } from '@angular/core/primitives/signals';
7
+ import { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, getActiveConsumer as getActiveConsumer$1, setActiveConsumer as setActiveConsumer$1, consumerDestroy as consumerDestroy$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, createComputed as createComputed$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1, createWatch as createWatch$1, isInNotificationPhase as isInNotificationPhase$1 } from '@angular/core/primitives/signals';
8
+ export { SIGNAL as ɵSIGNAL } from '@angular/core/primitives/signals';
8
9
  import { BehaviorSubject, Subject, Subscription } from 'rxjs';
9
10
  import { map, first } from 'rxjs/operators';
10
- import { Attribute as Attribute$1, isEarlyEventType, getActionCache, EventContract, EventContractContainer, EventDispatcher, registerDispatcher, getAppScopedQueuedEventInfos, clearAppScopedEarlyEventContract, isCaptureEventType } from '@angular/core/primitives/event-dispatch';
11
+ import { Attribute as Attribute$1, EventContract, EventContractContainer, getAppScopedQueuedEventInfos, clearAppScopedEarlyEventContract, EventDispatcher, registerDispatcher, isEarlyEventType, isCaptureEventType } from '@angular/core/primitives/event-dispatch';
11
12
 
12
13
  /**
13
14
  * Base URL for the error details page.
@@ -2409,6 +2410,7 @@ function ɵɵdefineComponent(componentDefinition) {
2409
2410
  pipeDefs: null, // assigned in noSideEffects
2410
2411
  dependencies: (baseDef.standalone && componentDefinition.dependencies) || null,
2411
2412
  getStandaloneInjector: null,
2413
+ getExternalStyles: null,
2412
2414
  signals: componentDefinition.signals ?? false,
2413
2415
  data: componentDefinition.data || {},
2414
2416
  encapsulation: componentDefinition.encapsulation || ViewEncapsulation$1.Emulated,
@@ -3805,7 +3807,8 @@ const ID = 19;
3805
3807
  const EMBEDDED_VIEW_INJECTOR = 20;
3806
3808
  const ON_DESTROY_HOOKS = 21;
3807
3809
  const EFFECTS_TO_SCHEDULE = 22;
3808
- const REACTIVE_TEMPLATE_CONSUMER = 23;
3810
+ const EFFECTS = 23;
3811
+ const REACTIVE_TEMPLATE_CONSUMER = 24;
3809
3812
  /**
3810
3813
  * Size of LView's header. Necessary to adjust for it when setting slots.
3811
3814
  *
@@ -4599,7 +4602,9 @@ function isRefreshingViews() {
4599
4602
  return _isRefreshingViews;
4600
4603
  }
4601
4604
  function setIsRefreshingViews(mode) {
4605
+ const prev = _isRefreshingViews;
4602
4606
  _isRefreshingViews = mode;
4607
+ return prev;
4603
4608
  }
4604
4609
  // top level variables should not be exported for performance reasons (PERF_NOTES.md)
4605
4610
  function getBindingRoot() {
@@ -6520,7 +6525,7 @@ class Injector {
6520
6525
  * Copyright Google LLC All Rights Reserved.
6521
6526
  *
6522
6527
  * Use of this source code is governed by an MIT-style license that can be
6523
- * found in the LICENSE file at https://angular.io/license
6528
+ * found in the LICENSE file at https://angular.dev/license
6524
6529
  */
6525
6530
  /**
6526
6531
  * Creates a token that can be used to inject static attributes of the host node.
@@ -6697,7 +6702,7 @@ const SCHEDULE_IN_ROOT_ZONE = new InjectionToken(typeof ngDevMode === 'undefined
6697
6702
  /**
6698
6703
  * Internal implementation of the pending tasks service.
6699
6704
  */
6700
- class PendingTasks {
6705
+ class PendingTasksInternal {
6701
6706
  constructor() {
6702
6707
  this.taskId = 0;
6703
6708
  this.pendingTasks = new Set();
@@ -6728,13 +6733,13 @@ class PendingTasks {
6728
6733
  }
6729
6734
  /** @nocollapse */
6730
6735
  static { this.ɵprov = ɵɵdefineInjectable({
6731
- token: PendingTasks,
6736
+ token: PendingTasksInternal,
6732
6737
  providedIn: 'root',
6733
- factory: () => new PendingTasks(),
6738
+ factory: () => new PendingTasksInternal(),
6734
6739
  }); }
6735
6740
  }
6736
6741
  /**
6737
- * Experimental service that keeps track of pending tasks contributing to the stableness of Angular
6742
+ * Service that keeps track of pending tasks contributing to the stableness of Angular
6738
6743
  * application. While several existing Angular services (ex.: `HttpClient`) will internally manage
6739
6744
  * tasks influencing stability, this API gives control over stability to library and application
6740
6745
  * developers for specific cases not covered by Angular internals.
@@ -6746,22 +6751,18 @@ class PendingTasks {
6746
6751
  *
6747
6752
  * @usageNotes
6748
6753
  * ```typescript
6749
- * const pendingTasks = inject(ExperimentalPendingTasks);
6754
+ * const pendingTasks = inject(PendingTasks);
6750
6755
  * const taskCleanup = pendingTasks.add();
6751
6756
  * // do work that should block application's stability and then:
6752
6757
  * taskCleanup();
6753
6758
  * ```
6754
6759
  *
6755
- * This API is experimental. Neither the shape, nor the underlying behavior is stable and can change
6756
- * in patch versions. We will iterate on the exact API based on the feedback and our understanding
6757
- * of the problem and solution space.
6758
- *
6759
6760
  * @publicApi
6760
- * @experimental
6761
+ * @developerPreview
6761
6762
  */
6762
- class ExperimentalPendingTasks {
6763
+ class PendingTasks {
6763
6764
  constructor() {
6764
- this.internalPendingTasks = inject(PendingTasks);
6765
+ this.internalPendingTasks = inject(PendingTasksInternal);
6765
6766
  this.scheduler = inject(ChangeDetectionScheduler);
6766
6767
  }
6767
6768
  /**
@@ -6807,9 +6808,9 @@ class ExperimentalPendingTasks {
6807
6808
  }
6808
6809
  /** @nocollapse */
6809
6810
  static { this.ɵprov = ɵɵdefineInjectable({
6810
- token: ExperimentalPendingTasks,
6811
+ token: PendingTasks,
6811
6812
  providedIn: 'root',
6812
- factory: () => new ExperimentalPendingTasks(),
6813
+ factory: () => new PendingTasks(),
6813
6814
  }); }
6814
6815
  }
6815
6816
 
@@ -6823,7 +6824,7 @@ class EventEmitter_ extends Subject {
6823
6824
  // For backwards compatibility reasons, this cannot be required.
6824
6825
  if (isInInjectionContext()) {
6825
6826
  this.destroyRef = inject(DestroyRef, { optional: true }) ?? undefined;
6826
- this.pendingTasks = inject(PendingTasks, { optional: true }) ?? undefined;
6827
+ this.pendingTasks = inject(PendingTasksInternal, { optional: true }) ?? undefined;
6827
6828
  }
6828
6829
  }
6829
6830
  emit(value) {
@@ -7746,7 +7747,7 @@ class QueryList {
7746
7747
  * Returns `Observable` of `QueryList` notifying the subscriber of changes.
7747
7748
  */
7748
7749
  get changes() {
7749
- return (this._changes ??= new EventEmitter());
7750
+ return (this._changes ??= new Subject());
7750
7751
  }
7751
7752
  /**
7752
7753
  * @param emitDistinctChangesOnly Whether `QueryList.changes` should fire only when actual change
@@ -7851,7 +7852,7 @@ class QueryList {
7851
7852
  */
7852
7853
  notifyOnChanges() {
7853
7854
  if (this._changes !== undefined && (this._changesDetected || !this._emitDistinctChangesOnly))
7854
- this._changes.emit(this);
7855
+ this._changes.next(this);
7855
7856
  }
7856
7857
  /** @internal */
7857
7858
  onDirty(cb) {
@@ -7963,6 +7964,10 @@ function unregisterLView(lView) {
7963
7964
  ngDevMode && assertNumber(lView[ID], 'Cannot stop tracking an LView that does not have an ID');
7964
7965
  TRACKED_LVIEWS.delete(lView[ID]);
7965
7966
  }
7967
+ /** Gets the currently-tracked views. */
7968
+ function getTrackedLViews() {
7969
+ return TRACKED_LVIEWS;
7970
+ }
7966
7971
 
7967
7972
  /**
7968
7973
  * The internal view context which is specific to a given DOM element, directive or
@@ -9470,10 +9475,6 @@ const IS_I18N_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === 'undef
9470
9475
  */
9471
9476
  const IS_EVENT_REPLAY_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_EVENT_REPLAY_ENABLED' : '');
9472
9477
  const EVENT_REPLAY_ENABLED_DEFAULT = false;
9473
- /**
9474
- * Internal token that indicates whether global event delegation support is enabled.
9475
- */
9476
- const IS_GLOBAL_EVENT_DELEGATION_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_GLOBAL_EVENT_DELEGATION_ENABLED' : '');
9477
9478
 
9478
9479
  /**
9479
9480
  * @fileoverview
@@ -11368,6 +11369,14 @@ function processCleanups(tView, lView) {
11368
11369
  destroyHooksFn();
11369
11370
  }
11370
11371
  }
11372
+ // Destroy effects registered to the view. Many of these will have been processed above.
11373
+ const effects = lView[EFFECTS];
11374
+ if (effects !== null) {
11375
+ lView[EFFECTS] = null;
11376
+ for (const effect of effects) {
11377
+ effect.destroy();
11378
+ }
11379
+ }
11371
11380
  }
11372
11381
  /** Calls onDestroy hooks for this view */
11373
11382
  function executeOnDestroys(tView, lView) {
@@ -13043,20 +13052,27 @@ function configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {
13043
13052
  lView[directiveIndex] = nodeInjectorFactory;
13044
13053
  registerHostBindingOpCodes(tView, tNode, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);
13045
13054
  }
13055
+ /**
13056
+ * Gets the initial set of LView flags based on the component definition that the LView represents.
13057
+ * @param def Component definition from which to determine the flags.
13058
+ */
13059
+ function getInitialLViewFlagsFromDef(def) {
13060
+ let flags = 16 /* LViewFlags.CheckAlways */;
13061
+ if (def.signals) {
13062
+ flags = 4096 /* LViewFlags.SignalView */;
13063
+ }
13064
+ else if (def.onPush) {
13065
+ flags = 64 /* LViewFlags.Dirty */;
13066
+ }
13067
+ return flags;
13068
+ }
13046
13069
  function addComponentLogic(lView, hostTNode, def) {
13047
13070
  const native = getNativeByTNode(hostTNode, lView);
13048
13071
  const tView = getOrCreateComponentTView(def);
13049
13072
  // Only component views should be added to the view tree directly. Embedded views are
13050
13073
  // accessed through their containers because they may be removed / re-added later.
13051
13074
  const rendererFactory = lView[ENVIRONMENT].rendererFactory;
13052
- let lViewFlags = 16 /* LViewFlags.CheckAlways */;
13053
- if (def.signals) {
13054
- lViewFlags = 4096 /* LViewFlags.SignalView */;
13055
- }
13056
- else if (def.onPush) {
13057
- lViewFlags = 64 /* LViewFlags.Dirty */;
13058
- }
13059
- const componentView = addToViewTree(lView, createLView(lView, tView, null, lViewFlags, native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));
13075
+ const componentView = addToEndOfViewTree(lView, createLView(lView, tView, null, getInitialLViewFlagsFromDef(def), native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));
13060
13076
  // Component view will always be created before any injected LContainers,
13061
13077
  // so this is a regular element, wrap it with the component view
13062
13078
  lView[hostTNode.index] = componentView;
@@ -13225,7 +13241,7 @@ function refreshContentQueries(tView, lView) {
13225
13241
  * @param lViewOrLContainer The LView or LContainer to add to the view tree
13226
13242
  * @returns The state passed in
13227
13243
  */
13228
- function addToViewTree(lView, lViewOrLContainer) {
13244
+ function addToEndOfViewTree(lView, lViewOrLContainer) {
13229
13245
  // TODO(benlesh/misko): This implementation is incorrect, because it always adds the LContainer
13230
13246
  // to the end of the queue, which means if the developer retrieves the LContainers from RNodes out
13231
13247
  // of order, the change detection will run out of order, as the act of retrieving the the
@@ -13705,6 +13721,37 @@ function viewShouldHaveReactiveConsumer(tView) {
13705
13721
  return tView.type !== 2 /* TViewType.Embedded */;
13706
13722
  }
13707
13723
 
13724
+ function runEffectsInView(view) {
13725
+ if (view[EFFECTS] === null) {
13726
+ return;
13727
+ }
13728
+ // Since effects can make other effects dirty, we flush them in a loop until there are no more to
13729
+ // flush.
13730
+ let tryFlushEffects = true;
13731
+ while (tryFlushEffects) {
13732
+ let foundDirtyEffect = false;
13733
+ for (const effect of view[EFFECTS]) {
13734
+ if (!effect.dirty) {
13735
+ continue;
13736
+ }
13737
+ foundDirtyEffect = true;
13738
+ // `runEffectsInView` is called during change detection, and therefore runs
13739
+ // in the Angular zone if it's available.
13740
+ if (effect.zone === null || Zone.current === effect.zone) {
13741
+ effect.run();
13742
+ }
13743
+ else {
13744
+ effect.zone.run(() => effect.run());
13745
+ }
13746
+ }
13747
+ // Check if we need to continue flushing. If we didn't find any dirty effects, then there's
13748
+ // no need to loop back. Otherwise, check the view to see if it was marked for traversal
13749
+ // again. If so, there's a chance that one of the effects we ran caused another effect to
13750
+ // become dirty.
13751
+ tryFlushEffects = foundDirtyEffect && !!(view[FLAGS] & 8192 /* LViewFlags.HasChildViewsToRefresh */);
13752
+ }
13753
+ }
13754
+
13708
13755
  /**
13709
13756
  * The maximum number of times the change detection traversal will rerun before throwing an error.
13710
13757
  */
@@ -13731,9 +13778,6 @@ function detectChangesInternal(lView, notifyErrorHandler = true, mode = 0 /* Cha
13731
13778
  finally {
13732
13779
  if (!checkNoChangesMode) {
13733
13780
  rendererFactory.end?.();
13734
- // One final flush of the effects queue to catch any effects created in `ngAfterViewInit` or
13735
- // other post-order hooks.
13736
- environment.inlineEffectRunner?.flush();
13737
13781
  }
13738
13782
  }
13739
13783
  }
@@ -13797,7 +13841,6 @@ function refreshView(tView, lView, templateFn, context) {
13797
13841
  // since they were assigned. We do not want to execute lifecycle hooks in that mode.
13798
13842
  const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();
13799
13843
  const isInExhaustiveCheckNoChangesPass = ngDevMode && isExhaustiveCheckNoChanges();
13800
- !isInCheckNoChangesPass && lView[ENVIRONMENT].inlineEffectRunner?.flush();
13801
13844
  // Start component reactive context
13802
13845
  // - We might already be in a reactive context if this is an embedded view of the host.
13803
13846
  // - We might be descending into a view that needs a consumer.
@@ -13858,6 +13901,7 @@ function refreshView(tView, lView, templateFn, context) {
13858
13901
  // `LView` but its declaration appears after the insertion component.
13859
13902
  markTransplantedViewsForRefresh(lView);
13860
13903
  }
13904
+ runEffectsInView(lView);
13861
13905
  detectChangesInEmbeddedViews(lView, 0 /* ChangeDetectionMode.Global */);
13862
13906
  // Content query results must be refreshed before content hooks are called.
13863
13907
  if (tView.contentQueries !== null) {
@@ -14049,6 +14093,7 @@ function detectChangesInView(lView, mode) {
14049
14093
  refreshView(tView, lView, tView.template, lView[CONTEXT]);
14050
14094
  }
14051
14095
  else if (flags & 8192 /* LViewFlags.HasChildViewsToRefresh */) {
14096
+ runEffectsInView(lView);
14052
14097
  detectChangesInEmbeddedViews(lView, 1 /* ChangeDetectionMode.Targeted */);
14053
14098
  const components = tView.components;
14054
14099
  if (components !== null) {
@@ -16754,8 +16799,6 @@ class ComponentFactory extends ComponentFactory$1 {
16754
16799
  const environment = {
16755
16800
  rendererFactory,
16756
16801
  sanitizer,
16757
- // We don't use inline effects (yet).
16758
- inlineEffectRunner: null,
16759
16802
  changeDetectionScheduler,
16760
16803
  };
16761
16804
  const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
@@ -16927,18 +16970,11 @@ function createRootComponentView(tNode, hostRNode, rootComponentDef, rootDirecti
16927
16970
  hydrationInfo = retrieveHydrationInfo(hostRNode, rootView[INJECTOR]);
16928
16971
  }
16929
16972
  const viewRenderer = environment.rendererFactory.createRenderer(hostRNode, rootComponentDef);
16930
- let lViewFlags = 16 /* LViewFlags.CheckAlways */;
16931
- if (rootComponentDef.signals) {
16932
- lViewFlags = 4096 /* LViewFlags.SignalView */;
16933
- }
16934
- else if (rootComponentDef.onPush) {
16935
- lViewFlags = 64 /* LViewFlags.Dirty */;
16936
- }
16937
- const componentView = createLView(rootView, getOrCreateComponentTView(rootComponentDef), null, lViewFlags, rootView[tNode.index], tNode, environment, viewRenderer, null, null, hydrationInfo);
16973
+ const componentView = createLView(rootView, getOrCreateComponentTView(rootComponentDef), null, getInitialLViewFlagsFromDef(rootComponentDef), rootView[tNode.index], tNode, environment, viewRenderer, null, null, hydrationInfo);
16938
16974
  if (tView.firstCreatePass) {
16939
16975
  markAsComponentHost(tView, tNode, rootDirectives.length - 1);
16940
16976
  }
16941
- addToViewTree(rootView, componentView);
16977
+ addToEndOfViewTree(rootView, componentView);
16942
16978
  // Store component view at node index, with node as the HOST
16943
16979
  return (rootView[tNode.index] = componentView);
16944
16980
  }
@@ -16993,7 +17029,7 @@ function createRootComponent(componentView, rootComponentDef, rootDirectives, ho
16993
17029
  function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
16994
17030
  if (rootSelectorOrNode) {
16995
17031
  // The placeholder will be replaced with the actual version at build time.
16996
- setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.0.0-next.6']);
17032
+ setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.0.0-next.8']);
16997
17033
  }
16998
17034
  else {
16999
17035
  // If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
@@ -17342,7 +17378,7 @@ function createContainerRef(hostTNode, hostLView) {
17342
17378
  // `_locateOrCreateAnchorNode`).
17343
17379
  lContainer = createLContainer(slotValue, hostLView, null, hostTNode);
17344
17380
  hostLView[hostTNode.index] = lContainer;
17345
- addToViewTree(hostLView, lContainer);
17381
+ addToEndOfViewTree(hostLView, lContainer);
17346
17382
  }
17347
17383
  _locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue);
17348
17384
  return new R3ViewContainerRef(lContainer, hostTNode, hostLView);
@@ -18068,7 +18104,7 @@ function viewChildRequiredFn(locator, opts) {
18068
18104
  * }
18069
18105
  * ```
18070
18106
  *
18071
- * @developerPreview
18107
+ * @publicAPI
18072
18108
  * @initializerApiFunction
18073
18109
  */
18074
18110
  const viewChild = (() => {
@@ -18096,7 +18132,7 @@ const viewChild = (() => {
18096
18132
  * ```
18097
18133
  *
18098
18134
  * @initializerApiFunction
18099
- * @developerPreview
18135
+ * @publicAPI
18100
18136
  */
18101
18137
  function viewChildren(locator, opts) {
18102
18138
  ngDevMode && assertInInjectionContext(viewChildren);
@@ -18129,7 +18165,7 @@ function contentChildRequiredFn(locator, opts) {
18129
18165
  * ```
18130
18166
  *
18131
18167
  * @initializerApiFunction
18132
- * @developerPreview
18168
+ * @publicAPI
18133
18169
  */
18134
18170
  const contentChild = (() => {
18135
18171
  // Note: This may be considered a side-effect, but nothing will depend on
@@ -18156,7 +18192,7 @@ const contentChild = (() => {
18156
18192
  * ```
18157
18193
  *
18158
18194
  * @initializerApiFunction
18159
- * @developerPreview
18195
+ * @publicAPI
18160
18196
  */
18161
18197
  function contentChildren(locator, opts) {
18162
18198
  return createMultiResultQuerySignalFn();
@@ -19338,7 +19374,7 @@ function declareTemplate(declarationLView, declarationTView, index, templateFn,
19338
19374
  attachPatchData(comment, declarationLView);
19339
19375
  const lContainer = createLContainer(comment, declarationLView, comment, tNode);
19340
19376
  declarationLView[adjustedIndex] = lContainer;
19341
- addToViewTree(declarationLView, lContainer);
19377
+ addToEndOfViewTree(declarationLView, lContainer);
19342
19378
  // If hydration is enabled, looks up dehydrated views in the DOM
19343
19379
  // using hydration annotation info and stores those views on LContainer.
19344
19380
  // In client-only mode, this function is a noop.
@@ -19513,7 +19549,7 @@ var DeferBlockBehavior;
19513
19549
  * Copyright Google LLC All Rights Reserved.
19514
19550
  *
19515
19551
  * Use of this source code is governed by an MIT-style license that can be
19516
- * found in the LICENSE file at https://angular.io/license
19552
+ * found in the LICENSE file at https://angular.dev/license
19517
19553
  */
19518
19554
  /**
19519
19555
  * Registers a cleanup function associated with a prefetching trigger
@@ -19743,7 +19779,7 @@ class AfterRenderSequence {
19743
19779
  * one.
19744
19780
  */
19745
19781
  this.pipelinedValue = undefined;
19746
- this.unregisterOnDestroy = destroyRef.onDestroy(() => this.destroy());
19782
+ this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
19747
19783
  }
19748
19784
  afterRun() {
19749
19785
  this.erroredOrDestroyed = false;
@@ -19751,7 +19787,7 @@ class AfterRenderSequence {
19751
19787
  }
19752
19788
  destroy() {
19753
19789
  this.impl.unregister(this);
19754
- this.unregisterOnDestroy();
19790
+ this.unregisterOnDestroy?.();
19755
19791
  }
19756
19792
  }
19757
19793
 
@@ -19800,7 +19836,8 @@ function afterRenderImpl(callbackOrSpec, injector, options, once) {
19800
19836
  // tree-shaken if `afterRender` and `afterNextRender` aren't used.
19801
19837
  manager.impl ??= injector.get(AfterRenderImpl);
19802
19838
  const hooks = options?.phase ?? AfterRenderPhase.MixedReadWrite;
19803
- const sequence = new AfterRenderSequence(manager.impl, getHooks(callbackOrSpec, hooks), once, injector.get(DestroyRef));
19839
+ const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
19840
+ const sequence = new AfterRenderSequence(manager.impl, getHooks(callbackOrSpec, hooks), once, destroyRef);
19804
19841
  manager.impl.register(sequence);
19805
19842
  return sequence;
19806
19843
  }
@@ -19925,7 +19962,7 @@ function isTDeferBlockDetails(value) {
19925
19962
  * Copyright Google LLC All Rights Reserved.
19926
19963
  *
19927
19964
  * Use of this source code is governed by an MIT-style license that can be
19928
- * found in the LICENSE file at https://angular.io/license
19965
+ * found in the LICENSE file at https://angular.dev/license
19929
19966
  */
19930
19967
  /** Configuration object used to register passive and capturing events. */
19931
19968
  const eventListenerOptions = {
@@ -21066,7 +21103,7 @@ function triggerResourceLoading(tDetails, lView, tNode) {
21066
21103
  }
21067
21104
  }
21068
21105
  // Indicate that an application is not stable and has a pending task.
21069
- const pendingTasks = injector.get(PendingTasks);
21106
+ const pendingTasks = injector.get(PendingTasksInternal);
21070
21107
  const taskId = pendingTasks.add();
21071
21108
  // The `dependenciesFn` might be `null` when all dependencies within
21072
21109
  // a given defer block were eagerly referenced elsewhere in a file,
@@ -23655,7 +23692,7 @@ function ɵɵclassMapInterpolateV(values) {
23655
23692
  * Copyright Google LLC All Rights Reserved.
23656
23693
  *
23657
23694
  * Use of this source code is governed by an MIT-style license that can be
23658
- * found in the LICENSE file at https://angular.io/license
23695
+ * found in the LICENSE file at https://angular.dev/license
23659
23696
  */
23660
23697
  /**
23661
23698
  * Instruction that returns the component instance in which the current instruction is executing.
@@ -28525,7 +28562,7 @@ function ɵɵtextInterpolateV(values) {
28525
28562
  * Copyright Google LLC All Rights Reserved.
28526
28563
  *
28527
28564
  * Use of this source code is governed by an MIT-style license that can be
28528
- * found in the LICENSE file at https://angular.io/license
28565
+ * found in the LICENSE file at https://angular.dev/license
28529
28566
  */
28530
28567
  /**
28531
28568
  * Update a two-way bound property on a selected element.
@@ -28589,7 +28626,7 @@ function ɵɵtwoWayListener(eventName, listenerFn) {
28589
28626
  * Copyright Google LLC All Rights Reserved.
28590
28627
  *
28591
28628
  * Use of this source code is governed by an MIT-style license that can be
28592
- * found in the LICENSE file at https://angular.io/license
28629
+ * found in the LICENSE file at https://angular.dev/license
28593
28630
  */
28594
28631
  /** Object that indicates the value of a `@let` declaration that hasn't been initialized yet. */
28595
28632
  const UNINITIALIZED_LET = {};
@@ -29004,6 +29041,29 @@ function ɵɵStandaloneFeature(definition) {
29004
29041
  };
29005
29042
  }
29006
29043
 
29044
+ /**
29045
+ * A feature that adds support for external runtime styles for a component.
29046
+ * An external runtime style is a URL to a CSS stylesheet that contains the styles
29047
+ * for a given component. For browsers, this URL will be used in an appended `link` element
29048
+ * when the component is rendered. This feature is typically used for Hot Module Replacement
29049
+ * (HMR) of component stylesheets by leveraging preexisting global stylesheet HMR available
29050
+ * in most development servers.
29051
+ *
29052
+ * @codeGenApi
29053
+ */
29054
+ function ɵɵExternalStylesFeature(styleUrls) {
29055
+ return (definition) => {
29056
+ if (styleUrls.length < 1) {
29057
+ return;
29058
+ }
29059
+ definition.getExternalStyles = (encapsulationId) => {
29060
+ // Add encapsulation ID search parameter `component` to support external style encapsulation
29061
+ const urls = styleUrls.map((value) => value + '?ngcomp' + (encapsulationId ? '=' + encodeURIComponent(encapsulationId) : ''));
29062
+ return urls;
29063
+ };
29064
+ };
29065
+ }
29066
+
29007
29067
  /**
29008
29068
  * Generated next to NgModules to monkey-patch directive and pipe references onto a component's
29009
29069
  * definition, when generating a direct reference in the component file would otherwise create an
@@ -29735,6 +29795,155 @@ function ɵsetClassDebugInfo(type, debugInfo) {
29735
29795
  }
29736
29796
  }
29737
29797
 
29798
+ /*!
29799
+ * @license
29800
+ * Copyright Google LLC All Rights Reserved.
29801
+ *
29802
+ * Use of this source code is governed by an MIT-style license that can be
29803
+ * found in the LICENSE file at https://angular.dev/license
29804
+ */
29805
+ /**
29806
+ * Replaces the metadata of a component type and re-renders all live instances of the component.
29807
+ * @param type Class whose metadata will be replaced.
29808
+ * @param applyMetadata Callback that will apply a new set of metadata on the `type` when invoked.
29809
+ * @codeGenApi
29810
+ */
29811
+ function ɵɵreplaceMetadata(type, applyMetadata) {
29812
+ ngDevMode && assertComponentDef(type);
29813
+ const oldDef = getComponentDef(type);
29814
+ // The reason `applyMetadata` is a callback that is invoked (almost) immediately is because
29815
+ // the compiler usually produces more code than just the component definition, e.g. there
29816
+ // can be functions for embedded views, the variables for the constant pool and `setClassMetadata`
29817
+ // calls. The callback allows us to keep them isolate from the rest of the app and to invoke
29818
+ // them at the right time.
29819
+ applyMetadata();
29820
+ // If a `tView` hasn't been created yet, it means that this component hasn't been instantianted
29821
+ // before. In this case there's nothing left for us to do aside from patching it in.
29822
+ if (oldDef.tView) {
29823
+ const trackedViews = getTrackedLViews().values();
29824
+ for (const root of trackedViews) {
29825
+ // Note: we have the additional check, because `IsRoot` can also indicate
29826
+ // a component created through something like `createComponent`.
29827
+ if (root[FLAGS] & 512 /* LViewFlags.IsRoot */ && root[PARENT] === null) {
29828
+ recreateMatchingLViews(oldDef, root);
29829
+ }
29830
+ }
29831
+ }
29832
+ }
29833
+ /**
29834
+ * Finds all LViews matching a specific component definition and recreates them.
29835
+ * @param def Component definition to search for.
29836
+ * @param rootLView View from which to start the search.
29837
+ */
29838
+ function recreateMatchingLViews(def, rootLView) {
29839
+ ngDevMode &&
29840
+ assertDefined(def.tView, 'Expected a component definition that has been instantiated at least once');
29841
+ const tView = rootLView[TVIEW];
29842
+ // Use `tView` to match the LView since `instanceof` can
29843
+ // produce false positives when using inheritance.
29844
+ if (tView === def.tView) {
29845
+ ngDevMode && assertComponentDef(def.type);
29846
+ recreateLView(getComponentDef(def.type), rootLView);
29847
+ return;
29848
+ }
29849
+ for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
29850
+ const current = rootLView[i];
29851
+ if (isLContainer(current)) {
29852
+ for (let i = CONTAINER_HEADER_OFFSET; i < current.length; i++) {
29853
+ recreateMatchingLViews(def, current[i]);
29854
+ }
29855
+ }
29856
+ else if (isLView(current)) {
29857
+ recreateMatchingLViews(def, current);
29858
+ }
29859
+ }
29860
+ }
29861
+ /**
29862
+ * Recreates an LView in-place from a new component definition.
29863
+ * @param def Definition from which to recreate the view.
29864
+ * @param lView View to be recreated.
29865
+ */
29866
+ function recreateLView(def, lView) {
29867
+ const instance = lView[CONTEXT];
29868
+ const host = lView[HOST];
29869
+ // In theory the parent can also be an LContainer, but it appears like that's
29870
+ // only the case for embedded views which we won't be replacing here.
29871
+ const parentLView = lView[PARENT];
29872
+ ngDevMode && assertLView(parentLView);
29873
+ const tNode = lView[T_HOST];
29874
+ ngDevMode && assertTNodeType(tNode, 2 /* TNodeType.Element */);
29875
+ // Recreate the TView since the template might've changed.
29876
+ const newTView = getOrCreateComponentTView(def);
29877
+ // Create a new LView from the new TView, but reusing the existing TNode and DOM node.
29878
+ const newLView = createLView(parentLView, newTView, instance, getInitialLViewFlagsFromDef(def), host, tNode, null, lView[ENVIRONMENT].rendererFactory.createRenderer(host, def), null, null, null);
29879
+ // Detach the LView from its current place in the tree so we don't
29880
+ // start traversing any siblings and modifying their structure.
29881
+ replaceLViewInTree(parentLView, lView, newLView, tNode.index);
29882
+ // Destroy the detached LView.
29883
+ destroyLView(lView[TVIEW], lView);
29884
+ // Remove the nodes associated with the destroyed LView. This removes the
29885
+ // descendants, but not the host which we want to stay in place.
29886
+ removeViewFromDOM(lView[TVIEW], lView);
29887
+ // Reset the content projection state of the TNode before the first render.
29888
+ // Note that this has to happen after the LView has been destroyed or we
29889
+ // risk some projected nodes not being removed correctly.
29890
+ resetProjectionState(tNode);
29891
+ // Creation pass for the new view.
29892
+ renderView(newTView, newLView, instance);
29893
+ // Update pass for the new view.
29894
+ refreshView(newTView, newLView, newTView.template, instance);
29895
+ }
29896
+ /**
29897
+ * Replaces one LView in the tree with another one.
29898
+ * @param parentLView Parent of the LView being replaced.
29899
+ * @param oldLView LView being replaced.
29900
+ * @param newLView Replacement LView to be inserted.
29901
+ * @param index Index at which the LView should be inserted.
29902
+ */
29903
+ function replaceLViewInTree(parentLView, oldLView, newLView, index) {
29904
+ // Update the sibling whose `NEXT` pointer refers to the old view.
29905
+ for (let i = HEADER_OFFSET; i < parentLView[TVIEW].bindingStartIndex; i++) {
29906
+ const current = parentLView[i];
29907
+ if ((isLView(current) || isLContainer(current)) && current[NEXT] === oldLView) {
29908
+ current[NEXT] = newLView;
29909
+ break;
29910
+ }
29911
+ }
29912
+ // Set the new view as the head, if the old view was first.
29913
+ if (parentLView[CHILD_HEAD] === oldLView) {
29914
+ parentLView[CHILD_HEAD] = newLView;
29915
+ }
29916
+ // Set the new view as the tail, if the old view was last.
29917
+ if (parentLView[CHILD_TAIL] === oldLView) {
29918
+ parentLView[CHILD_TAIL] = newLView;
29919
+ }
29920
+ // Update the `NEXT` pointer to the same as the old view.
29921
+ newLView[NEXT] = oldLView[NEXT];
29922
+ // Clear out the `NEXT` of the old view.
29923
+ oldLView[NEXT] = null;
29924
+ // Insert the new LView at the correct index.
29925
+ parentLView[index] = newLView;
29926
+ }
29927
+ /**
29928
+ * Child nodes mutate the `projection` state of their parent node as they're being projected.
29929
+ * This function resets the `project` back to its initial state.
29930
+ * @param tNode
29931
+ */
29932
+ function resetProjectionState(tNode) {
29933
+ // The `projection` is mutated by child nodes as they're being projected. We need to
29934
+ // reset it to the initial state so projection works after the template is swapped out.
29935
+ if (tNode.projection !== null) {
29936
+ for (const current of tNode.projection) {
29937
+ if (isTNodeShape(current)) {
29938
+ // Reset `projectionNext` since it can affect the traversal order during projection.
29939
+ current.projectionNext = null;
29940
+ current.flags &= ~2 /* TNodeFlags.isProjected */;
29941
+ }
29942
+ }
29943
+ tNode.projection = null;
29944
+ }
29945
+ }
29946
+
29738
29947
  /**
29739
29948
  * A mapping of the @angular/core API surface used in generated expressions to the actual symbols.
29740
29949
  *
@@ -29772,6 +29981,7 @@ const angularCoreEnv = (() => ({
29772
29981
  'ɵɵInheritDefinitionFeature': ɵɵInheritDefinitionFeature,
29773
29982
  'ɵɵInputTransformsFeature': ɵɵInputTransformsFeature,
29774
29983
  'ɵɵStandaloneFeature': ɵɵStandaloneFeature,
29984
+ 'ɵɵExternalStylesFeature': ɵɵExternalStylesFeature,
29775
29985
  'ɵɵnextContext': ɵɵnextContext,
29776
29986
  'ɵɵnamespaceHTML': ɵɵnamespaceHTML,
29777
29987
  'ɵɵnamespaceMathML': ɵɵnamespaceMathML,
@@ -29933,6 +30143,7 @@ const angularCoreEnv = (() => ({
29933
30143
  'ɵɵtwoWayProperty': ɵɵtwoWayProperty,
29934
30144
  'ɵɵtwoWayBindingSet': ɵɵtwoWayBindingSet,
29935
30145
  'ɵɵtwoWayListener': ɵɵtwoWayListener,
30146
+ 'ɵɵreplaceMetadata': ɵɵreplaceMetadata,
29936
30147
  }))();
29937
30148
 
29938
30149
  let jitOptions = null;
@@ -30649,6 +30860,9 @@ function compileComponent(type, metadata) {
30649
30860
  }
30650
30861
  return ngComponentDef;
30651
30862
  },
30863
+ set: (def) => {
30864
+ ngComponentDef = def;
30865
+ },
30652
30866
  // Make the property configurable in dev mode to allow overriding in tests
30653
30867
  configurable: !!ngDevMode,
30654
30868
  });
@@ -31100,7 +31314,7 @@ class Version {
31100
31314
  /**
31101
31315
  * @publicApi
31102
31316
  */
31103
- const VERSION = new Version('19.0.0-next.6');
31317
+ const VERSION = new Version('19.0.0-next.8');
31104
31318
 
31105
31319
  /*
31106
31320
  * This file exists to support compilation of @angular/core in Ivy mode.
@@ -32478,6 +32692,79 @@ class ApplicationInitStatus {
32478
32692
  args: [{ providedIn: 'root' }]
32479
32693
  }], () => [], null); })();
32480
32694
 
32695
+ /**
32696
+ * A scheduler which manages the execution of effects.
32697
+ */
32698
+ class EffectScheduler {
32699
+ /** @nocollapse */
32700
+ static { this.ɵprov = ɵɵdefineInjectable({
32701
+ token: EffectScheduler,
32702
+ providedIn: 'root',
32703
+ factory: () => new ZoneAwareEffectScheduler(),
32704
+ }); }
32705
+ }
32706
+ /**
32707
+ * A wrapper around `ZoneAwareQueueingScheduler` that schedules flushing via the microtask queue
32708
+ * when.
32709
+ */
32710
+ class ZoneAwareEffectScheduler {
32711
+ constructor() {
32712
+ this.queuedEffectCount = 0;
32713
+ this.queues = new Map();
32714
+ this.pendingTasks = inject(PendingTasksInternal);
32715
+ this.taskId = null;
32716
+ }
32717
+ schedule(handle) {
32718
+ this.enqueue(handle);
32719
+ if (this.taskId === null) {
32720
+ this.taskId = this.pendingTasks.add();
32721
+ }
32722
+ }
32723
+ enqueue(handle) {
32724
+ const zone = handle.zone;
32725
+ if (!this.queues.has(zone)) {
32726
+ this.queues.set(zone, new Set());
32727
+ }
32728
+ const queue = this.queues.get(zone);
32729
+ if (queue.has(handle)) {
32730
+ return;
32731
+ }
32732
+ this.queuedEffectCount++;
32733
+ queue.add(handle);
32734
+ }
32735
+ /**
32736
+ * Run all scheduled effects.
32737
+ *
32738
+ * Execution order of effects within the same zone is guaranteed to be FIFO, but there is no
32739
+ * ordering guarantee between effects scheduled in different zones.
32740
+ */
32741
+ flush() {
32742
+ while (this.queuedEffectCount > 0) {
32743
+ for (const [zone, queue] of this.queues) {
32744
+ // `zone` here must be defined.
32745
+ if (zone === null) {
32746
+ this.flushQueue(queue);
32747
+ }
32748
+ else {
32749
+ zone.run(() => this.flushQueue(queue));
32750
+ }
32751
+ }
32752
+ }
32753
+ if (this.taskId !== null) {
32754
+ this.pendingTasks.remove(this.taskId);
32755
+ this.taskId = null;
32756
+ }
32757
+ }
32758
+ flushQueue(queue) {
32759
+ for (const handle of queue) {
32760
+ queue.delete(handle);
32761
+ this.queuedEffectCount--;
32762
+ // TODO: what happens if this throws an error?
32763
+ handle.run();
32764
+ }
32765
+ }
32766
+ }
32767
+
32481
32768
  /**
32482
32769
  * A DI token that provides a set of callbacks to
32483
32770
  * be called for every component that is bootstrapped.
@@ -32648,6 +32935,7 @@ class ApplicationRef {
32648
32935
  this.internalErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);
32649
32936
  this.afterRenderManager = inject(AfterRenderManager);
32650
32937
  this.zonelessEnabled = inject(ZONELESS_ENABLED);
32938
+ this.rootEffectScheduler = inject(EffectScheduler);
32651
32939
  /**
32652
32940
  * Current dirty state of the application across a number of dimensions (views, afterRender hooks,
32653
32941
  * etc).
@@ -32680,7 +32968,7 @@ class ApplicationRef {
32680
32968
  /**
32681
32969
  * Returns an Observable that indicates when the application is stable or unstable.
32682
32970
  */
32683
- this.isStable = inject(PendingTasks).hasPendingTasks.pipe(map((pending) => !pending));
32971
+ this.isStable = inject(PendingTasksInternal).hasPendingTasks.pipe(map((pending) => !pending));
32684
32972
  this._injector = inject(EnvironmentInjector);
32685
32973
  }
32686
32974
  /** @internal */
@@ -32868,6 +33156,11 @@ class ApplicationRef {
32868
33156
  // If we happened to loop, deferred dirtiness can be processed as active dirtiness again.
32869
33157
  this.dirtyFlags |= this.deferredDirtyFlags;
32870
33158
  this.deferredDirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;
33159
+ // First, process any dirty root effects.
33160
+ if (this.dirtyFlags & 16 /* ApplicationRefDirtyFlags.RootEffects */) {
33161
+ this.dirtyFlags &= ~16 /* ApplicationRefDirtyFlags.RootEffects */;
33162
+ this.rootEffectScheduler.flush();
33163
+ }
32871
33164
  // First check dirty views, if there are any.
32872
33165
  if (this.dirtyFlags & 7 /* ApplicationRefDirtyFlags.ViewTreeAny */) {
32873
33166
  // Change detection on views starts in targeted mode (only check components if they're
@@ -32888,8 +33181,10 @@ class ApplicationRef {
32888
33181
  this.dirtyFlags &= ~4 /* ApplicationRefDirtyFlags.ViewTreeCheck */;
32889
33182
  // Check if any views are still dirty after checking and we need to loop back.
32890
33183
  this.syncDirtyFlagsWithViews();
32891
- if (this.dirtyFlags & 7 /* ApplicationRefDirtyFlags.ViewTreeAny */) {
32892
- // If any views are still dirty after checking, loop back before running render hooks.
33184
+ if (this.dirtyFlags &
33185
+ (7 /* ApplicationRefDirtyFlags.ViewTreeAny */ | 16 /* ApplicationRefDirtyFlags.RootEffects */)) {
33186
+ // If any views or effects are still dirty after checking, loop back before running render
33187
+ // hooks.
32893
33188
  return;
32894
33189
  }
32895
33190
  }
@@ -33349,7 +33644,7 @@ class ZoneStablePendingTask {
33349
33644
  this.subscription = new Subscription();
33350
33645
  this.initialized = false;
33351
33646
  this.zone = inject(NgZone);
33352
- this.pendingTasks = inject(PendingTasks);
33647
+ this.pendingTasks = inject(PendingTasksInternal);
33353
33648
  }
33354
33649
  initialize() {
33355
33650
  if (this.initialized) {
@@ -33411,7 +33706,7 @@ function trackMicrotaskNotificationForDebugging() {
33411
33706
  class ChangeDetectionSchedulerImpl {
33412
33707
  constructor() {
33413
33708
  this.appRef = inject(ApplicationRef);
33414
- this.taskService = inject(PendingTasks);
33709
+ this.taskService = inject(PendingTasksInternal);
33415
33710
  this.ngZone = inject(NgZone);
33416
33711
  this.zonelessEnabled = inject(ZONELESS_ENABLED);
33417
33712
  this.disableScheduling = inject(ZONELESS_SCHEDULER_DISABLED, { optional: true }) ?? false;
@@ -33494,6 +33789,10 @@ class ChangeDetectionSchedulerImpl {
33494
33789
  force = true;
33495
33790
  break;
33496
33791
  }
33792
+ case 13 /* NotificationSource.RootEffect */: {
33793
+ this.appRef.dirtyFlags |= 16 /* ApplicationRefDirtyFlags.RootEffects */;
33794
+ break;
33795
+ }
33497
33796
  case 12 /* NotificationSource.PendingTaskRemoved */: {
33498
33797
  // Removing a pending task via the public API forces a scheduled tick, ensuring that
33499
33798
  // stability is async and delayed until there was at least an opportunity to run
@@ -33962,12 +34261,10 @@ class ImagePerformanceWarning {
33962
34261
  let lcpElementFound, lcpElementLoadedCorrectly = false;
33963
34262
  images.forEach((image) => {
33964
34263
  if (!this.options?.disableImageSizeWarning) {
33965
- for (const image of images) {
33966
- // Image elements using the NgOptimizedImage directive are excluded,
33967
- // as that directive has its own version of this check.
33968
- if (!image.getAttribute('ng-img') && this.isOversized(image)) {
33969
- logOversizedImageWarning(image.src);
33970
- }
34264
+ // Image elements using the NgOptimizedImage directive are excluded,
34265
+ // as that directive has its own version of this check.
34266
+ if (!image.getAttribute('ng-img') && this.isOversized(image)) {
34267
+ logOversizedImageWarning(image.src);
33971
34268
  }
33972
34269
  }
33973
34270
  if (!this.options?.disableImageLazyLoadWarning && this.lcpImageUrl) {
@@ -33994,6 +34291,24 @@ class ImagePerformanceWarning {
33994
34291
  if (!this.window) {
33995
34292
  return false;
33996
34293
  }
34294
+ // The `isOversized` check may not be applicable or may require adjustments
34295
+ // for several types of image formats or scenarios. Currently, we specify only
34296
+ // `svg`, but this may also include `gif` since their quality isn’t tied to
34297
+ // dimensions in the same way as raster images.
34298
+ const nonOversizedImageExtentions = [
34299
+ // SVG images are vector-based, which means they can scale
34300
+ // to any size without losing quality.
34301
+ '.svg',
34302
+ ];
34303
+ // Convert it to lowercase because this may have uppercase
34304
+ // extensions, such as `IMAGE.SVG`.
34305
+ // We fallback to an empty string because `src` may be `undefined`
34306
+ // if it is explicitly set to `null` by some third-party code
34307
+ // (e.g., `image.src = null`).
34308
+ const imageSource = (image.src || '').toLowerCase();
34309
+ if (nonOversizedImageExtentions.some((extension) => imageSource.endsWith(extension))) {
34310
+ return false;
34311
+ }
33997
34312
  const computedStyle = this.window.getComputedStyle(image);
33998
34313
  let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));
33999
34314
  let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));
@@ -34005,6 +34320,8 @@ class ImagePerformanceWarning {
34005
34320
  return false;
34006
34321
  }
34007
34322
  if (boxSizing === 'border-box') {
34323
+ // If the image `box-sizing` is set to `border-box`, we adjust the rendered
34324
+ // dimensions by subtracting padding values.
34008
34325
  const paddingTop = computedStyle.getPropertyValue('padding-top');
34009
34326
  const paddingRight = computedStyle.getPropertyValue('padding-right');
34010
34327
  const paddingBottom = computedStyle.getPropertyValue('padding-bottom');
@@ -37012,7 +37329,6 @@ function getDeferBlocks(lView, deferBlocks) {
37012
37329
  }
37013
37330
  }
37014
37331
 
37015
- // tslint:disable:no-duplicate-imports
37016
37332
  function invokeRegisteredListeners(event) {
37017
37333
  const handlerFns = event.currentTarget?.__jsaction_fns?.get(event.type);
37018
37334
  if (!handlerFns) {
@@ -37046,71 +37362,16 @@ const JSACTION_EVENT_CONTRACT = new InjectionToken(ngDevMode ? 'EVENT_CONTRACT_D
37046
37362
  providedIn: 'root',
37047
37363
  factory: () => ({}),
37048
37364
  });
37049
- const GLOBAL_EVENT_DELEGATION = new InjectionToken(ngDevMode ? 'GLOBAL_EVENT_DELEGATION' : '');
37050
- /**
37051
- * This class is the delegate for `EventDelegationPlugin`. It represents the
37052
- * noop version of this class, with the enabled version set when
37053
- * `provideGlobalEventDelegation` is called.
37054
- */
37055
- class GlobalEventDelegation {
37056
- constructor() {
37057
- this.eventContractDetails = inject(JSACTION_EVENT_CONTRACT);
37058
- }
37059
- ngOnDestroy() {
37060
- this.eventContractDetails.instance?.cleanUp();
37061
- }
37062
- supports(eventType) {
37063
- return isEarlyEventType(eventType);
37064
- }
37065
- addEventListener(element, eventType, handler) {
37066
- // Note: contrary to the type, Window and Document can be passed in
37067
- // as well.
37068
- if (element.nodeType === Node.ELEMENT_NODE) {
37069
- this.eventContractDetails.instance.addEvent(eventType);
37070
- getActionCache(element)[eventType] = '';
37071
- sharedStashFunction(element, eventType, handler);
37072
- }
37073
- else {
37074
- element.addEventListener(eventType, handler);
37075
- }
37076
- return () => this.removeEventListener(element, eventType, handler);
37077
- }
37078
- removeEventListener(element, eventType, callback) {
37079
- if (element.nodeType === Node.ELEMENT_NODE) {
37080
- getActionCache(element)[eventType] = undefined;
37081
- }
37082
- else {
37083
- element.removeEventListener(eventType, callback);
37084
- }
37085
- }
37086
- static { this.ɵfac = function GlobalEventDelegation_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || GlobalEventDelegation)(); }; }
37087
- static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: GlobalEventDelegation, factory: GlobalEventDelegation.ɵfac }); }
37088
- }
37089
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(GlobalEventDelegation, [{
37090
- type: Injectable
37091
- }], null, null); })();
37092
- const initGlobalEventDelegation = (eventContractDetails, injector) => {
37093
- if (injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT)) {
37094
- return;
37095
- }
37096
- const eventContract = (eventContractDetails.instance = new EventContract(new EventContractContainer(document.body)));
37097
- const dispatcher = new EventDispatcher(invokeRegisteredListeners, /** clickModSupport */ false);
37098
- registerDispatcher(eventContract, dispatcher);
37099
- };
37100
37365
 
37101
37366
  /**
37102
37367
  * A set of DOM elements with `jsaction` attributes.
37103
37368
  */
37104
37369
  const jsactionSet = new Set();
37105
- function isGlobalEventDelegationEnabled(injector) {
37106
- return injector.get(IS_GLOBAL_EVENT_DELEGATION_ENABLED, false);
37107
- }
37108
37370
  /**
37109
37371
  * Determines whether Event Replay feature should be activated on the client.
37110
37372
  */
37111
37373
  function shouldEnableEventReplay(injector) {
37112
- return (injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT) &&
37113
- !isGlobalEventDelegationEnabled(injector));
37374
+ return injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);
37114
37375
  }
37115
37376
  /**
37116
37377
  * Returns a set of providers required to setup support for event replay.
@@ -37865,6 +38126,19 @@ function whenStableWithTimeout(appRef, injector) {
37865
38126
  }
37866
38127
  return whenStablePromise;
37867
38128
  }
38129
+ /**
38130
+ * Defines a name of an attribute that is added to the <body> tag
38131
+ * in the `index.html` file in case a given route was configured
38132
+ * with `RenderMode.Client`. 'cm' is an abbreviation for "Client Mode".
38133
+ */
38134
+ const CLIENT_RENDER_MODE_FLAG = 'ngcm';
38135
+ /**
38136
+ * Checks whether the `RenderMode.Client` was defined for the current route.
38137
+ */
38138
+ function isClientRenderModeEnabled() {
38139
+ const doc = getDocument();
38140
+ return isPlatformBrowser() && doc.body.hasAttribute(CLIENT_RENDER_MODE_FLAG);
38141
+ }
37868
38142
  /**
37869
38143
  * Returns a set of providers required to setup hydration support
37870
38144
  * for an application that is server side rendered. This function is
@@ -37886,16 +38160,6 @@ function withDomHydration() {
37886
38160
  // hydration annotations. Otherwise, keep hydration disabled.
37887
38161
  const transferState = inject(TransferState, { optional: true });
37888
38162
  isEnabled = !!transferState?.get(NGH_DATA_KEY, null);
37889
- if (!isEnabled && typeof ngDevMode !== 'undefined' && ngDevMode) {
37890
- const console = inject(Console);
37891
- const message = formatRuntimeError(-505 /* RuntimeErrorCode.MISSING_HYDRATION_ANNOTATIONS */, 'Angular hydration was requested on the client, but there was no ' +
37892
- 'serialized information present in the server response, ' +
37893
- 'thus hydration was not enabled. ' +
37894
- 'Make sure the `provideClientHydration()` is included into the list ' +
37895
- 'of providers in the server part of the application configuration.');
37896
- // tslint:disable-next-line:no-console
37897
- console.warn(message);
37898
- }
37899
38163
  }
37900
38164
  if (isEnabled) {
37901
38165
  performanceMarkFeature('NgHydration');
@@ -37909,15 +38173,27 @@ function withDomHydration() {
37909
38173
  // i18n support is enabled by calling withI18nSupport(), but there's
37910
38174
  // no way to turn it off (e.g. for tests), so we turn it off by default.
37911
38175
  setIsI18nHydrationSupportEnabled(false);
37912
- // Since this function is used across both server and client,
37913
- // make sure that the runtime code is only added when invoked
37914
- // on the client. Moving forward, the `isPlatformBrowser` check should
37915
- // be replaced with a tree-shakable alternative (e.g. `isServer`
37916
- // flag).
37917
- if (isPlatformBrowser() && inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
38176
+ if (!isPlatformBrowser()) {
38177
+ // Since this function is used across both server and client,
38178
+ // make sure that the runtime code is only added when invoked
38179
+ // on the client (see the `enableHydrationRuntimeSupport` function
38180
+ // call below).
38181
+ return;
38182
+ }
38183
+ if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
37918
38184
  verifySsrContentsIntegrity();
37919
38185
  enableHydrationRuntimeSupport();
37920
38186
  }
38187
+ else if (typeof ngDevMode !== 'undefined' && ngDevMode && !isClientRenderModeEnabled()) {
38188
+ const console = inject(Console);
38189
+ const message = formatRuntimeError(-505 /* RuntimeErrorCode.MISSING_HYDRATION_ANNOTATIONS */, 'Angular hydration was requested on the client, but there was no ' +
38190
+ 'serialized information present in the server response, ' +
38191
+ 'thus hydration was not enabled. ' +
38192
+ 'Make sure the `provideClientHydration()` is included into the list ' +
38193
+ 'of providers in the server part of the application configuration.');
38194
+ // tslint:disable-next-line:no-console
38195
+ console.warn(message);
38196
+ }
37921
38197
  },
37922
38198
  multi: true,
37923
38199
  },
@@ -37967,14 +38243,16 @@ function withI18nSupport() {
37967
38243
  return [
37968
38244
  {
37969
38245
  provide: IS_I18N_HYDRATION_ENABLED,
37970
- useValue: true,
38246
+ useFactory: () => inject(IS_HYDRATION_DOM_REUSE_ENABLED),
37971
38247
  },
37972
38248
  {
37973
38249
  provide: ENVIRONMENT_INITIALIZER,
37974
38250
  useValue: () => {
37975
- enableI18nHydrationRuntimeSupport();
37976
- setIsI18nHydrationSupportEnabled(true);
37977
- performanceMarkFeature('NgI18nHydration');
38251
+ if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
38252
+ enableI18nHydrationRuntimeSupport();
38253
+ setIsI18nHydrationSupportEnabled(true);
38254
+ performanceMarkFeature('NgI18nHydration');
38255
+ }
37978
38256
  },
37979
38257
  multi: true,
37980
38258
  },
@@ -38020,38 +38298,6 @@ function verifySsrContentsIntegrity() {
38020
38298
  }
38021
38299
  }
38022
38300
 
38023
- /**
38024
- * Returns a set of providers required to setup support for event delegation.
38025
- * @param multiContract - Experimental support to provide one event contract
38026
- * when there are multiple binaries on the page.
38027
- */
38028
- function provideGlobalEventDelegation(multiContract = false) {
38029
- return [
38030
- {
38031
- provide: IS_GLOBAL_EVENT_DELEGATION_ENABLED,
38032
- useValue: true,
38033
- },
38034
- {
38035
- provide: ENVIRONMENT_INITIALIZER,
38036
- useValue: () => {
38037
- const injector = inject(Injector);
38038
- const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);
38039
- if (multiContract && window.__jsaction_contract) {
38040
- eventContractDetails.instance = window.__jsaction_contract;
38041
- return;
38042
- }
38043
- initGlobalEventDelegation(eventContractDetails, injector);
38044
- window.__jsaction_contract = eventContractDetails.instance;
38045
- },
38046
- multi: true,
38047
- },
38048
- {
38049
- provide: GLOBAL_EVENT_DELEGATION,
38050
- useClass: GlobalEventDelegation,
38051
- },
38052
- ];
38053
- }
38054
-
38055
38301
  /**
38056
38302
  * Transforms a value (typically a string) to a boolean.
38057
38303
  * Intended to be used as a transform function of an input.
@@ -38246,99 +38492,54 @@ function untracked(nonReactiveReadsFn) {
38246
38492
  }
38247
38493
  }
38248
38494
 
38495
+ class ViewContext {
38496
+ constructor(view, node) {
38497
+ this.view = view;
38498
+ this.node = node;
38499
+ }
38500
+ /**
38501
+ * @internal
38502
+ * @nocollapse
38503
+ */
38504
+ static { this.__NG_ELEMENT_ID__ = injectViewContext; }
38505
+ }
38506
+ function injectViewContext() {
38507
+ return new ViewContext(getLView(), getCurrentTNode());
38508
+ }
38509
+
38249
38510
  /**
38250
- * Not public API, which guarantees `EffectScheduler` only ever comes from the application root
38251
- * injector.
38252
- */
38253
- const APP_EFFECT_SCHEDULER = new InjectionToken('', {
38254
- providedIn: 'root',
38255
- factory: () => inject(EffectScheduler),
38256
- });
38257
- /**
38258
- * A scheduler which manages the execution of effects.
38511
+ * Controls whether effects use the legacy `microtaskEffect` by default.
38259
38512
  */
38260
- class EffectScheduler {
38513
+ const USE_MICROTASK_EFFECT_BY_DEFAULT = false;
38514
+
38515
+ class MicrotaskEffectScheduler extends ZoneAwareEffectScheduler {
38516
+ schedule(effect) {
38517
+ // Check whether there are any pending effects _before_ queueing in the base class.
38518
+ const needsScheduling = this.taskId === null;
38519
+ super.schedule(effect);
38520
+ if (needsScheduling) {
38521
+ queueMicrotask(() => this.flush());
38522
+ }
38523
+ }
38261
38524
  /** @nocollapse */
38262
38525
  static { this.ɵprov = ɵɵdefineInjectable({
38263
- token: EffectScheduler,
38526
+ token: MicrotaskEffectScheduler,
38264
38527
  providedIn: 'root',
38265
- factory: () => new ZoneAwareEffectScheduler(),
38528
+ factory: () => new MicrotaskEffectScheduler(),
38266
38529
  }); }
38267
38530
  }
38268
- /**
38269
- * A wrapper around `ZoneAwareQueueingScheduler` that schedules flushing via the microtask queue
38270
- * when.
38271
- */
38272
- class ZoneAwareEffectScheduler {
38273
- constructor() {
38274
- this.queuedEffectCount = 0;
38275
- this.queues = new Map();
38276
- this.pendingTasks = inject(PendingTasks);
38277
- this.taskId = null;
38278
- }
38279
- scheduleEffect(handle) {
38280
- this.enqueue(handle);
38281
- if (this.taskId === null) {
38282
- const taskId = (this.taskId = this.pendingTasks.add());
38283
- queueMicrotask(() => {
38284
- this.flush();
38285
- this.pendingTasks.remove(taskId);
38286
- this.taskId = null;
38287
- });
38288
- }
38289
- }
38290
- enqueue(handle) {
38291
- const zone = handle.creationZone;
38292
- if (!this.queues.has(zone)) {
38293
- this.queues.set(zone, new Set());
38294
- }
38295
- const queue = this.queues.get(zone);
38296
- if (queue.has(handle)) {
38297
- return;
38298
- }
38299
- this.queuedEffectCount++;
38300
- queue.add(handle);
38301
- }
38302
- /**
38303
- * Run all scheduled effects.
38304
- *
38305
- * Execution order of effects within the same zone is guaranteed to be FIFO, but there is no
38306
- * ordering guarantee between effects scheduled in different zones.
38307
- */
38308
- flush() {
38309
- while (this.queuedEffectCount > 0) {
38310
- for (const [zone, queue] of this.queues) {
38311
- // `zone` here must be defined.
38312
- if (zone === null) {
38313
- this.flushQueue(queue);
38314
- }
38315
- else {
38316
- zone.run(() => this.flushQueue(queue));
38317
- }
38318
- }
38319
- }
38320
- }
38321
- flushQueue(queue) {
38322
- for (const handle of queue) {
38323
- queue.delete(handle);
38324
- this.queuedEffectCount--;
38325
- // TODO: what happens if this throws an error?
38326
- handle.run();
38327
- }
38328
- }
38329
- }
38330
38531
  /**
38331
38532
  * Core reactive node for an Angular effect.
38332
38533
  *
38333
38534
  * `EffectHandle` combines the reactive graph's `Watch` base node for effects with the framework's
38334
- * scheduling abstraction (`EffectScheduler`) as well as automatic cleanup via `DestroyRef` if
38335
- * available/requested.
38535
+ * scheduling abstraction (`MicrotaskEffectScheduler`) as well as automatic cleanup via `DestroyRef`
38536
+ * if available/requested.
38336
38537
  */
38337
38538
  class EffectHandle {
38338
- constructor(scheduler, effectFn, creationZone, destroyRef, injector, allowSignalWrites) {
38539
+ constructor(scheduler, effectFn, zone, destroyRef, injector, allowSignalWrites) {
38339
38540
  this.scheduler = scheduler;
38340
38541
  this.effectFn = effectFn;
38341
- this.creationZone = creationZone;
38542
+ this.zone = zone;
38342
38543
  this.injector = injector;
38343
38544
  this.watcher = createWatch$1((onCleanup) => this.runEffect(onCleanup), () => this.schedule(), allowSignalWrites);
38344
38545
  this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
@@ -38358,7 +38559,7 @@ class EffectHandle {
38358
38559
  this.watcher.run();
38359
38560
  }
38360
38561
  schedule() {
38361
- this.scheduler.scheduleEffect(this);
38562
+ this.scheduler.schedule(this);
38362
38563
  }
38363
38564
  destroy() {
38364
38565
  this.watcher.destroy();
@@ -38367,20 +38568,20 @@ class EffectHandle {
38367
38568
  // retain a reference to it. Attempting to execute it will be a no-op.
38368
38569
  }
38369
38570
  }
38571
+ // Just used for the name for the debug error below.
38572
+ function effect$1() { }
38370
38573
  /**
38371
38574
  * Create a global `Effect` for the given reactive function.
38372
- *
38373
- * @developerPreview
38374
38575
  */
38375
- function effect(effectFn, options) {
38576
+ function microtaskEffect(effectFn, options) {
38376
38577
  performanceMarkFeature('NgSignals');
38377
38578
  ngDevMode &&
38378
- assertNotInReactiveContext(effect, 'Call `effect` outside of a reactive context. For example, schedule the ' +
38579
+ assertNotInReactiveContext(effect$1, 'Call `effect` outside of a reactive context. For example, schedule the ' +
38379
38580
  'effect inside the component constructor.');
38380
- !options?.injector && assertInInjectionContext(effect);
38581
+ !options?.injector && assertInInjectionContext(effect$1);
38381
38582
  const injector = options?.injector ?? inject(Injector);
38382
38583
  const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
38383
- const handle = new EffectHandle(injector.get(APP_EFFECT_SCHEDULER), effectFn, typeof Zone === 'undefined' ? null : Zone.current, destroyRef, injector, options?.allowSignalWrites ?? false);
38584
+ const handle = new EffectHandle(injector.get(MicrotaskEffectScheduler), effectFn, typeof Zone === 'undefined' ? null : Zone.current, destroyRef, injector, options?.allowSignalWrites ?? false);
38384
38585
  // Effects need to be marked dirty manually to trigger their initial run. The timing of this
38385
38586
  // marking matters, because the effects may read signals that track component inputs, which are
38386
38587
  // only available after those components have had their first update pass.
@@ -38403,6 +38604,180 @@ function effect(effectFn, options) {
38403
38604
  return handle;
38404
38605
  }
38405
38606
 
38607
+ let useMicrotaskEffectsByDefault = USE_MICROTASK_EFFECT_BY_DEFAULT;
38608
+ /**
38609
+ * Toggle the flag on whether to use microtask effects (for testing).
38610
+ */
38611
+ function setUseMicrotaskEffectsByDefault(value) {
38612
+ const prev = useMicrotaskEffectsByDefault;
38613
+ useMicrotaskEffectsByDefault = value;
38614
+ return prev;
38615
+ }
38616
+ class EffectRefImpl {
38617
+ constructor(node) {
38618
+ this[SIGNAL$1] = node;
38619
+ }
38620
+ destroy() {
38621
+ this[SIGNAL$1].destroy();
38622
+ }
38623
+ }
38624
+ /**
38625
+ * Registers an "effect" that will be scheduled & executed whenever the signals that it reads
38626
+ * changes.
38627
+ *
38628
+ * Angular has two different kinds of effect: component effects and root effects. Component effects
38629
+ * are created when `effect()` is called from a component, directive, or within a service of a
38630
+ * component/directive. Root effects are created when `effect()` is called from outside the
38631
+ * component tree, such as in a root service, or when the `forceRoot` option is provided.
38632
+ *
38633
+ * The two effect types differ in their timing. Component effects run as a component lifecycle
38634
+ * event during Angular's synchronization (change detection) process, and can safely read input
38635
+ * signals or create/destroy views that depend on component state. Root effects run as microtasks
38636
+ * and have no connection to the component tree or change detection.
38637
+ *
38638
+ * `effect()` must be run in injection context, unless the `injector` option is manually specified.
38639
+ *
38640
+ * @developerPreview
38641
+ */
38642
+ function effect(effectFn, options) {
38643
+ if (useMicrotaskEffectsByDefault) {
38644
+ if (ngDevMode && options?.forceRoot) {
38645
+ throw new Error(`Cannot use 'forceRoot' option with microtask effects on`);
38646
+ }
38647
+ return microtaskEffect(effectFn, options);
38648
+ }
38649
+ performanceMarkFeature('NgSignals');
38650
+ ngDevMode &&
38651
+ assertNotInReactiveContext(effect, 'Call `effect` outside of a reactive context. For example, schedule the ' +
38652
+ 'effect inside the component constructor.');
38653
+ !options?.injector && assertInInjectionContext(effect);
38654
+ if (ngDevMode && options?.allowSignalWrites !== undefined) {
38655
+ console.warn(`The 'allowSignalWrites' flag is deprecated & longer required for effect() (writes are allowed by default)`);
38656
+ }
38657
+ const injector = options?.injector ?? inject(Injector);
38658
+ let destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
38659
+ let node;
38660
+ const viewContext = injector.get(ViewContext, null, { optional: true });
38661
+ if (viewContext !== null && !options?.forceRoot) {
38662
+ // This effect was created in the context of a view, and will be associated with the view.
38663
+ node = createViewEffect(viewContext.view, effectFn);
38664
+ if (destroyRef instanceof NodeInjectorDestroyRef && destroyRef._lView === viewContext.view) {
38665
+ // The effect is being created in the same view as the `DestroyRef` references, so it will be
38666
+ // automatically destroyed without the need for an explicit `DestroyRef` registration.
38667
+ destroyRef = null;
38668
+ }
38669
+ }
38670
+ else {
38671
+ // This effect was created outside the context of a view, and will be scheduled independently.
38672
+ node = createRootEffect(effectFn, injector.get(EffectScheduler), injector.get(ChangeDetectionScheduler));
38673
+ }
38674
+ node.injector = injector;
38675
+ if (destroyRef !== null) {
38676
+ // If we need to register for cleanup, do that here.
38677
+ node.onDestroyFn = destroyRef.onDestroy(() => node.destroy());
38678
+ }
38679
+ return new EffectRefImpl(node);
38680
+ }
38681
+ /**
38682
+ * Not public API, which guarantees `EffectScheduler` only ever comes from the application root
38683
+ * injector.
38684
+ */
38685
+ const APP_EFFECT_SCHEDULER = new InjectionToken('', {
38686
+ providedIn: 'root',
38687
+ factory: () => inject(EffectScheduler),
38688
+ });
38689
+ const BASE_EFFECT_NODE =
38690
+ /* @__PURE__ */ (() => ({
38691
+ ...REACTIVE_NODE$1,
38692
+ consumerIsAlwaysLive: true,
38693
+ consumerAllowSignalWrites: true,
38694
+ dirty: true,
38695
+ hasRun: false,
38696
+ cleanupFns: undefined,
38697
+ zone: null,
38698
+ onDestroyFn: noop,
38699
+ run() {
38700
+ this.dirty = false;
38701
+ if (ngDevMode && isInNotificationPhase$1()) {
38702
+ throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
38703
+ }
38704
+ if (this.hasRun && !consumerPollProducersForChange$1(this)) {
38705
+ return;
38706
+ }
38707
+ this.hasRun = true;
38708
+ const registerCleanupFn = (cleanupFn) => (this.cleanupFns ??= []).push(cleanupFn);
38709
+ const prevNode = consumerBeforeComputation$1(this);
38710
+ // We clear `setIsRefreshingViews` so that `markForCheck()` within the body of an effect will
38711
+ // cause CD to reach the component in question.
38712
+ const prevRefreshingViews = setIsRefreshingViews(false);
38713
+ try {
38714
+ this.maybeCleanup();
38715
+ this.fn(registerCleanupFn);
38716
+ }
38717
+ catch (err) {
38718
+ // We inject the error handler lazily, to prevent circular dependencies when an effect is
38719
+ // created inside of an ErrorHandler.
38720
+ this.injector.get(ErrorHandler, null, { optional: true })?.handleError(err);
38721
+ }
38722
+ finally {
38723
+ setIsRefreshingViews(prevRefreshingViews);
38724
+ consumerAfterComputation$1(this, prevNode);
38725
+ }
38726
+ },
38727
+ maybeCleanup() {
38728
+ while (this.cleanupFns?.length) {
38729
+ this.cleanupFns.pop()();
38730
+ }
38731
+ },
38732
+ }))();
38733
+ const ROOT_EFFECT_NODE =
38734
+ /* @__PURE__ */ (() => ({
38735
+ ...BASE_EFFECT_NODE,
38736
+ consumerMarkedDirty() {
38737
+ this.scheduler.schedule(this);
38738
+ this.notifier.notify(13 /* NotificationSource.RootEffect */);
38739
+ },
38740
+ destroy() {
38741
+ consumerDestroy$1(this);
38742
+ this.onDestroyFn();
38743
+ this.maybeCleanup();
38744
+ },
38745
+ }))();
38746
+ const VIEW_EFFECT_NODE =
38747
+ /* @__PURE__ */ (() => ({
38748
+ ...BASE_EFFECT_NODE,
38749
+ consumerMarkedDirty() {
38750
+ this.view[FLAGS] |= 8192 /* LViewFlags.HasChildViewsToRefresh */;
38751
+ markAncestorsForTraversal(this.view);
38752
+ },
38753
+ destroy() {
38754
+ consumerDestroy$1(this);
38755
+ this.onDestroyFn();
38756
+ this.maybeCleanup();
38757
+ this.view[EFFECTS]?.delete(this);
38758
+ },
38759
+ }))();
38760
+ function createViewEffect(view, fn) {
38761
+ const node = Object.create(VIEW_EFFECT_NODE);
38762
+ node.view = view;
38763
+ node.zone = typeof Zone !== 'undefined' ? Zone.current : null;
38764
+ node.fn = fn;
38765
+ view[EFFECTS] ??= new Set();
38766
+ view[EFFECTS].add(node);
38767
+ node.consumerMarkedDirty(node);
38768
+ return node;
38769
+ }
38770
+ function createRootEffect(fn, scheduler, notifier) {
38771
+ const node = Object.create(ROOT_EFFECT_NODE);
38772
+ node.fn = fn;
38773
+ node.scheduler = scheduler;
38774
+ node.notifier = notifier;
38775
+ node.zone = typeof Zone !== 'undefined' ? Zone.current : null;
38776
+ node.scheduler.schedule(node);
38777
+ node.notifier.notify(13 /* NotificationSource.RootEffect */);
38778
+ return node;
38779
+ }
38780
+
38406
38781
  const NOT_SET = Symbol('NOT_SET');
38407
38782
  const EMPTY_CLEANUP_SET = new Set();
38408
38783
  const AFTER_RENDER_PHASE_EFFECT_NODE = {
@@ -38738,5 +39113,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
38738
39113
  * Generated bundle index. Do not edit.
38739
39114
  */
38740
39115
 
38741
- export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, ExperimentalPendingTasks, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterNextRender, afterRender, afterRenderEffect, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderManager as ɵAfterRenderManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, EffectScheduler as ɵEffectScheduler, GLOBAL_EVENT_DELEGATION as ɵGLOBAL_EVENT_DELEGATION, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PendingTasks as ɵPendingTasks, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, provideGlobalEventDelegation as ɵprovideGlobalEventDelegation, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, whenStable as ɵwhenStable, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵStandaloneFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferHydrateNever, ɵɵdeferHydrateOnHover, ɵɵdeferHydrateOnIdle, ɵɵdeferHydrateOnImmediate, ɵɵdeferHydrateOnInteraction, ɵɵdeferHydrateOnTimer, ɵɵdeferHydrateOnViewport, ɵɵdeferHydrateWhen, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
39116
+ export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PendingTasks, Pipe, PlatformRef, Query, QueryList, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterNextRender, afterRender, afterRenderEffect, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderManager as ɵAfterRenderManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, MicrotaskEffectScheduler as ɵMicrotaskEffectScheduler, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PendingTasksInternal as ɵPendingTasks, PendingTasksInternal as ɵPendingTasksInternal, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, microtaskEffect as ɵmicrotaskEffect, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, whenStable as ɵwhenStable, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵStandaloneFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferHydrateNever, ɵɵdeferHydrateOnHover, ɵɵdeferHydrateOnIdle, ɵɵdeferHydrateOnImmediate, ɵɵdeferHydrateOnInteraction, ɵɵdeferHydrateOnTimer, ɵɵdeferHydrateOnViewport, ɵɵdeferHydrateWhen, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
38742
39117
  //# sourceMappingURL=core.mjs.map