@angular/core 18.0.3 → 18.0.5

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 (51) hide show
  1. package/esm2022/primitives/event-dispatch/src/eventcontract.mjs +2 -2
  2. package/esm2022/src/authoring/model/model_signal.mjs +2 -3
  3. package/esm2022/src/change_detection/change_detector_ref.mjs +3 -2
  4. package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +2 -2
  5. package/esm2022/src/core_render3_private_export.mjs +2 -2
  6. package/esm2022/src/defer/instructions.mjs +3 -11
  7. package/esm2022/src/di/host_tag_name_token.mjs +4 -1
  8. package/esm2022/src/errors.mjs +1 -1
  9. package/esm2022/src/event_delegation_utils.mjs +3 -2
  10. package/esm2022/src/hydration/annotate.mjs +27 -16
  11. package/esm2022/src/hydration/error_handling.mjs +3 -1
  12. package/esm2022/src/hydration/event_replay.mjs +34 -15
  13. package/esm2022/src/hydration/i18n.mjs +102 -18
  14. package/esm2022/src/hydration/node_lookup_utils.mjs +12 -6
  15. package/esm2022/src/render3/after_render_hooks.mjs +3 -1
  16. package/esm2022/src/render3/chained_injector.mjs +34 -0
  17. package/esm2022/src/render3/collect_native_nodes.mjs +6 -1
  18. package/esm2022/src/render3/component_ref.mjs +3 -28
  19. package/esm2022/src/render3/index.mjs +2 -2
  20. package/esm2022/src/render3/instructions/all.mjs +2 -1
  21. package/esm2022/src/render3/instructions/i18n_icu_container_visitor.mjs +61 -51
  22. package/esm2022/src/render3/instructions/let_declaration.mjs +62 -0
  23. package/esm2022/src/render3/instructions/projection.mjs +14 -11
  24. package/esm2022/src/render3/instructions/shared.mjs +1 -1
  25. package/esm2022/src/render3/interfaces/node.mjs +2 -1
  26. package/esm2022/src/render3/jit/environment.mjs +4 -1
  27. package/esm2022/src/render3/node_assert.mjs +9 -8
  28. package/esm2022/src/render3/node_manipulation.mjs +10 -3
  29. package/esm2022/src/render3/util/injector_discovery_utils.mjs +14 -5
  30. package/esm2022/src/render3/util/injector_utils.mjs +10 -1
  31. package/esm2022/src/version.mjs +1 -1
  32. package/esm2022/testing/src/logger.mjs +3 -3
  33. package/fesm2022/core.mjs +422 -202
  34. package/fesm2022/core.mjs.map +1 -1
  35. package/fesm2022/primitives/event-dispatch.mjs +2 -2
  36. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  37. package/fesm2022/primitives/signals.mjs +1 -1
  38. package/fesm2022/rxjs-interop.mjs +1 -1
  39. package/fesm2022/testing.mjs +1 -1
  40. package/index.d.ts +36 -5
  41. package/package.json +1 -1
  42. package/primitives/event-dispatch/index.d.ts +2 -2
  43. package/primitives/signals/index.d.ts +1 -1
  44. package/rxjs-interop/index.d.ts +1 -1
  45. package/schematics/migrations/invalid-two-way-bindings/bundle.js +271 -62
  46. package/schematics/migrations/invalid-two-way-bindings/bundle.js.map +4 -4
  47. package/schematics/ng-generate/control-flow-migration/bundle.js +278 -62
  48. package/schematics/ng-generate/control-flow-migration/bundle.js.map +4 -4
  49. package/schematics/ng-generate/standalone-migration/bundle.js +287 -76
  50. package/schematics/ng-generate/standalone-migration/bundle.js.map +4 -4
  51. package/testing/index.d.ts +1 -1
package/fesm2022/core.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v18.0.3
2
+ * @license Angular v18.0.5
3
3
  * (c) 2010-2024 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -5317,6 +5317,7 @@ function toTNodeTypeAsString(tNodeType) {
5317
5317
  tNodeType & 16 /* TNodeType.Projection */ && (text += '|Projection');
5318
5318
  tNodeType & 32 /* TNodeType.Icu */ && (text += '|IcuContainer');
5319
5319
  tNodeType & 64 /* TNodeType.Placeholder */ && (text += '|Placeholder');
5320
+ tNodeType & 128 /* TNodeType.LetDeclaration */ && (text += '|LetDeclaration');
5320
5321
  return text.length > 0 ? text.substring(1) : text;
5321
5322
  }
5322
5323
  /**
@@ -5392,17 +5393,62 @@ function assertTNodeType(tNode, expectedTypes, message) {
5392
5393
  }
5393
5394
  }
5394
5395
  function assertPureTNodeType(type) {
5395
- if (!(type === 2 /* TNodeType.Element */ || //
5396
- type === 1 /* TNodeType.Text */ || //
5397
- type === 4 /* TNodeType.Container */ || //
5398
- type === 8 /* TNodeType.ElementContainer */ || //
5399
- type === 32 /* TNodeType.Icu */ || //
5400
- type === 16 /* TNodeType.Projection */ || //
5401
- type === 64 /* TNodeType.Placeholder */)) {
5396
+ if (!(type === 2 /* TNodeType.Element */ ||
5397
+ type === 1 /* TNodeType.Text */ ||
5398
+ type === 4 /* TNodeType.Container */ ||
5399
+ type === 8 /* TNodeType.ElementContainer */ ||
5400
+ type === 32 /* TNodeType.Icu */ ||
5401
+ type === 16 /* TNodeType.Projection */ ||
5402
+ type === 64 /* TNodeType.Placeholder */ ||
5403
+ type === 128 /* TNodeType.LetDeclaration */)) {
5402
5404
  throwError(`Expected TNodeType to have only a single type selected, but got ${toTNodeTypeAsString(type)}.`);
5403
5405
  }
5404
5406
  }
5405
5407
 
5408
+ // This default value is when checking the hierarchy for a token.
5409
+ //
5410
+ // It means both:
5411
+ // - the token is not provided by the current injector,
5412
+ // - only the element injectors should be checked (ie do not check module injectors
5413
+ //
5414
+ // mod1
5415
+ // /
5416
+ // el1 mod2
5417
+ // \ /
5418
+ // el2
5419
+ //
5420
+ // When requesting el2.injector.get(token), we should check in the following order and return the
5421
+ // first found value:
5422
+ // - el2.injector.get(token, default)
5423
+ // - el1.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) -> do not check the module
5424
+ // - mod2.injector.get(token, default)
5425
+ const NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};
5426
+
5427
+ /**
5428
+ * Injector that looks up a value using a specific injector, before falling back to the module
5429
+ * injector. Used primarily when creating components or embedded views dynamically.
5430
+ */
5431
+ class ChainedInjector {
5432
+ constructor(injector, parentInjector) {
5433
+ this.injector = injector;
5434
+ this.parentInjector = parentInjector;
5435
+ }
5436
+ get(token, notFoundValue, flags) {
5437
+ flags = convertToBitFlags(flags);
5438
+ const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
5439
+ if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
5440
+ notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
5441
+ // Return the value from the root element injector when
5442
+ // - it provides it
5443
+ // (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
5444
+ // - the module injector should not be checked
5445
+ // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
5446
+ return value;
5447
+ }
5448
+ return this.parentInjector.get(token, notFoundValue, flags);
5449
+ }
5450
+ }
5451
+
5406
5452
  /// Parent Injector Utils ///////////////////////////////////////////////////////////////
