@angular/core 19.1.0-next.3 → 19.1.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/LICENSE +1 -1
  2. package/fesm2022/core.mjs +516 -266
  3. package/fesm2022/core.mjs.map +1 -1
  4. package/fesm2022/primitives/event-dispatch.mjs +1 -24
  5. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  6. package/fesm2022/primitives/signals.mjs +1 -1
  7. package/fesm2022/rxjs-interop.mjs +1 -1
  8. package/fesm2022/testing.mjs +5 -5
  9. package/index.d.ts +169 -17
  10. package/package.json +1 -1
  11. package/primitives/event-dispatch/index.d.ts +1 -1
  12. package/primitives/signals/index.d.ts +1 -1
  13. package/rxjs-interop/index.d.ts +1 -1
  14. package/schematics/bundles/apply_import_manager-6508401d.js +732 -0
  15. package/schematics/bundles/{checker-228cb8a8.js → checker-24b68d23.js} +75 -27
  16. package/schematics/bundles/cleanup-unused-imports.js +295 -0
  17. package/schematics/bundles/{compiler_host-fc806dbe.js → compiler_host-5f693799.js} +2 -2
  18. package/schematics/bundles/control-flow-migration.js +3 -3
  19. package/schematics/bundles/explicit-standalone-flag.js +3 -3
  20. package/schematics/bundles/imports-abe29092.js +1 -1
  21. package/schematics/bundles/{combine_units-5d6a7099.js → index-767e341d.js} +10 -723
  22. package/schematics/bundles/index-b1033cf0.js +30 -0
  23. package/schematics/bundles/inject-migration.js +3 -3
  24. package/schematics/bundles/leading_space-d190b83b.js +1 -1
  25. package/schematics/bundles/{migrate_ts_type_references-d02c6750.js → migrate_ts_type_references-bc7d8784.js} +29 -28
  26. package/schematics/bundles/nodes-a9f0b985.js +1 -1
  27. package/schematics/bundles/output-migration.js +26 -25
  28. package/schematics/bundles/pending-tasks.js +3 -3
  29. package/schematics/bundles/{program-1591ec8f.js → program-c810a4c2.js} +81 -40
  30. package/schematics/bundles/project_tsconfig_paths-e9ccccbf.js +1 -1
  31. package/schematics/bundles/provide-initializer.js +3 -3
  32. package/schematics/bundles/route-lazy-loading.js +3 -3
  33. package/schematics/bundles/signal-input-migration.js +31 -30
  34. package/schematics/bundles/signal-queries-migration.js +48 -47
  35. package/schematics/bundles/signals.js +6 -5
  36. package/schematics/bundles/standalone-migration.js +9 -25
  37. package/schematics/collection.json +5 -0
  38. package/schematics/ng-generate/cleanup-unused-imports/schema.json +7 -0
  39. package/testing/index.d.ts +1 -1
package/fesm2022/core.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v19.1.0-next.3
2
+ * @license Angular v19.1.0-rc.0
3
3
  * (c) 2010-2024 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -273,6 +273,7 @@ function ngDevModeResetPerfCounters() {
273
273
  dehydratedViewsRemoved: 0,
274
274
  dehydratedViewsCleanupRuns: 0,
275
275
  componentsSkippedHydration: 0,
276
+ deferBlocksWithIncrementalHydration: 0,
276
277
  };
277
278
  // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.
278
279
  const allowNgDevModeTrue = locationString.indexOf('ngDevMode=false') === -1;
@@ -1714,8 +1715,7 @@ function getPipeDef$1(type) {
1714
1715
  */
1715
1716
  function isStandalone(type) {
1716
1717
  const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);
1717
- // TODO: standalone as default value (invert the condition)
1718
- return def !== null ? def.standalone : false;
1718
+ return def !== null && def.standalone;
1719
1719
  }
1720
1720
 
1721
1721
  /**
@@ -2902,6 +2902,7 @@ const ON_DESTROY_HOOKS = 21;
2902
2902
  const EFFECTS_TO_SCHEDULE = 22;
2903
2903
  const EFFECTS = 23;
2904
2904
  const REACTIVE_TEMPLATE_CONSUMER = 24;
2905
+ const AFTER_RENDER_SEQUENCES_TO_ADD = 25;
2905
2906
  /**
2906
2907
  * Size of LView's header. Necessary to adjust for it when setting slots.
2907
2908
  *
@@ -2909,7 +2910,7 @@ const REACTIVE_TEMPLATE_CONSUMER = 24;
2909
2910
  * instruction index into `LView` index. All other indexes should be in the `LView` index space and
2910
2911
  * there should be no need to refer to `HEADER_OFFSET` anywhere else.
2911
2912
  */
2912
- const HEADER_OFFSET = 25;
2913
+ const HEADER_OFFSET = 26;
2913
2914
 
2914
2915
  /**
2915
2916
  * Special location which allows easy identification of type. If we have an array which was
@@ -2984,6 +2985,7 @@ function hasI18n(lView) {
2984
2985
  return (lView[FLAGS] & 32 /* LViewFlags.HasI18n */) === 32 /* LViewFlags.HasI18n */;
2985
2986
  }
