@angular/core 19.1.2 → 19.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/fesm2022/core.mjs +529 -594
  2. package/fesm2022/core.mjs.map +1 -1
  3. package/fesm2022/primitives/event-dispatch.mjs +2 -1
  4. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  5. package/fesm2022/primitives/signals.mjs +87 -2
  6. package/fesm2022/primitives/signals.mjs.map +1 -1
  7. package/fesm2022/rxjs-interop.mjs +1 -1
  8. package/fesm2022/testing.mjs +4 -4
  9. package/index.d.ts +6 -21
  10. package/package.json +1 -1
  11. package/primitives/event-dispatch/index.d.ts +1 -1
  12. package/primitives/signals/index.d.ts +42 -1
  13. package/rxjs-interop/index.d.ts +1 -1
  14. package/schematics/bundles/{apply_import_manager-bb1a82ec.js → apply_import_manager-3ba5d1bb.js} +3 -3
  15. package/schematics/bundles/{checker-aa999c96.js → checker-ca858016.js} +40 -7
  16. package/schematics/bundles/cleanup-unused-imports.js +53 -20
  17. package/schematics/bundles/{compiler_host-f0b570c8.js → compiler_host-c26ed2d0.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-31a38653.js +1 -1
  21. package/schematics/bundles/{index-4830663b.js → index-761b9f6f.js} +4 -4
  22. package/schematics/bundles/{index-4e3d512c.js → index-aa0e0065.js} +4 -4
  23. package/schematics/bundles/inject-migration.js +3 -3
  24. package/schematics/bundles/leading_space-6e7a8ec6.js +1 -1
  25. package/schematics/bundles/{migrate_ts_type_references-21d5d831.js → migrate_ts_type_references-c6d4443c.js} +5 -5
  26. package/schematics/bundles/nodes-88c2157f.js +1 -1
  27. package/schematics/bundles/output-migration.js +5 -5
  28. package/schematics/bundles/pending-tasks.js +3 -3
  29. package/schematics/bundles/{program-57240d08.js → program-8e222816.js} +34 -15
  30. package/schematics/bundles/project_tsconfig_paths-6c9cde78.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 +6 -6
  34. package/schematics/bundles/signal-queries-migration.js +6 -6
  35. package/schematics/bundles/signals.js +6 -6
  36. package/schematics/bundles/standalone-migration.js +5 -5
  37. package/testing/index.d.ts +1 -1
package/fesm2022/core.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  /**
2
- * @license Angular v19.1.2
2
+ * @license Angular v19.1.4
3
3
  * (c) 2010-2024 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
- import { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, getActiveConsumer as getActiveConsumer$1, setActiveConsumer as setActiveConsumer$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, consumerDestroy as consumerDestroy$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, createComputed as createComputed$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1, producerUpdateValueVersion as producerUpdateValueVersion$1, producerMarkClean as producerMarkClean$1, defaultEquals as defaultEquals$1, createWatch as createWatch$1, isInNotificationPhase as isInNotificationPhase$1 } from '@angular/core/primitives/signals';
7
+ import { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, getActiveConsumer as getActiveConsumer$1, setActiveConsumer as setActiveConsumer$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, consumerDestroy as consumerDestroy$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, createComputed as createComputed$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1, createLinkedSignal as createLinkedSignal$1, linkedSignalSetFn as linkedSignalSetFn$1, linkedSignalUpdateFn as linkedSignalUpdateFn$1, createWatch as createWatch$1, isInNotificationPhase as isInNotificationPhase$1 } from '@angular/core/primitives/signals';
8
8
  export { SIGNAL as ɵSIGNAL } from '@angular/core/primitives/signals';
9
9
  import { BehaviorSubject, Subject, Subscription } from 'rxjs';
10
10
  import { Attribute as Attribute$1, clearAppScopedEarlyEventContract, EventContract, EventContractContainer, getAppScopedQueuedEventInfos, EventDispatcher, registerDispatcher, isEarlyEventType, isCaptureEventType, EventPhase } from '@angular/core/primitives/event-dispatch';
@@ -2963,6 +2963,7 @@ function isComponentDef(def) {
2963
2963
  return !!def.template;
2964
2964
  }
2965
2965
  function isRootView(target) {
2966
+ // Determines whether a given LView is marked as a root view.
2966
2967
  return (target[FLAGS] & 512 /* LViewFlags.IsRoot */) !== 0;
2967
2968
  }
2968
2969
  function isProjectionTNode(tNode) {
@@ -5617,7 +5618,7 @@ function lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundVa
5617
5618
  while (currentTNode !== null &&
5618
5619
  currentLView !== null &&
5619
5620
  currentLView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */ &&
5620
- !(currentLView[FLAGS] & 512 /* LViewFlags.IsRoot */)) {
5621
+ !isRootView(currentLView)) {
5621
5622
  ngDevMode && assertTNodeForLView(currentTNode, currentLView);
5622
5623
  // Note that this lookup on the node injector is using the `Self` flag, because
5623
5624
  // we don't want the node injector to look at any parent injectors since we
@@ -7799,8 +7800,7 @@ function getDirectivesAtNodeIndex(nodeIndex, lView) {
7799
7800
  }
7800
7801
  function getComponentAtNodeIndex(nodeIndex, lView) {
7801
7802
  const tNode = lView[TVIEW].data[nodeIndex];
7802
- const { directiveStart, componentOffset } = tNode;
7803
- return componentOffset > -1 ? lView[directiveStart + componentOffset] : null;
7803
+ return isComponentHost(tNode) ? lView[tNode.directiveStart + tNode.componentOffset] : null;
7804
7804
  }
7805
7805
  /**
7806
7806
  * Returns a map of local references (local reference name => element or directive instance) that
@@ -7829,7 +7829,7 @@ function discoverLocalRefs(lView, nodeIndex) {
7829
7829
  function getRootView(componentOrLView) {
7830
7830
  ngDevMode && assertDefined(componentOrLView, 'component');
7831
7831
  let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);
7832
- while (lView && !(lView[FLAGS] & 512 /* LViewFlags.IsRoot */)) {
7832
+ while (lView && !isRootView(lView)) {
7833
7833
  lView = getLViewParent(lView);
7834
7834
  }
7835
7835
  ngDevMode && assertLView(lView);
@@ -7947,7 +7947,7 @@ function getOwningComponent(elementOrDir) {
7947
7947
  while (lView[TVIEW].type === 2 /* TViewType.Embedded */ && (parent = getLViewParent(lView))) {
7948
7948
  lView = parent;
7949
7949
  }
7950
- return lView[FLAGS] & 512 /* LViewFlags.IsRoot */ ? null : lView[CONTEXT];
7950
+ return isRootView(lView) ? null : lView[CONTEXT];
7951
7951
  }
7952
7952
  /**
7953
7953
  * Retrieves all root components associated with a DOM element, directive or component instance.
@@ -12076,12 +12076,131 @@ function extractAttrsAndClassesFromSelector(selector) {
12076
12076
  }
12077
12077
  i++;
12078
12078
  }
12079
- return { attrs, classes };
12079
+ if (classes.length) {
12080
+ attrs.push(1 /* AttributeMarker.Classes */, ...classes);
12081
+ }
12082
+ return attrs;
12080
12083
  }
12081
12084
 
12082
12085
  /** A special value which designates that a value has not changed. */
12083
12086
  const NO_CHANGE = typeof ngDevMode === 'undefined' || ngDevMode ? { __brand__: 'NO_CHANGE' } : {};
12084
12087
 