5407
5453
  function hasParentInjector(parentLocation) {
5408
5454
  return parentLocation !== NO_PARENT_INJECTOR;
@@ -5441,6 +5487,14 @@ function getParentInjectorView(location, startView) {
5441
5487
  }
5442
5488
  return parentView;
5443
5489
  }
5490
+ /**
5491
+ * Detects whether an injector is an instance of a `ChainedInjector`,
5492
+ * created based on the `OutletInjector`.
5493
+ */
5494
+ function isRouterOutletInjector(currentInjector) {
5495
+ return (currentInjector instanceof ChainedInjector &&
5496
+ typeof currentInjector.injector.__ngOutletInjector === 'function');
5497
+ }
5444
5498
 
5445
5499
  /**
5446
5500
  * Defines if the call to `inject` should include `viewProviders` in its resolution.
@@ -6544,6 +6598,9 @@ function getDevModeNodeName(tNode) {
6544
6598
  else if (tNode.type & 4 /* TNodeType.Container */) {
6545
6599
  return 'an <ng-template>';
6546
6600
  }
6601
+ else if (tNode.type & 128 /* TNodeType.LetDeclaration */) {
6602
+ return 'an @let declaration';
6603
+ }
6547
6604
  else {
6548
6605
  return 'a node';
6549
6606
  }
