@angular/core 19.1.0-next.2 → 19.1.0-next.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 (33) hide show
  1. package/fesm2022/core.mjs +511 -109
  2. package/fesm2022/core.mjs.map +1 -1
  3. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  4. package/fesm2022/primitives/signals.mjs +1 -1
  5. package/fesm2022/rxjs-interop.mjs +1 -1
  6. package/fesm2022/testing.mjs +6 -6
  7. package/fesm2022/testing.mjs.map +1 -1
  8. package/index.d.ts +232 -27
  9. package/package.json +1 -1
  10. package/primitives/event-dispatch/index.d.ts +1 -1
  11. package/primitives/signals/index.d.ts +1 -1
  12. package/rxjs-interop/index.d.ts +1 -1
  13. package/schematics/bundles/{checker-c58f97d2.js → checker-884633eb.js} +158 -31
  14. package/schematics/bundles/{combine_units-8b29b7f6.js → combine_units-4a95b1b9.js} +3 -3
  15. package/schematics/bundles/{compiler_host-f5d588fe.js → compiler_host-22f6513d.js} +2 -2
  16. package/schematics/bundles/control-flow-migration.js +3 -3
  17. package/schematics/bundles/explicit-standalone-flag.js +5 -5
  18. package/schematics/bundles/{imports-31a38653.js → imports-abe29092.js} +1 -1
  19. package/schematics/bundles/inject-migration.js +6 -6
  20. package/schematics/bundles/{leading_space-6e7a8ec6.js → leading_space-d190b83b.js} +1 -1
  21. package/schematics/bundles/{migrate_ts_type_references-a8676ec1.js → migrate_ts_type_references-4b11f3f2.js} +5 -5
  22. package/schematics/bundles/{nodes-88c2157f.js → nodes-a9f0b985.js} +2 -2
  23. package/schematics/bundles/output-migration.js +5 -5
  24. package/schematics/bundles/pending-tasks.js +5 -5
  25. package/schematics/bundles/{program-30e02255.js → program-094352ba.js} +30 -23
  26. package/schematics/bundles/{project_tsconfig_paths-6c9cde78.js → project_tsconfig_paths-e9ccccbf.js} +1 -1
  27. package/schematics/bundles/provide-initializer.js +5 -5
  28. package/schematics/bundles/route-lazy-loading.js +4 -4
  29. package/schematics/bundles/signal-input-migration.js +7 -7
  30. package/schematics/bundles/signal-queries-migration.js +7 -7
  31. package/schematics/bundles/signals.js +7 -7
  32. package/schematics/bundles/standalone-migration.js +8 -8
  33. package/testing/index.d.ts +1 -1
package/fesm2022/core.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v19.1.0-next.2
2
+ * @license Angular v19.1.0-next.4
3
3
  * (c) 2010-2024 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -273,6 +273,7 @@ function ngDevModeResetPerfCounters() {
273
273
  dehydratedViewsRemoved: 0,
274
274
  dehydratedViewsCleanupRuns: 0,
275
275
  componentsSkippedHydration: 0,
276
+ deferBlocksWithIncrementalHydration: 0,
276
277
  };
277
278
  // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.
278
279
  const allowNgDevModeTrue = locationString.indexOf('ngDevMode=false') === -1;
@@ -867,6 +868,14 @@ function emitInjectEvent(token, value, flags) {
867
868
  service: { token, value, flags },
868
869
  });
869
870
  }