12088
+ function createTextNode(renderer, value) {
12089
+ ngDevMode && ngDevMode.rendererCreateTextNode++;
12090
+ ngDevMode && ngDevMode.rendererSetText++;
12091
+ return renderer.createText(value);
12092
+ }
12093
+ function updateTextNode(renderer, rNode, value) {
12094
+ ngDevMode && ngDevMode.rendererSetText++;
12095
+ renderer.setValue(rNode, value);
12096
+ }
12097
+ function createCommentNode(renderer, value) {
12098
+ ngDevMode && ngDevMode.rendererCreateComment++;
12099
+ return renderer.createComment(escapeCommentText(value));
12100
+ }
12101
+ /**
12102
+ * Creates a native element from a tag name, using a renderer.
12103
+ * @param renderer A renderer to use
12104
+ * @param name the tag name
12105
+ * @param namespace Optional namespace for element.
12106
+ * @returns the element created
12107
+ */
12108
+ function createElementNode(renderer, name, namespace) {
12109
+ ngDevMode && ngDevMode.rendererCreateElement++;
12110
+ return renderer.createElement(name, namespace);
12111
+ }
12112
+ /**
12113
+ * Inserts a native node before another native node for a given parent.
12114
+ * This is a utility function that can be used when native nodes were determined.
12115
+ */
12116
+ function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
12117
+ ngDevMode && ngDevMode.rendererInsertBefore++;
12118
+ renderer.insertBefore(parent, child, beforeNode, isMove);
12119
+ }
12120
+ function nativeAppendChild(renderer, parent, child) {
12121
+ ngDevMode && ngDevMode.rendererAppendChild++;
12122
+ ngDevMode && assertDefined(parent, 'parent node must be defined');
12123
+ renderer.appendChild(parent, child);
12124
+ }
12125
+ function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {
12126
+ if (beforeNode !== null) {
12127
+ nativeInsertBefore(renderer, parent, child, beforeNode, isMove);
12128
+ }
12129
+ else {
12130
+ nativeAppendChild(renderer, parent, child);
12131
+ }
12132
+ }
12133
+ /**
12134
+ * Removes a native node itself using a given renderer. To remove the node we are looking up its
12135
+ * parent from the native tree as not all platforms / browsers support the equivalent of
12136
+ * node.remove().
12137
+ *
12138
+ * @param renderer A renderer to be used
12139
+ * @param rNode The native node that should be removed
12140
+ * @param isHostElement A flag indicating if a node to be removed is a host of a component.
12141
+ */
12142
+ function nativeRemoveNode(renderer, rNode, isHostElement) {
12143
+ ngDevMode && ngDevMode.rendererRemoveNode++;
12144
+ renderer.removeChild(null, rNode, isHostElement);
12145
+ }
12146
+ /**
12147
+ * Clears the contents of a given RElement.
12148
+ *
12149
+ * @param rElement the native RElement to be cleared
12150
+ */
12151
+ function clearElementContents(rElement) {
12152
+ rElement.textContent = '';
12153
+ }
12154
+ /**
12155
+ * Write `cssText` to `RElement`.
12156
+ *
12157
+ * This function does direct write without any reconciliation. Used for writing initial values, so
12158
+ * that static styling values do not pull in the style parser.
12159
+ *
12160
+ * @param renderer Renderer to use
12161
+ * @param element The element which needs to be updated.
12162
+ * @param newValue The new class list to write.
12163
+ */
12164
+ function writeDirectStyle(renderer, element, newValue) {
12165
+ ngDevMode && assertString(newValue, "'newValue' should be a string");
12166
+ renderer.setAttribute(element, 'style', newValue);
12167
+ ngDevMode && ngDevMode.rendererSetStyle++;
12168
+ }
12169
+ /**
12170
+ * Write `className` to `RElement`.
12171
+ *
12172
+ * This function does direct write without any reconciliation. Used for writing initial values, so
12173
+ * that static styling values do not pull in the style parser.
12174
+ *
12175
+ * @param renderer Renderer to use
12176
+ * @param element The element which needs to be updated.
12177
+ * @param newValue The new class list to write.
12178
+ */
12179
+ function writeDirectClass(renderer, element, newValue) {
12180
+ ngDevMode && assertString(newValue, "'newValue' should be a string");
12181
+ if (newValue === '') {
12182
+ // There are tests in `google3` which expect `element.getAttribute('class')` to be `null`.
12183
+ renderer.removeAttribute(element, 'class');
12184
+ }
12185
+ else {
12186
+ renderer.setAttribute(element, 'class', newValue);
12187
+ }
12188
+ ngDevMode && ngDevMode.rendererSetClassName++;
12189
+ }
12190
+ /** Sets up the static DOM attributes on an `RNode`. */
12191
+ function setupStaticAttributes(renderer, element, tNode) {
12192
+ const { mergedAttrs, classes, styles } = tNode;
12193
+ if (mergedAttrs !== null) {
12194
+ setUpAttributes(renderer, element, mergedAttrs);
12195
+ }
12196
+ if (classes !== null) {
12197
+ writeDirectClass(renderer, element, classes);
12198
+ }
12199
+ if (styles !== null) {
12200
+ writeDirectStyle(renderer, element, styles);
12201
+ }
12202
+ }
12203
+
12085
12204
  /**
12086
12205
  * Advances to an element for later binding instructions.
12087
12206
  *
@@ -12201,73 +12320,6 @@ function writeToDirectiveInput(def, instance, publicName, privateName, flags, va
12201
12320
  }
12202
12321
  }
12203
12322
 
12204
- function createTextNode(renderer, value) {
12205
- ngDevMode && ngDevMode.rendererCreateTextNode++;
12206
- ngDevMode && ngDevMode.rendererSetText++;
12207
- return renderer.createText(value);
12208
- }
12209
- function updateTextNode(renderer, rNode, value) {
12210
- ngDevMode && ngDevMode.rendererSetText++;
12211
- renderer.setValue(rNode, value);
12212
- }
12213
- function createCommentNode(renderer, value) {
12214
- ngDevMode && ngDevMode.rendererCreateComment++;
12215
- return renderer.createComment(escapeCommentText(value));
12216
- }
12217
- /**
12218
- * Creates a native element from a tag name, using a renderer.
12219
- * @param renderer A renderer to use
12220
- * @param name the tag name
12221
- * @param namespace Optional namespace for element.
12222
- * @returns the element created
12223
- */
12224
- function createElementNode(renderer, name, namespace) {
12225
- ngDevMode && ngDevMode.rendererCreateElement++;
12226
- return renderer.createElement(name, namespace);
12227
- }
12228
- /**
12229
- * Inserts a native node before another native node for a given parent.
12230
- * This is a utility function that can be used when native nodes were determined.
12231
- */
12232
- function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
12233
- ngDevMode && ngDevMode.rendererInsertBefore++;
12234
- renderer.insertBefore(parent, child, beforeNode, isMove);
12235
- }
12236
- function nativeAppendChild(renderer, parent, child) {
12237
- ngDevMode && ngDevMode.rendererAppendChild++;
12238
- ngDevMode && assertDefined(parent, 'parent node must be defined');
12239
- renderer.appendChild(parent, child);
12240
- }
12241
- function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {
12242
- if (beforeNode !== null) {
12243
- nativeInsertBefore(renderer, parent, child, beforeNode, isMove);
12244
- }
12245
- else {
12246
- nativeAppendChild(renderer, parent, child);
12247
- }
12248
- }
12249
- /**
12250
- * Removes a native node itself using a given renderer. To remove the node we are looking up its
12251
- * parent from the native tree as not all platforms / browsers support the equivalent of
12252
- * node.remove().
12253
- *
12254
- * @param renderer A renderer to be used
12255
- * @param rNode The native node that should be removed
12256
- * @param isHostElement A flag indicating if a node to be removed is a host of a component.
12257
- */
12258
- function nativeRemoveNode(renderer, rNode, isHostElement) {
12259
- ngDevMode && ngDevMode.rendererRemoveNode++;
12260
- renderer.removeChild(null, rNode, isHostElement);
12261
- }
12262
- /**
12263
- * Clears the contents of a given RElement.
12264
- *
12265
- * @param rElement the native RElement to be cleared
12266
- */
12267
- function clearElementContents(rElement) {
12268
- rElement.textContent = '';
12269
- }
12270
-
12271
12323
  function createLView(parentLView, tView, context, flags, host, tHostNode, environment, renderer, injector, embeddedViewInjector, hydrationInfo) {
12272
12324
  const lView = tView.blueprint.slice();
12273
12325
  lView[HOST] = host;
@@ -12301,67 +12353,6 @@ function createLView(parentLView, tView, context, flags, host, tHostNode, enviro
12301
12353
  tView.type == 2 /* TViewType.Embedded */ ? parentLView[DECLARATION_COMPONENT_VIEW] : lView;
12302
12354
  return lView;
12303
12355
  }
12304
- function getOrCreateTNode(tView, index, type, name, attrs) {
12305
- ngDevMode &&
12306
- index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
12307
- // `view_engine_compatibility` for additional context.
12308
- assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
12309
- // Keep this function short, so that the VM will inline it.
12310
- ngDevMode && assertPureTNodeType(type);
12311
- let tNode = tView.data[index];
12312
- if (tNode === null) {
12313
- tNode = createTNodeAtIndex(tView, index, type, name, attrs);
12314
- if (isInI18nBlock()) {
12315
- // If we are in i18n block then all elements should be pre declared through `Placeholder`
12316
- // See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.
12317
- // If the `TNode` was not pre-declared than it means it was not mentioned which means it was
12318
- // removed, so we mark it as detached.
12319
- tNode.flags |= 32 /* TNodeFlags.isDetached */;
12320
- }
12321
- }
12322
- else if (tNode.type & 64 /* TNodeType.Placeholder */) {
12323
- tNode.type = type;
12324
- tNode.value = name;
12325
- tNode.attrs = attrs;
12326
- const parent = getCurrentParentTNode();
12327
- tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;
12328
- ngDevMode && assertTNodeForTView(tNode, tView);
12329
- ngDevMode && assertEqual(index, tNode.index, 'Expecting same index');
12330
- }
12331
- setCurrentTNode(tNode, true);
12332
- return tNode;
12333
- }
12334
- function createTNodeAtIndex(tView, index, type, name, attrs) {
12335
- const currentTNode = getCurrentTNodePlaceholderOk();
12336
- const isParent = isCurrentTNodeParent();
12337
- const parent = isParent ? currentTNode : currentTNode && currentTNode.parent;
12338
- // Parents cannot cross component boundaries because components will be used in multiple places.
12339
- const tNode = (tView.data[index] = createTNode(tView, parent, type, index, name, attrs));
12340
- // Assign a pointer to the first child node of a given view. The first node is not always the one
12341
- // at index 0, in case of i18n, index 0 can be the instruction `i18nStart` and the first node has
12342
- // the index 1 or more, so we can't just check node index.
12343
- if (tView.firstChild === null) {
12344
- tView.firstChild = tNode;
12345
- }
12346
- if (currentTNode !== null) {
12347
- if (isParent) {
12348
- // FIXME(misko): This logic looks unnecessarily complicated. Could we simplify?
12349
- if (currentTNode.child == null && tNode.parent !== null) {
12350
- // We are in the same view, which means we are adding content node to the parent view.
12351
- currentTNode.child = tNode;
12352
- }
12353
- }
12354
- else {
12355
- if (currentTNode.next === null) {
12356
- // In the case of i18n the `currentTNode` may already be linked, in which case we don't want
12357
- // to break the links which i18n created.
12358
- currentTNode.next = tNode;
12359
- tNode.prev = currentTNode;
12360
- }
12361
- }
12362
- }
12363
- return tNode;
12364
- }
12365
12356
  /**
12366
12357
  * When elements are created dynamically after a view blueprint is created (e.g. through
12367
12358
  * i18nApply()), we need to adjust the blueprint for future
@@ -12417,10 +12408,17 @@ function executeTemplate(tView, lView, templateFn, rf, context) {
12417
12408
  /**
12418
12409
  * Creates directive instances.
12419
12410
  */
12420
- function createDirectivesInstances(tView, lView, tNode) {
12411
+ function createDirectivesInstancesInInstruction(tView, lView, tNode) {
12421
12412
  if (!getBindingsEnabled())
12422
12413
  return;
12423
- instantiateAllDirectives(tView, lView, tNode, getNativeByTNode(tNode, lView));
12414
+ attachPatchData(getNativeByTNode(tNode, lView), lView);
12415
+ createDirectivesInstances(tView, lView, tNode);
12416
+ }
12417
+ /**
12418
+ * Creates directive instances.
12419
+ */
12420
+ function createDirectivesInstances(tView, lView, tNode) {
12421
+ instantiateAllDirectives(tView, lView, tNode);
12424
12422
  if ((tNode.flags & 64 /* TNodeFlags.hasHostBindings */) === 64 /* TNodeFlags.hasHostBindings */) {
12425
12423
  invokeDirectivesHostBindings(tView, lView, tNode);
12426
12424
  }
@@ -12595,62 +12593,6 @@ function applyRootElementTransformImpl(rootElement) {
12595
12593
  function enableApplyRootElementTransformImpl() {
12596
12594
  _applyRootElementTransformImpl = applyRootElementTransformImpl;
12597
12595
  }
12598
- function createTNode(tView, tParent, type, index, value, attrs) {
12599
- ngDevMode &&
12600
- index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
12601
- // `view_engine_compatibility` for additional context.
12602
- assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
12603
- ngDevMode && assertNotSame(attrs, undefined, "'undefined' is not valid value for 'attrs'");
12604
- ngDevMode && ngDevMode.tNode++;
12605
- ngDevMode && tParent && assertTNodeForTView(tParent, tView);
12606
- let injectorIndex = tParent ? tParent.injectorIndex : -1;
12607
- let flags = 0;
12608
- if (isInSkipHydrationBlock$1()) {
12609
- flags |= 128 /* TNodeFlags.inSkipHydrationBlock */;
12610
- }
12611
- const tNode = {
12612
- type,
12613
- index,
12614
- insertBeforeIndex: null,
12615
- injectorIndex,
12616
- directiveStart: -1,
12617
- directiveEnd: -1,
12618
- directiveStylingLast: -1,
12619
- componentOffset: -1,
12620
- propertyBindings: null,
12621
- flags,
12622
- providerIndexes: 0,
12623
- value: value,
12624
- attrs: attrs,
12625
- mergedAttrs: null,
12626
- localNames: null,
12627
- initialInputs: undefined,
12628
- inputs: null,
12629
- outputs: null,
12630
- tView: null,
12631
- next: null,
12632
- prev: null,
12633
- projectionNext: null,
12634
- child: null,
12635
- parent: tParent,
12636
- projection: null,
12637
- styles: null,
12638
- stylesWithoutHost: null,
12639
- residualStyles: undefined,
12640
- classes: null,
12641
- classesWithoutHost: null,
12642
- residualClasses: undefined,
12643
- classBindings: 0,
12644
- styleBindings: 0,
12645
- };
12646
- if (ngDevMode) {
12647
- // For performance reasons it is important that the tNode retains the same shape during runtime.
12648
- // (To make sure that all of the code is monomorphic.) For this reason we seal the object to
12649
- // prevent class transitions.
12650
- Object.seal(tNode);
12651
- }
12652
- return tNode;
12653
- }
12654
12596
  function captureNodeBindings(mode, aliasMap, directiveIndex, bindingsResult, hostDirectiveAliasMap) {
12655
12597
  for (let publicName in aliasMap) {
12656
12598
  if (!aliasMap.hasOwnProperty(publicName)) {
@@ -12860,16 +12802,9 @@ function resolveDirectives(tView, lView, tNode, localRefs) {
12860
12802
  ngDevMode && assertFirstCreatePass(tView);
12861
12803
  if (getBindingsEnabled()) {
12862
12804
  const exportsMap = localRefs === null ? null : { '': -1 };
12863
- const matchResult = findDirectiveDefMatches(tView, tNode);
12864
- let directiveDefs;
12865
- let hostDirectiveDefs;
12866
- if (matchResult === null) {
12867
- directiveDefs = hostDirectiveDefs = null;
12868
- }
12869
- else {
12870
- [directiveDefs, hostDirectiveDefs] = matchResult;
12871
- }
12872
- if (directiveDefs !== null) {
12805
+ const matchedDirectiveDefs = findDirectiveDefMatches(tView, tNode);
12806
+ if (matchedDirectiveDefs !== null) {
12807
+ const [directiveDefs, hostDirectiveDefs] = resolveHostDirectives(tView, tNode, matchedDirectiveDefs);
12873
12808
  initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs);
12874
12809
  }
12875
12810
  if (exportsMap)
@@ -12981,19 +12916,18 @@ function lastSelectedElementIdx(hostBindingOpCodes) {
12981
12916
  /**
12982
12917
  * Instantiate all the directives that were previously resolved on the current node.
12983
12918
  */
12984
- function instantiateAllDirectives(tView, lView, tNode, native) {
12919
+ function instantiateAllDirectives(tView, lView, tNode) {
12985
12920
  const start = tNode.directiveStart;
12986
12921
  const end = tNode.directiveEnd;
12987
12922
  // The component view needs to be created before creating the node injector
12988
12923
  // since it is used to inject some special symbols like `ChangeDetectorRef`.
12989
12924
  if (isComponentHost(tNode)) {
12990
12925
  ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */);
12991
- addComponentLogic(lView, tNode, tView.data[start + tNode.componentOffset]);
12926
+ createComponentLView(lView, tNode, tView.data[start + tNode.componentOffset]);
12992
12927
  }
12993
12928
  if (!tView.firstCreatePass) {
12994
12929
  getOrCreateNodeInjectorForNode(tNode, lView);
12995
12930
  }
12996
- attachPatchData(native, lView);
12997
12931
  const initialInputs = tNode.initialInputs;
12998
12932
  for (let i = start; i < end; i++) {
12999
12933
  const def = tView.data[i];
@@ -13049,60 +12983,63 @@ function findDirectiveDefMatches(tView, tNode) {
13049
12983
  ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */);
13050
12984
  const registry = tView.directiveRegistry;
13051
12985
  let matches = null;
13052
- let hostDirectiveDefs = null;
13053
12986
  if (registry) {
13054
12987
  for (let i = 0; i < registry.length; i++) {
13055
12988
  const def = registry[i];
13056
12989
  if (isNodeMatchingSelectorList(tNode, def.selectors, /* isProjectionMode */ false)) {
13057
- matches || (matches = []);
12990
+ matches ??= [];
13058
12991
  if (isComponentDef(def)) {
13059
12992
  if (ngDevMode) {
13060
12993
  assertTNodeType(tNode, 2 /* TNodeType.Element */, `"${tNode.value}" tags cannot be used as component hosts. ` +
13061
12994
  `Please use a different tag to activate the ${stringify(def.type)} component.`);
13062
- if (isComponentHost(tNode)) {
12995
+ if (matches.length && isComponentDef(matches[0])) {
13063
12996
  throwMultipleComponentError(tNode, matches.find(isComponentDef).type, def.type);
13064
12997
  }
13065
12998
  }
13066
- // Components are inserted at the front of the matches array so that their lifecycle
13067
- // hooks run before any directive lifecycle hooks. This appears to be for ViewEngine
13068
- // compatibility. This logic doesn't make sense with host directives, because it
13069
- // would allow the host directives to undo any overrides the host may have made.
13070
- // To handle this case, the host directives of components are inserted at the beginning
13071
- // of the array, followed by the component. As such, the insertion order is as follows:
13072
- // 1. Host directives belonging to the selector-matched component.
13073
- // 2. Selector-matched component.
13074
- // 3. Host directives belonging to selector-matched directives.
13075
- // 4. Selector-matched directives.
13076
- if (def.findHostDirectiveDefs !== null) {
13077
- const hostDirectiveMatches = [];
13078
- hostDirectiveDefs = hostDirectiveDefs || new Map();
13079
- def.findHostDirectiveDefs(def, hostDirectiveMatches, hostDirectiveDefs);
13080
- // Add all host directives declared on this component, followed by the component itself.
13081
- // Host directives should execute first so the host has a chance to override changes
13082
- // to the DOM made by them.
13083
- matches.unshift(...hostDirectiveMatches, def);
13084
- // Component is offset starting from the beginning of the host directives array.
13085
- const componentOffset = hostDirectiveMatches.length;
13086
- markAsComponentHost(tView, tNode, componentOffset);
13087
- }
13088
- else {
13089
- // No host directives on this component, just add the
13090
- // component def to the beginning of the matches.
13091
- matches.unshift(def);
13092
- markAsComponentHost(tView, tNode, 0);
13093
- }
12999
+ matches.unshift(def);
13094
13000
  }
13095
13001
  else {
13096
- // Append any host directives to the matches first.
13097
- hostDirectiveDefs = hostDirectiveDefs || new Map();
13098
- def.findHostDirectiveDefs?.(def, matches, hostDirectiveDefs);
13099
13002
  matches.push(def);
13100
13003
  }
13101
13004
  }
13102
13005
  }
13103
13006
  }
13104
- ngDevMode && matches !== null && assertNoDuplicateDirectives(matches);
13105
- return matches === null ? null : [matches, hostDirectiveDefs];
13007
+ return matches;
13008
+ }
13009
+ function resolveHostDirectives(tView, tNode, matches) {
13010
+ const allDirectiveDefs = [];
13011
+ let hostDirectiveDefs = null;
13012
+ for (const def of matches) {
13013
+ if (def.findHostDirectiveDefs !== null) {
13014
+ // TODO(pk): probably could return matches instead of taking in an array to fill in?
13015
+ hostDirectiveDefs ??= new Map();
13016
+ // Components are inserted at the front of the matches array so that their lifecycle
13017
+ // hooks run before any directive lifecycle hooks. This appears to be for ViewEngine
13018
+ // compatibility. This logic doesn't make sense with host directives, because it
13019
+ // would allow the host directives to undo any overrides the host may have made.
13020
+ // To handle this case, the host directives of components are inserted at the beginning
13021
+ // of the array, followed by the component. As such, the insertion order is as follows:
13022
+ // 1. Host directives belonging to the selector-matched component.
13023
+ // 2. Selector-matched component.
13024
+ // 3. Host directives belonging to selector-matched directives.
13025
+ // 4. Selector-matched directives.
13026
+ def.findHostDirectiveDefs(def, allDirectiveDefs, hostDirectiveDefs);
13027
+ }
13028
+ if (isComponentDef(def)) {
13029
+ allDirectiveDefs.push(def);
13030
+ markAsComponentHost(tView, tNode, allDirectiveDefs.length - 1);
13031
+ }
13032
+ }
13033
+ if (isComponentHost(tNode)) {
13034
+ allDirectiveDefs.push(...matches.slice(1));
13035
+ }
13036
+ else {
13037
+ allDirectiveDefs.push(...matches);
13038
+ }
13039
+ if (ngDevMode) {
13040
+ assertNoDuplicateDirectives(allDirectiveDefs);
13041
+ }
13042
+ return [allDirectiveDefs, hostDirectiveDefs];
13106
13043
  }
13107
13044
  /**
13108
13045
  * Marks a given TNode as a component's host. This consists of:
@@ -13198,7 +13135,7 @@ function getInitialLViewFlagsFromDef(def) {
13198
13135
  }
13199
13136
  return flags;
13200
13137
  }
13201
- function addComponentLogic(lView, hostTNode, def) {
13138
+ function createComponentLView(lView, hostTNode, def) {
13202
13139
  const native = getNativeByTNode(hostTNode, lView);
13203
13140
  const tView = getOrCreateComponentTView(def);
13204
13141
  // Only component views should be added to the view tree directly. Embedded views are
@@ -13207,7 +13144,7 @@ function addComponentLogic(lView, hostTNode, def) {
13207
13144
  const componentView = addToEndOfViewTree(lView, createLView(lView, tView, null, getInitialLViewFlagsFromDef(def), native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));
13208
13145
  // Component view will always be created before any injected LContainers,
13209
13146
  // so this is a regular element, wrap it with the component view
13210
- lView[hostTNode.index] = componentView;
13147
+ return (lView[hostTNode.index] = componentView);
13211
13148
  }
13212
13149
  function elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace) {
13213
13150
  if (ngDevMode) {
@@ -13603,6 +13540,15 @@ function ensureIcuContainerVisitorLoaded(loader) {
13603
13540
  }
13604
13541
  }
13605
13542
 
13543
+ /**
13544
+ * Checks whether a TNode is considered detached, i.e. not present in the
13545
+ * translated i18n template. We should not attempt hydration for such nodes
13546
+ * and instead, use a regular "creation mode".
13547
+ */
13548
+ function isDetachedByI18n(tNode) {
13549
+ return (tNode.flags & 32 /* TNodeFlags.isDetached */) === 32 /* TNodeFlags.isDetached */;
13550
+ }
13551
+
13606
13552
  /**
13607
13553
  * NOTE: for performance reasons, the possible actions are inlined within the function instead of
13608
13554
  * being passed as an argument.
@@ -14079,10 +14025,9 @@ function getClosestRElement(tView, tNode, lView) {
14079
14025
  }
14080
14026
  else {
14081
14027
  ngDevMode && assertTNodeType(parentTNode, 3 /* TNodeType.AnyRNode */ | 4 /* TNodeType.Container */);
14082
- const { componentOffset } = parentTNode;
14083
- if (componentOffset > -1) {
14028
+ if (isComponentHost(parentTNode)) {
14084
14029
  ngDevMode && assertTNodeForLView(parentTNode, lView);
14085
- const { encapsulation } = tView.data[parentTNode.directiveStart + componentOffset];
14030
+ const { encapsulation } = tView.data[parentTNode.directiveStart + parentTNode.componentOffset];
14086
14031
  // We've got a parent which is an element in the current view. We just need to verify if the
14087
14032
  // parent element is not a component. Component's content nodes are not inserted immediately
14088
14033
  // because they will be projected, and so doing insert at this point would be wasteful.
@@ -14273,7 +14218,7 @@ function applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode,
14273
14218
  tNode.flags |= 2 /* TNodeFlags.isProjected */;
14274
14219
  }
14275
14220
  }
14276
- if ((tNode.flags & 32 /* TNodeFlags.isDetached */) !== 32 /* TNodeFlags.isDetached */) {
14221
+ if (!isDetachedByI18n(tNode)) {
14277
14222
  if (tNodeType & 8 /* TNodeType.ElementContainer */) {
14278
14223
  applyNodes(renderer, action, tNode.child, lView, parentRElement, beforeNode, false);
14279
14224
  applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
@@ -14436,55 +14381,6 @@ function applyStyling(renderer, isClassBased, rNode, prop, value) {
14436
14381
  }
14437
14382
  }
14438
14383
  }
14439
- /**
14440
- * Write `cssText` to `RElement`.
14441
- *
14442
- * This function does direct write without any reconciliation. Used for writing initial values, so
14443
- * that static styling values do not pull in the style parser.
14444
- *
14445
- * @param renderer Renderer to use
14446
- * @param element The element which needs to be updated.
14447
- * @param newValue The new class list to write.
14448
- */
14449
- function writeDirectStyle(renderer, element, newValue) {
14450
- ngDevMode && assertString(newValue, "'newValue' should be a string");
14451
- renderer.setAttribute(element, 'style', newValue);
14452
- ngDevMode && ngDevMode.rendererSetStyle++;
14453
- }
14454
- /**
14455
- * Write `className` to `RElement`.
14456
- *
14457
- * This function does direct write without any reconciliation. Used for writing initial values, so
14458
- * that static styling values do not pull in the style parser.
14459
- *
14460
- * @param renderer Renderer to use
14461
- * @param element The element which needs to be updated.
14462
- * @param newValue The new class list to write.
14463
- */
14464
- function writeDirectClass(renderer, element, newValue) {
14465
- ngDevMode && assertString(newValue, "'newValue' should be a string");
14466
- if (newValue === '') {
14467
- // There are tests in `google3` which expect `element.getAttribute('class')` to be `null`.
14468
- renderer.removeAttribute(element, 'class');
14469
- }
14470
- else {
14471
- renderer.setAttribute(element, 'class', newValue);
14472
- }
14473
- ngDevMode && ngDevMode.rendererSetClassName++;
14474
- }
14475
- /** Sets up the static DOM attributes on an `RNode`. */
14476
- function setupStaticAttributes(renderer, element, tNode) {
14477
- const { mergedAttrs, classes, styles } = tNode;
14478
- if (mergedAttrs !== null) {
14479
- setUpAttributes(renderer, element, mergedAttrs);
14480
- }
14481
- if (classes !== null) {
14482
- writeDirectClass(renderer, element, classes);
14483
- }
14484
- if (styles !== null) {
14485
- writeDirectStyle(renderer, element, styles);
14486
- }
14487
- }
14488
14384
 
14489
14385
  function createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {
14490
14386
  const prevConsumer = setActiveConsumer$1(null);
@@ -15996,6 +15892,128 @@ function processI18nInsertBefore(renderer, childTNode, lView, childRNode, parent
15996
15892
  }
15997
15893
  }
15998
15894
 
15895
+ function getOrCreateTNode(tView, index, type, name, attrs) {
15896
+ ngDevMode &&
15897
+ index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
15898
+ // `view_engine_compatibility` for additional context.
15899
+ assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
15900
+ // Keep this function short, so that the VM will inline it.
15901
+ ngDevMode && assertPureTNodeType(type);
15902
+ let tNode = tView.data[index];
15903
+ if (tNode === null) {
15904
+ tNode = createTNodeAtIndex(tView, index, type, name, attrs);
15905
+ if (isInI18nBlock()) {
15906
+ // If we are in i18n block then all elements should be pre declared through `Placeholder`
15907
+ // See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.
15908
+ // If the `TNode` was not pre-declared than it means it was not mentioned which means it was
15909
+ // removed, so we mark it as detached.
15910
+ tNode.flags |= 32 /* TNodeFlags.isDetached */;
15911
+ }
15912
+ }
15913
+ else if (tNode.type & 64 /* TNodeType.Placeholder */) {
15914
+ tNode.type = type;
15915
+ tNode.value = name;
15916
+ tNode.attrs = attrs;
15917
+ const parent = getCurrentParentTNode();
15918
+ tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;
15919
+ ngDevMode && assertTNodeForTView(tNode, tView);
15920
+ ngDevMode && assertEqual(index, tNode.index, 'Expecting same index');
15921
+ }
15922
+ setCurrentTNode(tNode, true);
15923
+ return tNode;
15924
+ }
15925
+ function createTNodeAtIndex(tView, index, type, name, attrs) {
15926
+ const currentTNode = getCurrentTNodePlaceholderOk();
15927
+ const isParent = isCurrentTNodeParent();
15928
+ const parent = isParent ? currentTNode : currentTNode && currentTNode.parent;
15929
+ // Parents cannot cross component boundaries because components will be used in multiple places.
15930
+ const tNode = (tView.data[index] = createTNode(tView, parent, type, index, name, attrs));
15931
+ // Assign a pointer to the first child node of a given view. The first node is not always the one
15932
+ // at index 0, in case of i18n, index 0 can be the instruction `i18nStart` and the first node has
15933
+ // the index 1 or more, so we can't just check node index.
15934
+ linkTNodeInTView(tView, tNode, currentTNode, isParent);
15935
+ return tNode;
15936
+ }
15937
+ function linkTNodeInTView(tView, tNode, currentTNode, isParent) {
15938
+ if (tView.firstChild === null) {
15939
+ tView.firstChild = tNode;
15940
+ }
15941
+ if (currentTNode !== null) {
15942
+ if (isParent) {
15943
+ // FIXME(misko): This logic looks unnecessarily complicated. Could we simplify?
15944
+ if (currentTNode.child == null && tNode.parent !== null) {
15945
+ // We are in the same view, which means we are adding content node to the parent view.
15946
+ currentTNode.child = tNode;
15947
+ }
15948
+ }
15949
+ else {
15950
+ if (currentTNode.next === null) {
15951
+ // In the case of i18n the `currentTNode` may already be linked, in which case we don't want
15952
+ // to break the links which i18n created.
15953
+ currentTNode.next = tNode;
15954
+ tNode.prev = currentTNode;
15955
+ }
15956
+ }
15957
+ }
15958
+ }
15959
+ function createTNode(tView, tParent, type, index, value, attrs) {
15960
+ ngDevMode &&
15961
+ index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
15962
+ // `view_engine_compatibility` for additional context.
15963
+ assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
15964
+ ngDevMode && assertNotSame(attrs, undefined, "'undefined' is not valid value for 'attrs'");
15965
+ ngDevMode && ngDevMode.tNode++;
15966
+ ngDevMode && tParent && assertTNodeForTView(tParent, tView);
15967
+ let injectorIndex = tParent ? tParent.injectorIndex : -1;
15968
+ let flags = 0;
15969
+ if (isInSkipHydrationBlock$1()) {
15970
+ flags |= 128 /* TNodeFlags.inSkipHydrationBlock */;
15971
+ }
15972
+ // TODO: would it be helpful to use a prototypal inheritance here, similar to the way we do so with signals?
15973
+ const tNode = {
15974
+ type,
15975
+ index,
15976
+ insertBeforeIndex: null,
15977
+ injectorIndex,
15978
+ directiveStart: -1,
15979
+ directiveEnd: -1,
15980
+ directiveStylingLast: -1,
15981
+ componentOffset: -1,
15982
+ propertyBindings: null,
15983
+ flags,
15984
+ providerIndexes: 0,
15985
+ value: value,
15986
+ attrs: attrs,
15987
+ mergedAttrs: null,
15988
+ localNames: null,
15989
+ initialInputs: undefined,
15990
+ inputs: null,
15991
+ outputs: null,
15992
+ tView: null,
15993
+ next: null,
15994
+ prev: null,
15995
+ projectionNext: null,
15996
+ child: null,
15997
+ parent: tParent,
15998
+ projection: null,
15999
+ styles: null,
16000
+ stylesWithoutHost: null,
16001
+ residualStyles: undefined,
16002
+ classes: null,
16003
+ classesWithoutHost: null,
16004
+ residualClasses: undefined,
16005
+ classBindings: 0,
16006
+ styleBindings: 0,
16007
+ };
16008
+ if (ngDevMode) {
16009
+ // For performance reasons it is important that the tNode retains the same shape during runtime.
16010
+ // (To make sure that all of the code is monomorphic.) For this reason we seal the object to
16011
+ // prevent class transitions.
16012
+ Object.seal(tNode);
16013
+ }
16014
+ return tNode;
16015
+ }
16016
+
15999
16017
  /**
16000
16018
  * Add `tNode` to `previousTNodes` list and update relevant `TNode`s in `previousTNodes` list
16001
16019
  * `tNode.insertBeforeIndex`.
@@ -17808,15 +17826,6 @@ function getNamespace(elementName) {
17808
17826
  const name = elementName.toLowerCase();
17809
17827
  return name === 'svg' ? SVG_NAMESPACE : name === 'math' ? MATH_ML_NAMESPACE : null;
17810
17828
  }
17811
- // TODO(pk): change the extractAttrsAndClassesFromSelector so it returns TAttributes already?
17812
- function getRootTAttributesFromSelector(selector) {
17813
- const { attrs, classes } = extractAttrsAndClassesFromSelector(selector);
17814
- const tAtts = attrs;
17815
- if (classes.length) {
17816
- tAtts.push(1 /* AttributeMarker.Classes */, ...classes);
17817
- }
17818
- return tAtts;
17819
- }
17820
17829
  /**
17821
17830
  * ComponentFactory interface implementation.
17822
17831
  */
@@ -17853,9 +17862,7 @@ class ComponentFactory extends ComponentFactory$1 {
17853
17862
  this.ngModule = ngModule;
17854
17863
  this.componentType = componentDef.type;
17855
17864
  this.selector = stringifyCSSSelectorList(componentDef.selectors);
17856
- this.ngContentSelectors = componentDef.ngContentSelectors
17857
- ? componentDef.ngContentSelectors
17858
- : [];
17865
+ this.ngContentSelectors = componentDef.ngContentSelectors ?? [];
17859
17866
  this.isBoundToModule = !!ngModule;
17860
17867
  }
17861
17868
  create(injector, projectableNodes, rootSelectorOrNode, environmentInjector) {
@@ -17917,36 +17924,27 @@ class ComponentFactory extends ComponentFactory$1 {
17917
17924
  // Create the root view. Uses empty TView and ContentTemplate.
17918
17925
  const rootTView = createTView(0 /* TViewType.Root */, null, null, 1, 0, null, null, null, null, null, null);
17919
17926
  const rootLView = createLView(null, rootTView, null, rootFlags, null, null, environment, hostRenderer, rootViewInjector, null, hydrationInfo);
17927
+ rootLView[HEADER_OFFSET] = hostRNode;
17920
17928
  // rootView is the parent when bootstrapping
17921
17929
  // TODO(misko): it looks like we are entering view here but we don't really need to as
17922
17930
  // `renderView` does that. However as the code is written it is needed because
17923
17931
  // `createRootComponentView` and `createRootComponent` both read global state. Fixing those
17924
17932
  // issues would allow us to drop this.
17925
17933
  enterView(rootLView);
17926
- let component;
17927
- let tElementNode;
17928
17934
  let componentView = null;
17929
17935
  try {
17930
- const rootComponentDef = this.componentDef;
17931
- let rootDirectives;
17932
- let hostDirectiveDefs = null;
17933
- if (rootComponentDef.findHostDirectiveDefs) {
17934
- rootDirectives = [];
17935
- hostDirectiveDefs = new Map();
17936
- rootComponentDef.findHostDirectiveDefs(rootComponentDef, rootDirectives, hostDirectiveDefs);
17937
- rootDirectives.push(rootComponentDef);
17938
- ngDevMode && assertNoDuplicateDirectives(rootDirectives);
17939
- }
17940
- else {
17941
- rootDirectives = [rootComponentDef];
17942
- }
17943
- const hostTNode = createRootComponentTNode(rootLView, hostRNode);
17944
17936
  // If host dom element is created (instead of being provided as part of the dynamic component creation), also apply attributes and classes extracted from component selector.
17945
17937
  const tAttributes = rootSelectorOrNode
17946
- ? ['ng-version', '19.1.2']
17938
+ ? ['ng-version', '19.1.4']
17947
17939
  : // Extract attributes and classes from the first selector only to match VE behavior.
17948
- getRootTAttributesFromSelector(this.componentDef.selectors[0]);
17949
- for (const def of rootDirectives) {
17940
+ extractAttrsAndClassesFromSelector(this.componentDef.selectors[0]);
17941
+ // TODO: this logic is shared with the element instruction first create pass
17942
+ const hostTNode = getOrCreateTNode(rootTView, HEADER_OFFSET, 2 /* TNodeType.Element */, '#host', tAttributes);
17943
+ const [directiveDefs, hostDirectiveDefs] = resolveHostDirectives(rootTView, hostTNode, [
17944
+ this.componentDef,
17945
+ ]);
17946
+ initializeDirectives(rootTView, rootLView, hostTNode, directiveDefs, {}, hostDirectiveDefs);
17947
+ for (const def of directiveDefs) {
17950
17948
  hostTNode.mergedAttrs = mergeHostAttrs(hostTNode.mergedAttrs, def.hostAttrs);
17951
17949
  }
17952
17950
  hostTNode.mergedAttrs = mergeHostAttrs(hostTNode.mergedAttrs, tAttributes);
@@ -17956,15 +17954,19 @@ class ComponentFactory extends ComponentFactory$1 {
17956
17954
  // tests so that this check can be removed.
17957
17955
  if (hostRNode) {
17958
17956
  setupStaticAttributes(hostRenderer, hostRNode, hostTNode);
17957
+ attachPatchData(hostRNode, rootLView);
17959
17958
  }
17960
- componentView = createRootComponentView(hostTNode, hostRNode, rootComponentDef, rootDirectives, rootLView, environment);
17961
- tElementNode = getTNode(rootTView, HEADER_OFFSET);
17962
17959
  if (projectableNodes !== undefined) {
17963
17960
  projectNodes(hostTNode, this.ngContentSelectors, projectableNodes);
17964
17961
  }
17965
- // TODO: should LifecycleHooksFeature and other host features be generated by the compiler
17966
- // and executed here? Angular 5 reference: https://stackblitz.com/edit/lifecycle-hooks-vcref
17967
- component = createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, [LifecycleHooksFeature]);
17962
+ // TODO(pk): this logic is similar to the instruction code where a node can have directives
17963
+ createDirectivesInstances(rootTView, rootLView, hostTNode);
17964
+ executeContentQueries(rootTView, hostTNode, rootLView);
17965
+ // TODO(pk): code / logic duplication with the elementEnd and similar instructions
17966
+ registerPostOrderHooks(rootTView, hostTNode);
17967
+ componentView = getComponentLViewByIndex(hostTNode.index, rootLView);
17968
+ // TODO(pk): why do we need this logic?
17969
+ rootLView[CONTEXT] = componentView[CONTEXT];
17968
17970
  renderView(rootTView, rootLView, null);
17969
17971
  }
17970
17972
  catch (e) {
@@ -17979,7 +17981,7 @@ class ComponentFactory extends ComponentFactory$1 {
17979
17981
  finally {
17980
17982
  leaveView();
17981
17983
  }
17982
- return new ComponentRef(this.componentType, component, createElementRef(tElementNode, rootLView), rootLView, tElementNode);
17984
+ return new ComponentRef(this.componentType, rootLView);
17983
17985
  }
17984
17986
  finally {
17985
17987
  setActiveConsumer$1(prevConsumer);
@@ -17995,20 +17997,20 @@ class ComponentFactory extends ComponentFactory$1 {
17995
17997
  *
17996
17998
  */
17997
17999
  class ComponentRef extends ComponentRef$1 {
17998
- location;
17999
18000
  _rootLView;
18000
- _tNode;
18001
18001
  instance;
18002
18002
  hostView;
18003
18003
  changeDetectorRef;
18004
18004
  componentType;
18005
+ location;
18005
18006
  previousInputValues = null;
18006
- constructor(componentType, instance, location, _rootLView, _tNode) {
18007
+ _tNode;
18008
+ constructor(componentType, _rootLView) {
18007
18009
  super();
18008
- this.location = location;
18009
18010
  this._rootLView = _rootLView;
18010
- this._tNode = _tNode;
18011
- this.instance = instance;
18011
+ this._tNode = getTNode(_rootLView[TVIEW], HEADER_OFFSET);
18012
+ this.location = createElementRef(this._tNode, _rootLView);
18013
+ this.instance = getComponentLViewByIndex(this._tNode.index, _rootLView)[CONTEXT];
18012
18014
  this.hostView = this.changeDetectorRef = new ViewRef$1(_rootLView, undefined /* _cdRefInjectingView */, false /* notifyErrorHandler */);
18013
18015
  this.componentType = componentType;
18014
18016
  }
@@ -18048,81 +18050,6 @@ class ComponentRef extends ComponentRef$1 {
18048
18050
  this.hostView.onDestroy(callback);
18049
18051
  }
18050
18052
  }
18051
- /** Creates a TNode that can be used to instantiate a root component. */
18052
- function createRootComponentTNode(lView, rNode) {
18053
- const tView = lView[TVIEW];
18054
- const index = HEADER_OFFSET;
18055
- ngDevMode && assertIndexInRange(lView, index);
18056
- lView[index] = rNode;
18057
- // '#host' is added here as we don't know the real host DOM name (we don't want to read it) and at
18058
- // the same time we want to communicate the debug `TNode` that this is a special `TNode`
18059
- // representing a host element.
18060
- return getOrCreateTNode(tView, index, 2 /* TNodeType.Element */, '#host', null);
18061
- }
18062
- /**
18063
- * Creates the root component view and the root component node.
18064
- *
18065
- * @param hostRNode Render host element.
18066
- * @param rootComponentDef ComponentDef
18067
- * @param rootView The parent view where the host node is stored
18068
- * @param rendererFactory Factory to be used for creating child renderers.
18069
- * @param hostRenderer The current renderer
18070
- * @param sanitizer The sanitizer, if provided
18071
- *
18072
- * @returns Component view created
18073
- */
18074
- function createRootComponentView(tNode, hostRNode, rootComponentDef, rootDirectives, rootView, environment) {
18075
- const tView = rootView[TVIEW];
18076
- // Hydration info is on the host element and needs to be retrieved
18077
- // and passed to the component LView.
18078
- let hydrationInfo = null;
18079
- if (hostRNode !== null) {
18080
- hydrationInfo = retrieveHydrationInfo(hostRNode, rootView[INJECTOR]);
18081
- }
18082
- const viewRenderer = environment.rendererFactory.createRenderer(hostRNode, rootComponentDef);
18083
- const componentView = createLView(rootView, getOrCreateComponentTView(rootComponentDef), null, getInitialLViewFlagsFromDef(rootComponentDef), rootView[tNode.index], tNode, environment, viewRenderer, null, null, hydrationInfo);
18084
- if (tView.firstCreatePass) {
18085
- markAsComponentHost(tView, tNode, rootDirectives.length - 1);
18086
- }
18087
- addToEndOfViewTree(rootView, componentView);
18088
- // Store component view at node index, with node as the HOST
18089
- return (rootView[tNode.index] = componentView);
18090
- }
18091
- /**
18092
- * Creates a root component and sets it up with features and host bindings.Shared by
18093
- * renderComponent() and ViewContainerRef.createComponent().
18094
- */
18095
- function createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, hostFeatures) {
18096
- const rootTNode = getCurrentTNode();
18097
- ngDevMode && assertDefined(rootTNode, 'tNode should have been already created');
18098
- const tView = rootLView[TVIEW];
18099
- const native = getNativeByTNode(rootTNode, rootLView);
18100
- initializeDirectives(tView, rootLView, rootTNode, rootDirectives, null, hostDirectiveDefs);
18101
- for (let i = 0; i < rootDirectives.length; i++) {
18102
- const directiveIndex = rootTNode.directiveStart + i;
18103
- const directiveInstance = getNodeInjectable(rootLView, tView, directiveIndex, rootTNode);
18104
- attachPatchData(directiveInstance, rootLView);
18105
- }
18106
- invokeDirectivesHostBindings(tView, rootLView, rootTNode);
18107
- if (native) {
18108
- attachPatchData(native, rootLView);
18109
- }
18110
- // We're guaranteed for the `componentOffset` to be positive here
18111
- // since a root component always matches a component def.
18112
- ngDevMode &&
18113
- assertGreaterThan(rootTNode.componentOffset, -1, 'componentOffset must be great than -1');
18114
- const component = getNodeInjectable(rootLView, tView, rootTNode.directiveStart + rootTNode.componentOffset, rootTNode);
18115
- componentView[CONTEXT] = rootLView[CONTEXT] = component;
18116
- if (hostFeatures !== null) {
18117
- for (const feature of hostFeatures) {
18118
- feature(component, rootComponentDef);
18119
- }
18120
- }
18121
- // We want to generate an empty QueryList for root content queries for backwards
18122
- // compatibility with ViewEngine.
18123
- executeContentQueries(tView, rootTNode, rootLView);
18124
- return component;
18125
- }
18126
18053
  /** Projects the `projectableNodes` that were specified when creating a root component. */
18127
18054
  function projectNodes(tNode, ngContentSelectors, projectableNodes) {
18128
18055
  const projection = (tNode.projection = []);
@@ -18136,24 +18063,6 @@ function projectNodes(tNode, ngContentSelectors, projectableNodes) {
18136
18063
  projection.push(nodesforSlot != null && nodesforSlot.length ? Array.from(nodesforSlot) : null);
18137
18064
  }
18138
18065
  }
18139
- /**
18140
- * Used to enable lifecycle hooks on the root component.
18141
- *
18142
- * Include this feature when calling `renderComponent` if the root component
18143
- * you are rendering has lifecycle hooks defined. Otherwise, the hooks won't
18144
- * be called properly.
18145
- *
18146
- * Example:
18147
- *
18148
- * ```ts
18149
- * renderComponent(AppComponent, {hostFeatures: [LifecycleHooksFeature]});
18150
- * ```
18151
- */
18152
- function LifecycleHooksFeature() {
18153
- const tNode = getCurrentTNode();
18154
- ngDevMode && assertDefined(tNode, 'TNode is required');
18155
- registerPostOrderHooks(getLView()[TVIEW], tNode);
18156
- }
18157
18066
 
18158
18067
  /**
18159
18068
  * Represents a container where one or more views can be attached to a component.
@@ -20072,7 +19981,11 @@ function getComponentId(componentDef) {
20072
19981
  // 2147483647 = equivalent of Integer.MAX_VALUE.
20073
19982
  hash += 2147483647 + 1;
20074
19983
  const compId = 'c' + hash;
20075
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
19984
+ if ((typeof ngDevMode === 'undefined' || ngDevMode) &&
19985
+ // Skip the check on the server since we can't guarantee the same component instance between
19986
+ // requests. Note that we can't use DI to check if we're on the server, because the component
19987
+ // hasn't been instantiated yet.
19988
+ (typeof ngServerMode === 'undefined' || !ngServerMode)) {
20076
19989
  if (GENERATED_COMP_IDS.has(compId)) {
20077
19990
  const previousCompDefType = GENERATED_COMP_IDS.get(compId);
20078
19991
  if (previousCompDefType !== componentDef.type) {
@@ -20659,15 +20572,6 @@ function bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {
20659
20572
  return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;
20660
20573
  }
20661
20574
 
20662
- /**
20663
- * Checks whether a TNode is considered detached, i.e. not present in the
20664
- * translated i18n template. We should not attempt hydration for such nodes
20665
- * and instead, use a regular "creation mode".
20666
- */
20667
- function isDetachedByI18n(tNode) {
20668
- return (tNode.flags & 32 /* TNodeFlags.isDetached */) === 32 /* TNodeFlags.isDetached */;
20669
- }
20670
-
20671
20575
  function templateFirstCreatePass(index, tView, lView, templateFn, decls, vars, tagName, attrs, localRefsIndex) {
20672
20576
  ngDevMode && assertFirstCreatePass(tView);
20673
20577
  ngDevMode && ngDevMode.firstCreatePass++;
@@ -20717,7 +20621,7 @@ function declareTemplate(declarationLView, declarationTView, index, templateFn,
20717
20621
  // In client-only mode, this function is a noop.
20718
20622
  populateDehydratedViewsInLContainer(lContainer, tNode, declarationLView);
20719
20623
  if (isDirectiveHost(tNode)) {
20720
- createDirectivesInstances(declarationTView, declarationLView, tNode);
20624
+ createDirectivesInstancesInInstruction(declarationTView, declarationLView, tNode);
20721
20625
  }
20722
20626
  if (localRefsIndex != null) {
20723
20627
  saveResolvedLocalsInData(declarationLView, tNode, localRefExtractor);
@@ -28115,7 +28019,7 @@ function ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {
28115
28019
  }
28116
28020
  increaseElementDepthCount();
28117
28021
  if (hasDirectives) {
28118
- createDirectivesInstances(tView, lView, tNode);
28022
+ createDirectivesInstancesInInstruction(tView, lView, tNode);
28119
28023
  executeContentQueries(tView, tNode, lView);
28120
28024
  }
28121
28025
  if (localRefsIndex !== null) {
@@ -28286,7 +28190,7 @@ function ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {
28286
28190
  }
28287
28191
  attachPatchData(comment, lView);
28288
28192
  if (isDirectiveHost(tNode)) {
28289
- createDirectivesInstances(tView, lView, tNode);
28193
+ createDirectivesInstancesInInstruction(tView, lView, tNode);
28290
28194
  executeContentQueries(tView, tNode, lView);
28291
28195
  }
28292
28196
  if (localRefsIndex != null) {
@@ -30466,7 +30370,7 @@ function wrapListener(tNode, lView, context, listenerFn) {
30466
30370
  }
30467
30371
  // In order to be backwards compatible with View Engine, events on component host nodes
30468
30372
  // must also mark the component view itself dirty (i.e. the view that it owns).
30469
- const startView = tNode.componentOffset > -1 ? getComponentLViewByIndex(tNode.index, lView) : lView;
30373
+ const startView = isComponentHost(tNode) ? getComponentLViewByIndex(tNode.index, lView) : lView;
30470
30374
  markViewDirty(startView, 5 /* NotificationSource.Listener */);
30471
30375
  let result = executeListenerWithErrorHandling(lView, context, listenerFn, e);
30472
30376
  // A just-invoked listener function might have coalesced listeners so we need to check for
@@ -30630,8 +30534,7 @@ function ɵɵprojection(nodeIndex, selectorIndex = 0, attrs, fallbackTemplateFn,
30630
30534
  if (isEmpty && fallbackIndex !== null) {
30631
30535
  insertFallbackContent(lView, tView, fallbackIndex);
30632
30536
  }
30633
- else if (isNodeCreationMode &&
30634
- (tProjectionNode.flags & 32 /* TNodeFlags.isDetached */) !== 32 /* TNodeFlags.isDetached */) {
30537
+ else if (isNodeCreationMode && !isDetachedByI18n(tProjectionNode)) {
30635
30538
  // re-distribution of projectable nodes is stored on a component's view level
30636
30539
  applyProjection(tView, lView, tProjectionNode);
30637
30540
  }
@@ -33413,13 +33316,18 @@ function ɵsetClassDebugInfo(type, debugInfo) {
33413
33316
  */
33414
33317
  function ɵɵreplaceMetadata(type, applyMetadata, namespaces, locals) {
33415
33318
  ngDevMode && assertComponentDef(type);
33416
- const oldDef = getComponentDef(type);
33319
+ const currentDef = getComponentDef(type);
33417
33320
  // The reason `applyMetadata` is a callback that is invoked (almost) immediately is because
33418
33321
  // the compiler usually produces more code than just the component definition, e.g. there
33419
33322
  // can be functions for embedded views, the variables for the constant pool and `setClassMetadata`
33420
33323
  // calls. The callback allows us to keep them isolate from the rest of the app and to invoke
33421
33324
  // them at the right time.
33422
33325
  applyMetadata.apply(null, [type, namespaces, ...locals]);
33326
+ const { newDef, oldDef } = mergeWithExistingDefinition(currentDef, getComponentDef(type));
33327
+ // TODO(crisbeto): the `applyMetadata` call above will replace the definition on the type.
33328
+ // Ideally we should adjust the compiler output so the metadata is returned, however that'll
33329
+ // require some internal changes. We re-add the metadata here manually.
33330
+ type[NG_COMP_DEF] = newDef;
33423
33331
  // If a `tView` hasn't been created yet, it means that this component hasn't been instantianted
33424
33332
  // before. In this case there's nothing left for us to do aside from patching it in.
33425
33333
  if (oldDef.tView) {
@@ -33427,18 +33335,47 @@ function ɵɵreplaceMetadata(type, applyMetadata, namespaces, locals) {
33427
33335
  for (const root of trackedViews) {
33428
33336
  // Note: we have the additional check, because `IsRoot` can also indicate
33429
33337
  // a component created through something like `createComponent`.
33430
- if (root[FLAGS] & 512 /* LViewFlags.IsRoot */ && root[PARENT] === null) {
33431
- recreateMatchingLViews(oldDef, root);
33432
- }
33433
- }
33434
- }
33338
+ if (isRootView(root) && root[PARENT] === null) {
33339
+ recreateMatchingLViews(newDef, oldDef, root);
33340
+ }
33341
+ }
33342
+ }
33343
+ }
33344
+ /**
33345
+ * Merges two component definitions while preseving the original one in place.
33346
+ * @param currentDef Definition that should receive the new metadata.
33347
+ * @param newDef Source of the new metadata.
33348
+ */
33349
+ function mergeWithExistingDefinition(currentDef, newDef) {
33350
+ // Clone the current definition since we reference its original data further
33351
+ // down in the replacement process (e.g. when destroying the renderer).
33352
+ const clone = { ...currentDef };
33353
+ // Assign the new metadata in place while preserving the object literal. It's important to
33354
+ // Keep the object in place, because there can be references to it, for example in the
33355
+ // `directiveDefs` of another definition.
33356
+ const replacement = Object.assign(currentDef, newDef, {
33357
+ // We need to keep the existing directive and pipe defs, because they can get patched on
33358
+ // by a call to `setComponentScope` from a module file. That call won't make it into the
33359
+ // HMR replacement function, because it lives in an entirely different file.
33360
+ directiveDefs: clone.directiveDefs,
33361
+ pipeDefs: clone.pipeDefs,
33362
+ // Preserve the old `setInput` function, because it has some state.
33363
+ // This is fine, because the component instance is preserved as well.
33364
+ setInput: clone.setInput,
33365
+ // Externally this is redundant since we redeclare the definition using the original type.
33366
+ // Internally we may receive a definition with an alternate, but identical, type so we have
33367
+ // to ensure that the original one is preserved.
33368
+ type: clone.type,
33369
+ });
33370
+ ngDevMode && assertEqual(replacement, currentDef, 'Expected definition to be merged in place');
33371
+ return { newDef: replacement, oldDef: clone };
33435
33372
  }
33436
33373
  /**
33437
33374
  * Finds all LViews matching a specific component definition and recreates them.
33438
33375
  * @param oldDef Component definition to search for.
33439
33376
  * @param rootLView View from which to start the search.
33440
33377
  */
33441
- function recreateMatchingLViews(oldDef, rootLView) {
33378
+ function recreateMatchingLViews(newDef, oldDef, rootLView) {
33442
33379
  ngDevMode &&
33443
33380
  assertDefined(oldDef.tView, 'Expected a component definition that has been instantiated at least once');
33444
33381
  const tView = rootLView[TVIEW];
@@ -33446,7 +33383,7 @@ function recreateMatchingLViews(oldDef, rootLView) {
33446
33383
  // produce false positives when using inheritance.
33447
33384
  if (tView === oldDef.tView) {
33448
33385
  ngDevMode && assertComponentDef(oldDef.type);
33449
- recreateLView(getComponentDef(oldDef.type), oldDef, rootLView);
33386
+ recreateLView(newDef, oldDef, rootLView);
33450
33387
  return;
33451
33388
  }
33452
33389
  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
@@ -33454,14 +33391,14 @@ function recreateMatchingLViews(oldDef, rootLView) {
33454
33391
  if (isLContainer(current)) {
33455
33392
  // The host can be an LView if a component is injecting `ViewContainerRef`.
33456
33393
  if (isLView(current[HOST])) {
33457
- recreateMatchingLViews(oldDef, current[HOST]);
33394
+ recreateMatchingLViews(newDef, oldDef, current[HOST]);
33458
33395
  }
33459
33396
  for (let j = CONTAINER_HEADER_OFFSET; j < current.length; j++) {
33460
- recreateMatchingLViews(oldDef, current[j]);
33397
+ recreateMatchingLViews(newDef, oldDef, current[j]);
33461
33398
  }
33462
33399
  }
33463
33400
  else if (isLView(current)) {
33464
- recreateMatchingLViews(oldDef, current);
33401
+ recreateMatchingLViews(newDef, oldDef, current);
33465
33402
  }
33466
33403
  }
33467
33404
  }
@@ -34967,7 +34904,7 @@ class Version {
34967
34904
  /**
34968
34905
  * @publicApi
34969
34906
  */
34970
- const VERSION = new Version('19.1.2');
34907
+ const VERSION = new Version('19.1.4');
34971
34908
 
34972
34909
  /**
34973
34910
  * Combination of NgModuleFactory and ComponentFactories.
@@ -38718,7 +38655,7 @@ function createComputed(computation) {
38718
38655
  producerUpdateValueVersion(node);
38719
38656
  // Record that someone looked at this signal.
38720
38657
  producerAccessed(node);
38721
- if (node.value === ERRORED$1) {
38658
+ if (node.value === ERRORED) {
38722
38659
  throw node.error;
38723
38660
  }
38724
38661
  return node.value;
@@ -38730,26 +38667,26 @@ function createComputed(computation) {
38730
38667
  * A dedicated symbol used before a computed value has been calculated for the first time.
38731
38668
  * Explicitly typed as `any` so we can use it as signal's value.
38732
38669
  */
38733
- const UNSET$1 = /* @__PURE__ */ Symbol('UNSET');
38670
+ const UNSET = /* @__PURE__ */ Symbol('UNSET');
38734
38671
  /**
38735
38672
  * A dedicated symbol used in place of a computed signal value to indicate that a given computation
38736
38673
  * is in progress. Used to detect cycles in computation chains.
38737
38674
  * Explicitly typed as `any` so we can use it as signal's value.
38738
38675
  */
38739
- const COMPUTING$1 = /* @__PURE__ */ Symbol('COMPUTING');
38676
+ const COMPUTING = /* @__PURE__ */ Symbol('COMPUTING');
38740
38677
  /**
38741
38678
  * A dedicated symbol used in place of a computed signal value to indicate that a given computation
38742
38679
  * failed. The thrown error is cached until the computation gets dirty again.
38743
38680
  * Explicitly typed as `any` so we can use it as signal's value.
38744
38681
  */
38745
- const ERRORED$1 = /* @__PURE__ */ Symbol('ERRORED');
38682
+ const ERRORED = /* @__PURE__ */ Symbol('ERRORED');
38746
38683
  // Note: Using an IIFE here to ensure that the spread assignment is not considered
38747
38684
  // a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
38748
38685
  // TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
38749
38686
  const COMPUTED_NODE = /* @__PURE__ */ (() => {
38750
38687
  return {
38751
38688
  ...REACTIVE_NODE,
38752
- value: UNSET$1,
38689
+ value: UNSET,
38753
38690
  dirty: true,
38754
38691
  error: null,
38755
38692
  equal: defaultEquals,
@@ -38757,15 +38694,15 @@ const COMPUTED_NODE = /* @__PURE__ */ (() => {
38757
38694
  producerMustRecompute(node) {
38758
38695
  // Force a recomputation if there's no current value, or if the current value is in the
38759
38696
  // process of being calculated (which should throw an error).
38760
- return node.value === UNSET$1 || node.value === COMPUTING$1;
38697
+ return node.value === UNSET || node.value === COMPUTING;
38761
38698
  },
38762
38699
  producerRecomputeValue(node) {
38763
- if (node.value === COMPUTING$1) {
38700
+ if (node.value === COMPUTING) {
38764
38701
  // Our computation somehow led to a cyclic read of itself.
38765
38702
  throw new Error('Detected cycle in computations.');
38766
38703
  }
38767
38704
  const oldValue = node.value;
38768
- node.value = COMPUTING$1;
38705
+ node.value = COMPUTING;
38769
38706
  const prevConsumer = consumerBeforeComputation(node);
38770
38707
  let newValue;
38771
38708
  let wasEqual = false;
@@ -38775,13 +38712,13 @@ const COMPUTED_NODE = /* @__PURE__ */ (() => {
38775
38712
  // to track any reactive reads inside `equal`.
38776
38713
  setActiveConsumer(null);
38777
38714
  wasEqual =
38778
- oldValue !== UNSET$1 &&
38779
- oldValue !== ERRORED$1 &&
38780
- newValue !== ERRORED$1 &&
38715
+ oldValue !== UNSET &&
38716
+ oldValue !== ERRORED &&
38717
+ newValue !== ERRORED &&
38781
38718
  node.equal(oldValue, newValue);
38782
38719
  }
38783
38720
  catch (err) {
38784
- newValue = ERRORED$1;
38721
+ newValue = ERRORED;
38785
38722
  node.error = err;
38786
38723
  }
38787
38724
  finally {
@@ -38875,6 +38812,91 @@ function signalValueChanged(node) {
38875
38812
  postSignalSetFn?.();
38876
38813
  }
38877
38814
 
38815
+ function createLinkedSignal(sourceFn, computationFn, equalityFn) {
38816
+ const node = Object.create(LINKED_SIGNAL_NODE);
38817
+ node.source = sourceFn;
38818
+ node.computation = computationFn;
38819
+ if (equalityFn != undefined) {
38820
+ node.equal = equalityFn;
38821
+ }
38822
+ const linkedSignalGetter = () => {
38823
+ // Check if the value needs updating before returning it.
38824
+ producerUpdateValueVersion(node);
38825
+ // Record that someone looked at this signal.
38826
+ producerAccessed(node);
38827
+ if (node.value === ERRORED) {
38828
+ throw node.error;
38829
+ }
38830
+ return node.value;
38831
+ };
38832
+ const getter = linkedSignalGetter;
38833
+ getter[SIGNAL] = node;
38834
+ return getter;
38835
+ }
38836
+ function linkedSignalSetFn(node, newValue) {
38837
+ producerUpdateValueVersion(node);
38838
+ signalSetFn(node, newValue);
38839
+ producerMarkClean(node);
38840
+ }
38841
+ function linkedSignalUpdateFn(node, updater) {
38842
+ producerUpdateValueVersion(node);
38843
+ signalUpdateFn(node, updater);
38844
+ producerMarkClean(node);
38845
+ }
38846
+ // Note: Using an IIFE here to ensure that the spread assignment is not considered
38847
+ // a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.
38848
+ // TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
38849
+ const LINKED_SIGNAL_NODE = /* @__PURE__ */ (() => {
38850
+ return {
38851
+ ...REACTIVE_NODE,
38852
+ value: UNSET,
38853
+ dirty: true,
38854
+ error: null,
38855
+ equal: defaultEquals,
38856
+ producerMustRecompute(node) {
38857
+ // Force a recomputation if there's no current value, or if the current value is in the
38858
+ // process of being calculated (which should throw an error).
38859
+ return node.value === UNSET || node.value === COMPUTING;
38860
+ },
38861
+ producerRecomputeValue(node) {
38862
+ if (node.value === COMPUTING) {
38863
+ // Our computation somehow led to a cyclic read of itself.
38864
+ throw new Error('Detected cycle in computations.');
38865
+ }
38866
+ const oldValue = node.value;
38867
+ node.value = COMPUTING;
38868
+ const prevConsumer = consumerBeforeComputation(node);
38869
+ let newValue;
38870
+ try {
38871
+ const newSourceValue = node.source();
38872
+ const prev = oldValue === UNSET || oldValue === ERRORED
38873
+ ? undefined
38874
+ : {
38875
+ source: node.sourceValue,
38876
+ value: oldValue,
38877
+ };
38878
+ newValue = node.computation(newSourceValue, prev);
38879
+ node.sourceValue = newSourceValue;
38880
+ }
38881
+ catch (err) {
38882
+ newValue = ERRORED;
38883
+ node.error = err;
38884
+ }
38885
+ finally {
38886
+ consumerAfterComputation(node, prevConsumer);
38887
+ }
38888
+ if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {
38889
+ // No change to `valueVersion` - old and new values are
38890
+ // semantically equivalent.
38891
+ node.value = oldValue;
38892
+ return;
38893
+ }
38894
+ node.value = newValue;
38895
+ node.version++;
38896
+ },
38897
+ };
38898
+ })();
38899
+
38878
38900
  function createWatch(fn, schedule, allowSignalWrites) {
38879
38901
  const node = Object.create(WATCH_NODE);
38880
38902
  if (allowSignalWrites) {
@@ -39959,12 +39981,12 @@ function printHydrationStats(injector) {
39959
39981
  /**
39960
39982
  * Returns a Promise that is resolved when an application becomes stable.
39961
39983
  */
39962
- function whenStableWithTimeout(appRef, injector) {
39984
+ function whenStableWithTimeout(appRef) {
39963
39985
  const whenStablePromise = appRef.whenStable();
39964
39986
  if (typeof ngDevMode !== 'undefined' && ngDevMode) {
39965
39987
  const timeoutTime = APPLICATION_IS_STABLE_TIMEOUT;
39966
- const console = injector.get(Console);
39967
- const ngZone = injector.get(NgZone);
39988
+ const console = appRef.injector.get(Console);
39989
+ const ngZone = appRef.injector.get(NgZone);
39968
39990
  // The following call should not and does not prevent the app to become stable
39969
39991
  // We cannot use RxJS timer here because the app would remain unstable.
39970
39992
  // This also avoids an extra change detection cycle.
@@ -40062,7 +40084,6 @@ function withDomHydration() {
40062
40084
  useFactory: () => {
40063
40085
  if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
40064
40086
  const appRef = inject(ApplicationRef);
40065
- const injector = inject(Injector);
40066
40087
  return () => {
40067
40088
  // Wait until an app becomes stable and cleanup all views that
40068
40089
  // were not claimed during the application bootstrap process.
@@ -40071,11 +40092,20 @@ function withDomHydration() {
40071
40092
  //
40072
40093
  // Note: the cleanup task *MUST* be scheduled within the Angular zone in Zone apps
40073
40094
  // to ensure that change detection is properly run afterward.
40074
- whenStableWithTimeout(appRef, injector).then(() => {
40095
+ whenStableWithTimeout(appRef).then(() => {
40096
+ // Note: we have to check whether the application is destroyed before
40097
+ // performing other operations with the `injector`.
40098
+ // The application may be destroyed **before** it becomes stable, so when
40099
+ // the `whenStableWithTimeout` resolves, the injector might already be in
40100
+ // a destroyed state. Thus, calling `injector.get` would throw an error
40101
+ // indicating that the injector has already been destroyed.
40102
+ if (appRef.destroyed) {
40103
+ return;
40104
+ }
40075
40105
  cleanupDehydratedViews(appRef);
40076
40106
  if (typeof ngDevMode !== 'undefined' && ngDevMode) {
40077
- countBlocksSkippedByHydration(injector);
40078
- printHydrationStats(injector);
40107
+ countBlocksSkippedByHydration(appRef.injector);
40108
+ printHydrationStats(appRef.injector);
40079
40109
  }
40080
40110
  });
40081
40111
  };
@@ -40477,123 +40507,28 @@ function computed(computation, options) {
40477
40507
  }
40478
40508
 
40479
40509
  const identityFn = (v) => v;
40480
- /**
40481
- * Create a linked signal which represents state that is (re)set from a linked reactive expression.
40482
- */
40483
- function createLinkedSignal(node) {
40484
- const linkedSignalGetter = () => {
40485
- // Check if the value needs updating before returning it.
40486
- producerUpdateValueVersion$1(node);
40487
- // Record that someone looked at this signal.
40488
- producerAccessed$1(node);
40489
- if (node.value === ERRORED) {
40490
- throw node.error;
40491
- }
40492
- return node.value;
40493
- };
40494
- const getter = linkedSignalGetter;
40495
- getter[SIGNAL$1] = node;
40496
- if (ngDevMode) {
40497
- getter.toString = () => `[LinkedSignal: ${getter()}]`;
40498
- }
40499
- getter.set = (newValue) => {
40500
- producerUpdateValueVersion$1(node);
40501
- signalSetFn$1(node, newValue);
40502
- producerMarkClean$1(node);
40503
- };
40504
- getter.update = (updateFn) => {
40505
- producerUpdateValueVersion$1(node);
40506
- signalUpdateFn$1(node, updateFn);
40507
- producerMarkClean$1(node);
40508
- };
40509
- getter.asReadonly = signalAsReadonlyFn.bind(getter);
40510
- return getter;
40511
- }
40512
40510
  function linkedSignal(optionsOrComputation, options) {
40513
40511
  performanceMarkFeature('NgSignals');
40514
- const isShorthand = typeof optionsOrComputation === 'function';
40515
- const node = Object.create(LINKED_SIGNAL_NODE);
40516
- node.source = isShorthand ? optionsOrComputation : optionsOrComputation.source;
40517
- if (!isShorthand) {
40518
- node.computation = optionsOrComputation.computation;
40512
+ if (typeof optionsOrComputation === 'function') {
40513
+ const getter = createLinkedSignal$1(optionsOrComputation, (identityFn), options?.equal);
40514
+ return upgradeLinkedSignalGetter(getter);
40519
40515
  }
40520
- const equal = isShorthand ? options?.equal : optionsOrComputation.equal;
40521
- if (equal) {
40522
- node.equal = equal;
40516
+ else {
40517
+ const getter = createLinkedSignal$1(optionsOrComputation.source, optionsOrComputation.computation, optionsOrComputation.equal);
40518
+ return upgradeLinkedSignalGetter(getter);
40523
40519
  }
40524
- return createLinkedSignal(node);
40525
40520
  }
40526
- /**
40527
- * A dedicated symbol used before a state value has been set / calculated for the first time.
40528
- * Explicitly typed as `any` so we can use it as signal's value.
40529
- */
40530
- const UNSET = /* @__PURE__ */ Symbol('UNSET');
40531
- /**
40532
- * A dedicated symbol used in place of a linked signal value to indicate that a given computation
40533
- * is in progress. Used to detect cycles in computation chains.
40534
- * Explicitly typed as `any` so we can use it as signal's value.
40535
- */
40536
- const COMPUTING = /* @__PURE__ */ Symbol('COMPUTING');
40537
- /**
40538
- * A dedicated symbol used in place of a linked signal value to indicate that a given computation
40539
- * failed. The thrown error is cached until the computation gets dirty again or the state is set.
40540
- * Explicitly typed as `any` so we can use it as signal's value.
40541
- */
40542
- const ERRORED = /* @__PURE__ */ Symbol('ERRORED');
40543
- // Note: Using an IIFE here to ensure that the spread assignment is not considered
40544
- // a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.
40545
- // TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
40546
- const LINKED_SIGNAL_NODE = /* @__PURE__ */ (() => {
40547
- return {
40548
- ...REACTIVE_NODE$1,
40549
- value: UNSET,
40550
- dirty: true,
40551
- error: null,
40552
- equal: defaultEquals$1,
40553
- computation: identityFn,
40554
- producerMustRecompute(node) {
40555
- // Force a recomputation if there's no current value, or if the current value is in the
40556
- // process of being calculated (which should throw an error).
40557
- return node.value === UNSET || node.value === COMPUTING;
40558
- },
40559
- producerRecomputeValue(node) {
40560
- if (node.value === COMPUTING) {
40561
- // Our computation somehow led to a cyclic read of itself.
40562
- throw new Error('Detected cycle in computations.');
40563
- }
40564
- const oldValue = node.value;
40565
- node.value = COMPUTING;
40566
- const prevConsumer = consumerBeforeComputation$1(node);
40567
- let newValue;
40568
- try {
40569
- const newSourceValue = node.source();
40570
- const prev = oldValue === UNSET || oldValue === ERRORED
40571
- ? undefined
40572
- : {
40573
- source: node.sourceValue,
40574
- value: oldValue,
40575
- };
40576
- newValue = node.computation(newSourceValue, prev);
40577
- node.sourceValue = newSourceValue;
40578
- }
40579
- catch (err) {
40580
- newValue = ERRORED;
40581
- node.error = err;
40582
- }
40583
- finally {
40584
- consumerAfterComputation$1(node, prevConsumer);
40585
- }
40586
- if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {
40587
- // No change to `valueVersion` - old and new values are
40588
- // semantically equivalent.
40589
- node.value = oldValue;
40590
- return;
40591
- }
40592
- node.value = newValue;
40593
- node.version++;
40594
- },
40595
- };
40596
- })();
40521
+ function upgradeLinkedSignalGetter(getter) {
40522
+ if (ngDevMode) {
40523
+ getter.toString = () => `[LinkedSignal: ${getter()}]`;
40524
+ }
40525
+ const node = getter[SIGNAL$1];
40526
+ const upgradedGetter = getter;
40527
+ upgradedGetter.set = (newValue) => linkedSignalSetFn$1(node, newValue);
40528
+ upgradedGetter.update = (updateFn) => linkedSignalUpdateFn$1(node, updateFn);
40529
+ upgradedGetter.asReadonly = signalAsReadonlyFn.bind(getter);
40530
+ return upgradedGetter;
40531
+ }
40597
40532
 
40598
40533
  /**
40599
40534
  * Execute an arbitrary function in a non-reactive (non-tracking) context. The executed function
@@ -41628,5 +41563,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
41628
41563
  * Generated bundle index. Do not edit.
41629
41564
  */
41630
41565
 
41631
- 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 };
41566
+ 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, 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 };
41632
41567
  //# sourceMappingURL=core.mjs.map