2986
2987
  function isDestroyed(lView) {
2988
+ // Determines whether a given LView is marked as destroyed.
2987
2989
  return (lView[FLAGS] & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */;
2988
2990
  }
2989
2991
 
@@ -3429,7 +3431,7 @@ function requiresRefreshOrTraversal(lView) {
3429
3431
  * parents above.
3430
3432
  */
3431
3433
  function updateAncestorTraversalFlagsOnAttach(lView) {
3432
- lView[ENVIRONMENT].changeDetectionScheduler?.notify(9 /* NotificationSource.ViewAttached */);
3434
+ lView[ENVIRONMENT].changeDetectionScheduler?.notify(8 /* NotificationSource.ViewAttached */);
3433
3435
  if (lView[FLAGS] & 64 /* LViewFlags.Dirty */) {
3434
3436
  lView[FLAGS] |= 1024 /* LViewFlags.RefreshView */;
3435
3437
  }
@@ -3464,7 +3466,7 @@ function markAncestorsForTraversal(lView) {
3464
3466
  * Stores a LView-specific destroy callback.
3465
3467
  */
3466
3468
  function storeLViewOnDestroy(lView, onDestroyCallback) {
3467
- if ((lView[FLAGS] & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */) {
3469
+ if (isDestroyed(lView)) {
3468
3470
  throw new RuntimeError(911 /* RuntimeErrorCode.VIEW_ALREADY_DESTROYED */, ngDevMode && 'View has already been destroyed.');
3469
3471
  }
3470
3472
  if (lView[ON_DESTROY_HOOKS] === null) {
@@ -6138,7 +6140,7 @@ class PendingTasks {
6138
6140
  return;
6139
6141
  }
6140
6142
  // Notifying the scheduler will hold application stability open until the next tick.
6141
- this.scheduler.notify(12 /* NotificationSource.PendingTaskRemoved */);
6143
+ this.scheduler.notify(11 /* NotificationSource.PendingTaskRemoved */);
6142
6144
  this.internalPendingTasks.remove(taskId);
6143
6145
  };
6144
6146
  }
@@ -6180,7 +6182,8 @@ class PendingTasks {
6180
6182
  }
6181
6183
 
6182
6184
  class EventEmitter_ extends Subject {
6183
- __isAsync; // tslint:disable-line
6185
+ // tslint:disable-next-line:require-internal-with-underscore
6186
+ __isAsync;
6184
6187
  destroyRef = undefined;
6185
6188
  pendingTasks = undefined;
6186
6189
  constructor(isAsync = false) {
@@ -6516,7 +6519,7 @@ class NgZone {
6516
6519
  * Executes the `fn` function synchronously within the Angular zone as a task and returns value
6517
6520
  * returned by the function.
6518
6521
  *
6519
- * Running functions via `run` allows you to reenter Angular zone from a task that was executed
6522
+ * Running functions via `runTask` allows you to reenter Angular zone from a task that was executed
6520
6523
  * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
6521
6524
  *
6522
6525
  * Any future tasks or microtasks scheduled from within this function will continue executing from
@@ -8586,6 +8589,23 @@ function assertNotInReactiveContext(debugFn, extraContext) {
8586
8589
  }
8587
8590
  }
8588
8591
 
8592
+ class ViewContext {
8593
+ view;
8594
+ node;
8595
+ constructor(view, node) {
8596
+ this.view = view;
8597
+ this.node = node;
8598
+ }
8599
+ /**
8600
+ * @internal
8601
+ * @nocollapse
8602
+ */
8603
+ static __NG_ELEMENT_ID__ = injectViewContext;
8604
+ }
8605
+ function injectViewContext() {
8606
+ return new ViewContext(getLView(), getCurrentTNode());
8607
+ }
8608
+
8589
8609
  /**
8590
8610
  * The phase to run an `afterRender` or `afterNextRender` callback in.
8591
8611
  *
@@ -8716,21 +8736,32 @@ class AfterRenderImpl {
8716
8736
  this.sequences.add(sequence);
8717
8737
  }
8718
8738
  if (this.deferredRegistrations.size > 0) {
8719
- this.scheduler.notify(8 /* NotificationSource.DeferredRenderHook */);
8739
+ this.scheduler.notify(7 /* NotificationSource.RenderHook */);
8720
8740
  }
8721
8741
  this.deferredRegistrations.clear();
8722
8742
  }
8723
8743
  register(sequence) {
8724
- if (!this.executing) {
8725
- this.sequences.add(sequence);
8726
- // Trigger an `ApplicationRef.tick()` if one is not already pending/running, because we have a
8727
- // new render hook that needs to run.
8728
- this.scheduler.notify(7 /* NotificationSource.RenderHook */);
8744
+ const { view } = sequence;
8745
+ if (view !== undefined) {
8746
+ // Delay adding it to the manager, add it to the view instead.
8747
+ (view[AFTER_RENDER_SEQUENCES_TO_ADD] ??= []).push(sequence);
8748
+ // Mark the view for traversal to ensure we eventually schedule the afterNextRender.
8749
+ markAncestorsForTraversal(view);
8750
+ view[FLAGS] |= 8192 /* LViewFlags.HasChildViewsToRefresh */;
8751
+ }
8752
+ else if (!this.executing) {
8753
+ this.addSequence(sequence);
8729
8754
  }
8730
8755
  else {
8731
8756
  this.deferredRegistrations.add(sequence);
8732
8757
  }
8733
8758
  }
8759
+ addSequence(sequence) {
8760
+ this.sequences.add(sequence);
8761
+ // Trigger an `ApplicationRef.tick()` if one is not already pending/running, because we have a
8762
+ // new render hook that needs to run.
8763
+ this.scheduler.notify(7 /* NotificationSource.RenderHook */);
8764
+ }
8734
8765
  unregister(sequence) {
8735
8766
  if (this.executing && this.sequences.has(sequence)) {
8736
8767
  // We can't remove an `AfterRenderSequence` in the middle of iteration.
@@ -8760,6 +8791,7 @@ class AfterRenderImpl {
8760
8791
  class AfterRenderSequence {
8761
8792
  impl;
8762
8793
  hooks;
8794
+ view;
8763
8795
  once;
8764
8796
  snapshot;
8765
8797
  /**
@@ -8773,9 +8805,10 @@ class AfterRenderSequence {
8773
8805
  */
8774
8806
  pipelinedValue = undefined;
8775
8807
  unregisterOnDestroy;
8776
- constructor(impl, hooks, once, destroyRef, snapshot = null) {
8808
+ constructor(impl, hooks, view, once, destroyRef, snapshot = null) {
8777
8809
  this.impl = impl;
8778
8810
  this.hooks = hooks;
8811
+ this.view = view;
8779
8812
  this.once = once;
8780
8813
  this.snapshot = snapshot;
8781
8814
  this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
@@ -8793,6 +8826,10 @@ class AfterRenderSequence {
8793
8826
  destroy() {
8794
8827
  this.impl.unregister(this);
8795
8828
  this.unregisterOnDestroy?.();
8829
+ const scheduled = this.view?.[AFTER_RENDER_SEQUENCES_TO_ADD];
8830
+ if (scheduled) {
8831
+ this.view[AFTER_RENDER_SEQUENCES_TO_ADD] = scheduled.filter((s) => s !== this);
8832
+ }
8796
8833
  }
8797
8834
  }
8798
8835
 
@@ -8843,7 +8880,8 @@ function afterRenderImpl(callbackOrSpec, injector, options, once) {
8843
8880
  const tracing = injector.get(TracingService, null, { optional: true });
8844
8881
  const hooks = options?.phase ?? AfterRenderPhase.MixedReadWrite;
8845
8882
  const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
8846
- const sequence = new AfterRenderSequence(manager.impl, getHooks(callbackOrSpec, hooks), once, destroyRef, tracing?.snapshot(null));
8883
+ const viewContext = injector.get(ViewContext, null, { optional: true });
8884
+ const sequence = new AfterRenderSequence(manager.impl, getHooks(callbackOrSpec, hooks), viewContext?.view, once, destroyRef, tracing?.snapshot(null));
8847
8885
  manager.impl.register(sequence);
8848
8886
  return sequence;
8849
8887
  }
@@ -9103,6 +9141,18 @@ function isDeferBlock(tView, tNode) {
9103
9141
  }
9104
9142
  return !!tDetails && isTDeferBlockDetails(tDetails);
9105
9143
  }
9144
+ /**
9145
+ * Tracks debugging information about a trigger.
9146
+ * @param tView TView in which the trigger is declared.
9147
+ * @param tNode TNode on which the trigger is declared.
9148
+ * @param textRepresentation Text representation of the trigger to be used for debugging purposes.
9149
+ */
9150
+ function trackTriggerForDebugging(tView, tNode, textRepresentation) {
9151
+ const tDetails = getTDeferBlockDetails(tView, tNode);
9152
+ tDetails.debug ??= {};
9153
+ tDetails.debug.triggers ??= new Set();
9154
+ tDetails.debug.triggers.add(textRepresentation);
9155
+ }
9106
9156
 
9107
9157
  /*!
9108
9158
  * @license
@@ -9303,9 +9353,11 @@ function getTriggerElement(triggerLView, triggerIndex) {
9303
9353
  function registerDomTrigger(initialLView, tNode, triggerIndex, walkUpTimes, registerFn, callback, type) {
9304
9354
  const injector = initialLView[INJECTOR];
9305
9355
  const zone = injector.get(NgZone);
9356
+ let poll;
9306
9357
  function pollDomTrigger() {
9307
9358
  // If the initial view was destroyed, we don't need to do anything.
9308
9359
  if (isDestroyed(initialLView)) {
9360
+ poll.destroy();
9309
9361
  return;
9310
9362
  }
9311
9363
  const lDetails = getLDeferBlockDetails(initialLView, tNode);
@@ -9313,14 +9365,16 @@ function registerDomTrigger(initialLView, tNode, triggerIndex, walkUpTimes, regi
9313
9365
  // If the block was loaded before the trigger was resolved, we don't need to do anything.
9314
9366
  if (renderedState !== DeferBlockInternalState.Initial &&
9315
9367
  renderedState !== DeferBlockState.Placeholder) {
9368
+ poll.destroy();
9316
9369
  return;
9317
9370
  }
9318
9371
  const triggerLView = getTriggerLView(initialLView, tNode, walkUpTimes);
9319
9372
  // Keep polling until we resolve the trigger's LView.
9320
9373
  if (!triggerLView) {
9321
- afterNextRender({ read: pollDomTrigger }, { injector });
9374
+ // Keep polling.
9322
9375
  return;
9323
9376
  }
9377
+ poll.destroy();
9324
9378
  // It's possible that the trigger's view was destroyed before we resolved the trigger element.
9325
9379
  if (isDestroyed(triggerLView)) {
9326
9380
  return;
@@ -9347,7 +9401,7 @@ function registerDomTrigger(initialLView, tNode, triggerIndex, walkUpTimes, regi
9347
9401
  storeTriggerCleanupFn(type, lDetails, cleanup);
9348
9402
  }
9349
9403
  // Begin polling for the trigger.
9350
- afterNextRender({ read: pollDomTrigger }, { injector });
9404
+ poll = afterRender({ read: pollDomTrigger }, { injector });
9351
9405
  }
9352
9406
 
9353
9407
  const DEFER_BLOCK_SSR_ID_ATTRIBUTE = 'ngb';
@@ -9557,7 +9611,6 @@ function retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {
9557
9611
  const rootNgh = rootViewNgh ? `|${rootViewNgh}` : '';
9558
9612
  const remainingNgh = isRootView ? componentViewNgh : rootNgh;
9559
9613
  let data = {};
9560
- let nghDeferData;
9561
9614
  // An element might have an empty `ngh` attribute value (e.g. `<comp ngh="" />`),
9562
9615
  // which means that no special annotations are required. Do not attempt to read
9563
9616
  // from the TransferState in this case.
@@ -9565,7 +9618,6 @@ function retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {
9565
9618
  const transferState = injector.get(TransferState, null, { optional: true });
9566
9619
  if (transferState !== null) {
9567
9620
  const nghData = transferState.get(NGH_DATA_KEY, []);
9568
- nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});
9569
9621
  // The nghAttrValue is always a number referencing an index
9570
9622
  // in the hydration TransferState data.
9571
9623
  data = nghData[Number(nghAttrValue)];
@@ -9725,6 +9777,13 @@ function markRNodeAsSkippedByHydration(node) {
9725
9777
  patchHydrationInfo(node, { status: HydrationStatus.Skipped });
9726
9778
  ngDevMode.componentsSkippedHydration++;
9727
9779
  }
9780
+ function countBlocksSkippedByHydration(injector) {
9781
+ const transferState = injector.get(TransferState);
9782
+ const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});
9783
+ if (ngDevMode) {
9784
+ ngDevMode.deferBlocksWithIncrementalHydration = Object.keys(nghDeferData).length;
9785
+ }
9786
+ }
9728
9787
  function markRNodeAsHavingHydrationMismatch(node, expectedNodeDetails = null, actualNodeDetails = null) {
9729
9788
  if (!ngDevMode) {
9730
9789
  throw new Error('Calling `markRNodeAsMismatchedByHydration` in prod mode ' +
@@ -11656,7 +11715,7 @@ function detachViewFromDOM(tView, lView) {
11656
11715
  // When we remove a view from the DOM, we need to rerun afterRender hooks
11657
11716
  // We don't necessarily needs to run change detection. DOM removal only requires
11658
11717
  // change detection if animations are enabled (this notification is handled by animations).
11659
- lView[ENVIRONMENT].changeDetectionScheduler?.notify(10 /* NotificationSource.ViewDetachedFromDOM */);
11718
+ lView[ENVIRONMENT].changeDetectionScheduler?.notify(9 /* NotificationSource.ViewDetachedFromDOM */);
11660
11719
  applyView(tView, lView, lView[RENDERER], 2 /* WalkTNodeTreeAction.Detach */, null, null);
11661
11720
  }
11662
11721
  /**
@@ -11840,13 +11899,14 @@ function detachView(lContainer, removeIndex) {
11840
11899
  * @param lView The view to be destroyed.
11841
11900
  */
11842
11901
  function destroyLView(tView, lView) {
11843
- if (!(lView[FLAGS] & 256 /* LViewFlags.Destroyed */)) {
11844
- const renderer = lView[RENDERER];
11845
- if (renderer.destroyNode) {
11846
- applyView(tView, lView, renderer, 3 /* WalkTNodeTreeAction.Destroy */, null, null);
11847
- }
11848
- destroyViewTree(lView);
11902
+ if (isDestroyed(lView)) {
11903
+ return;
11904
+ }
11905
+ const renderer = lView[RENDERER];
11906
+ if (renderer.destroyNode) {
11907
+ applyView(tView, lView, renderer, 3 /* WalkTNodeTreeAction.Destroy */, null, null);
11849
11908
  }
11909
+ destroyViewTree(lView);
11850
11910
  }
11851
11911
  /**
11852
11912
  * Calls onDestroys hooks for all directives and pipes in a given view and then removes all
@@ -11857,7 +11917,7 @@ function destroyLView(tView, lView) {
11857
11917
  * @param lView The LView to clean up
11858
11918
  */
11859
11919
  function cleanUpView(tView, lView) {
11860
- if (lView[FLAGS] & 256 /* LViewFlags.Destroyed */) {
11920
+ if (isDestroyed(lView)) {
11861
11921
  return;
11862
11922
  }
11863
11923
  const prevConsumer = setActiveConsumer$1(null);
@@ -14642,6 +14702,15 @@ function collectNativeNodesInLContainer(lContainer, result) {
14642
14702
  }
14643
14703
  }
14644
14704
 
14705
+ function addAfterRenderSequencesForView(lView) {
14706
+ if (lView[AFTER_RENDER_SEQUENCES_TO_ADD] !== null) {
14707
+ for (const sequence of lView[AFTER_RENDER_SEQUENCES_TO_ADD]) {
14708
+ sequence.impl.addSequence(sequence);
14709
+ }
14710
+ lView[AFTER_RENDER_SEQUENCES_TO_ADD].length = 0;
14711
+ }
14712
+ }
14713
+
14645
14714
  let freeConsumers = [];
14646
14715
  /**
14647
14716
  * Create a new template consumer pointing at the specified LView.
@@ -14843,9 +14912,9 @@ function checkNoChangesInternal(lView, mode, notifyErrorHandler = true) {
14843
14912
  */
14844
14913
  function refreshView(tView, lView, templateFn, context) {
14845
14914
  ngDevMode && assertEqual(isCreationMode(lView), false, 'Should be run in update mode');
14846
- const flags = lView[FLAGS];
14847
- if ((flags & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */)
14915
+ if (isDestroyed(lView))
14848
14916
  return;
14917
+ const flags = lView[FLAGS];
14849
14918
  // Check no changes mode is a dev only mode used to verify that bindings have not changed
14850
14919
  // since they were assigned. We do not want to execute lifecycle hooks in that mode.
14851
14920
  const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();
@@ -14987,6 +15056,7 @@ function refreshView(tView, lView, templateFn, context) {
14987
15056
  // no changes cycle, the component would be not be dirty for the next update pass. This would
14988
15057
  // be different in production mode where the component dirty state is not reset.
14989
15058
  if (!isInCheckNoChangesPass) {
15059
+ addAfterRenderSequencesForView(lView);
14990
15060
  lView[FLAGS] &= ~(64 /* LViewFlags.Dirty */ | 8 /* LViewFlags.FirstLViewPass */);
14991
15061
  }
14992
15062
  }
@@ -15102,12 +15172,17 @@ function detectChangesInView(lView, mode) {
15102
15172
  refreshView(tView, lView, tView.template, lView[CONTEXT]);
15103
15173
  }
15104
15174
  else if (flags & 8192 /* LViewFlags.HasChildViewsToRefresh */) {
15105
- runEffectsInView(lView);
15175
+ if (!isInCheckNoChangesPass) {
15176
+ runEffectsInView(lView);
15177
+ }
15106
15178
  detectChangesInEmbeddedViews(lView, 1 /* ChangeDetectionMode.Targeted */);
15107
15179
  const components = tView.components;
15108
15180
  if (components !== null) {
15109
15181
  detectChangesInChildComponents(lView, components, 1 /* ChangeDetectionMode.Targeted */);
15110
15182
  }
15183
+ if (!isInCheckNoChangesPass) {
15184
+ addAfterRenderSequencesForView(lView);
15185
+ }
15111
15186
  }
15112
15187
  }
15113
15188
  /** Refreshes child components in the current view (update mode). */
@@ -15211,7 +15286,7 @@ class ViewRef$1 {
15211
15286
  this._lView[CONTEXT] = value;
15212
15287
  }
15213
15288
  get destroyed() {
15214
- return (this._lView[FLAGS] & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */;
15289
+ return isDestroyed(this._lView);
15215
15290
  }
15216
15291
  destroy() {
15217
15292
  if (this._appRef) {
@@ -16633,11 +16708,15 @@ function gatherDeferBlocksCommentNodes(doc, node) {
16633
16708
  let currentNode;
16634
16709
  const nodesByBlockId = new Map();
16635
16710
  while ((currentNode = commentNodesIterator.nextNode())) {
16636
- // TODO(incremental-hydration: convert this to use string parsing rather than regex
16637
- const regex = new RegExp(/^\s*ngh=(d[0-9]+)/g);
16638
- const result = regex.exec(currentNode?.textContent ?? '');
16639
- if (result && result?.length > 0) {
16640
- nodesByBlockId.set(result[1], currentNode);
16711
+ const nghPattern = 'ngh=';
16712
+ const content = currentNode?.textContent;
16713
+ const nghIdx = content?.indexOf(nghPattern) ?? -1;
16714
+ if (nghIdx > -1) {
16715
+ const nghValue = content.substring(nghIdx + nghPattern.length).trim();
16716
+ // Make sure the value has an expected format.
16717
+ ngDevMode &&
16718
+ assertEqual(nghValue.startsWith('d'), true, 'Invalid defer block id found in a comment node.');
16719
+ nodesByBlockId.set(nghValue, currentNode);
16641
16720
  }
16642
16721
  }
16643
16722
  return nodesByBlockId;
@@ -18088,7 +18167,7 @@ function createRootComponent(componentView, rootComponentDef, rootDirectives, ho
18088
18167
  function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
18089
18168
  if (rootSelectorOrNode) {
18090
18169
  // The placeholder will be replaced with the actual version at build time.
18091
- setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.1.0-next.3']);
18170
+ setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.1.0-rc.0']);
18092
18171
  }
18093
18172
  else {
18094
18173
  // If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
@@ -19687,7 +19766,6 @@ class NgModuleRef extends NgModuleRef$1 {
19687
19766
  _parent;
19688
19767
  // tslint:disable-next-line:require-internal-with-underscore
19689
19768
  _bootstrapComponents = [];
19690
- // tslint:disable-next-line:require-internal-with-underscore
19691
19769
  _r3Injector;
19692
19770
  instance;
19693
19771
  destroyCbs = [];
@@ -21175,7 +21253,8 @@ class CachedInjectorService {
21175
21253
  *
21176
21254
  * This token is only injected in devMode
21177
21255
  */
21178
- const DEFER_BLOCK_DEPENDENCY_INTERCEPTOR = new InjectionToken('DEFER_BLOCK_DEPENDENCY_INTERCEPTOR');
21256
+ const DEFER_BLOCK_DEPENDENCY_INTERCEPTOR =
21257
+ /* @__PURE__ */ new InjectionToken('DEFER_BLOCK_DEPENDENCY_INTERCEPTOR');
21179
21258
  /**
21180
21259
  * **INTERNAL**, token used for configuring defer block behavior.
21181
21260
  */
@@ -21285,15 +21364,8 @@ function renderDeferBlockState(newState, tNode, lContainer, skipTimerScheduling
21285
21364
  }
21286
21365
  }
21287
21366
  function findMatchingDehydratedViewForDeferBlock(lContainer, lDetails) {
21288
- // TODO(incremental-hydration): extract into a separate util function and use in relevant places.
21289
- const views = lContainer[DEHYDRATED_VIEWS];
21290
- if (views === null || views.length === 0) {
21291
- return null;
21292
- }
21293
21367
  // Find matching view based on serialized defer block state.
21294
- // TODO(incremental-hydration): reconcile this logic with the regular logic that looks up
21295
- // dehydrated views to see if there is anything missing in this function.
21296
- return (views.find((view) => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? null);
21368
+ return (lContainer[DEHYDRATED_VIEWS]?.find((view) => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? null);
21297
21369
  }
21298
21370
  /**
21299
21371
  * Applies changes to the DOM to reflect a given state.
@@ -21325,30 +21397,22 @@ function applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView)
21325
21397
  }
21326
21398
  }
21327
21399
  const dehydratedView = findMatchingDehydratedViewForDeferBlock(lContainer, lDetails);
21328
- // Render either when we don't have dehydrated views at all (e.g. client rendering)
21329
- // or when dehydrated view is found (in which case we hydrate).
21330
- // Otherwise, do nothing, since we'd end up erasing SSR'ed content.
21331
- // TODO(incremental-hydration): Use the util function for checking dehydrated views mentioned above
21332
- const isClientOnly = lContainer[DEHYDRATED_VIEWS] === null || lContainer[DEHYDRATED_VIEWS].length === 0;
21333
- if (isClientOnly || dehydratedView) {
21334
- // Erase dehydrated view info, so that it's not removed later
21335
- // by post-hydration cleanup process.
21336
- // TODO(incremental-hydration): we need a better mechanism here.
21337
- lContainer[DEHYDRATED_VIEWS] = null;
21338
- const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {
21339
- injector,
21340
- dehydratedView,
21341
- });
21342
- addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));
21343
- markViewDirty(embeddedLView, 2 /* NotificationSource.DeferBlockStateUpdate */);
21344
- }
21400
+ // Erase dehydrated view info, so that it's not removed later
21401
+ // by post-hydration cleanup process.
21402
+ lContainer[DEHYDRATED_VIEWS] = null;
21403
+ const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {
21404
+ injector,
21405
+ dehydratedView,
21406
+ });
21407
+ addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));
21408
+ markViewDirty(embeddedLView, 2 /* NotificationSource.DeferBlockStateUpdate */);
21345
21409
  // TODO(incremental-hydration):
21346
21410
  // - what if we had some views in `lContainer[DEHYDRATED_VIEWS]`, but
21347
21411
  // we didn't find a view that matches the expected state?
21348
21412
  // - for example, handle a situation when a block was in the "completed" state
21349
21413
  // on the server, but the loading failing on the client. How do we reconcile and cleanup?
21350
- // TODO(incremental-hydration): should we also invoke if newState === DeferBlockState.Error?
21351
- if (newState === DeferBlockState.Complete && Array.isArray(lDetails[ON_COMPLETE_FNS])) {
21414
+ if ((newState === DeferBlockState.Complete || newState === DeferBlockState.Error) &&
21415
+ Array.isArray(lDetails[ON_COMPLETE_FNS])) {
21352
21416
  for (const callback of lDetails[ON_COMPLETE_FNS]) {
21353
21417
  callback();
21354
21418
  }
@@ -21582,7 +21646,6 @@ class Console {
21582
21646
  }
21583
21647
  // Note: for reporting errors use `DOM.logError()` as it is platform specific
21584
21648
  warn(message) {
21585
- // tslint:disable-next-line:no-console
21586
21649
  console.warn(message);
21587
21650
  }
21588
21651
  static ɵfac = function Console_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || Console)(); };
@@ -21869,6 +21932,162 @@ function detectChanges(component) {
21869
21932
  detectChangesInternal(view);
21870
21933
  }
21871
21934
 
21935
+ /**
21936
+ * Retrieves all defer blocks in a given LView.
21937
+ *
21938
+ * @param lView lView with defer blocks
21939
+ * @param deferBlocks defer block aggregator array
21940
+ */
21941
+ function getDeferBlocks$1(lView, deferBlocks) {
21942
+ const tView = lView[TVIEW];
21943
+ for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
21944
+ if (isLContainer(lView[i])) {
21945
+ const lContainer = lView[i];
21946
+ // An LContainer may represent an instance of a defer block, in which case
21947
+ // we store it as a result. Otherwise, keep iterating over LContainer views and
21948
+ // look for defer blocks.
21949
+ const isLast = i === tView.bindingStartIndex - 1;
21950
+ if (!isLast) {
21951
+ const tNode = tView.data[i];
21952
+ const tDetails = getTDeferBlockDetails(tView, tNode);
21953
+ if (isTDeferBlockDetails(tDetails)) {
21954
+ deferBlocks.push({ lContainer, lView, tNode, tDetails });
21955
+ // This LContainer represents a defer block, so we exit
21956
+ // this iteration and don't inspect views in this LContainer.
21957
+ continue;
21958
+ }
21959
+ }
21960
+ for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
21961
+ getDeferBlocks$1(lContainer[i], deferBlocks);
21962
+ }
21963
+ }
21964
+ else if (isLView(lView[i])) {
21965
+ // This is a component, enter the `getDeferBlocks` recursively.
21966
+ getDeferBlocks$1(lView[i], deferBlocks);
21967
+ }
21968
+ }
21969
+ }
21970
+
21971
+ /*!
21972
+ * @license
21973
+ * Copyright Google LLC All Rights Reserved.
21974
+ *
21975
+ * Use of this source code is governed by an MIT-style license that can be
21976
+ * found in the LICENSE file at https://angular.dev/license
21977
+ */
21978
+ /**
21979
+ * Gets all of the `@defer` blocks that are present inside the specified DOM node.
21980
+ * @param node Node in which to look for `@defer` blocks.
21981
+ *
21982
+ * @publicApi
21983
+ */
21984
+ function getDeferBlocks(node) {
21985
+ const results = [];
21986
+ const lView = getLContext(node)?.lView;
21987
+ if (lView) {
21988
+ findDeferBlocks(node, lView, results);
21989
+ }
21990
+ return results;
21991
+ }
21992
+ /**
21993
+ * Finds all the `@defer` blocks inside a specific node and view.
21994
+ * @param node Node in which to search for blocks.
21995
+ * @param lView View within the node in which to search for blocks.
21996
+ * @param results Array to which to add blocks once they're found.
21997
+ */
21998
+ function findDeferBlocks(node, lView, results) {
21999
+ const registry = lView[INJECTOR].get(DEHYDRATED_BLOCK_REGISTRY, null, { optional: true });
22000
+ const blocks = [];
22001
+ getDeferBlocks$1(lView, blocks);
22002
+ for (const details of blocks) {
22003
+ const native = getNativeByTNode(details.tNode, details.lView);
22004
+ const lDetails = getLDeferBlockDetails(details.lView, details.tNode);
22005
+ // The LView from `getLContext` might be the view the element is placed in.
22006
+ // Filter out defer blocks that aren't inside the specified root node.
22007
+ if (!node.contains(native)) {
22008
+ continue;
22009
+ }
22010
+ const tDetails = details.tDetails;
22011
+ const renderedLView = getRendererLView(details);
22012
+ const rootNodes = [];
22013
+ if (renderedLView !== null) {
22014
+ collectNativeNodes(renderedLView[TVIEW], renderedLView, renderedLView[TVIEW].firstChild, rootNodes);
22015
+ }
22016
+ const data = {
22017
+ state: stringifyState(lDetails[DEFER_BLOCK_STATE]),
22018
+ incrementalHydrationState: inferHydrationState(tDetails, lDetails, registry),
22019
+ hasErrorBlock: tDetails.errorTmplIndex !== null,
22020
+ loadingBlock: {
22021
+ exists: tDetails.loadingTmplIndex !== null,
22022
+ minimumTime: tDetails.loadingBlockConfig?.[MINIMUM_SLOT] ?? null,
22023
+ afterTime: tDetails.loadingBlockConfig?.[LOADING_AFTER_SLOT] ?? null,
22024
+ },
22025
+ placeholderBlock: {
22026
+ exists: tDetails.placeholderTmplIndex !== null,
22027
+ minimumTime: tDetails.placeholderBlockConfig?.[MINIMUM_SLOT] ?? null,
22028
+ },
22029
+ triggers: tDetails.debug?.triggers ? Array.from(tDetails.debug.triggers).sort() : [],
22030
+ rootNodes,
22031
+ };
22032
+ results.push(data);
22033
+ // `getDeferBlocks` does not resolve nested defer blocks so we have to recurse manually.
22034
+ if (renderedLView !== null) {
22035
+ findDeferBlocks(node, renderedLView, results);
22036
+ }
22037
+ }
22038
+ }
22039
+ /**
22040
+ * Turns the `DeferBlockState` into a string which is more readable than the enum form.
22041
+ *
22042
+ * @param lDetails Information about the
22043
+ * @returns
22044
+ */
22045
+ function stringifyState(state) {
22046
+ switch (state) {
22047
+ case DeferBlockState.Complete:
22048
+ return 'complete';
22049
+ case DeferBlockState.Loading:
22050
+ return 'loading';
22051
+ case DeferBlockState.Placeholder:
22052
+ return 'placeholder';
22053
+ case DeferBlockState.Error:
22054
+ return 'error';
22055
+ case DeferBlockInternalState.Initial:
22056
+ return 'initial';
22057
+ default:
22058
+ throw new Error(`Unrecognized state ${state}`);
22059
+ }
22060
+ }
22061
+ /**
22062
+ * Infers the hydration state of a specific defer block.
22063
+ * @param tDetails Static defer block information.
22064
+ * @param lDetails Instance defer block information.
22065
+ * @param registry Registry coordinating the hydration of defer blocks.
22066
+ */
22067
+ function inferHydrationState(tDetails, lDetails, registry) {
22068
+ if (registry === null ||
22069
+ lDetails[SSR_UNIQUE_ID] === null ||
22070
+ tDetails.hydrateTriggers === null ||
22071
+ tDetails.hydrateTriggers.has(7 /* DeferBlockTrigger.Never */)) {
22072
+ return 'not-configured';
22073
+ }
22074
+ return registry.has(lDetails[SSR_UNIQUE_ID]) ? 'dehydrated' : 'hydrated';
22075
+ }
22076
+ /**
22077
+ * Gets the current LView that is rendered out in a defer block.
22078
+ * @param details Instance information about the block.
22079
+ */
22080
+ function getRendererLView(details) {
22081
+ // Defer block containers can only ever contain one view.
22082
+ // If they're empty, it means that nothing is rendered.
22083
+ if (details.lContainer.length <= CONTAINER_HEADER_OFFSET) {
22084
+ return null;
22085
+ }
22086
+ const lView = details.lContainer[CONTAINER_HEADER_OFFSET];
22087
+ ngDevMode && assertLView(lView);
22088
+ return lView;
22089
+ }
22090
+
21872
22091
  /**
21873
22092
  * Discovers the dependencies of an injectable instance. Provides DI information about each
21874
22093
  * dependency that the injectable was instantiated with, including where they were provided from.
@@ -22553,6 +22772,7 @@ const globalUtilsFunctions = {
22553
22772
  'ɵgetInjectorMetadata': getInjectorMetadata,
22554
22773
  'ɵsetProfiler': setProfiler,
22555
22774
  'ɵgetSignalGraph': getSignalGraph,
22775
+ 'ɵgetDeferBlocks': getDeferBlocks,
22556
22776
  'getDirectiveMetadata': getDirectiveMetadata$1,
22557
22777
  'getComponent': getComponent,
22558
22778
  'getContext': getContext,
@@ -22882,6 +23102,77 @@ function isSubscribable(obj) {
22882
23102
  return !!obj && typeof obj.subscribe === 'function';
22883
23103
  }
22884
23104
 
23105
+ /**
23106
+ * A scheduler which manages the execution of effects.
23107
+ */
23108
+ class EffectScheduler {
23109
+ /** @nocollapse */
23110
+ static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ ɵɵdefineInjectable({
23111
+ token: EffectScheduler,
23112
+ providedIn: 'root',
23113
+ factory: () => new ZoneAwareEffectScheduler(),
23114
+ });
23115
+ }
23116
+ /**
23117
+ * A wrapper around `ZoneAwareQueueingScheduler` that schedules flushing via the microtask queue
23118
+ * when.
23119
+ */
23120
+ class ZoneAwareEffectScheduler {
23121
+ queuedEffectCount = 0;
23122
+ queues = new Map();
23123
+ schedule(handle) {
23124
+ this.enqueue(handle);
23125
+ }
23126
+ remove(handle) {
23127
+ const zone = handle.zone;
23128
+ const queue = this.queues.get(zone);
23129
+ if (!queue.has(handle)) {
23130
+ return;
23131
+ }
23132
+ queue.delete(handle);
23133
+ this.queuedEffectCount--;
23134
+ }
23135
+ enqueue(handle) {
23136
+ const zone = handle.zone;
23137
+ if (!this.queues.has(zone)) {
23138
+ this.queues.set(zone, new Set());
23139
+ }
23140
+ const queue = this.queues.get(zone);
23141
+ if (queue.has(handle)) {
23142
+ return;
23143
+ }
23144
+ this.queuedEffectCount++;
23145
+ queue.add(handle);
23146
+ }
23147
+ /**
23148
+ * Run all scheduled effects.
23149
+ *
23150
+ * Execution order of effects within the same zone is guaranteed to be FIFO, but there is no
23151
+ * ordering guarantee between effects scheduled in different zones.
23152
+ */
23153
+ flush() {
23154
+ while (this.queuedEffectCount > 0) {
23155
+ for (const [zone, queue] of this.queues) {
23156
+ // `zone` here must be defined.
23157
+ if (zone === null) {
23158
+ this.flushQueue(queue);
23159
+ }
23160
+ else {
23161
+ zone.run(() => this.flushQueue(queue));
23162
+ }
23163
+ }
23164
+ }
23165
+ }
23166
+ flushQueue(queue) {
23167
+ for (const handle of queue) {
23168
+ queue.delete(handle);
23169
+ this.queuedEffectCount--;
23170
+ // TODO: what happens if this throws an error?
23171
+ handle.run();
23172
+ }
23173
+ }
23174
+ }
23175
+
22885
23176
  /**
22886
23177
  * A DI token that you can use to provide
22887
23178
  * one or more initialization functions.
@@ -23126,68 +23417,6 @@ class ApplicationInitStatus {
23126
23417
  args: [{ providedIn: 'root' }]
23127
23418
  }], () => [], null); })();
23128
23419
 
23129
- /**
23130
- * A scheduler which manages the execution of effects.
23131
- */
23132
- class EffectScheduler {
23133
- /** @nocollapse */
23134
- static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ ɵɵdefineInjectable({
23135
- token: EffectScheduler,
23136
- providedIn: 'root',
23137
- factory: () => new ZoneAwareEffectScheduler(),
23138
- });
23139
- }
23140
- /**
23141
- * A wrapper around `ZoneAwareQueueingScheduler` that schedules flushing via the microtask queue
23142
- * when.
23143
- */
23144
- class ZoneAwareEffectScheduler {
23145
- queuedEffectCount = 0;
23146
- queues = new Map();
23147
- schedule(handle) {
23148
- this.enqueue(handle);
23149
- }
23150
- enqueue(handle) {
23151
- const zone = handle.zone;
23152
- if (!this.queues.has(zone)) {
23153
- this.queues.set(zone, new Set());
23154
- }
23155
- const queue = this.queues.get(zone);
23156
- if (queue.has(handle)) {
23157
- return;
23158
- }
23159
- this.queuedEffectCount++;
23160
- queue.add(handle);
23161
- }
23162
- /**
23163
- * Run all scheduled effects.
23164
- *
23165
- * Execution order of effects within the same zone is guaranteed to be FIFO, but there is no
23166
- * ordering guarantee between effects scheduled in different zones.
23167
- */
23168
- flush() {
23169
- while (this.queuedEffectCount > 0) {
23170
- for (const [zone, queue] of this.queues) {
23171
- // `zone` here must be defined.
23172
- if (zone === null) {
23173
- this.flushQueue(queue);
23174
- }
23175
- else {
23176
- zone.run(() => this.flushQueue(queue));
23177
- }
23178
- }
23179
- }
23180
- }
23181
- flushQueue(queue) {
23182
- for (const handle of queue) {
23183
- queue.delete(handle);
23184
- this.queuedEffectCount--;
23185
- // TODO: what happens if this throws an error?
23186
- handle.run();
23187
- }
23188
- }
23189
- }
23190
-
23191
23420
  /**
23192
23421
  * A DI token that provides a set of callbacks to
23193
23422
  * be called for every component that is bootstrapped.
@@ -23365,12 +23594,6 @@ class ApplicationRef {
23365
23594
  * @internal
23366
23595
  */
23367
23596
  dirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;
23368
- /**
23369
- * Like `dirtyFlags` but don't cause `tick()` to loop.
23370
- *
23371
- * @internal
23372
- */
23373
- deferredDirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;
23374
23597
  /**
23375
23598
  * Most recent snapshot from the `TracingService`, if any.
23376
23599
  *
@@ -23475,7 +23698,7 @@ class ApplicationRef {
23475
23698
  * {@example core/ts/platform/platform.ts region='domNode'}
23476
23699
  */
23477
23700
  bootstrap(componentOrFactory, rootSelectorOrNode) {
23478
- (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();
23701
+ (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);
23479
23702
  const isComponentFactory = componentOrFactory instanceof ComponentFactory$1;
23480
23703
  const initStatus = this._injector.get(ApplicationInitStatus);
23481
23704
  if (!initStatus.done) {
@@ -23545,7 +23768,7 @@ class ApplicationRef {
23545
23768
  snapshot.dispose();
23546
23769
  return;
23547
23770
  }
23548
- (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();
23771
+ (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);
23549
23772
  if (this._runningTick) {
23550
23773
  throw new RuntimeError(101 /* RuntimeErrorCode.RECURSIVE_APPLICATION_REF_TICK */, ngDevMode && 'ApplicationRef.tick is called recursively');
23551
23774
  }
@@ -23577,9 +23800,6 @@ class ApplicationRef {
23577
23800
  if (this._rendererFactory === null && !this._injector.destroyed) {
23578
23801
  this._rendererFactory = this._injector.get(RendererFactory2, null, { optional: true });
23579
23802
  }
23580
- // When beginning synchronization, all deferred dirtiness becomes active dirtiness.
23581
- this.dirtyFlags |= this.deferredDirtyFlags;
23582
- this.deferredDirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;
23583
23803
  let runs = 0;
23584
23804
  while (this.dirtyFlags !== 0 /* ApplicationRefDirtyFlags.None */ && runs++ < MAXIMUM_REFRESH_RERUNS) {
23585
23805
  this.synchronizeOnce();
@@ -23595,9 +23815,6 @@ class ApplicationRef {
23595
23815
  * Perform a single synchronization pass.
23596
23816
  */
23597
23817
  synchronizeOnce() {
23598
- // If we happened to loop, deferred dirtiness can be processed as active dirtiness again.
23599
- this.dirtyFlags |= this.deferredDirtyFlags;
23600
- this.deferredDirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;
23601
23818
  // First, process any dirty root effects.
23602
23819
  if (this.dirtyFlags & 16 /* ApplicationRefDirtyFlags.RootEffects */) {
23603
23820
  this.dirtyFlags &= ~16 /* ApplicationRefDirtyFlags.RootEffects */;
@@ -23676,7 +23893,7 @@ class ApplicationRef {
23676
23893
  * This will throw if the view is already attached to a ViewContainer.
23677
23894
  */
23678
23895
  attachView(viewRef) {
23679
- (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();
23896
+ (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);
23680
23897
  const view = viewRef;
23681
23898
  this._views.push(view);
23682
23899
  view.attachToAppRef(this);
@@ -23685,7 +23902,7 @@ class ApplicationRef {
23685
23902
  * Detaches a view from dirty checking again.
23686
23903
  */
23687
23904
  detachView(viewRef) {
23688
- (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();
23905
+ (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);
23689
23906
  const view = viewRef;
23690
23907
  remove(this._views, view);
23691
23908
  view.detachFromAppRef();
@@ -23729,7 +23946,7 @@ class ApplicationRef {
23729
23946
  * @returns A function which unregisters a listener.
23730
23947
  */
23731
23948
  onDestroy(callback) {
23732
- (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();
23949
+ (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);
23733
23950
  this._destroyListeners.push(callback);
23734
23951
  return () => remove(this._destroyListeners, callback);
23735
23952
  }
@@ -23756,11 +23973,6 @@ class ApplicationRef {
23756
23973
  get viewCount() {
23757
23974
  return this._views.length;
23758
23975
  }
23759
- warnIfDestroyed() {
23760
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && this._destroyed) {
23761
- console.warn(formatRuntimeError(406 /* RuntimeErrorCode.APPLICATION_REF_ALREADY_DESTROYED */, 'This instance of the `ApplicationRef` has already been destroyed.'));
23762
- }
23763
- }
23764
23976
  static ɵfac = function ApplicationRef_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ApplicationRef)(); };
23765
23977
  static ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac, providedIn: 'root' });
23766
23978
  }
@@ -23768,6 +23980,11 @@ class ApplicationRef {
23768
23980
  type: Injectable,
23769
23981
  args: [{ providedIn: 'root' }]
23770
23982
  }], () => [], null); })();
23983
+ function warnIfDestroyed(destroyed) {
23984
+ if (destroyed) {
23985
+ console.warn(formatRuntimeError(406 /* RuntimeErrorCode.APPLICATION_REF_ALREADY_DESTROYED */, 'This instance of the `ApplicationRef` has already been destroyed.'));
23986
+ }
23987
+ }
23771
23988
  function remove(list, el) {
23772
23989
  const index = list.indexOf(el);
23773
23990
  if (index > -1) {
@@ -23793,9 +24010,14 @@ function detectChangesInViewIfRequired(lView, notifyErrorHandler, isFirstPass, z
23793
24010
  function scheduleDelayedTrigger(scheduleFn) {
23794
24011
  const lView = getLView();
23795
24012
  const tNode = getCurrentTNode();
24013
+ renderPlaceholder(lView, tNode);
24014
+ // Exit early to avoid invoking `scheduleFn`, which would
24015
+ // add `setTimeout` call and potentially delay serialization
24016
+ // on the server unnecessarily.
24017
+ if (!shouldTriggerDeferBlock(0 /* TriggerType.Regular */, lView))
24018
+ return;
23796
24019
  const injector = lView[INJECTOR];
23797
24020
  const lDetails = getLDeferBlockDetails(lView, tNode);
23798
- renderPlaceholder(lView, tNode);
23799
24021
  const cleanupFn = scheduleFn(() => triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode), injector);
23800
24022
  storeTriggerCleanupFn(0 /* TriggerType.Regular */, lDetails, cleanupFn);
23801
24023
  }
@@ -23923,7 +24145,7 @@ function triggerResourceLoading(tDetails, lView, tNode) {
23923
24145
  tDetails.loadingState = DeferDependenciesLoadingState.FAILED;
23924
24146
  if (tDetails.errorTmplIndex === null) {
23925
24147
  const templateLocation = ngDevMode ? getTemplateLocationDetails(lView) : '';
23926
- const error = new RuntimeError(750 /* RuntimeErrorCode.DEFER_LOADING_FAILED */, ngDevMode &&
24148
+ const error = new RuntimeError(-750 /* RuntimeErrorCode.DEFER_LOADING_FAILED */, ngDevMode &&
23927
24149
  'Loading dependencies for `@defer` block failed, ' +
23928
24150
  `but no \`@error\` block was configured${templateLocation}. ` +
23929
24151
  'Consider using the `@error` block to render an error state.');
@@ -24077,30 +24299,25 @@ function populateHydratingStateForQueue(registry, queue) {
24077
24299
  }
24078
24300
  // Waits for the next render cycle to complete
24079
24301
  function nextRender(injector) {
24080
- let resolve;
24081
- const promise = new Promise((resolveFn) => {
24082
- resolve = resolveFn;
24083
- });
24084
- afterNextRender(() => resolve(), { injector });
24085
- return promise;
24302
+ return new Promise((resolveFn) => afterNextRender(resolveFn, { injector }));
24086
24303
  }
24087
- function triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry) {
24088
- let resolve;
24089
- const promise = new Promise((resolveFn) => (resolve = resolveFn));
24304
+ async function triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry) {
24090
24305
  const deferBlock = dehydratedBlockRegistry.get(dehydratedBlockId);
24091
24306
  // Since we trigger hydration for nested defer blocks in a sequence (parent -> child),
24092
24307
  // there is a chance that a defer block may not be present at hydration time. For example,
24093
24308
  // when a nested block was in an `@if` condition, which has changed.
24094
- if (deferBlock !== null) {
24095
- const { tNode, lView } = deferBlock;
24096
- const lDetails = getLDeferBlockDetails(lView, tNode);
24097
- onDeferBlockCompletion(lDetails, () => resolve());
24098
- triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);
24309
+ if (deferBlock === null) {
24099
24310
  // TODO(incremental-hydration): handle the cleanup for cases when
24100
24311
  // defer block is no longer present during hydration (e.g. `@if` condition
24101
24312
  // has changed during hydration/rendering).
24313
+ return;
24102
24314
  }
24103
- return promise;
24315
+ const { tNode, lView } = deferBlock;
24316
+ const lDetails = getLDeferBlockDetails(lView, tNode);
24317
+ return new Promise((resolve) => {
24318
+ onDeferBlockCompletion(lDetails, resolve);
24319
+ triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);
24320
+ });
24104
24321
  }
24105
24322
  /**
24106
24323
  * Registers cleanup functions for a defer block when the block has finished
@@ -24278,7 +24495,7 @@ function ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplInd
24278
24495
  loadingPromise: null,
24279
24496
  providers: null,
24280
24497
  hydrateTriggers: null,
24281
- prefetchTriggers: null,
24498
+ debug: null,
24282
24499
  flags: flags ?? 0 /* TDeferDetailsFlags.Default */,
24283
24500
  };
24284
24501
  enableTimerScheduling?.(tView, tDetails, placeholderConfigIndex, loadingConfigIndex);
@@ -24335,6 +24552,9 @@ function ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplInd
24335
24552
  function ɵɵdeferWhen(rawValue) {
24336
24553
  const lView = getLView();
24337
24554
  const tNode = getSelectedTNode();
24555
+ if (ngDevMode) {
24556
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'when <expression>');
24557
+ }
24338
24558
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24339
24559
  return;
24340
24560
  const bindingIndex = nextBindingIndex();
@@ -24366,6 +24586,9 @@ function ɵɵdeferWhen(rawValue) {
24366
24586
  function ɵɵdeferPrefetchWhen(rawValue) {
24367
24587
  const lView = getLView();
24368
24588
  const tNode = getSelectedTNode();
24589
+ if (ngDevMode) {
24590
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch when <expression>');
24591
+ }
24369
24592
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24370
24593
  return;
24371
24594
  const bindingIndex = nextBindingIndex();
@@ -24393,6 +24616,9 @@ function ɵɵdeferPrefetchWhen(rawValue) {
24393
24616
  function ɵɵdeferHydrateWhen(rawValue) {
24394
24617
  const lView = getLView();
24395
24618
  const tNode = getSelectedTNode();
24619
+ if (ngDevMode) {
24620
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate when <expression>');
24621
+ }
24396
24622
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24397
24623
  return;
24398
24624
  // TODO(incremental-hydration): audit all defer instructions to reduce unnecessary work by
@@ -24434,6 +24660,9 @@ function ɵɵdeferHydrateWhen(rawValue) {
24434
24660
  function ɵɵdeferHydrateNever() {
24435
24661
  const lView = getLView();
24436
24662
  const tNode = getCurrentTNode();
24663
+ if (ngDevMode) {
24664
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate never');
24665
+ }
24437
24666
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24438
24667
  return;
24439
24668
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24450,6 +24679,9 @@ function ɵɵdeferHydrateNever() {
24450
24679
  function ɵɵdeferOnIdle() {
24451
24680
  const lView = getLView();
24452
24681
  const tNode = getCurrentTNode();
24682
+ if (ngDevMode) {
24683
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'on idle');
24684
+ }
24453
24685
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24454
24686
  return;
24455
24687
  scheduleDelayedTrigger(onIdle);
@@ -24461,6 +24693,9 @@ function ɵɵdeferOnIdle() {
24461
24693
  function ɵɵdeferPrefetchOnIdle() {
24462
24694
  const lView = getLView();
24463
24695
  const tNode = getCurrentTNode();
24696
+ if (ngDevMode) {
24697
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch on idle');
24698
+ }
24464
24699
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24465
24700
  return;
24466
24701
  scheduleDelayedPrefetching(onIdle, 0 /* DeferBlockTrigger.Idle */);
@@ -24472,6 +24707,9 @@ function ɵɵdeferPrefetchOnIdle() {
24472
24707
  function ɵɵdeferHydrateOnIdle() {
24473
24708
  const lView = getLView();
24474
24709
  const tNode = getCurrentTNode();
24710
+ if (ngDevMode) {
24711
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on idle');
24712
+ }
24475
24713
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24476
24714
  return;
24477
24715
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24491,6 +24729,9 @@ function ɵɵdeferHydrateOnIdle() {
24491
24729
  function ɵɵdeferOnImmediate() {
24492
24730
  const lView = getLView();
24493
24731
  const tNode = getCurrentTNode();
24732
+ if (ngDevMode) {
24733
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'on immediate');
24734
+ }
24494
24735
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24495
24736
  return;
24496
24737
  // Render placeholder block only if loading template is not present and we're on
@@ -24509,6 +24750,9 @@ function ɵɵdeferOnImmediate() {
24509
24750
  function ɵɵdeferPrefetchOnImmediate() {
24510
24751
  const lView = getLView();
24511
24752
  const tNode = getCurrentTNode();
24753
+ if (ngDevMode) {
24754
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch on immediate');
24755
+ }
24512
24756
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24513
24757
  return;
24514
24758
  const tView = lView[TVIEW];
@@ -24524,6 +24768,9 @@ function ɵɵdeferPrefetchOnImmediate() {
24524
24768
  function ɵɵdeferHydrateOnImmediate() {
24525
24769
  const lView = getLView();
24526
24770
  const tNode = getCurrentTNode();
24771
+ if (ngDevMode) {
24772
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on immediate');
24773
+ }
24527
24774
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24528
24775
  return;
24529
24776
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24547,6 +24794,9 @@ function ɵɵdeferHydrateOnImmediate() {
24547
24794
  function ɵɵdeferOnTimer(delay) {
24548
24795
  const lView = getLView();
24549
24796
  const tNode = getCurrentTNode();
24797
+ if (ngDevMode) {
24798
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on timer(${delay}ms)`);
24799
+ }
24550
24800
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24551
24801
  return;
24552
24802
  scheduleDelayedTrigger(onTimer(delay));
@@ -24559,6 +24809,9 @@ function ɵɵdeferOnTimer(delay) {
24559
24809
  function ɵɵdeferPrefetchOnTimer(delay) {
24560
24810
  const lView = getLView();
24561
24811
  const tNode = getCurrentTNode();
24812
+ if (ngDevMode) {
24813
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on timer(${delay}ms)`);
24814
+ }
24562
24815
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24563
24816
  return;
24564
24817
  scheduleDelayedPrefetching(onTimer(delay), 5 /* DeferBlockTrigger.Timer */);
@@ -24571,10 +24824,13 @@ function ɵɵdeferPrefetchOnTimer(delay) {
24571
24824
  function ɵɵdeferHydrateOnTimer(delay) {
24572
24825
  const lView = getLView();
24573
24826
  const tNode = getCurrentTNode();
24827
+ if (ngDevMode) {
24828
+ trackTriggerForDebugging(lView[TVIEW], tNode, `hydrate on timer(${delay}ms)`);
24829
+ }
24574
24830
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24575
24831
  return;
24576
24832
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
24577
- hydrateTriggers.set(5 /* DeferBlockTrigger.Timer */, delay);
24833
+ hydrateTriggers.set(5 /* DeferBlockTrigger.Timer */, { delay });
24578
24834
  if (typeof ngServerMode !== 'undefined' && ngServerMode) {
24579
24835
  // We are on the server and SSR for defer blocks is enabled.
24580
24836
  triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);
@@ -24592,6 +24848,9 @@ function ɵɵdeferHydrateOnTimer(delay) {
24592
24848
  function ɵɵdeferOnHover(triggerIndex, walkUpTimes) {
24593
24849
  const lView = getLView();
24594
24850
  const tNode = getCurrentTNode();
24851
+ if (ngDevMode) {
24852
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on hover${walkUpTimes === -1 ? '' : '(<target>)'}`);
24853
+ }
24595
24854
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24596
24855
  return;
24597
24856
  renderPlaceholder(lView, tNode);
@@ -24609,6 +24868,9 @@ function ɵɵdeferOnHover(triggerIndex, walkUpTimes) {
24609
24868
  function ɵɵdeferPrefetchOnHover(triggerIndex, walkUpTimes) {
24610
24869
  const lView = getLView();
24611
24870
  const tNode = getCurrentTNode();
24871
+ if (ngDevMode) {
24872
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on hover${walkUpTimes === -1 ? '' : '(<target>)'}`);
24873
+ }
24612
24874
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24613
24875
  return;
24614
24876
  const tView = lView[TVIEW];
@@ -24624,6 +24886,9 @@ function ɵɵdeferPrefetchOnHover(triggerIndex, walkUpTimes) {
24624
24886
  function ɵɵdeferHydrateOnHover() {
24625
24887
  const lView = getLView();
24626
24888
  const tNode = getCurrentTNode();
24889
+ if (ngDevMode) {
24890
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on hover');
24891
+ }
24627
24892
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24628
24893
  return;
24629
24894
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24644,6 +24909,9 @@ function ɵɵdeferHydrateOnHover() {
24644
24909
  function ɵɵdeferOnInteraction(triggerIndex, walkUpTimes) {
24645
24910
  const lView = getLView();
24646
24911
  const tNode = getCurrentTNode();
24912
+ if (ngDevMode) {
24913
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on interaction${walkUpTimes === -1 ? '' : '(<target>)'}`);
24914
+ }
24647
24915
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24648
24916
  return;
24649
24917
  renderPlaceholder(lView, tNode);
@@ -24661,6 +24929,9 @@ function ɵɵdeferOnInteraction(triggerIndex, walkUpTimes) {
24661
24929
  function ɵɵdeferPrefetchOnInteraction(triggerIndex, walkUpTimes) {
24662
24930
  const lView = getLView();
24663
24931
  const tNode = getCurrentTNode();
24932
+ if (ngDevMode) {
24933
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on interaction${walkUpTimes === -1 ? '' : '(<target>)'}`);
24934
+ }
24664
24935
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24665
24936
  return;
24666
24937
  const tView = lView[TVIEW];
@@ -24676,6 +24947,9 @@ function ɵɵdeferPrefetchOnInteraction(triggerIndex, walkUpTimes) {
24676
24947
  function ɵɵdeferHydrateOnInteraction() {
24677
24948
  const lView = getLView();
24678
24949
  const tNode = getCurrentTNode();
24950
+ if (ngDevMode) {
24951
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on interaction');
24952
+ }
24679
24953
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24680
24954
  return;
24681
24955
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24696,6 +24970,9 @@ function ɵɵdeferHydrateOnInteraction() {
24696
24970
  function ɵɵdeferOnViewport(triggerIndex, walkUpTimes) {
24697
24971
  const lView = getLView();
24698
24972
  const tNode = getCurrentTNode();
24973
+ if (ngDevMode) {
24974
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on viewport${walkUpTimes === -1 ? '' : '(<target>)'}`);
24975
+ }
24699
24976
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24700
24977
  return;
24701
24978
  renderPlaceholder(lView, tNode);
@@ -24713,6 +24990,9 @@ function ɵɵdeferOnViewport(triggerIndex, walkUpTimes) {
24713
24990
  function ɵɵdeferPrefetchOnViewport(triggerIndex, walkUpTimes) {
24714
24991
  const lView = getLView();
24715
24992
  const tNode = getCurrentTNode();
24993
+ if (ngDevMode) {
24994
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on viewport${walkUpTimes === -1 ? '' : '(<target>)'}`);
24995
+ }
24716
24996
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24717
24997
  return;
24718
24998
  const tView = lView[TVIEW];
@@ -24728,6 +25008,9 @@ function ɵɵdeferPrefetchOnViewport(triggerIndex, walkUpTimes) {
24728
25008
  function ɵɵdeferHydrateOnViewport() {
24729
25009
  const lView = getLView();
24730
25010
  const tNode = getCurrentTNode();
25011
+ if (ngDevMode) {
25012
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on viewport');
25013
+ }
24731
25014
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24732
25015
  return;
24733
25016
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -27447,7 +27730,6 @@ function reconcile(liveCollection, newCollection, trackByFn) {
27447
27730
  'Duplicated keys were: \n' +
27448
27731
  duplicatedKeysMsg.join(', \n') +
27449
27732
  '.');
27450
- // tslint:disable-next-line:no-console
27451
27733
  console.warn(message);
27452
27734
  }
27453
27735
  }
@@ -28275,10 +28557,8 @@ if (typeof ngI18nClosureMode === 'undefined') {
28275
28557
  // Make sure to refer to ngI18nClosureMode as ['ngI18nClosureMode'] for closure.
28276
28558
  // NOTE: we need to have it in IIFE so that the tree-shaker is happy.
28277
28559
  (function () {
28278
- // tslint:disable-next-line:no-toplevel-property-access
28279
28560
  _global['ngI18nClosureMode'] =
28280
28561
  // TODO(FW-1250): validate that this actually, you know, works.
28281
- // tslint:disable-next-line:no-toplevel-property-access
28282
28562
  typeof goog !== 'undefined' && typeof goog.getMsg === 'function';
28283
28563
  })();
28284
28564
  }
@@ -33279,8 +33559,9 @@ function recreateMatchingLViews(def, rootLView) {
33279
33559
  */
33280
33560
  function clearRendererCache(factory, def) {
33281
33561
  // Cast to read a private field.
33282
- // NOTE: This must be kept synchronized with the renderer factory implementation in platform-browser.
33283
- factory.rendererByCompId?.delete(def.id);
33562
+ // NOTE: This must be kept synchronized with the renderer factory implementation in
33563
+ // platform-browser and platform-browser/animations.
33564
+ factory.componentReplaced?.(def.id);
33284
33565
  }
33285
33566
  /**
33286
33567
  * Recreates an LView in-place from a new component definition.
@@ -34746,7 +35027,7 @@ class Version {
34746
35027
  /**
34747
35028
  * @publicApi
34748
35029
  */
34749
- const VERSION = new Version('19.1.0-next.3');
35030
+ const VERSION = new Version('19.1.0-rc.0');
34750
35031
 
34751
35032
  /**
34752
35033
  * Combination of NgModuleFactory and ComponentFactories.
@@ -35156,13 +35437,6 @@ class ChangeDetectionSchedulerImpl {
35156
35437
  this.appRef.dirtyFlags |= 4 /* ApplicationRefDirtyFlags.ViewTreeCheck */;
35157
35438
  break;
35158
35439
  }
35159
- case 8 /* NotificationSource.DeferredRenderHook */: {
35160
- // Render hooks are "deferred" when they're triggered from other render hooks. Using the
35161
- // deferred dirty flags ensures that adding new hooks doesn't automatically trigger a loop
35162
- // inside tick().
35163
- this.appRef.deferredDirtyFlags |= 8 /* ApplicationRefDirtyFlags.AfterRender */;
35164
- break;
35165
- }
35166
35440
  case 6 /* NotificationSource.CustomElement */: {
35167
35441
  // We use `ViewTreeTraversal` to ensure we refresh the element even if this is triggered
35168
35442
  // during CD. In practice this is a no-op since the elements code also calls via a
@@ -35171,7 +35445,7 @@ class ChangeDetectionSchedulerImpl {
35171
35445
  force = true;
35172
35446
  break;
35173
35447
  }
35174
- case 13 /* NotificationSource.RootEffect */: {
35448
+ case 12 /* NotificationSource.RootEffect */: {
35175
35449
  this.appRef.dirtyFlags |= 16 /* ApplicationRefDirtyFlags.RootEffects */;
35176
35450
  // Root effects still force a CD, even if the scheduler is disabled. This ensures that
35177
35451
  // effects always run, even when triggered from outside the zone when the scheduler is
@@ -35179,7 +35453,7 @@ class ChangeDetectionSchedulerImpl {
35179
35453
  force = true;
35180
35454
  break;
35181
35455
  }
35182
- case 14 /* NotificationSource.ViewEffect */: {
35456
+ case 13 /* NotificationSource.ViewEffect */: {
35183
35457
  // This is technically a no-op, since view effects will also send a
35184
35458
  // `MarkAncestorsForTraversal` notification. Still, we set this for logical consistency.
35185
35459
  this.appRef.dirtyFlags |= 2 /* ApplicationRefDirtyFlags.ViewTreeTraversal */;
@@ -35189,7 +35463,7 @@ class ChangeDetectionSchedulerImpl {
35189
35463
  force = true;
35190
35464
  break;
35191
35465
  }
35192
- case 12 /* NotificationSource.PendingTaskRemoved */: {
35466
+ case 11 /* NotificationSource.PendingTaskRemoved */: {
35193
35467
  // Removing a pending task via the public API forces a scheduled tick, ensuring that
35194
35468
  // stability is async and delayed until there was at least an opportunity to run
35195
35469
  // application synchronization. This prevents some footguns when working with the
@@ -35198,10 +35472,10 @@ class ChangeDetectionSchedulerImpl {
35198
35472
  force = true;
35199
35473
  break;
35200
35474
  }
35201
- case 10 /* NotificationSource.ViewDetachedFromDOM */:
35202
- case 9 /* NotificationSource.ViewAttached */:
35475
+ case 9 /* NotificationSource.ViewDetachedFromDOM */:
35476
+ case 8 /* NotificationSource.ViewAttached */:
35203
35477
  case 7 /* NotificationSource.RenderHook */:
35204
- case 11 /* NotificationSource.AsyncAnimationsLoaded */:
35478
+ case 10 /* NotificationSource.AsyncAnimationsLoaded */:
35205
35479
  default: {
35206
35480
  // These notifications only schedule a tick but do not change whether we should refresh
35207
35481
  // views. Instead, we only need to run render hooks unless another notification from the
@@ -35767,6 +36041,27 @@ function logOversizedImageWarning(src) {
35767
36041
  */
35768
36042
  const PLATFORM_DESTROY_LISTENERS = new InjectionToken(ngDevMode ? 'PlatformDestroyListeners' : '');
35769
36043
 
36044
+ /**
36045
+ * InjectionToken to control root component bootstrap behavior.
36046
+ *
36047
+ * This token is primarily used in Angular's server-side rendering (SSR) scenarios,
36048
+ * particularly by the `@angular/ssr` package, to manage whether the root component
36049
+ * should be bootstrapped during the application initialization process.
36050
+ *
36051
+ * ## Purpose:
36052
+ * During SSR route extraction, setting this token to `false` prevents Angular from
36053
+ * bootstrapping the root component. This avoids unnecessary component rendering,
36054
+ * enabling route extraction without requiring additional APIs or triggering
36055
+ * component logic.
36056
+ *
36057
+ * ## Behavior:
36058
+ * - **`false`**: Prevents the root component from being bootstrapped.
36059
+ * - **`true`** (default): Proceeds with the normal root component bootstrap process.
36060
+ *
36061
+ * This mechanism ensures SSR can efficiently separate route extraction logic
36062
+ * from component rendering.
36063
+ */
36064
+ const ENABLE_ROOT_COMPONENT_BOOTSTRAP = new InjectionToken(ngDevMode ? 'ENABLE_ROOT_COMPONENT_BOOTSTRAP' : '');
35770
36065
  function isApplicationBootstrapConfig(config) {
35771
36066
  return !config.moduleRef;
35772
36067
  }
@@ -35831,6 +36126,14 @@ function bootstrap(config) {
35831
36126
  // If the `LOCALE_ID` provider is defined at bootstrap then we set the value for ivy
35832
36127
  const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);
35833
36128
  setLocaleId(localeId || DEFAULT_LOCALE_ID);
36129
+ const enableRootComponentBoostrap = envInjector.get(ENABLE_ROOT_COMPONENT_BOOTSTRAP, true);
36130
+ if (!enableRootComponentBoostrap) {
36131
+ if (isApplicationBootstrapConfig(config)) {
36132
+ return envInjector.get(ApplicationRef);
36133
+ }
36134
+ config.allPlatformModules.push(config.moduleRef);
36135
+ return config.moduleRef;
36136
+ }
35834
36137
  if (typeof ngDevMode === 'undefined' || ngDevMode) {
35835
36138
  const imagePerformanceService = envInjector.get(ImagePerformanceWarning);
35836
36139
  imagePerformanceService.start();
@@ -38741,42 +39044,6 @@ function internalCreateApplication(config) {
38741
39044
  }
38742
39045
  }
38743
39046
 
38744
- /**
38745
- * Retrieves all defer blocks in a given LView.
38746
- *
38747
- * @param lView lView with defer blocks
38748
- * @param deferBlocks defer block aggregator array
38749
- */
38750
- function getDeferBlocks(lView, deferBlocks) {
38751
- const tView = lView[TVIEW];
38752
- for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
38753
- if (isLContainer(lView[i])) {
38754
- const lContainer = lView[i];
38755
- // An LContainer may represent an instance of a defer block, in which case
38756
- // we store it as a result. Otherwise, keep iterating over LContainer views and
38757
- // look for defer blocks.
38758
- const isLast = i === tView.bindingStartIndex - 1;
38759
- if (!isLast) {
38760
- const tNode = tView.data[i];
38761
- const tDetails = getTDeferBlockDetails(tView, tNode);
38762
- if (isTDeferBlockDetails(tDetails)) {
38763
- deferBlocks.push({ lContainer, lView, tNode, tDetails });
38764
- // This LContainer represents a defer block, so we exit
38765
- // this iteration and don't inspect views in this LContainer.
38766
- continue;
38767
- }
38768
- }
38769
- for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
38770
- getDeferBlocks(lContainer[i], deferBlocks);
38771
- }
38772
- }
38773
- else if (isLView(lView[i])) {
38774
- // This is a component, enter the `getDeferBlocks` recursively.
38775
- getDeferBlocks(lView[i], deferBlocks);
38776
- }
38777
- }
38778
- }
38779
-
38780
39047
  /** Apps in which we've enabled event replay.
38781
39048
  * This is to prevent initializing event replay more than once per app.
38782
39049
  */
@@ -39144,7 +39411,6 @@ function annotateForHydration(appRef, doc) {
39144
39411
  transferState.set(NGH_DATA_KEY, serializedViews);
39145
39412
  if (deferBlocks.size > 0) {
39146
39413
  const blocks = {};
39147
- // TODO(incremental-hydration): we should probably have an object here instead of a Map?
39148
39414
  for (const [id, info] of deferBlocks.entries()) {
39149
39415
  blocks[id] = info;
39150
39416
  }
@@ -39213,10 +39479,10 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39213
39479
  // If this is a defer block, serialize extra info.
39214
39480
  if (isDeferBlock(lView[TVIEW], tNode)) {
39215
39481
  const lDetails = getLDeferBlockDetails(lView, tNode);
39216
- if (context.isIncrementalHydrationEnabled) {
39482
+ const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
39483
+ if (context.isIncrementalHydrationEnabled && tDetails.hydrateTriggers !== null) {
39217
39484
  const deferBlockId = `d${context.deferBlocks.size}`;
39218
- const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
39219
- if (tDetails.hydrateTriggers?.has(7 /* DeferBlockTrigger.Never */)) {
39485
+ if (tDetails.hydrateTriggers.has(7 /* DeferBlockTrigger.Never */)) {
39220
39486
  isHydrateNeverBlock = true;
39221
39487
  }
39222
39488
  let rootNodes = [];
@@ -39226,8 +39492,11 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39226
39492
  [DEFER_PARENT_BLOCK_ID]: parentDeferBlockId,
39227
39493
  [NUM_ROOT_NODES]: rootNodes.length,
39228
39494
  [DEFER_BLOCK_STATE$1]: lDetails[DEFER_BLOCK_STATE],
39229
- [DEFER_HYDRATE_TRIGGERS]: serializeHydrateTriggers(tDetails.hydrateTriggers),
39230
39495
  };
39496
+ const serializedTriggers = serializeHydrateTriggers(tDetails.hydrateTriggers);
39497
+ if (serializedTriggers.length > 0) {
39498
+ deferBlockInfo[DEFER_HYDRATE_TRIGGERS] = serializedTriggers;
39499
+ }
39231
39500
  context.deferBlocks.set(deferBlockId, deferBlockInfo);
39232
39501
  const node = unwrapRNode(lContainer);
39233
39502
  if (node !== undefined) {
@@ -39258,11 +39527,7 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39258
39527
  serializedView[DEFER_BLOCK_STATE$1] = lDetails[DEFER_BLOCK_STATE];
39259
39528
  }
39260
39529
  if (!isHydrateNeverBlock) {
39261
- // TODO(incremental-hydration): avoid copying of an object here
39262
- serializedView = {
39263
- ...serializedView,
39264
- ...serializeLView(lContainer[i], parentDeferBlockId, context),
39265
- };
39530
+ Object.assign(serializedView, serializeLView(lContainer[i], parentDeferBlockId, context));
39266
39531
  }
39267
39532
  }
39268
39533
  // Check if the previous view has the same shape (for example, it was
@@ -39283,9 +39548,6 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39283
39548
  return views;
39284
39549
  }
39285
39550
  function serializeHydrateTriggers(triggerMap) {
39286
- if (triggerMap === null) {
39287
- return null;
39288
- }
39289
39551
  const serializableDeferBlockTrigger = new Set([
39290
39552
  0 /* DeferBlockTrigger.Idle */,
39291
39553
  1 /* DeferBlockTrigger.Immediate */,
@@ -39299,7 +39561,7 @@ function serializeHydrateTriggers(triggerMap) {
39299
39561
  triggers.push(trigger);
39300
39562
  }
39301
39563
  else {
39302
- triggers.push({ trigger, details });
39564
+ triggers.push({ trigger, delay: details.delay });
39303
39565
  }
39304
39566
  }
39305
39567
  }
@@ -39717,6 +39979,9 @@ function printHydrationStats(injector) {
39717
39979
  const message = `Angular hydrated ${ngDevMode.hydratedComponents} component(s) ` +
39718
39980
  `and ${ngDevMode.hydratedNodes} node(s), ` +
39719
39981
  `${ngDevMode.componentsSkippedHydration} component(s) were skipped. ` +
39982
+ (isIncrementalHydrationEnabled(injector)
39983
+ ? `${ngDevMode.deferBlocksWithIncrementalHydration} defer block(s) were configured to use incremental hydration. `
39984
+ : '') +
39720
39985
  `Learn more at https://angular.dev/guide/hydration.`;
39721
39986
  // tslint:disable-next-line:no-console
39722
39987
  console.log(message);
@@ -39806,7 +40071,6 @@ function withDomHydration() {
39806
40071
  'thus hydration was not enabled. ' +
39807
40072
  'Make sure the `provideClientHydration()` is included into the list ' +
39808
40073
  'of providers in the server part of the application configuration.');
39809
- // tslint:disable-next-line:no-console
39810
40074
  console.warn(message);
39811
40075
  }
39812
40076
  },
@@ -39840,6 +40104,7 @@ function withDomHydration() {
39840
40104
  whenStableWithTimeout(appRef, injector).then(() => {
39841
40105
  cleanupDehydratedViews(appRef);
39842
40106
  if (typeof ngDevMode !== 'undefined' && ngDevMode) {
40107
+ countBlocksSkippedByHydration(injector);
39843
40108
  printHydrationStats(injector);
39844
40109
  }
39845
40110
  });
@@ -40376,23 +40641,6 @@ function untracked(nonReactiveReadsFn) {
40376
40641
  }
40377
40642
  }
40378
40643
 
40379
- class ViewContext {
40380
- view;
40381
- node;
40382
- constructor(view, node) {
40383
- this.view = view;
40384
- this.node = node;
40385
- }
40386
- /**
40387
- * @internal
40388
- * @nocollapse
40389
- */
40390
- static __NG_ELEMENT_ID__ = injectViewContext;
40391
- }
40392
- function injectViewContext() {
40393
- return new ViewContext(getLView(), getCurrentTNode());
40394
- }
40395
-
40396
40644
  /**
40397
40645
  * Controls whether effects use the legacy `microtaskEffect` by default.
40398
40646
  */
@@ -40660,12 +40908,13 @@ const ROOT_EFFECT_NODE =
40660
40908
  ...BASE_EFFECT_NODE,
40661
40909
  consumerMarkedDirty() {
40662
40910
  this.scheduler.schedule(this);
40663
- this.notifier.notify(13 /* NotificationSource.RootEffect */);
40911
+ this.notifier.notify(12 /* NotificationSource.RootEffect */);
40664
40912
  },
40665
40913
  destroy() {
40666
40914
  consumerDestroy$1(this);
40667
40915
  this.onDestroyFn();
40668
40916
  this.maybeCleanup();
40917
+ this.scheduler.remove(this);
40669
40918
  },
40670
40919
  }))();
40671
40920
  const VIEW_EFFECT_NODE =
@@ -40674,7 +40923,7 @@ const VIEW_EFFECT_NODE =
40674
40923
  consumerMarkedDirty() {
40675
40924
  this.view[FLAGS] |= 8192 /* LViewFlags.HasChildViewsToRefresh */;
40676
40925
  markAncestorsForTraversal(this.view);
40677
- this.notifier.notify(14 /* NotificationSource.ViewEffect */);
40926
+ this.notifier.notify(13 /* NotificationSource.ViewEffect */);
40678
40927
  },
40679
40928
  destroy() {
40680
40929
  consumerDestroy$1(this);
@@ -40701,7 +40950,7 @@ function createRootEffect(fn, scheduler, notifier) {
40701
40950
  node.notifier = notifier;
40702
40951
  node.zone = typeof Zone !== 'undefined' ? Zone.current : null;
40703
40952
  node.scheduler.schedule(node);
40704
- node.notifier.notify(13 /* NotificationSource.RootEffect */);
40953
+ node.notifier.notify(12 /* NotificationSource.RootEffect */);
40705
40954
  return node;
40706
40955
  }
40707
40956
 
@@ -40792,10 +41041,10 @@ class AfterRenderEffectSequence extends AfterRenderSequence {
40792
41041
  * These are initialized to `undefined` but set in the constructor.
40793
41042
  */
40794
41043
  nodes = [undefined, undefined, undefined, undefined];
40795
- constructor(impl, effectHooks, scheduler, destroyRef, snapshot = null) {
41044
+ constructor(impl, effectHooks, view, scheduler, destroyRef, snapshot = null) {
40796
41045
  // Note that we also initialize the underlying `AfterRenderSequence` hooks to `undefined` and
40797
41046
  // populate them as we create reactive nodes below.
40798
- super(impl, [undefined, undefined, undefined, undefined], false, destroyRef, snapshot);
41047
+ super(impl, [undefined, undefined, undefined, undefined], view, false, destroyRef, snapshot);
40799
41048
  this.scheduler = scheduler;
40800
41049
  // Setup a reactive node for each phase.
40801
41050
  for (const phase of AFTER_RENDER_PHASES) {
@@ -40854,7 +41103,8 @@ function afterRenderEffect(callbackOrSpec, options) {
40854
41103
  if (typeof spec === 'function') {
40855
41104
  spec = { mixedReadWrite: callbackOrSpec };
40856
41105
  }
40857
- const sequence = new AfterRenderEffectSequence(manager.impl, [spec.earlyRead, spec.write, spec.mixedReadWrite, spec.read], scheduler, injector.get(DestroyRef), tracing?.snapshot(null));
41106
+ const viewContext = injector.get(ViewContext, null, { optional: true });
41107
+ const sequence = new AfterRenderEffectSequence(manager.impl, [spec.earlyRead, spec.write, spec.mixedReadWrite, spec.read], viewContext?.view, scheduler, injector.get(DestroyRef), tracing?.snapshot(null));
40858
41108
  manager.impl.register(sequence);
40859
41109
  return sequence;
40860
41110
  }
@@ -41346,5 +41596,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
41346
41596
  * Generated bundle index. Do not edit.
41347
41597
  */
41348
41598
 
41349
- 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, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Renderer2, RendererFactory2, RendererStyleFlags2, ResourceStatus, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, 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, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, 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, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_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, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, 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, TracingAction as ɵTracingAction, TracingService as ɵTracingService, 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, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getClosestComponentName as ɵgetClosestComponentName, 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, publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, 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, startMeasuring as ɵstartMeasuring, stopMeasuring as ɵstopMeasuring, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, withIncrementalHydration as ɵwithIncrementalHydration, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattachSourceLocations, ɵɵ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 };
41599
+ 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, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Renderer2, RendererFactory2, RendererStyleFlags2, ResourceStatus, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, 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, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, 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, ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, 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, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_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, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, 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, TracingAction as ɵTracingAction, TracingService as ɵTracingService, 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, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getClosestComponentName as ɵgetClosestComponentName, getDebugNode as ɵgetDebugNode, getDeferBlocks$1 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, publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, 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, startMeasuring as ɵstartMeasuring, stopMeasuring as ɵstopMeasuring, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, withIncrementalHydration as ɵwithIncrementalHydration, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattachSourceLocations, ɵɵ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 };
41350
41600
  //# sourceMappingURL=core.mjs.map