871
+ function emitEffectCreatedEvent(effect) {
872
+ !ngDevMode && throwError('Injector profiler should never be called in production mode');
873
+ injectorProfiler({
874
+ type: 3 /* InjectorProfilerEventType.EffectCreated */,
875
+ context: getInjectorProfilerContext(),
876
+ effect,
877
+ });
878
+ }
870
879
  function runInInjectorProfilerContext(injector, token, callback) {
871
880
  !ngDevMode &&
872
881
  throwError('runInInjectorProfilerContext should never be called in production mode');
@@ -6508,7 +6517,7 @@ class NgZone {
6508
6517
  * Executes the `fn` function synchronously within the Angular zone as a task and returns value
6509
6518
  * returned by the function.
6510
6519
  *
6511
- * Running functions via `run` allows you to reenter Angular zone from a task that was executed
6520
+ * Running functions via `runTask` allows you to reenter Angular zone from a task that was executed
6512
6521
  * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
6513
6522
  *
6514
6523
  * Any future tasks or microtasks scheduled from within this function will continue executing from
@@ -8740,7 +8749,7 @@ class AfterRenderImpl {
8740
8749
  }
8741
8750
  maybeTrace(fn, snapshot) {
8742
8751
  // Only trace the execution if the snapshot is defined.
8743
- return snapshot?.run(TracingAction.AFTER_NEXT_RENDER, fn) ?? fn();
8752
+ return snapshot ? snapshot.run(TracingAction.AFTER_NEXT_RENDER, fn) : fn();
8744
8753
  }
8745
8754
  /** @nocollapse */
8746
8755
  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ ɵɵdefineInjectable({
@@ -9095,6 +9104,18 @@ function isDeferBlock(tView, tNode) {
9095
9104
  }
9096
9105
  return !!tDetails && isTDeferBlockDetails(tDetails);
9097
9106
  }
9107
+ /**
9108
+ * Tracks debugging information about a trigger.
9109
+ * @param tView TView in which the trigger is declared.
9110
+ * @param tNode TNode on which the trigger is declared.
9111
+ * @param textRepresentation Text representation of the trigger to be used for debugging purposes.
9112
+ */
9113
+ function trackTriggerForDebugging(tView, tNode, textRepresentation) {
9114
+ const tDetails = getTDeferBlockDetails(tView, tNode);
9115
+ tDetails.debug ??= {};
9116
+ tDetails.debug.triggers ??= new Set();
9117
+ tDetails.debug.triggers.add(textRepresentation);
9118
+ }
9098
9119
 
9099
9120
  /*!
9100
9121
  * @license
@@ -9549,7 +9570,6 @@ function retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {
9549
9570
  const rootNgh = rootViewNgh ? `|${rootViewNgh}` : '';
9550
9571
  const remainingNgh = isRootView ? componentViewNgh : rootNgh;
9551
9572
  let data = {};
9552
- let nghDeferData;
9553
9573
  // An element might have an empty `ngh` attribute value (e.g. `<comp ngh="" />`),
9554
9574
  // which means that no special annotations are required. Do not attempt to read
9555
9575
  // from the TransferState in this case.
@@ -9557,7 +9577,6 @@ function retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {
9557
9577
  const transferState = injector.get(TransferState, null, { optional: true });
9558
9578
  if (transferState !== null) {
9559
9579
  const nghData = transferState.get(NGH_DATA_KEY, []);
9560
- nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});
9561
9580
  // The nghAttrValue is always a number referencing an index
9562
9581
  // in the hydration TransferState data.
9563
9582
  data = nghData[Number(nghAttrValue)];
@@ -9717,6 +9736,13 @@ function markRNodeAsSkippedByHydration(node) {
9717
9736
  patchHydrationInfo(node, { status: HydrationStatus.Skipped });
9718
9737
  ngDevMode.componentsSkippedHydration++;
9719
9738
  }
9739
+ function countBlocksSkippedByHydration(injector) {
9740
+ const transferState = injector.get(TransferState);
9741
+ const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});
9742
+ if (ngDevMode) {
9743
+ ngDevMode.deferBlocksWithIncrementalHydration = Object.keys(nghDeferData).length;
9744
+ }
9745
+ }
9720
9746
  function markRNodeAsHavingHydrationMismatch(node, expectedNodeDetails = null, actualNodeDetails = null) {
9721
9747
  if (!ngDevMode) {
9722
9748
  throw new Error('Calling `markRNodeAsMismatchedByHydration` in prod mode ' +
@@ -16625,11 +16651,15 @@ function gatherDeferBlocksCommentNodes(doc, node) {
16625
16651
  let currentNode;
16626
16652
  const nodesByBlockId = new Map();
16627
16653
  while ((currentNode = commentNodesIterator.nextNode())) {
16628
- // TODO(incremental-hydration: convert this to use string parsing rather than regex
16629
- const regex = new RegExp(/^\s*ngh=(d[0-9]+)/g);
16630
- const result = regex.exec(currentNode?.textContent ?? '');
16631
- if (result && result?.length > 0) {
16632
- nodesByBlockId.set(result[1], currentNode);
16654
+ const nghPattern = 'ngh=';
16655
+ const content = currentNode?.textContent;
16656
+ const nghIdx = content?.indexOf(nghPattern) ?? -1;
16657
+ if (nghIdx > -1) {
16658
+ const nghValue = content.substring(nghIdx + nghPattern.length).trim();
16659
+ // Make sure the value has an expected format.
16660
+ ngDevMode &&
16661
+ assertEqual(nghValue.startsWith('d'), true, 'Invalid defer block id found in a comment node.');
16662
+ nodesByBlockId.set(nghValue, currentNode);
16633
16663
  }
16634
16664
  }
16635
16665
  return nodesByBlockId;
@@ -18080,7 +18110,7 @@ function createRootComponent(componentView, rootComponentDef, rootDirectives, ho
18080
18110
  function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
18081
18111
  if (rootSelectorOrNode) {
18082
18112
  // The placeholder will be replaced with the actual version at build time.
18083
- setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.1.0-next.2']);
18113
+ setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.1.0-next.4']);
18084
18114
  }
18085
18115
  else {
18086
18116
  // If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
@@ -21277,15 +21307,8 @@ function renderDeferBlockState(newState, tNode, lContainer, skipTimerScheduling
21277
21307
  }
21278
21308
  }
21279
21309
  function findMatchingDehydratedViewForDeferBlock(lContainer, lDetails) {
21280
- // TODO(incremental-hydration): extract into a separate util function and use in relevant places.
21281
- const views = lContainer[DEHYDRATED_VIEWS];
21282
- if (views === null || views.length === 0) {
21283
- return null;
21284
- }
21285
21310
  // Find matching view based on serialized defer block state.
21286
- // TODO(incremental-hydration): reconcile this logic with the regular logic that looks up
21287
- // dehydrated views to see if there is anything missing in this function.
21288
- return (views.find((view) => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? null);
21311
+ return (lContainer[DEHYDRATED_VIEWS]?.find((view) => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? null);
21289
21312
  }
21290
21313
  /**
21291
21314
  * Applies changes to the DOM to reflect a given state.
@@ -21317,30 +21340,22 @@ function applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView)
21317
21340
  }
21318
21341
  }
21319
21342
  const dehydratedView = findMatchingDehydratedViewForDeferBlock(lContainer, lDetails);
21320
- // Render either when we don't have dehydrated views at all (e.g. client rendering)
21321
- // or when dehydrated view is found (in which case we hydrate).
21322
- // Otherwise, do nothing, since we'd end up erasing SSR'ed content.
21323
- // TODO(incremental-hydration): Use the util function for checking dehydrated views mentioned above
21324
- const isClientOnly = lContainer[DEHYDRATED_VIEWS] === null || lContainer[DEHYDRATED_VIEWS].length === 0;
21325
- if (isClientOnly || dehydratedView) {
21326
- // Erase dehydrated view info, so that it's not removed later
21327
- // by post-hydration cleanup process.
21328
- // TODO(incremental-hydration): we need a better mechanism here.
21329
- lContainer[DEHYDRATED_VIEWS] = null;
21330
- const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {
21331
- injector,
21332
- dehydratedView,
21333
- });
21334
- addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));
21335
- markViewDirty(embeddedLView, 2 /* NotificationSource.DeferBlockStateUpdate */);
21336
- }
21343
+ // Erase dehydrated view info, so that it's not removed later
21344
+ // by post-hydration cleanup process.
21345
+ lContainer[DEHYDRATED_VIEWS] = null;
21346
+ const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {
21347
+ injector,
21348
+ dehydratedView,
21349
+ });
21350
+ addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));
21351
+ markViewDirty(embeddedLView, 2 /* NotificationSource.DeferBlockStateUpdate */);
21337
21352
  // TODO(incremental-hydration):
21338
21353
  // - what if we had some views in `lContainer[DEHYDRATED_VIEWS]`, but
21339
21354
  // we didn't find a view that matches the expected state?
21340
21355
  // - for example, handle a situation when a block was in the "completed" state
21341
21356
  // on the server, but the loading failing on the client. How do we reconcile and cleanup?