@@ -10788,8 +10845,10 @@ function getParentRElement(tView, tNode, lView) {
10788
10845
  function getClosestRElement(tView, tNode, lView) {
10789
10846
  let parentTNode = tNode;
10790
10847
  // Skip over element and ICU containers as those are represented by a comment node and
10791
- // can't be used as a render parent.
10792
- while (parentTNode !== null && parentTNode.type & (8 /* TNodeType.ElementContainer */ | 32 /* TNodeType.Icu */)) {
10848
+ // can't be used as a render parent. Also skip let declarations since they don't have a
10849
+ // corresponding DOM node at all.
10850
+ while (parentTNode !== null &&
10851
+ parentTNode.type & (8 /* TNodeType.ElementContainer */ | 32 /* TNodeType.Icu */ | 128 /* TNodeType.LetDeclaration */)) {
10793
10852
  tNode = parentTNode;
10794
10853
  parentTNode = tNode.parent;
10795
10854
  }
@@ -11039,6 +11098,11 @@ function clearElementContents(rElement) {
11039
11098
  function applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode, isProjection) {
11040
11099
  while (tNode != null) {
11041
11100
  ngDevMode && assertTNodeForLView(tNode, lView);
11101
+ // Let declarations don't have corresponding DOM nodes so we skip over them.
11102
+ if (tNode.type === 128 /* TNodeType.LetDeclaration */) {
11103
+ tNode = tNode.next;
11104
+ continue;
11105
+ }
11042
11106
  ngDevMode &&
11043
11107
  assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 16 /* TNodeType.Projection */ | 32 /* TNodeType.Icu */);
11044
11108
  const rawSlotValue = lView[tNode.index];
@@ -12889,6 +12953,11 @@ function removeLViewFromLContainer(lContainer, index) {
12889
12953
 
12890
12954
  function collectNativeNodes(tView, lView, tNode, result, isProjection = false) {
12891
12955
  while (tNode !== null) {
12956
+ // Let declarations don't have corresponding DOM nodes so we skip over them.
12957
+ if (tNode.type === 128 /* TNodeType.LetDeclaration */) {
12958
+ tNode = isProjection ? tNode.projectionNext : tNode.next;
12959
+ continue;
12960
+ }
12892
12961
  ngDevMode &&
12893
12962
  assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 16 /* TNodeType.Projection */ | 32 /* TNodeType.Icu */);
12894
12963
  const lNode = lView[tNode.index];
@@ -13830,6 +13899,8 @@ function getFriendlyStringFromTNodeType(tNodeType) {
13830
13899
  return 'projection';
13831
13900
  case 1 /* TNodeType.Text */:
13832
13901
  return 'text';
13902
+ case 128 /* TNodeType.LetDeclaration */:
13903
+ return '@let';
13833
13904
  default:
13834
13905
  // This should not happen as we cover all possible TNode types above.
13835
13906
  return '<unknown>';
@@ -14424,6 +14495,89 @@ function isRootTemplateMessage(subTemplateIndex) {
14424
14495
  return subTemplateIndex === -1;
14425
14496
  }
14426
14497
 
14498
+ function enterIcu(state, tIcu, lView) {
14499
+ state.index = 0;
14500
+ const currentCase = getCurrentICUCaseIndex(tIcu, lView);
14501
+ if (currentCase !== null) {
14502
+ ngDevMode && assertNumberInRange(currentCase, 0, tIcu.cases.length - 1);
14503
+ state.removes = tIcu.remove[currentCase];
14504
+ }
14505
+ else {
14506
+ state.removes = EMPTY_ARRAY;
14507
+ }
14508
+ }
14509
+ function icuContainerIteratorNext(state) {
14510
+ if (state.index < state.removes.length) {
14511
+ const removeOpCode = state.removes[state.index++];
14512
+ ngDevMode && assertNumber(removeOpCode, 'Expecting OpCode number');
14513
+ if (removeOpCode > 0) {
14514
+ const rNode = state.lView[removeOpCode];
14515
+ ngDevMode && assertDomNode(rNode);
14516
+ return rNode;
14517
+ }
14518
+ else {
14519
+ state.stack.push(state.index, state.removes);
14520
+ // ICUs are represented by negative indices
14521
+ const tIcuIndex = ~removeOpCode;
14522
+ const tIcu = state.lView[TVIEW].data[tIcuIndex];
14523
+ ngDevMode && assertTIcu(tIcu);
14524
+ enterIcu(state, tIcu, state.lView);
14525
+ return icuContainerIteratorNext(state);
14526
+ }
14527
+ }
14528
+ else {
14529
+ if (state.stack.length === 0) {
14530
+ return null;
14531
+ }
14532
+ else {
14533
+ state.removes = state.stack.pop();
14534
+ state.index = state.stack.pop();
14535
+ return icuContainerIteratorNext(state);
14536
+ }
14537
+ }
14538
+ }
14539
+ function loadIcuContainerVisitor() {
14540
+ const _state = {
14541
+ stack: [],
14542
+ index: -1,
14543
+ };
14544
+ /**
14545
+ * Retrieves a set of root nodes from `TIcu.remove`. Used by `TNodeType.ICUContainer`
14546
+ * to determine which root belong to the ICU.
14547
+ *
14548
+ * Example of usage.
14549
+ * ```
14550
+ * const nextRNode = icuContainerIteratorStart(tIcuContainerNode, lView);
14551
+ * let rNode: RNode|null;
14552
+ * while(rNode = nextRNode()) {
14553
+ * console.log(rNode);
14554
+ * }
14555
+ * ```
14556
+ *
14557
+ * @param tIcuContainerNode Current `TIcuContainerNode`
14558
+ * @param lView `LView` where the `RNode`s should be looked up.
14559
+ */
14560
+ function icuContainerIteratorStart(tIcuContainerNode, lView) {
14561
+ _state.lView = lView;
14562
+ while (_state.stack.length)
14563
+ _state.stack.pop();
14564
+ ngDevMode && assertTNodeForLView(tIcuContainerNode, lView);
14565
+ enterIcu(_state, tIcuContainerNode.value, lView);
14566
+ return icuContainerIteratorNext.bind(null, _state);
14567
+ }
14568
+ return icuContainerIteratorStart;
14569
+ }
14570
+ function createIcuIterator(tIcu, lView) {
14571
+ const state = {
14572
+ stack: [],
14573
+ index: -1,
14574
+ lView,
14575
+ };
14576
+ ngDevMode && assertTIcu(tIcu);
14577
+ enterIcu(state, tIcu, lView);
14578
+ return icuContainerIteratorNext.bind(null, state);
14579
+ }
14580
+
14427
14581
  /**
14428
14582
  * Regexp that extracts a reference node information from the compressed node location.
14429
14583
  * The reference node is represented as either:
@@ -14495,15 +14649,21 @@ function getNoOffsetIndex(tNode) {
14495
14649
  }
14496
14650
  /**
14497
14651
  * Check whether a given node exists, but is disconnected from the DOM.
14652
+ */
14653
+ function isDisconnectedNode(tNode, lView) {
14654
+ return (!(tNode.type & (16 /* TNodeType.Projection */ | 128 /* TNodeType.LetDeclaration */)) &&
14655
+ !!lView[tNode.index] &&
14656
+ isDisconnectedRNode(unwrapRNode(lView[tNode.index])));
14657
+ }
14658
+ /**
14659
+ * Check whether the given node exists, but is disconnected from the DOM.
14498
14660
  *
14499
14661
  * Note: we leverage the fact that we have this information available in the DOM emulation
14500
14662
  * layer (in Domino) for now. Longer-term solution should not rely on the DOM emulation and
14501
14663
  * only use internal data structures and state to compute this information.
14502
14664
  */
14503
- function isDisconnectedNode(tNode, lView) {
14504
- return (!(tNode.type & 16 /* TNodeType.Projection */) &&
14505
- !!lView[tNode.index] &&
14506
- !unwrapRNode(lView[tNode.index])?.isConnected);
14665
+ function isDisconnectedRNode(rNode) {
14666
+ return !!rNode && !rNode.isConnected;
14507
14667
  }
14508
14668
  /**
14509
14669
  * Locate a node in an i18n tree that corresponds to a given instruction index.
@@ -14767,7 +14927,7 @@ function calcPathForNode(tNode, lView, excludedParentNodes) {
14767
14927
  referenceNodeName = renderStringify(parentIndex - HEADER_OFFSET);
14768
14928
  }
14769
14929
  let rNode = unwrapRNode(lView[tNode.index]);
14770
- if (tNode.type & 12 /* TNodeType.AnyContainer */) {
14930
+ if (tNode.type & (12 /* TNodeType.AnyContainer */ | 32 /* TNodeType.Icu */)) {
14771
14931
  // For <ng-container> nodes, instead of serializing a reference
14772
14932
  // to the anchor comment node, serialize a location of the first
14773
14933
  // DOM element. Paired with the container size (serialized as a part
@@ -14899,30 +15059,104 @@ function trySerializeI18nBlock(lView, index, context) {
14899
15059
  if (!tI18n || !tI18n.ast) {
14900
15060
  return null;
14901
15061
  }
14902
- const caseQueue = [];
14903
- tI18n.ast.forEach((node) => serializeI18nBlock(lView, caseQueue, context, node));
14904
- return caseQueue.length > 0 ? caseQueue : null;
15062
+ const serializedI18nBlock = {
15063
+ caseQueue: [],
15064
+ disconnectedNodes: new Set(),
15065
+ disjointNodes: new Set(),
15066
+ };
15067
+ serializeI18nBlock(lView, serializedI18nBlock, context, tI18n.ast);
15068
+ return serializedI18nBlock.caseQueue.length === 0 &&
15069
+ serializedI18nBlock.disconnectedNodes.size === 0 &&
15070
+ serializedI18nBlock.disjointNodes.size === 0
15071
+ ? null
15072
+ : serializedI18nBlock;
15073
+ }
15074
+ function serializeI18nBlock(lView, serializedI18nBlock, context, nodes) {
15075
+ let prevRNode = null;
15076
+ for (const node of nodes) {
15077
+ const nextRNode = serializeI18nNode(lView, serializedI18nBlock, context, node);
15078
+ if (nextRNode) {
15079
+ if (isDisjointNode(prevRNode, nextRNode)) {
15080
+ serializedI18nBlock.disjointNodes.add(node.index - HEADER_OFFSET);
15081
+ }
15082
+ prevRNode = nextRNode;
15083
+ }
15084
+ }
15085
+ return prevRNode;
15086
+ }
15087
+ /**
15088
+ * Helper to determine whether the given nodes are "disjoint".
15089
+ *
15090
+ * The i18n hydration process walks through the DOM and i18n nodes
15091
+ * at the same time. It expects the sibling DOM node of the previous
15092
+ * i18n node to be the first node of the next i18n node.
15093
+ *
15094
+ * In cases of content projection, this won't always be the case. So
15095
+ * when we detect that, we mark the node as "disjoint", ensuring that
15096
+ * we will serialize the path to the node. This way, when we hydrate the
15097
+ * i18n node, we will be able to find the correct place to start.
15098
+ */
15099
+ function isDisjointNode(prevNode, nextNode) {
15100
+ return prevNode && prevNode.nextSibling !== nextNode;
14905
15101
  }
14906
- function serializeI18nBlock(lView, caseQueue, context, node) {
15102
+ /**
15103
+ * Process the given i18n node for serialization.
15104
+ * Returns the first RNode for the i18n node to begin hydration.
15105
+ */
15106
+ function serializeI18nNode(lView, serializedI18nBlock, context, node) {
15107
+ const maybeRNode = unwrapRNode(lView[node.index]);
15108
+ if (!maybeRNode || isDisconnectedRNode(maybeRNode)) {
15109
+ serializedI18nBlock.disconnectedNodes.add(node.index - HEADER_OFFSET);
15110
+ return null;
15111
+ }
15112
+ const rNode = maybeRNode;
14907
15113
  switch (node.kind) {
14908
- case 0 /* I18nNodeKind.TEXT */:
14909
- const rNode = unwrapRNode(lView[node.index]);
15114
+ case 0 /* I18nNodeKind.TEXT */: {
14910
15115
  processTextNodeBeforeSerialization(context, rNode);
14911
15116
  break;
15117
+ }
14912
15118
  case 1 /* I18nNodeKind.ELEMENT */:
14913
- case 2 /* I18nNodeKind.PLACEHOLDER */:
14914
- node.children.forEach((node) => serializeI18nBlock(lView, caseQueue, context, node));
15119
+ case 2 /* I18nNodeKind.PLACEHOLDER */: {
15120
+ serializeI18nBlock(lView, serializedI18nBlock, context, node.children);
14915
15121
  break;
14916
- case 3 /* I18nNodeKind.ICU */:
15122
+ }
15123
+ case 3 /* I18nNodeKind.ICU */: {
14917
15124
  const currentCase = lView[node.currentCaseLViewIndex];
14918
15125
  if (currentCase != null) {
14919
15126
  // i18n uses a negative value to signal a change to a new case, so we
14920
15127
  // need to invert it to get the proper value.
14921
15128
  const caseIdx = currentCase < 0 ? ~currentCase : currentCase;
14922
- caseQueue.push(caseIdx);
14923
- node.cases[caseIdx].forEach((node) => serializeI18nBlock(lView, caseQueue, context, node));
15129
+ serializedI18nBlock.caseQueue.push(caseIdx);
15130
+ serializeI18nBlock(lView, serializedI18nBlock, context, node.cases[caseIdx]);
14924
15131
  }
14925
15132
  break;
15133
+ }
15134
+ }
15135
+ return getFirstNativeNodeForI18nNode(lView, node);
15136
+ }
15137
+ /**
15138
+ * Helper function to get the first native node to begin hydrating
15139
+ * the given i18n node.
15140
+ */
15141
+ function getFirstNativeNodeForI18nNode(lView, node) {
15142
+ const tView = lView[TVIEW];
15143
+ const maybeTNode = tView.data[node.index];
15144
+ if (isTNodeShape(maybeTNode)) {
15145
+ // If the node is backed by an actual TNode, we can simply delegate.
15146
+ return getFirstNativeNode(lView, maybeTNode);
15147
+ }
15148
+ else if (node.kind === 3 /* I18nNodeKind.ICU */) {
15149
+ // A nested ICU container won't have an actual TNode. In that case, we can use
15150
+ // an iterator to find the first child.
15151
+ const icuIterator = createIcuIterator(maybeTNode, lView);
15152
+ let rNode = icuIterator();
15153
+ // If the ICU container has no nodes, then we use the ICU anchor as the node.
15154
+ return rNode ?? unwrapRNode(lView[node.index]);
15155
+ }
15156
+ else {
15157
+ // Otherwise, the node is a text or trivial element in an ICU container,
15158
+ // and we can just use the RNode directly.
15159
+ return unwrapRNode(lView[node.index]) ?? null;
14926
15160
  }
14927
15161
  }
14928
15162
  function setCurrentNode(state, node) {
@@ -15015,16 +15249,24 @@ function prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplate
15015
15249
  }
15016
15250
  function collectI18nNodesFromDom(context, state, nodeOrNodes) {
15017
15251
  if (Array.isArray(nodeOrNodes)) {
15252
+ let nextState = state;
15018
15253
  for (const node of nodeOrNodes) {
15019
- // If the node is being projected elsewhere, we need to temporarily
15020
- // branch the state to that location to continue hydration.
15021
- // Otherwise, we continue hydration from the current location.
15254
+ // Whenever a node doesn't directly follow the previous RNode, it
15255
+ // is given a path. We need to resume collecting nodes from that location
15256
+ // until and unless we find another disjoint node.
15022
15257
  const targetNode = tryLocateRNodeByPath(context.hydrationInfo, context.lView, node.index - HEADER_OFFSET);
15023
- const nextState = targetNode ? forkHydrationState(state, targetNode) : state;
15258
+ if (targetNode) {
15259
+ nextState = forkHydrationState(state, targetNode);
15260
+ }
15024
15261
  collectI18nNodesFromDom(context, nextState, node);
15025
15262
  }
15026
15263
  }
15027
15264
  else {
15265
+ if (context.disconnectedNodes.has(nodeOrNodes.index - HEADER_OFFSET)) {
15266
+ // i18n nodes can be considered disconnected if e.g. they were projected.
15267
+ // In that case, we have to make sure to skip over them.
15268
+ return;
15269
+ }
15028
15270
  switch (nodeOrNodes.kind) {
15029
15271
  case 0 /* I18nNodeKind.TEXT */: {
15030
15272
  // Claim a text node for hydration
@@ -15451,25 +15693,6 @@ class Sanitizer {
15451
15693
  }); }
15452
15694
  }
15453
15695
 
15454
- // This default value is when checking the hierarchy for a token.
15455
- //
15456
- // It means both:
15457
- // - the token is not provided by the current injector,
15458
- // - only the element injectors should be checked (ie do not check module injectors
15459
- //
15460
- // mod1
15461
- // /
15462
- // el1 mod2
15463
- // \ /
15464
- // el2
15465
- //
15466
- // When requesting el2.injector.get(token), we should check in the following order and return the
15467
- // first found value:
15468
- // - el2.injector.get(token, default)
15469
- // - el1.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) -> do not check the module
15470
- // - mod2.injector.get(token, default)
15471
- const NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};
15472
-
15473
15696
  /**
15474
15697
  * Asserts that the current stack frame is not within a reactive context. Useful
15475
15698
  * to disallow certain code from running inside a reactive context (see {@link toSignal}).
@@ -16124,6 +16347,7 @@ function internalAfterNextRender(callback, options) {
16124
16347
  * </div>
16125
16348
  *
16126
16349
  * @param callback A callback function to register
16350
+ * @param options Options to control the behavior of the callback
16127
16351
  *
16128
16352
  * @usageNotes
16129
16353
  *
@@ -16196,6 +16420,7 @@ function afterRender(callback, options) {
16196
16420
  * </div>
16197
16421
  *
16198
16422
  * @param callback A callback function to register
16423
+ * @param options Options to control the behavior of the callback
16199
16424
  *
16200
16425
  * @usageNotes
16201
16426
  *
@@ -16730,30 +16955,6 @@ function getNamespace(elementName) {
16730
16955
  const name = elementName.toLowerCase();
16731
16956
  return name === 'svg' ? SVG_NAMESPACE : name === 'math' ? MATH_ML_NAMESPACE : null;
16732
16957
  }
16733
- /**
16734
- * Injector that looks up a value using a specific injector, before falling back to the module
16735
- * injector. Used primarily when creating components or embedded views dynamically.
16736
- */
16737
- class ChainedInjector {
16738
- constructor(injector, parentInjector) {
16739
- this.injector = injector;
16740
- this.parentInjector = parentInjector;
16741
- }
16742
- get(token, notFoundValue, flags) {
16743
- flags = convertToBitFlags(flags);
16744
- const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
16745
- if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
16746
- notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
16747
- // Return the value from the root element injector when
16748
- // - it provides it
16749
- // (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
16750
- // - the module injector should not be checked
16751
- // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
16752
- return value;
16753
- }
16754
- return this.parentInjector.get(token, notFoundValue, flags);
16755
- }
16756
- }
16757
16958
  /**
16758
16959
  * ComponentFactory interface implementation.
16759
16960
  */
@@ -17055,7 +17256,7 @@ function createRootComponent(componentView, rootComponentDef, rootDirectives, ho
17055
17256
  function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
17056
17257
  if (rootSelectorOrNode) {
17057
17258
  // The placeholder will be replaced with the actual version at build time.
17058
- setUpAttributes(hostRenderer, hostRNode, ['ng-version', '18.0.3']);
17259
+ setUpAttributes(hostRenderer, hostRNode, ['ng-version', '18.0.5']);
17059
17260
  }
17060
17261
  else {
17061
17262
  // If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
@@ -18246,7 +18447,7 @@ function createModelSignal(initialValue) {
18246
18447
  /** Asserts that a model's value is set. */
18247
18448
  function assertModelSet(value) {
18248
18449
  if (value === REQUIRED_UNSET_VALUE) {
18249
- throw new RuntimeError(-952 /* RuntimeErrorCode.REQUIRED_MODEL_NO_VALUE */, ngDevMode && 'Model is required but no value is available yet.');
18450
+ throw new RuntimeError(952 /* RuntimeErrorCode.REQUIRED_MODEL_NO_VALUE */, ngDevMode && 'Model is required but no value is available yet.');
18250
18451
  }
18251
18452
  }
18252
18453
 
@@ -20629,14 +20830,6 @@ function renderDeferBlockState(newState, tNode, lContainer, skipTimerScheduling
20629
20830
  }
20630
20831
  }
20631
20832
  }
20632
- /**
20633
- * Detects whether an injector is an instance of a `ChainedInjector`,
20634
- * created based on the `OutletInjector`.
20635
- */
20636
- function isRouterOutletInjector(currentInjector) {
20637
- return (currentInjector instanceof ChainedInjector &&
20638
- typeof currentInjector.injector.__ngOutletInjector === 'function');
20639
- }
20640
20833
  /**
20641
20834
  * Creates an instance of the `OutletInjector` using a private factory
20642
20835
  * function available on the `OutletInjector` class.
@@ -20865,7 +21058,7 @@ function triggerResourceLoading(tDetails, lView, tNode) {
20865
21058
  if (failed) {
20866
21059
  tDetails.loadingState = DeferDependenciesLoadingState.FAILED;
20867
21060
  if (tDetails.errorTmplIndex === null) {
20868
- const templateLocation = getTemplateLocationDetails(lView);
21061
+ const templateLocation = ngDevMode ? getTemplateLocationDetails(lView) : '';
20869
21062
  const error = new RuntimeError(750 /* RuntimeErrorCode.DEFER_LOADING_FAILED */, ngDevMode &&
20870
21063
  'Loading dependencies for `@defer` block failed, ' +
20871
21064
  `but no \`@error\` block was configured${templateLocation}. ` +
@@ -25148,79 +25341,6 @@ function getCaseIndex(icuExpression, bindingValue) {
25148
25341
  return index === -1 ? null : index;
25149
25342
  }
25150
25343
 
25151
- function loadIcuContainerVisitor() {
25152
- const _stack = [];
25153
- let _index = -1;
25154
- let _lView;
25155
- let _removes;
25156
- /**
25157
- * Retrieves a set of root nodes from `TIcu.remove`. Used by `TNodeType.ICUContainer`
25158
- * to determine which root belong to the ICU.
25159
- *
25160
- * Example of usage.
25161
- * ```
25162
- * const nextRNode = icuContainerIteratorStart(tIcuContainerNode, lView);
25163
- * let rNode: RNode|null;
25164
- * while(rNode = nextRNode()) {
25165
- * console.log(rNode);
25166
- * }
25167
- * ```
25168
- *
25169
- * @param tIcuContainerNode Current `TIcuContainerNode`
25170
- * @param lView `LView` where the `RNode`s should be looked up.
25171
- */
25172
- function icuContainerIteratorStart(tIcuContainerNode, lView) {
25173
- _lView = lView;
25174
- while (_stack.length)
25175
- _stack.pop();
25176
- ngDevMode && assertTNodeForLView(tIcuContainerNode, lView);
25177
- enterIcu(tIcuContainerNode.value, lView);
25178
- return icuContainerIteratorNext;
25179
- }
25180
- function enterIcu(tIcu, lView) {
25181
- _index = 0;
25182
- const currentCase = getCurrentICUCaseIndex(tIcu, lView);
25183
- if (currentCase !== null) {
25184
- ngDevMode && assertNumberInRange(currentCase, 0, tIcu.cases.length - 1);
25185
- _removes = tIcu.remove[currentCase];
25186
- }
25187
- else {
25188
- _removes = EMPTY_ARRAY;
25189
- }
25190
- }
25191
- function icuContainerIteratorNext() {
25192
- if (_index < _removes.length) {
25193
- const removeOpCode = _removes[_index++];
25194
- ngDevMode && assertNumber(removeOpCode, 'Expecting OpCode number');
25195
- if (removeOpCode > 0) {
25196
- const rNode = _lView[removeOpCode];
25197
- ngDevMode && assertDomNode(rNode);
25198
- return rNode;
25199
- }
25200
- else {
25201
- _stack.push(_index, _removes);
25202
- // ICUs are represented by negative indices
25203
- const tIcuIndex = ~removeOpCode;
25204
- const tIcu = _lView[TVIEW].data[tIcuIndex];
25205
- ngDevMode && assertTIcu(tIcu);
25206
- enterIcu(tIcu, _lView);
25207
- return icuContainerIteratorNext();
25208
- }
25209
- }
25210
- else {
25211
- if (_stack.length === 0) {
25212
- return null;
25213
- }
25214
- else {
25215
- _removes = _stack.pop();
25216
- _index = _stack.pop();
25217
- return icuContainerIteratorNext();
25218
- }
25219
- }
25220
- }
25221
- return icuContainerIteratorStart;
25222
- }
25223
-
25224
25344
  /**
25225
25345
  * Converts `I18nCreateOpCodes` array into a human readable format.
25226
25346
  *
@@ -26673,17 +26793,20 @@ function ɵɵprojectionDef(projectionSlots) {
26673
26793
  const tails = projectionHeads.slice();
26674
26794
  let componentChild = componentNode.child;
26675
26795
  while (componentChild !== null) {
26676
- const slotIndex = projectionSlots
26677
- ? matchingProjectionSlotIndex(componentChild, projectionSlots)
26678
- : 0;
26679
- if (slotIndex !== null) {
26680
- if (tails[slotIndex]) {
26681
- tails[slotIndex].projectionNext = componentChild;
26682
- }
26683
- else {
26684
- projectionHeads[slotIndex] = componentChild;
26796
+ // Do not project let declarations so they don't occupy a slot.
26797
+ if (componentChild.type !== 128 /* TNodeType.LetDeclaration */) {
26798
+ const slotIndex = projectionSlots
26799
+ ? matchingProjectionSlotIndex(componentChild, projectionSlots)
26800
+ : 0;
26801
+ if (slotIndex !== null) {
26802
+ if (tails[slotIndex]) {
26803
+ tails[slotIndex].projectionNext = componentChild;
26804
+ }
26805
+ else {
26806
+ projectionHeads[slotIndex] = componentChild;
26807
+ }
26808
+ tails[slotIndex] = componentChild;
26685
26809
  }
26686
- tails[slotIndex] = componentChild;
26687
26810
  }
26688
26811
  componentChild = componentChild.next;
26689
26812
  }
@@ -28405,6 +28528,61 @@ function ɵɵtwoWayListener(eventName, listenerFn) {
28405
28528
  return ɵɵtwoWayListener;
28406
28529
  }
28407
28530
 
28531
+ /*!
28532
+ * @license
28533
+ * Copyright Google LLC All Rights Reserved.
28534
+ *
28535
+ * Use of this source code is governed by an MIT-style license that can be
28536
+ * found in the LICENSE file at https://angular.io/license
28537
+ */
28538
+ /** Object that indicates the value of a `@let` declaration that hasn't been initialized yet. */
28539
+ const UNINITIALIZED_LET = {};
28540
+ /**
28541
+ * Declares an `@let` at a specific data slot. Returns itself to allow chaining.
28542
+ *
28543
+ * @param index Index at which to declare the `@let`.
28544
+ *
28545
+ * @codeGenApi
28546
+ */
28547
+ function ɵɵdeclareLet(index) {
28548
+ const tView = getTView();
28549
+ const lView = getLView();
28550
+ const adjustedIndex = index + HEADER_OFFSET;
28551
+ const tNode = getOrCreateTNode(tView, adjustedIndex, 128 /* TNodeType.LetDeclaration */, null, null);
28552
+ setCurrentTNode(tNode, false);
28553
+ store(tView, lView, adjustedIndex, UNINITIALIZED_LET);
28554
+ return ɵɵdeclareLet;
28555
+ }
28556
+ /**
28557
+ * Instruction that stores the value of a `@let` declaration on the current view.
28558
+ * Returns the value to allow usage inside variable initializers.
28559
+ *
28560
+ * @codeGenApi
28561
+ */
28562
+ function ɵɵstoreLet(value) {
28563
+ performanceMarkFeature('NgLet');
28564
+ const tView = getTView();
28565
+ const lView = getLView();
28566
+ const index = getSelectedIndex();
28567
+ store(tView, lView, index, value);
28568
+ return value;
28569
+ }
28570
+ /**
28571
+ * Retrieves the value of a `@let` declaration defined in a parent view.
28572
+ *
28573
+ * @param index Index of the declaration within the view.
28574
+ *
28575
+ * @codeGenApi
28576
+ */
28577
+ function ɵɵreadContextLet(index) {
28578
+ const contextLView = getContextLView();
28579
+ const value = load(contextLView, HEADER_OFFSET + index);
28580
+ if (value === UNINITIALIZED_LET) {
28581
+ throw new RuntimeError(314 /* RuntimeErrorCode.UNINITIALIZED_LET_ACCESS */, ngDevMode && 'Attempting to access a @let declaration whose value is not available yet');
28582
+ }
28583
+ return value;
28584
+ }
28585
+
28408
28586
  /*
28409
28587
  * This file re-exports all symbols contained in this directory.
28410
28588
  *
@@ -29674,6 +29852,9 @@ const angularCoreEnv = (() => ({
29674
29852
  'ɵɵregisterNgModuleType': registerNgModuleType,
29675
29853
  'ɵɵgetComponentDepsFactory': ɵɵgetComponentDepsFactory,
29676
29854
  'ɵsetClassDebugInfo': ɵsetClassDebugInfo,
29855
+ 'ɵɵdeclareLet': ɵɵdeclareLet,
29856
+ 'ɵɵstoreLet': ɵɵstoreLet,
29857
+ 'ɵɵreadContextLet': ɵɵreadContextLet,
29677
29858
  'ɵɵsanitizeHtml': ɵɵsanitizeHtml,
29678
29859
  'ɵɵsanitizeStyle': ɵɵsanitizeStyle,
29679
29860
  'ɵɵsanitizeResourceUrl': ɵɵsanitizeResourceUrl,
@@ -30855,7 +31036,7 @@ class Version {
30855
31036
  /**
30856
31037
  * @publicApi
30857
31038
  */
30858
- const VERSION = new Version('18.0.3');
31039
+ const VERSION = new Version('18.0.5');
30859
31040
 
30860
31041
  /*
30861
31042
  * This file exists to support compilation of @angular/core in Ivy mode.
@@ -31632,7 +31813,16 @@ function getInjectorResolutionPathHelper(injector, resolutionPath) {
31632
31813
  */
31633
31814
  function getInjectorParent(injector) {
31634
31815
  if (injector instanceof R3Injector) {
31635
- return injector.parent;
31816
+ const parent = injector.parent;
31817
+ if (isRouterOutletInjector(parent)) {
31818
+ // This is a special case for a `ChainedInjector` instance, which represents
31819
+ // a combination of a Router's `OutletInjector` and an EnvironmentInjector,
31820
+ // which represents a `@defer` block. Since the `OutletInjector` doesn't store
31821
+ // any tokens itself, we point to the parent injector instead. See the
31822
+ // `OutletInjector.__ngOutletInjector` field for additional information.
31823
+ return parent.parentInjector;
31824
+ }
31825
+ return parent;
31636
31826
  }
31637
31827
  let tNode;
31638
31828
  let lView;
@@ -31647,7 +31837,7 @@ function getInjectorParent(injector) {
31647
31837
  return injector.parentInjector;
31648
31838
  }
31649
31839
  else {
31650
- throwError('getInjectorParent only support injectors of type R3Injector, NodeInjector, NullInjector, ChainedInjector');
31840
+ throwError('getInjectorParent only support injectors of type R3Injector, NodeInjector, NullInjector');
31651
31841
  }
31652
31842
  const parentLocation = getParentInjectorLocation(tNode, lView);
31653
31843
  if (hasParentInjector(parentLocation)) {
@@ -33295,7 +33485,7 @@ class ChangeDetectionSchedulerImpl {
33295
33485
  function provideExperimentalZonelessChangeDetection() {
33296
33486
  performanceMarkFeature('NgZoneless');
33297
33487
  if ((typeof ngDevMode === 'undefined' || ngDevMode) && typeof Zone !== 'undefined' && Zone) {
33298
- const message = formatRuntimeError(914 /* RuntimeErrorCode.UNEXPECTED_ZONEJS_PRESENT_IN_ZONELESS_MODE */, `The application is using zoneless change detection, but is still loading Zone.js.` +
33488
+ const message = formatRuntimeError(914 /* RuntimeErrorCode.UNEXPECTED_ZONEJS_PRESENT_IN_ZONELESS_MODE */, `The application is using zoneless change detection, but is still loading Zone.js. ` +
33299
33489
  `Consider removing Zone.js to get the full benefits of zoneless. ` +
33300
33490
  `In applications using the Angular CLI, Zone.js is typically included in the "polyfills" section of the angular.json file.`);
33301
33491
  console.warn(message);
@@ -34046,7 +34236,8 @@ function createViewRef(tNode, lView, isPipe) {
34046
34236
  const componentView = getComponentLViewByIndex(tNode.index, lView); // look down
34047
34237
  return new ViewRef$1(componentView, componentView);
34048
34238
  }
34049
- else if (tNode.type & (3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 32 /* TNodeType.Icu */)) {
34239
+ else if (tNode.type &
34240
+ (3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 32 /* TNodeType.Icu */ | 128 /* TNodeType.LetDeclaration */)) {
34050
34241
  // The LView represents the location where the injection is requested from.
34051
34242
  // We need to locate the containing LView (in case where the `lView` is an embedded view)
34052
34243
  const hostComponentView = lView[DECLARATION_COMPONENT_VIEW]; // look up
@@ -36661,7 +36852,8 @@ const initGlobalEventDelegation = (eventDelegation, injector) => {
36661
36852
  if (injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT)) {
36662
36853
  return;
36663
36854
  }
36664
- eventDelegation.eventContract = new EventContract(new EventContractContainer(document.body));
36855
+ eventDelegation.eventContract = new EventContract(new EventContractContainer(document.body),
36856
+ /* useActionResolver= */ false);
36665
36857
  const dispatcher = new EventDispatcher(invokeRegisteredListeners);
36666
36858
  registerDispatcher(eventDelegation.eventContract, dispatcher);
36667
36859
  };
@@ -36674,6 +36866,13 @@ const jsactionSet = new Set();
36674
36866
  function isGlobalEventDelegationEnabled(injector) {
36675
36867
  return injector.get(IS_GLOBAL_EVENT_DELEGATION_ENABLED, false);
36676
36868
  }
36869
+ /**
36870
+ * Determines whether Event Replay feature should be activated on the client.
36871
+ */
36872
+ function shouldEnableEventReplay(injector) {
36873
+ return (injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT) &&
36874
+ !isGlobalEventDelegationEnabled(injector));
36875
+ }
36677
36876
  /**
36678
36877
  * Returns a set of providers required to setup support for event replay.
36679
36878
  * Requires hydration to be enabled separately.
@@ -36682,19 +36881,31 @@ function withEventReplay() {
36682
36881
  return [
36683
36882
  {
36684
36883
  provide: IS_EVENT_REPLAY_ENABLED,
36685
- useValue: true,
36884
+ useFactory: () => {
36885
+ let isEnabled = true;
36886
+ if (isPlatformBrowser()) {
36887
+ // Note: globalThis[CONTRACT_PROPERTY] may be undefined in case Event Replay feature
36888
+ // is enabled, but there are no events configured in this application, in which case
36889
+ // we don't activate this feature, since there are no events to replay.
36890
+ const appId = inject(APP_ID);
36891
+ isEnabled = !!globalThis[CONTRACT_PROPERTY]?.[appId];
36892
+ }
36893
+ if (isEnabled) {
36894
+ performanceMarkFeature('NgEventReplay');
36895
+ }
36896
+ return isEnabled;
36897
+ },
36686
36898
  },
36687
36899
  {
36688
36900
  provide: ENVIRONMENT_INITIALIZER,
36689
36901
  useValue: () => {
36690
36902
  const injector = inject(Injector);
36691
- if (isGlobalEventDelegationEnabled(injector)) {
36692
- return;
36903
+ if (isPlatformBrowser(injector) && shouldEnableEventReplay(injector)) {
36904
+ setStashFn((rEl, eventName, listenerFn) => {
36905
+ sharedStashFunction(rEl, eventName, listenerFn);
36906
+ jsactionSet.add(rEl);
36907
+ });
36693
36908
  }
36694
- setStashFn((rEl, eventName, listenerFn) => {
36695
- sharedStashFunction(rEl, eventName, listenerFn);
36696
- jsactionSet.add(rEl);
36697
- });
36698
36909
  },
36699
36910
  multi: true,
36700
36911
  },
@@ -36705,13 +36916,13 @@ function withEventReplay() {
36705
36916
  const injector = inject(Injector);
36706
36917
  const appRef = inject(ApplicationRef);
36707
36918
  return () => {
36919
+ if (!shouldEnableEventReplay(injector)) {
36920
+ return;
36921
+ }
36708
36922
  // Kick off event replay logic once hydration for the initial part
36709
36923
  // of the application is completed. This timing is similar to the unclaimed
36710
36924
  // dehydrated views cleanup timing.
36711
36925
  whenStable(appRef).then(() => {
36712
- if (isGlobalEventDelegationEnabled(injector)) {
36713
- return;
36714
- }
36715
36926
  const globalEventDelegation = injector.get(GlobalEventDelegation);
36716
36927
  initEventReplay(globalEventDelegation, injector);
36717
36928
  jsactionSet.forEach(removeListeners);
@@ -36734,11 +36945,10 @@ function getJsactionData(container) {
36734
36945
  const initEventReplay = (eventDelegation, injector) => {
36735
36946
  const appId = injector.get(APP_ID);
36736
36947
  // This is set in packages/platform-server/src/utils.ts
36737
- // Note: globalThis[CONTRACT_PROPERTY] may be undefined in case Event Replay feature
36738
- // is enabled, but there are no events configured in an application.
36739
36948
  const container = globalThis[CONTRACT_PROPERTY]?.[appId];
36740
36949
  const earlyJsactionData = getJsactionData(container);
36741
- const eventContract = (eventDelegation.eventContract = new EventContract(new EventContractContainer(earlyJsactionData.c)));
36950
+ const eventContract = (eventDelegation.eventContract = new EventContract(new EventContractContainer(earlyJsactionData.c),
36951
+ /* useActionResolver= */ false));
36742
36952
  for (const et of earlyJsactionData.et) {
36743
36953
  eventContract.addEvent(et);
36744
36954
  }
@@ -37037,15 +37247,18 @@ function serializeLContainer(lContainer, context) {
37037
37247
  function appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes) {
37038
37248
  const noOffsetIndex = tNode.index - HEADER_OFFSET;
37039
37249
  ngh[NODES] ??= {};
37040
- ngh[NODES][noOffsetIndex] = calcPathForNode(tNode, lView, excludedParentNodes);
37250
+ // Ensure we don't calculate the path multiple times.
37251
+ ngh[NODES][noOffsetIndex] ??= calcPathForNode(tNode, lView, excludedParentNodes);
37041
37252
  }
37042
37253
  /**
37043
37254
  * Helper function to append information about a disconnected node.
37044
37255
  * This info is needed at runtime to avoid DOM lookups for this element
37045
37256
  * and instead, the element would be created from scratch.
37046
37257
  */
37047
- function appendDisconnectedNodeIndex(ngh, tNode) {
37048
- const noOffsetIndex = tNode.index - HEADER_OFFSET;
37258
+ function appendDisconnectedNodeIndex(ngh, tNodeOrNoOffsetIndex) {
37259
+ const noOffsetIndex = typeof tNodeOrNoOffsetIndex === 'number'
37260
+ ? tNodeOrNoOffsetIndex
37261
+ : tNodeOrNoOffsetIndex.index - HEADER_OFFSET;
37049
37262
  ngh[DISCONNECTED_NODES] ??= [];
37050
37263
  if (!ngh[DISCONNECTED_NODES].includes(noOffsetIndex)) {
37051
37264
  ngh[DISCONNECTED_NODES].push(noOffsetIndex);
@@ -37076,7 +37289,15 @@ function serializeLView(lView, context) {
37076
37289
  const i18nData = trySerializeI18nBlock(lView, i, context);
37077
37290
  if (i18nData) {
37078
37291
  ngh[I18N_DATA] ??= {};
37079
- ngh[I18N_DATA][noOffsetIndex] = i18nData;
37292
+ ngh[I18N_DATA][noOffsetIndex] = i18nData.caseQueue;
37293
+ for (const nodeNoOffsetIndex of i18nData.disconnectedNodes) {
37294
+ appendDisconnectedNodeIndex(ngh, nodeNoOffsetIndex);
37295
+ }
37296
+ for (const nodeNoOffsetIndex of i18nData.disjointNodes) {
37297
+ const tNode = tView.data[nodeNoOffsetIndex + HEADER_OFFSET];
37298
+ ngDevMode && assertTNode(tNode);
37299
+ appendSerializedNodePath(ngh, tNode, lView, i18nChildren);
37300
+ }
37080
37301
  continue;
37081
37302
  }
37082
37303
  // Skip processing of a given slot in the following cases:
@@ -37189,13 +37410,14 @@ function serializeLView(lView, context) {
37189
37410
  ngh[ELEMENT_CONTAINERS] ??= {};
37190
37411
  ngh[ELEMENT_CONTAINERS][noOffsetIndex] = calcNumRootNodes(tView, lView, tNode.child);
37191
37412
  }
37192
- else if (tNode.type & 16 /* TNodeType.Projection */) {
37193
- // Current TNode represents an `<ng-content>` slot, thus it has no
37194
- // DOM elements associated with it, so the **next sibling** node would
37195
- // not be able to find an anchor. In this case, use full path instead.
37413
+ else if (tNode.type & (16 /* TNodeType.Projection */ | 128 /* TNodeType.LetDeclaration */)) {
37414
+ // Current TNode represents an `<ng-content>` slot or `@let` declaration,
37415
+ // thus it has no DOM elements associated with it, so the **next sibling**
37416
+ // node would not be able to find an anchor. In this case, use full path instead.
37196
37417
  let nextTNode = tNode.next;
37197
- // Skip over all `<ng-content>` slots in a row.
37198
- while (nextTNode !== null && nextTNode.type & 16 /* TNodeType.Projection */) {
37418
+ // Skip over all `<ng-content>` slots and `@let` declarations in a row.
37419
+ while (nextTNode !== null &&
37420
+ nextTNode.type & (16 /* TNodeType.Projection */ | 128 /* TNodeType.LetDeclaration */)) {
37199
37421
  nextTNode = nextTNode.next;
37200
37422
  }
37201
37423
  if (nextTNode && !isInSkipHydrationBlock(nextTNode)) {
@@ -37203,11 +37425,9 @@ function serializeLView(lView, context) {
37203
37425
  appendSerializedNodePath(ngh, nextTNode, lView, i18nChildren);
37204
37426
  }
37205
37427
  }
37206
- else {
37207
- if (tNode.type & 1 /* TNodeType.Text */) {
37208
- const rNode = unwrapRNode(lView[i]);
37209
- processTextNodeBeforeSerialization(context, rNode);
37210
- }
37428
+ else if (tNode.type & 1 /* TNodeType.Text */) {
37429
+ const rNode = unwrapRNode(lView[i]);
37430
+ processTextNodeBeforeSerialization(context, rNode);
37211
37431
  }
37212
37432
  }
37213
37433
  }
@@ -38123,5 +38343,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
38123
38343
  * Generated bundle index. Do not edit.
38124
38344
  */
38125
38345
 
38126
- export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, ExperimentalPendingTasks, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterNextRender, afterRender, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderEventManager as ɵAfterRenderEventManager, 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, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PendingTasks as ɵPendingTasks, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalAfterNextRender as ɵinternalAfterNextRender, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, queueStateUpdate as ɵqueueStateUpdate, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, whenStable as ɵwhenStable, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵStandaloneFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵ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, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵ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 };
38346
+ export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, ExperimentalPendingTasks, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterNextRender, afterRender, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderEventManager as ɵAfterRenderEventManager, 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, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PendingTasks as ɵPendingTasks, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalAfterNextRender as ɵinternalAfterNextRender, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, queueStateUpdate as ɵqueueStateUpdate, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, whenStable as ɵwhenStable, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵStandaloneFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
38127
38347
  //# sourceMappingURL=core.mjs.map