21342
- // TODO(incremental-hydration): should we also invoke if newState === DeferBlockState.Error?
21343
- if (newState === DeferBlockState.Complete && Array.isArray(lDetails[ON_COMPLETE_FNS])) {
21357
+ if ((newState === DeferBlockState.Complete || newState === DeferBlockState.Error) &&
21358
+ Array.isArray(lDetails[ON_COMPLETE_FNS])) {
21344
21359
  for (const callback of lDetails[ON_COMPLETE_FNS]) {
21345
21360
  callback();
21346
21361
  }
@@ -21623,6 +21638,7 @@ class Console {
21623
21638
  class DIDebugData {
21624
21639
  resolverToTokenToDependencies = new WeakMap();
21625
21640
  resolverToProviders = new WeakMap();
21641
+ resolverToEffects = new WeakMap();
21626
21642
  standaloneInjectorToComponent = new WeakMap();
21627
21643
  reset() {
21628
21644
  this.resolverToTokenToDependencies = new WeakMap();
@@ -21661,6 +21677,20 @@ function handleInjectorProfilerEvent(injectorProfilerEvent) {
21661
21677
  else if (type === 2 /* InjectorProfilerEventType.ProviderConfigured */) {
21662
21678
  handleProviderConfiguredEvent(context, injectorProfilerEvent.providerRecord);
21663
21679
  }
21680
+ else if (type === 3 /* InjectorProfilerEventType.EffectCreated */) {
21681
+ handleEffectCreatedEvent(context, injectorProfilerEvent.effect);
21682
+ }
21683
+ }
21684
+ function handleEffectCreatedEvent(context, effect) {
21685
+ const diResolver = getDIResolver(context.injector);
21686
+ if (diResolver === null) {
21687
+ throwError('An EffectCreated event must be run within an injection context.');
21688
+ }
21689
+ const { resolverToEffects } = frameworkDIDebugData;
21690
+ if (!resolverToEffects.has(diResolver)) {
21691
+ resolverToEffects.set(diResolver, []);
21692
+ }
21693
+ resolverToEffects.get(diResolver).push(effect);
21664
21694
  }
21665
21695
  /**
21666
21696
  *
@@ -21846,6 +21876,162 @@ function detectChanges(component) {
21846
21876
  detectChangesInternal(view);
21847
21877
  }
21848
21878
 
21879
+ /**
21880
+ * Retrieves all defer blocks in a given LView.
21881
+ *
21882
+ * @param lView lView with defer blocks
21883
+ * @param deferBlocks defer block aggregator array
21884
+ */
21885
+ function getDeferBlocks$1(lView, deferBlocks) {
21886
+ const tView = lView[TVIEW];
21887
+ for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
21888
+ if (isLContainer(lView[i])) {
21889
+ const lContainer = lView[i];
21890
+ // An LContainer may represent an instance of a defer block, in which case
21891
+ // we store it as a result. Otherwise, keep iterating over LContainer views and
21892
+ // look for defer blocks.
21893
+ const isLast = i === tView.bindingStartIndex - 1;
21894
+ if (!isLast) {
21895
+ const tNode = tView.data[i];
21896
+ const tDetails = getTDeferBlockDetails(tView, tNode);
21897
+ if (isTDeferBlockDetails(tDetails)) {
21898
+ deferBlocks.push({ lContainer, lView, tNode, tDetails });
21899
+ // This LContainer represents a defer block, so we exit
21900
+ // this iteration and don't inspect views in this LContainer.
21901
+ continue;
21902
+ }
21903
+ }
21904
+ for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
21905
+ getDeferBlocks$1(lContainer[i], deferBlocks);
21906
+ }
21907
+ }
21908
+ else if (isLView(lView[i])) {
21909
+ // This is a component, enter the `getDeferBlocks` recursively.
21910
+ getDeferBlocks$1(lView[i], deferBlocks);
21911
+ }
21912
+ }
21913
+ }
21914
+
21915
+ /*!
21916
+ * @license
21917
+ * Copyright Google LLC All Rights Reserved.
21918
+ *
21919
+ * Use of this source code is governed by an MIT-style license that can be
21920
+ * found in the LICENSE file at https://angular.dev/license
21921
+ */
21922
+ /**
21923
+ * Gets all of the `@defer` blocks that are present inside the specified DOM node.
21924
+ * @param node Node in which to look for `@defer` blocks.
21925
+ *
21926
+ * @publicApi
21927
+ */
21928
+ function getDeferBlocks(node) {
21929
+ const results = [];
21930
+ const lView = getLContext(node)?.lView;
21931
+ if (lView) {
21932
+ findDeferBlocks(node, lView, results);
21933
+ }
21934
+ return results;
21935
+ }
21936
+ /**
21937
+ * Finds all the `@defer` blocks inside a specific node and view.
21938
+ * @param node Node in which to search for blocks.
21939
+ * @param lView View within the node in which to search for blocks.
21940
+ * @param results Array to which to add blocks once they're found.
21941
+ */
21942
+ function findDeferBlocks(node, lView, results) {
21943
+ const registry = lView[INJECTOR].get(DEHYDRATED_BLOCK_REGISTRY, null, { optional: true });
21944
+ const blocks = [];
21945
+ getDeferBlocks$1(lView, blocks);
21946
+ for (const details of blocks) {
21947
+ const native = getNativeByTNode(details.tNode, details.lView);
21948
+ const lDetails = getLDeferBlockDetails(details.lView, details.tNode);
21949
+ // The LView from `getLContext` might be the view the element is placed in.
21950
+ // Filter out defer blocks that aren't inside the specified root node.
21951
+ if (!node.contains(native)) {
21952
+ continue;
21953
+ }
21954
+ const tDetails = details.tDetails;
21955
+ const renderedLView = getRendererLView(details);
21956
+ const rootNodes = [];
21957
+ if (renderedLView !== null) {
21958
+ collectNativeNodes(renderedLView[TVIEW], renderedLView, renderedLView[TVIEW].firstChild, rootNodes);
21959
+ }
21960
+ const data = {
21961
+ state: stringifyState(lDetails[DEFER_BLOCK_STATE]),
21962
+ incrementalHydrationState: inferHydrationState(tDetails, lDetails, registry),
21963
+ hasErrorBlock: tDetails.errorTmplIndex !== null,
21964
+ loadingBlock: {
21965
+ exists: tDetails.loadingTmplIndex !== null,
21966
+ minimumTime: tDetails.loadingBlockConfig?.[MINIMUM_SLOT] ?? null,
21967
+ afterTime: tDetails.loadingBlockConfig?.[LOADING_AFTER_SLOT] ?? null,
21968
+ },
21969
+ placeholderBlock: {
21970
+ exists: tDetails.placeholderTmplIndex !== null,
21971
+ minimumTime: tDetails.placeholderBlockConfig?.[MINIMUM_SLOT] ?? null,
21972
+ },
21973
+ triggers: tDetails.debug?.triggers ? Array.from(tDetails.debug.triggers).sort() : [],
21974
+ rootNodes,
21975
+ };
21976
+ results.push(data);
21977
+ // `getDeferBlocks` does not resolve nested defer blocks so we have to recurse manually.
21978
+ if (renderedLView !== null) {
21979
+ findDeferBlocks(node, renderedLView, results);
21980
+ }
21981
+ }
21982
+ }
21983
+ /**
21984
+ * Turns the `DeferBlockState` into a string which is more readable than the enum form.
21985
+ *
21986
+ * @param lDetails Information about the
21987
+ * @returns
21988
+ */
21989
+ function stringifyState(state) {
21990
+ switch (state) {
21991
+ case DeferBlockState.Complete:
21992
+ return 'complete';
21993
+ case DeferBlockState.Loading:
21994
+ return 'loading';
21995
+ case DeferBlockState.Placeholder:
21996
+ return 'placeholder';
21997
+ case DeferBlockState.Error:
21998
+ return 'error';
21999
+ case DeferBlockInternalState.Initial:
22000
+ return 'initial';
22001
+ default:
22002
+ throw new Error(`Unrecognized state ${state}`);
22003
+ }
22004
+ }
22005
+ /**
22006
+ * Infers the hydration state of a specific defer block.
22007
+ * @param tDetails Static defer block information.
22008
+ * @param lDetails Instance defer block information.
22009
+ * @param registry Registry coordinating the hydration of defer blocks.
22010
+ */
22011
+ function inferHydrationState(tDetails, lDetails, registry) {
22012
+ if (registry === null ||
22013
+ lDetails[SSR_UNIQUE_ID] === null ||
22014
+ tDetails.hydrateTriggers === null ||
22015
+ tDetails.hydrateTriggers.has(7 /* DeferBlockTrigger.Never */)) {
22016
+ return 'not-configured';
22017
+ }
22018
+ return registry.has(lDetails[SSR_UNIQUE_ID]) ? 'dehydrated' : 'hydrated';
22019
+ }
22020
+ /**
22021
+ * Gets the current LView that is rendered out in a defer block.
22022
+ * @param details Instance information about the block.
22023
+ */
22024
+ function getRendererLView(details) {
22025
+ // Defer block containers can only ever contain one view.
22026
+ // If they're empty, it means that nothing is rendered.
22027
+ if (details.lContainer.length <= CONTAINER_HEADER_OFFSET) {
22028
+ return null;
22029
+ }
22030
+ const lView = details.lContainer[CONTAINER_HEADER_OFFSET];
22031
+ ngDevMode && assertLView(lView);
22032
+ return lView;
22033
+ }
22034
+
21849
22035
  /**
21850
22036
  * Discovers the dependencies of an injectable instance. Provides DI information about each
21851
22037
  * dependency that the injectable was instantiated with, including where they were provided from.
@@ -22391,6 +22577,118 @@ function getModuleInjectorOfNodeInjector(injector) {
22391
22577
  return moduleInjector;
22392
22578
  }
22393
22579
 
22580
+ function isComputedNode(node) {
22581
+ return node.kind === 'computed';
22582
+ }
22583
+ function isTemplateEffectNode(node) {
22584
+ return node.kind === 'template';
22585
+ }
22586
+ function isEffectNode(node) {
22587
+ return node.kind === 'effect';
22588
+ }
22589
+ function isSignalNode(node) {
22590
+ return node.kind === 'signal';
22591
+ }
22592
+ /**
22593
+ *
22594
+ * @param injector
22595
+ * @returns Template consumer of given NodeInjector
22596
+ */
22597
+ function getTemplateConsumer(injector) {
22598
+ const tNode = getNodeInjectorTNode(injector);
22599
+ assertTNode(tNode);
22600
+ const lView = getNodeInjectorLView(injector);
22601
+ assertLView(lView);
22602
+ const templateLView = lView[tNode.index];
22603
+ assertLView(templateLView);
22604
+ return templateLView[REACTIVE_TEMPLATE_CONSUMER];
22605
+ }
22606
+ function getNodesAndEdgesFromSignalMap(signalMap) {
22607
+ const nodes = Array.from(signalMap.keys());
22608
+ const debugSignalGraphNodes = [];
22609
+ const edges = [];
22610
+ for (const [consumer, producers] of signalMap.entries()) {
22611
+ const consumerIndex = nodes.indexOf(consumer);
22612
+ // collect node
22613
+ if (isComputedNode(consumer) || isSignalNode(consumer)) {
22614
+ debugSignalGraphNodes.push({
22615
+ label: consumer.debugName,
22616
+ value: consumer.value,
22617
+ kind: consumer.kind,
22618
+ });
22619
+ }
22620
+ else if (isTemplateEffectNode(consumer)) {
22621
+ debugSignalGraphNodes.push({
22622
+ label: consumer.debugName ?? consumer.lView?.[HOST]?.tagName?.toLowerCase?.(),
22623
+ kind: consumer.kind,
22624
+ });
22625
+ }
22626
+ else if (isEffectNode(consumer)) {
22627
+ debugSignalGraphNodes.push({
22628
+ label: consumer.debugName,
22629
+ kind: consumer.kind,
22630
+ });
22631
+ }
22632
+ else {
22633
+ debugSignalGraphNodes.push({
22634
+ label: consumer.debugName,
22635
+ kind: consumer.kind,
22636
+ });
22637
+ }
22638
+ // collect edges for node
22639
+ for (const producer of producers) {
22640
+ edges.push({ consumer: consumerIndex, producer: nodes.indexOf(producer) });
22641
+ }
22642
+ }
22643
+ return { nodes: debugSignalGraphNodes, edges };
22644
+ }
22645
+ function extractEffectsFromInjector(injector) {
22646
+ let diResolver = injector;
22647
+ if (injector instanceof NodeInjector) {
22648
+ const lView = getNodeInjectorLView(injector);
22649
+ diResolver = lView;
22650
+ }
22651
+ const resolverToEffects = getFrameworkDIDebugData().resolverToEffects;
22652
+ const effects = resolverToEffects.get(diResolver) ?? [];
22653
+ return effects.map((effect) => effect[SIGNAL$1]);
22654
+ }
22655
+ function extractSignalNodesAndEdgesFromRoots(nodes, signalDependenciesMap = new Map()) {
22656
+ for (const node of nodes) {
22657
+ if (signalDependenciesMap.has(node)) {
22658
+ continue;
22659
+ }
22660
+ const producerNodes = (node.producerNode ?? []);
22661
+ signalDependenciesMap.set(node, producerNodes);
22662
+ extractSignalNodesAndEdgesFromRoots(producerNodes, signalDependenciesMap);
22663
+ }
22664
+ return signalDependenciesMap;
22665
+ }
22666
+ /**
22667
+ * Returns a debug representation of the signal graph for the given injector.
22668
+ *
22669
+ * Currently only supports element injectors. Starts by discovering the consumer nodes
22670
+ * and then traverses their producer nodes to build the signal graph.
22671
+ *
22672
+ * @param injector The injector to get the signal graph for.
22673
+ * @returns A debug representation of the signal graph.
22674
+ * @throws If the injector is an environment injector.
22675
+ */
22676
+ function getSignalGraph(injector) {
22677
+ let templateConsumer = null;
22678
+ if (!(injector instanceof NodeInjector) && !(injector instanceof R3Injector)) {
22679
+ return throwError('getSignalGraph must be called with a NodeInjector or R3Injector');
22680
+ }
22681
+ if (injector instanceof NodeInjector) {
22682
+ templateConsumer = getTemplateConsumer(injector);
22683
+ }
22684
+ const nonTemplateEffectNodes = extractEffectsFromInjector(injector);
22685
+ const signalNodes = templateConsumer
22686
+ ? [templateConsumer, ...nonTemplateEffectNodes]
22687
+ : nonTemplateEffectNodes;
22688
+ const signalDependenciesMap = extractSignalNodesAndEdgesFromRoots(signalNodes);
22689
+ return getNodesAndEdgesFromSignalMap(signalDependenciesMap);
22690
+ }
22691
+
22394
22692
  /**
22395
22693
  * This file introduces series of globally accessible debug tools
22396
22694
  * to allow for the Angular debugging story to function.
@@ -22417,6 +22715,8 @@ const globalUtilsFunctions = {
22417
22715
  'ɵgetInjectorResolutionPath': getInjectorResolutionPath,
22418
22716
  'ɵgetInjectorMetadata': getInjectorMetadata,
22419
22717
  'ɵsetProfiler': setProfiler,
22718
+ 'ɵgetSignalGraph': getSignalGraph,
22719
+ 'ɵgetDeferBlocks': getDeferBlocks,
22420
22720
  'getDirectiveMetadata': getDirectiveMetadata$1,
22421
22721
  'getComponent': getComponent,
22422
22722
  'getContext': getContext,
@@ -23657,9 +23957,14 @@ function detectChangesInViewIfRequired(lView, notifyErrorHandler, isFirstPass, z
23657
23957
  function scheduleDelayedTrigger(scheduleFn) {
23658
23958
  const lView = getLView();
23659
23959
  const tNode = getCurrentTNode();
23960
+ renderPlaceholder(lView, tNode);
23961
+ // Exit early to avoid invoking `scheduleFn`, which would
23962
+ // add `setTimeout` call and potentially delay serialization
23963
+ // on the server unnecessarily.
23964
+ if (!shouldTriggerDeferBlock(0 /* TriggerType.Regular */, lView))
23965
+ return;
23660
23966
  const injector = lView[INJECTOR];
23661
23967
  const lDetails = getLDeferBlockDetails(lView, tNode);
23662
- renderPlaceholder(lView, tNode);
23663
23968
  const cleanupFn = scheduleFn(() => triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode), injector);
23664
23969
  storeTriggerCleanupFn(0 /* TriggerType.Regular */, lDetails, cleanupFn);
23665
23970
  }
@@ -23941,30 +24246,25 @@ function populateHydratingStateForQueue(registry, queue) {
23941
24246
  }
23942
24247
  // Waits for the next render cycle to complete
23943
24248
  function nextRender(injector) {
23944
- let resolve;
23945
- const promise = new Promise((resolveFn) => {
23946
- resolve = resolveFn;
23947
- });
23948
- afterNextRender(() => resolve(), { injector });
23949
- return promise;
24249
+ return new Promise((resolveFn) => afterNextRender(resolveFn, { injector }));
23950
24250
  }
23951
- function triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry) {
23952
- let resolve;
23953
- const promise = new Promise((resolveFn) => (resolve = resolveFn));
24251
+ async function triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry) {
23954
24252
  const deferBlock = dehydratedBlockRegistry.get(dehydratedBlockId);
23955
24253
  // Since we trigger hydration for nested defer blocks in a sequence (parent -> child),
23956
24254
  // there is a chance that a defer block may not be present at hydration time. For example,
23957
24255
  // when a nested block was in an `@if` condition, which has changed.
23958
- if (deferBlock !== null) {
23959
- const { tNode, lView } = deferBlock;
23960
- const lDetails = getLDeferBlockDetails(lView, tNode);
23961
- onDeferBlockCompletion(lDetails, () => resolve());
23962
- triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);
24256
+ if (deferBlock === null) {
23963
24257
  // TODO(incremental-hydration): handle the cleanup for cases when
23964
24258
  // defer block is no longer present during hydration (e.g. `@if` condition
23965
24259
  // has changed during hydration/rendering).
24260
+ return;
23966
24261
  }
23967
- return promise;
24262
+ const { tNode, lView } = deferBlock;
24263
+ const lDetails = getLDeferBlockDetails(lView, tNode);
24264
+ return new Promise((resolve) => {
24265
+ onDeferBlockCompletion(lDetails, resolve);
24266
+ triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);
24267
+ });
23968
24268
  }
23969
24269
  /**
23970
24270
  * Registers cleanup functions for a defer block when the block has finished
@@ -24142,7 +24442,7 @@ function ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplInd
24142
24442
  loadingPromise: null,
24143
24443
  providers: null,
24144
24444
  hydrateTriggers: null,
24145
- prefetchTriggers: null,
24445
+ debug: null,
24146
24446
  flags: flags ?? 0 /* TDeferDetailsFlags.Default */,
24147
24447
  };
24148
24448
  enableTimerScheduling?.(tView, tDetails, placeholderConfigIndex, loadingConfigIndex);
@@ -24199,6 +24499,9 @@ function ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplInd
24199
24499
  function ɵɵdeferWhen(rawValue) {
24200
24500
  const lView = getLView();
24201
24501
  const tNode = getSelectedTNode();
24502
+ if (ngDevMode) {
24503
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'when <expression>');
24504
+ }
24202
24505
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24203
24506
  return;
24204
24507
  const bindingIndex = nextBindingIndex();
@@ -24230,6 +24533,9 @@ function ɵɵdeferWhen(rawValue) {
24230
24533
  function ɵɵdeferPrefetchWhen(rawValue) {
24231
24534
  const lView = getLView();
24232
24535
  const tNode = getSelectedTNode();
24536
+ if (ngDevMode) {
24537
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch when <expression>');
24538
+ }
24233
24539
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24234
24540
  return;
24235
24541
  const bindingIndex = nextBindingIndex();
@@ -24257,6 +24563,9 @@ function ɵɵdeferPrefetchWhen(rawValue) {
24257
24563
  function ɵɵdeferHydrateWhen(rawValue) {
24258
24564
  const lView = getLView();
24259
24565
  const tNode = getSelectedTNode();
24566
+ if (ngDevMode) {
24567
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate when <expression>');
24568
+ }
24260
24569
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24261
24570
  return;
24262
24571
  // TODO(incremental-hydration): audit all defer instructions to reduce unnecessary work by
@@ -24298,6 +24607,9 @@ function ɵɵdeferHydrateWhen(rawValue) {
24298
24607
  function ɵɵdeferHydrateNever() {
24299
24608
  const lView = getLView();
24300
24609
  const tNode = getCurrentTNode();
24610
+ if (ngDevMode) {
24611
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate never');
24612
+ }
24301
24613
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24302
24614
  return;
24303
24615
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24314,6 +24626,9 @@ function ɵɵdeferHydrateNever() {
24314
24626
  function ɵɵdeferOnIdle() {
24315
24627
  const lView = getLView();
24316
24628
  const tNode = getCurrentTNode();
24629
+ if (ngDevMode) {
24630
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'on idle');
24631
+ }
24317
24632
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24318
24633
  return;
24319
24634
  scheduleDelayedTrigger(onIdle);
@@ -24325,6 +24640,9 @@ function ɵɵdeferOnIdle() {
24325
24640
  function ɵɵdeferPrefetchOnIdle() {
24326
24641
  const lView = getLView();
24327
24642
  const tNode = getCurrentTNode();
24643
+ if (ngDevMode) {
24644
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch on idle');
24645
+ }
24328
24646
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24329
24647
  return;
24330
24648
  scheduleDelayedPrefetching(onIdle, 0 /* DeferBlockTrigger.Idle */);
@@ -24336,6 +24654,9 @@ function ɵɵdeferPrefetchOnIdle() {
24336
24654
  function ɵɵdeferHydrateOnIdle() {
24337
24655
  const lView = getLView();
24338
24656
  const tNode = getCurrentTNode();
24657
+ if (ngDevMode) {
24658
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on idle');
24659
+ }
24339
24660
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24340
24661
  return;
24341
24662
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24355,6 +24676,9 @@ function ɵɵdeferHydrateOnIdle() {
24355
24676
  function ɵɵdeferOnImmediate() {
24356
24677
  const lView = getLView();
24357
24678
  const tNode = getCurrentTNode();
24679
+ if (ngDevMode) {
24680
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'on immediate');
24681
+ }
24358
24682
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24359
24683
  return;
24360
24684
  // Render placeholder block only if loading template is not present and we're on
@@ -24373,6 +24697,9 @@ function ɵɵdeferOnImmediate() {
24373
24697
  function ɵɵdeferPrefetchOnImmediate() {
24374
24698
  const lView = getLView();
24375
24699
  const tNode = getCurrentTNode();
24700
+ if (ngDevMode) {
24701
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch on immediate');
24702
+ }
24376
24703
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24377
24704
  return;
24378
24705
  const tView = lView[TVIEW];
@@ -24388,6 +24715,9 @@ function ɵɵdeferPrefetchOnImmediate() {
24388
24715
  function ɵɵdeferHydrateOnImmediate() {
24389
24716
  const lView = getLView();
24390
24717
  const tNode = getCurrentTNode();
24718
+ if (ngDevMode) {
24719
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on immediate');
24720
+ }
24391
24721
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24392
24722
  return;
24393
24723
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24411,6 +24741,9 @@ function ɵɵdeferHydrateOnImmediate() {
24411
24741
  function ɵɵdeferOnTimer(delay) {
24412
24742
  const lView = getLView();
24413
24743
  const tNode = getCurrentTNode();
24744
+ if (ngDevMode) {
24745
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on timer(${delay}ms)`);
24746
+ }
24414
24747
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24415
24748
  return;
24416
24749
  scheduleDelayedTrigger(onTimer(delay));
@@ -24423,6 +24756,9 @@ function ɵɵdeferOnTimer(delay) {
24423
24756
  function ɵɵdeferPrefetchOnTimer(delay) {
24424
24757
  const lView = getLView();
24425
24758
  const tNode = getCurrentTNode();
24759
+ if (ngDevMode) {
24760
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on timer(${delay}ms)`);
24761
+ }
24426
24762
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24427
24763
  return;
24428
24764
  scheduleDelayedPrefetching(onTimer(delay), 5 /* DeferBlockTrigger.Timer */);
@@ -24435,10 +24771,13 @@ function ɵɵdeferPrefetchOnTimer(delay) {
24435
24771
  function ɵɵdeferHydrateOnTimer(delay) {
24436
24772
  const lView = getLView();
24437
24773
  const tNode = getCurrentTNode();
24774
+ if (ngDevMode) {
24775
+ trackTriggerForDebugging(lView[TVIEW], tNode, `hydrate on timer(${delay}ms)`);
24776
+ }
24438
24777
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24439
24778
  return;
24440
24779
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
24441
- hydrateTriggers.set(5 /* DeferBlockTrigger.Timer */, delay);
24780
+ hydrateTriggers.set(5 /* DeferBlockTrigger.Timer */, { delay });
24442
24781
  if (typeof ngServerMode !== 'undefined' && ngServerMode) {
24443
24782
  // We are on the server and SSR for defer blocks is enabled.
24444
24783
  triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);
@@ -24456,6 +24795,9 @@ function ɵɵdeferHydrateOnTimer(delay) {
24456
24795
  function ɵɵdeferOnHover(triggerIndex, walkUpTimes) {
24457
24796
  const lView = getLView();
24458
24797
  const tNode = getCurrentTNode();
24798
+ if (ngDevMode) {
24799
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on hover${walkUpTimes === -1 ? '' : '(<target>)'}`);
24800
+ }
24459
24801
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24460
24802
  return;
24461
24803
  renderPlaceholder(lView, tNode);
@@ -24473,6 +24815,9 @@ function ɵɵdeferOnHover(triggerIndex, walkUpTimes) {
24473
24815
  function ɵɵdeferPrefetchOnHover(triggerIndex, walkUpTimes) {
24474
24816
  const lView = getLView();
24475
24817
  const tNode = getCurrentTNode();
24818
+ if (ngDevMode) {
24819
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on hover${walkUpTimes === -1 ? '' : '(<target>)'}`);
24820
+ }
24476
24821
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24477
24822
  return;
24478
24823
  const tView = lView[TVIEW];
@@ -24488,6 +24833,9 @@ function ɵɵdeferPrefetchOnHover(triggerIndex, walkUpTimes) {
24488
24833
  function ɵɵdeferHydrateOnHover() {
24489
24834
  const lView = getLView();
24490
24835
  const tNode = getCurrentTNode();
24836
+ if (ngDevMode) {
24837
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on hover');
24838
+ }
24491
24839
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24492
24840
  return;
24493
24841
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24508,6 +24856,9 @@ function ɵɵdeferHydrateOnHover() {
24508
24856
  function ɵɵdeferOnInteraction(triggerIndex, walkUpTimes) {
24509
24857
  const lView = getLView();
24510
24858
  const tNode = getCurrentTNode();
24859
+ if (ngDevMode) {
24860
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on interaction${walkUpTimes === -1 ? '' : '(<target>)'}`);
24861
+ }
24511
24862
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24512
24863
  return;
24513
24864
  renderPlaceholder(lView, tNode);
@@ -24525,6 +24876,9 @@ function ɵɵdeferOnInteraction(triggerIndex, walkUpTimes) {
24525
24876
  function ɵɵdeferPrefetchOnInteraction(triggerIndex, walkUpTimes) {
24526
24877
  const lView = getLView();
24527
24878
  const tNode = getCurrentTNode();
24879
+ if (ngDevMode) {
24880
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on interaction${walkUpTimes === -1 ? '' : '(<target>)'}`);
24881
+ }
24528
24882
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24529
24883
  return;
24530
24884
  const tView = lView[TVIEW];
@@ -24540,6 +24894,9 @@ function ɵɵdeferPrefetchOnInteraction(triggerIndex, walkUpTimes) {
24540
24894
  function ɵɵdeferHydrateOnInteraction() {
24541
24895
  const lView = getLView();
24542
24896
  const tNode = getCurrentTNode();
24897
+ if (ngDevMode) {
24898
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on interaction');
24899
+ }
24543
24900
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24544
24901
  return;
24545
24902
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24560,6 +24917,9 @@ function ɵɵdeferHydrateOnInteraction() {
24560
24917
  function ɵɵdeferOnViewport(triggerIndex, walkUpTimes) {
24561
24918
  const lView = getLView();
24562
24919
  const tNode = getCurrentTNode();
24920
+ if (ngDevMode) {
24921
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on viewport${walkUpTimes === -1 ? '' : '(<target>)'}`);
24922
+ }
24563
24923
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24564
24924
  return;
24565
24925
  renderPlaceholder(lView, tNode);
@@ -24577,6 +24937,9 @@ function ɵɵdeferOnViewport(triggerIndex, walkUpTimes) {
24577
24937
  function ɵɵdeferPrefetchOnViewport(triggerIndex, walkUpTimes) {
24578
24938
  const lView = getLView();
24579
24939
  const tNode = getCurrentTNode();
24940
+ if (ngDevMode) {
24941
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on viewport${walkUpTimes === -1 ? '' : '(<target>)'}`);
24942
+ }
24580
24943
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24581
24944
  return;
24582
24945
  const tView = lView[TVIEW];
@@ -24592,6 +24955,9 @@ function ɵɵdeferPrefetchOnViewport(triggerIndex, walkUpTimes) {
24592
24955
  function ɵɵdeferHydrateOnViewport() {
24593
24956
  const lView = getLView();
24594
24957
  const tNode = getCurrentTNode();
24958
+ if (ngDevMode) {
24959
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on viewport');
24960
+ }
24595
24961
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24596
24962
  return;
24597
24963
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -32044,6 +32410,41 @@ function ɵɵreadContextLet(index) {
32044
32410
  return value;
32045
32411
  }
32046
32412
 
32413
+ /*!
32414
+ * @license
32415
+ * Copyright Google LLC All Rights Reserved.
32416
+ *
32417
+ * Use of this source code is governed by an MIT-style license that can be
32418
+ * found in the LICENSE file at https://angular.dev/license
32419
+ */
32420
+ /**
32421
+ * Sets the location within the source template at which
32422
+ * each element in the current view was defined.
32423
+ *
32424
+ * @param index Index at which the DOM node was created.
32425
+ * @param templatePath Path to the template at which the node was defined.
32426
+ * @param locations Element locations to which to attach the source location.
32427
+ *
32428
+ * @codeGenApi
32429
+ */
32430
+ function ɵɵattachSourceLocations(templatePath, locations) {
32431
+ const tView = getTView();
32432
+ const lView = getLView();
32433
+ const renderer = lView[RENDERER];
32434
+ const attributeName = 'data-ng-source-location';
32435
+ for (const [index, offset, line, column] of locations) {
32436
+ const tNode = getTNode(tView, index + HEADER_OFFSET);
32437
+ // The compiler shouldn't generate the instruction for non-element nodes, but assert just in case.
32438
+ ngDevMode && assertTNodeType(tNode, 2 /* TNodeType.Element */);
32439
+ const node = getNativeByIndex(index + HEADER_OFFSET, lView);
32440
+ // Set the attribute directly in the DOM so it doesn't participate in directive matching.
32441
+ if (!node.hasAttribute(attributeName)) {
32442
+ const attributeValue = `${templatePath}@o:${offset},l:${line},c:${column}`;
32443
+ renderer.setAttribute(node, attributeName, attributeValue);
32444
+ }
32445
+ }
32446
+ }
32447
+
32047
32448
  /*
32048
32449
  * This file re-exports all symbols contained in this directory.
32049
32450
  *
@@ -33385,6 +33786,7 @@ const angularCoreEnv = (() => ({
33385
33786
  'ɵɵdeclareLet': ɵɵdeclareLet,
33386
33787
  'ɵɵstoreLet': ɵɵstoreLet,
33387
33788
  'ɵɵreadContextLet': ɵɵreadContextLet,
33789
+ 'ɵɵattachSourceLocations': ɵɵattachSourceLocations,
33388
33790
  'ɵɵsanitizeHtml': ɵɵsanitizeHtml,
33389
33791
  'ɵɵsanitizeStyle': ɵɵsanitizeStyle,
33390
33792
  'ɵɵsanitizeResourceUrl': ɵɵsanitizeResourceUrl,
@@ -34574,7 +34976,7 @@ class Version {
34574
34976
  /**
34575
34977
  * @publicApi
34576
34978
  */
34577
- const VERSION = new Version('19.1.0-next.2');
34979
+ const VERSION = new Version('19.1.0-next.4');
34578
34980
 
34579
34981
  /**
34580
34982
  * Combination of NgModuleFactory and ComponentFactories.
@@ -35595,6 +35997,27 @@ function logOversizedImageWarning(src) {
35595
35997
  */
35596
35998
  const PLATFORM_DESTROY_LISTENERS = new InjectionToken(ngDevMode ? 'PlatformDestroyListeners' : '');
35597
35999
 
36000
+ /**
36001
+ * InjectionToken to control root component bootstrap behavior.
36002
+ *
36003
+ * This token is primarily used in Angular's server-side rendering (SSR) scenarios,
36004
+ * particularly by the `@angular/ssr` package, to manage whether the root component
36005
+ * should be bootstrapped during the application initialization process.
36006
+ *
36007
+ * ## Purpose:
36008
+ * During SSR route extraction, setting this token to `false` prevents Angular from
36009
+ * bootstrapping the root component. This avoids unnecessary component rendering,
36010
+ * enabling route extraction without requiring additional APIs or triggering
36011
+ * component logic.
36012
+ *
36013
+ * ## Behavior:
36014
+ * - **`false`**: Prevents the root component from being bootstrapped.
36015
+ * - **`true`** (default): Proceeds with the normal root component bootstrap process.
36016
+ *
36017
+ * This mechanism ensures SSR can efficiently separate route extraction logic
36018
+ * from component rendering.
36019
+ */
36020
+ const ENABLE_ROOT_COMPONENT_BOOTSTRAP = new InjectionToken(ngDevMode ? 'ENABLE_ROOT_COMPONENT_BOOTSTRAP' : '');
35598
36021
  function isApplicationBootstrapConfig(config) {
35599
36022
  return !config.moduleRef;
35600
36023
  }
@@ -35659,6 +36082,14 @@ function bootstrap(config) {
35659
36082
  // If the `LOCALE_ID` provider is defined at bootstrap then we set the value for ivy
35660
36083
  const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);
35661
36084
  setLocaleId(localeId || DEFAULT_LOCALE_ID);
36085
+ const enableRootComponentBoostrap = envInjector.get(ENABLE_ROOT_COMPONENT_BOOTSTRAP, true);
36086
+ if (!enableRootComponentBoostrap) {
36087
+ if (isApplicationBootstrapConfig(config)) {
36088
+ return envInjector.get(ApplicationRef);
36089
+ }
36090
+ config.allPlatformModules.push(config.moduleRef);
36091
+ return config.moduleRef;
36092
+ }
35662
36093
  if (typeof ngDevMode === 'undefined' || ngDevMode) {
35663
36094
  const imagePerformanceService = envInjector.get(ImagePerformanceWarning);
35664
36095
  imagePerformanceService.start();
@@ -38569,42 +39000,6 @@ function internalCreateApplication(config) {
38569
39000
  }
38570
39001
  }
38571
39002
 
38572
- /**
38573
- * Retrieves all defer blocks in a given LView.
38574
- *
38575
- * @param lView lView with defer blocks
38576
- * @param deferBlocks defer block aggregator array
38577
- */
38578
- function getDeferBlocks(lView, deferBlocks) {
38579
- const tView = lView[TVIEW];
38580
- for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
38581
- if (isLContainer(lView[i])) {
38582
- const lContainer = lView[i];
38583
- // An LContainer may represent an instance of a defer block, in which case
38584
- // we store it as a result. Otherwise, keep iterating over LContainer views and
38585
- // look for defer blocks.
38586
- const isLast = i === tView.bindingStartIndex - 1;
38587
- if (!isLast) {
38588
- const tNode = tView.data[i];
38589
- const tDetails = getTDeferBlockDetails(tView, tNode);
38590
- if (isTDeferBlockDetails(tDetails)) {
38591
- deferBlocks.push({ lContainer, lView, tNode, tDetails });
38592
- // This LContainer represents a defer block, so we exit
38593
- // this iteration and don't inspect views in this LContainer.
38594
- continue;
38595
- }
38596
- }
38597
- for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
38598
- getDeferBlocks(lContainer[i], deferBlocks);
38599
- }
38600
- }
38601
- else if (isLView(lView[i])) {
38602
- // This is a component, enter the `getDeferBlocks` recursively.
38603
- getDeferBlocks(lView[i], deferBlocks);
38604
- }
38605
- }
38606
- }
38607
-
38608
39003
  /** Apps in which we've enabled event replay.
38609
39004
  * This is to prevent initializing event replay more than once per app.
38610
39005
  */
@@ -38972,7 +39367,6 @@ function annotateForHydration(appRef, doc) {
38972
39367
  transferState.set(NGH_DATA_KEY, serializedViews);
38973
39368
  if (deferBlocks.size > 0) {
38974
39369
  const blocks = {};
38975
- // TODO(incremental-hydration): we should probably have an object here instead of a Map?
38976
39370
  for (const [id, info] of deferBlocks.entries()) {
38977
39371
  blocks[id] = info;
38978
39372
  }
@@ -39041,10 +39435,10 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39041
39435
  // If this is a defer block, serialize extra info.
39042
39436
  if (isDeferBlock(lView[TVIEW], tNode)) {
39043
39437
  const lDetails = getLDeferBlockDetails(lView, tNode);
39044
- if (context.isIncrementalHydrationEnabled) {
39438
+ const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
39439
+ if (context.isIncrementalHydrationEnabled && tDetails.hydrateTriggers !== null) {
39045
39440
  const deferBlockId = `d${context.deferBlocks.size}`;
39046
- const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
39047
- if (tDetails.hydrateTriggers?.has(7 /* DeferBlockTrigger.Never */)) {
39441
+ if (tDetails.hydrateTriggers.has(7 /* DeferBlockTrigger.Never */)) {
39048
39442
  isHydrateNeverBlock = true;
39049
39443
  }
39050
39444
  let rootNodes = [];
@@ -39054,8 +39448,11 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39054
39448
  [DEFER_PARENT_BLOCK_ID]: parentDeferBlockId,
39055
39449
  [NUM_ROOT_NODES]: rootNodes.length,
39056
39450
  [DEFER_BLOCK_STATE$1]: lDetails[DEFER_BLOCK_STATE],
39057
- [DEFER_HYDRATE_TRIGGERS]: serializeHydrateTriggers(tDetails.hydrateTriggers),
39058
39451
  };
39452
+ const serializedTriggers = serializeHydrateTriggers(tDetails.hydrateTriggers);
39453
+ if (serializedTriggers.length > 0) {
39454
+ deferBlockInfo[DEFER_HYDRATE_TRIGGERS] = serializedTriggers;
39455
+ }
39059
39456
  context.deferBlocks.set(deferBlockId, deferBlockInfo);
39060
39457
  const node = unwrapRNode(lContainer);
39061
39458
  if (node !== undefined) {
@@ -39086,11 +39483,7 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39086
39483
  serializedView[DEFER_BLOCK_STATE$1] = lDetails[DEFER_BLOCK_STATE];
39087
39484
  }
39088
39485
  if (!isHydrateNeverBlock) {
39089
- // TODO(incremental-hydration): avoid copying of an object here
39090
- serializedView = {
39091
- ...serializedView,
39092
- ...serializeLView(lContainer[i], parentDeferBlockId, context),
39093
- };
39486
+ Object.assign(serializedView, serializeLView(lContainer[i], parentDeferBlockId, context));
39094
39487
  }
39095
39488
  }
39096
39489
  // Check if the previous view has the same shape (for example, it was
@@ -39111,9 +39504,6 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39111
39504
  return views;
39112
39505
  }
39113
39506
  function serializeHydrateTriggers(triggerMap) {
39114
- if (triggerMap === null) {
39115
- return null;
39116
- }
39117
39507
  const serializableDeferBlockTrigger = new Set([
39118
39508
  0 /* DeferBlockTrigger.Idle */,
39119
39509
  1 /* DeferBlockTrigger.Immediate */,
@@ -39127,7 +39517,7 @@ function serializeHydrateTriggers(triggerMap) {
39127
39517
  triggers.push(trigger);
39128
39518
  }
39129
39519
  else {
39130
- triggers.push({ trigger, details });
39520
+ triggers.push({ trigger, delay: details.delay });
39131
39521
  }
39132
39522
  }
39133
39523
  }
@@ -39545,6 +39935,9 @@ function printHydrationStats(injector) {
39545
39935
  const message = `Angular hydrated ${ngDevMode.hydratedComponents} component(s) ` +
39546
39936
  `and ${ngDevMode.hydratedNodes} node(s), ` +
39547
39937
  `${ngDevMode.componentsSkippedHydration} component(s) were skipped. ` +
39938
+ (isIncrementalHydrationEnabled(injector)
39939
+ ? `${ngDevMode.deferBlocksWithIncrementalHydration} defer block(s) were configured to use incremental hydration. `
39940
+ : '') +
39548
39941
  `Learn more at https://angular.dev/guide/hydration.`;
39549
39942
  // tslint:disable-next-line:no-console
39550
39943
  console.log(message);
@@ -39668,6 +40061,7 @@ function withDomHydration() {
39668
40061
  whenStableWithTimeout(appRef, injector).then(() => {
39669
40062
  cleanupDehydratedViews(appRef);
39670
40063
  if (typeof ngDevMode !== 'undefined' && ngDevMode) {
40064
+ countBlocksSkippedByHydration(injector);
39671
40065
  printHydrationStats(injector);
39672
40066
  }
39673
40067
  });
@@ -40411,10 +40805,18 @@ function effect(effectFn, options) {
40411
40805
  // If we need to register for cleanup, do that here.
40412
40806
  node.onDestroyFn = destroyRef.onDestroy(() => node.destroy());
40413
40807
  }
40808
+ const effectRef = new EffectRefImpl(node);
40414
40809
  if (ngDevMode) {
40415
40810
  node.debugName = options?.debugName ?? '';
40811
+ const prevInjectorProfilerContext = setInjectorProfilerContext({ injector, token: null });
40812
+ try {
40813
+ emitEffectCreatedEvent(effectRef);
40814
+ }
40815
+ finally {
40816
+ setInjectorProfilerContext(prevInjectorProfilerContext);
40817
+ }
40416
40818
  }
40417
- return new EffectRefImpl(node);
40819
+ return effectRef;
40418
40820
  }
40419
40821
  /**
40420
40822
  * Not public API, which guarantees `EffectScheduler` only ever comes from the application root
@@ -41166,5 +41568,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
41166
41568
  * Generated bundle index. Do not edit.
41167
41569
  */
41168
41570
 
41169
- export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PendingTasks, Pipe, PlatformRef, Query, QueryList, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Renderer2, RendererFactory2, RendererStyleFlags2, ResourceStatus, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, ViewRef, afterNextRender, afterRender, afterRenderEffect, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderManager as ɵAfterRenderManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, MicrotaskEffectScheduler as ɵMicrotaskEffectScheduler, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PendingTasksInternal as ɵPendingTasks, PendingTasksInternal as ɵPendingTasksInternal, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, TracingAction as ɵTracingAction, TracingService as ɵTracingService, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getClosestComponentName as ɵgetClosestComponentName, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, microtaskEffect as ɵmicrotaskEffect, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, startMeasuring as ɵstartMeasuring, stopMeasuring as ɵstopMeasuring, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, withIncrementalHydration as ɵwithIncrementalHydration, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵ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 };
41571
+ 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 };
41170
41572
  //# sourceMappingURL=core.mjs.map