@angular/core 20.2.0-next.2 → 20.2.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 (61) hide show
  1. package/api.d.d.ts +2 -2
  2. package/chrome_dev_tools_performance.d.d.ts +1 -1
  3. package/discovery.d.d.ts +8 -1
  4. package/event_dispatcher.d.d.ts +1 -1
  5. package/fesm2022/attribute.mjs +1 -1
  6. package/fesm2022/core.mjs +35 -10
  7. package/fesm2022/core.mjs.map +1 -1
  8. package/fesm2022/debug_node.mjs +254 -141
  9. package/fesm2022/debug_node.mjs.map +1 -1
  10. package/fesm2022/not_found.mjs +1 -1
  11. package/fesm2022/primitives/di.mjs +1 -1
  12. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  13. package/fesm2022/primitives/signals.mjs +1 -1
  14. package/fesm2022/resource.mjs +12 -3
  15. package/fesm2022/resource.mjs.map +1 -1
  16. package/fesm2022/root_effect_scheduler.mjs +1 -1
  17. package/fesm2022/root_effect_scheduler.mjs.map +1 -1
  18. package/fesm2022/rxjs-interop.mjs +1 -1
  19. package/fesm2022/signal.mjs +154 -118
  20. package/fesm2022/signal.mjs.map +1 -1
  21. package/fesm2022/testing.mjs +19 -2
  22. package/fesm2022/testing.mjs.map +1 -1
  23. package/fesm2022/untracked.mjs +1 -1
  24. package/fesm2022/weak_ref.mjs +1 -1
  25. package/graph.d.d.ts +20 -33
  26. package/index.d.ts +32 -7
  27. package/package.json +2 -2
  28. package/primitives/di/index.d.ts +1 -1
  29. package/primitives/event-dispatch/index.d.ts +1 -1
  30. package/primitives/signals/index.d.ts +1 -1
  31. package/rxjs-interop/index.d.ts +1 -1
  32. package/schematics/bundles/{apply_import_manager-Bkosyy2x.cjs → apply_import_manager-Doo9rveC.cjs} +4 -4
  33. package/schematics/bundles/cleanup-unused-imports.cjs +7 -8
  34. package/schematics/bundles/{compiler_host-CSrf1kFh.cjs → compiler_host-Dtf8fsIr.cjs} +3 -3
  35. package/schematics/bundles/control-flow-migration.cjs +18 -19
  36. package/schematics/bundles/document-core.cjs +6 -7
  37. package/schematics/bundles/imports-CIX-JgAN.cjs +1 -1
  38. package/schematics/bundles/{index-DwmX8Ifa.cjs → index-B10puRUY.cjs} +49 -49
  39. package/schematics/bundles/{index-DYbdsCUu.cjs → index-DHoQSprx.cjs} +1268 -1264
  40. package/schematics/bundles/inject-flags.cjs +6 -7
  41. package/schematics/bundles/inject-migration.cjs +6 -7
  42. package/schematics/bundles/leading_space-D9nQ8UQC.cjs +1 -1
  43. package/schematics/bundles/{migrate_ts_type_references-C7NB9fZH.cjs → migrate_ts_type_references-Cr2742bs.cjs} +14 -14
  44. package/schematics/bundles/ng_decorators-B5HCqr20.cjs +1 -1
  45. package/schematics/bundles/nodes-B16H9JUd.cjs +1 -1
  46. package/schematics/bundles/output-migration.cjs +20 -21
  47. package/schematics/bundles/{project_paths-5CoqAjNK.cjs → project_paths-CrqHneU0.cjs} +16 -17
  48. package/schematics/bundles/{checker-Cfq29XaS.cjs → project_tsconfig_paths-BGhHq5-d.cjs} +166 -30
  49. package/schematics/bundles/property_name-BBwFuqMe.cjs +1 -1
  50. package/schematics/bundles/route-lazy-loading.cjs +6 -7
  51. package/schematics/bundles/self-closing-tags-migration.cjs +10 -11
  52. package/schematics/bundles/signal-input-migration.cjs +21 -22
  53. package/schematics/bundles/signal-queries-migration.cjs +31 -32
  54. package/schematics/bundles/signals.cjs +8 -9
  55. package/schematics/bundles/standalone-migration.cjs +10 -11
  56. package/schematics/bundles/symbol-VPWguRxr.cjs +1 -1
  57. package/schematics/bundles/test-bed-get.cjs +4 -5
  58. package/signal.d.d.ts +1 -1
  59. package/testing/index.d.ts +6 -1
  60. package/weak_ref.d.d.ts +1 -1
  61. package/schematics/bundles/project_tsconfig_paths-CDVxT6Ov.cjs +0 -90
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v20.2.0-next.2
2
+ * @license Angular v20.2.0-next.4
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -3811,7 +3811,7 @@ const DEFER_HYDRATE_TRIGGERS = 't';
3811
3811
  * Internal token that specifies whether DOM reuse logic
3812
3812
  * during hydration is enabled.
3813
3813
  */
3814
- const IS_HYDRATION_DOM_REUSE_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_HYDRATION_DOM_REUSE_ENABLED' : '');
3814
+ const IS_HYDRATION_DOM_REUSE_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_HYDRATION_DOM_REUSE_ENABLED' : '');
3815
3815
  // By default (in client rendering mode), we remove all the contents
3816
3816
  // of the host element and render an application after that.
3817
3817
  const PRESERVE_HOST_CONTENT_DEFAULT = false;
@@ -3819,7 +3819,7 @@ const PRESERVE_HOST_CONTENT_DEFAULT = false;
3819
3819
  * Internal token that indicates whether host element content should be
3820
3820
  * retained during the bootstrap.
3821
3821
  */
3822
- const PRESERVE_HOST_CONTENT = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'PRESERVE_HOST_CONTENT' : '', {
3822
+ const PRESERVE_HOST_CONTENT = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'PRESERVE_HOST_CONTENT' : '', {
3823
3823
  providedIn: 'root',
3824
3824
  factory: () => PRESERVE_HOST_CONTENT_DEFAULT,
3825
3825
  });
@@ -3827,18 +3827,18 @@ const PRESERVE_HOST_CONTENT = new InjectionToken(typeof ngDevMode === 'undefined
3827
3827
  * Internal token that indicates whether hydration support for i18n
3828
3828
  * is enabled.
3829
3829
  */
3830
- const IS_I18N_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_I18N_HYDRATION_ENABLED' : '');
3830
+ const IS_I18N_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_I18N_HYDRATION_ENABLED' : '');
3831
3831
  /**
3832
3832
  * Internal token that indicates whether event replay support for SSR
3833
3833
  * is enabled.
3834
3834
  */
3835
- const IS_EVENT_REPLAY_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_EVENT_REPLAY_ENABLED' : '');
3835
+ const IS_EVENT_REPLAY_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_EVENT_REPLAY_ENABLED' : '');
3836
3836
  const EVENT_REPLAY_ENABLED_DEFAULT = false;
3837
3837
  /**
3838
3838
  * Internal token that indicates whether incremental hydration support
3839
3839
  * is enabled.
3840
3840
  */
3841
- const IS_INCREMENTAL_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_INCREMENTAL_HYDRATION_ENABLED' : '');
3841
+ const IS_INCREMENTAL_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_INCREMENTAL_HYDRATION_ENABLED' : '');
3842
3842
  /**
3843
3843
  * A map of DOM elements with `jsaction` attributes grouped by action names.
3844
3844
  */
@@ -3846,6 +3846,10 @@ const JSACTION_BLOCK_ELEMENT_MAP = new InjectionToken(ngDevMode ? 'JSACTION_BLOC
3846
3846
  providedIn: 'root',
3847
3847
  factory: () => new Map(),
3848
3848
  });
3849
+ /**
3850
+ * Internal token that indicates whether the initial navigation is blocking in the application.
3851
+ */
3852
+ const IS_ENABLED_BLOCKING_INITIAL_NAVIGATION = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_ENABLED_BLOCKING_INITIAL_NAVIGATION' : '');
3849
3853
 
3850
3854
  /*!
3851
3855
  * @license
@@ -13511,7 +13515,7 @@ class ComponentFactory extends ComponentFactory$1 {
13511
13515
  }
13512
13516
  function createRootTView(rootSelectorOrNode, componentDef, componentBindings, directives) {
13513
13517
  const tAttributes = rootSelectorOrNode
13514
- ? ['ng-version', '20.2.0-next.2']
13518
+ ? ['ng-version', '20.2.0-next.4']
13515
13519
  : // Extract attributes and classes from the first selector only to match VE behavior.
13516
13520
  extractAttrsAndClassesFromSelector(componentDef.selectors[0]);
13517
13521
  let creationBindings = null;
@@ -14654,7 +14658,7 @@ function resolveComponentResources(resourceResolver) {
14654
14658
  let promise = urlMap.get(url);
14655
14659
  if (!promise) {
14656
14660
  const resp = resourceResolver(url);
14657
- urlMap.set(url, (promise = resp.then(unwrapResponse)));
14661
+ urlMap.set(url, (promise = resp.then((res) => unwrapResponse(url, res))));
14658
14662
  }
14659
14663
  return promise;
14660
14664
  }
@@ -14727,8 +14731,14 @@ function restoreComponentResolutionQueue(queue) {
14727
14731
  function isComponentResourceResolutionQueueEmpty() {
14728
14732
  return componentResourceResolutionQueue.size === 0;
14729
14733
  }
14730
- function unwrapResponse(response) {
14731
- return typeof response == 'string' ? response : response.text();
14734
+ function unwrapResponse(url, response) {
14735
+ if (typeof response === 'string') {
14736
+ return response;
14737
+ }
14738
+ if (response.status !== undefined && response.status !== 200) {
14739
+ return Promise.reject(new RuntimeError(918 /* RuntimeErrorCode.EXTERNAL_RESOURCE_LOADING_FAILED */, ngDevMode && `Could not load resource: ${url}. Response status: ${response.status}`));
14740
+ }
14741
+ return response.text();
14732
14742
  }
14733
14743
  function componentDefResolved(type) {
14734
14744
  componentDefPendingResolution.delete(type);
@@ -19065,6 +19075,9 @@ function getNodesAndEdgesFromSignalMap(signalMap) {
19065
19075
  label: consumer.debugName ?? consumer.lView?.[HOST]?.tagName?.toLowerCase?.(),
19066
19076
  kind: consumer.kind,
19067
19077
  epoch: consumer.version,
19078
+ // The `lView[CONTEXT]` is a reference to an instance of the component's class.
19079
+ // We get the constructor so that `inspect(.constructor)` shows the component class.
19080
+ debuggableFn: consumer.lView?.[CONTEXT]?.constructor,
19068
19081
  id,
19069
19082
  });
19070
19083
  }
@@ -19098,7 +19111,11 @@ function extractSignalNodesAndEdgesFromRoots(nodes, signalDependenciesMap = new
19098
19111
  if (signalDependenciesMap.has(node)) {
19099
19112
  continue;
19100
19113
  }
19101
- const producerNodes = (node.producerNode ?? []);
19114
+ const producerNodes = [];
19115
+ for (let link = node.producers; link !== undefined; link = link.nextProducer) {
19116
+ const producer = link.producer;
19117
+ producerNodes.push(producer);
19118
+ }
19102
19119
  signalDependenciesMap.set(node, producerNodes);
19103
19120
  extractSignalNodesAndEdgesFromRoots(producerNodes, signalDependenciesMap);
19104
19121
  }
@@ -21703,17 +21720,25 @@ function ɵɵattribute(name, value, sanitizer, namespace) {
21703
21720
  /**
21704
21721
  * A [DI token](api/core/InjectionToken) that enables or disables all enter and leave animations.
21705
21722
  */
21706
- const ANIMATIONS_DISABLED = new InjectionToken(ngDevMode ? 'AnimationsDisabled' : '', {
21723
+ const ANIMATIONS_DISABLED = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'AnimationsDisabled' : '', {
21707
21724
  providedIn: 'root',
21708
21725
  factory: () => false,
21709
21726
  });
21710
21727
  /**
21711
- * Animation removal functions have a four second long maximum duration timeout.
21712
- * This value mirrors from Chrome's cross document navigation view transition timeout.
21713
- * It's intended to prevent people from accidentally forgetting to call the removal
21714
- * function in their callback.
21728
+ * A [DI token](api/core/InjectionToken) that configures the maximum animation timeout
21729
+ * before element removal. The default value mirrors from Chrome's cross document
21730
+ * navigation view transition timeout. It's intended to prevent people from accidentally
21731
+ * forgetting to call the removal function in their callback. Also serves as a delay
21732
+ * for when stylesheets are pruned.
21733
+ *
21734
+ * @publicApi 20.2
21715
21735
  */
21716
- const MAX_ANIMATION_TIMEOUT = 4000;
21736
+ const MAX_ANIMATION_TIMEOUT = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'MaxAnimationTimeout' : '', {
21737
+ providedIn: 'root',
21738
+ factory: () => MAX_ANIMATION_TIMEOUT_DEFAULT,
21739
+ });
21740
+ const MAX_ANIMATION_TIMEOUT_DEFAULT = 4000;
21741
+
21717
21742
  /**
21718
21743
  * Registers elements for delayed removal action for animation in the case
21719
21744
  * that `animate.leave` is used. This stores the target element and any
@@ -21729,7 +21754,9 @@ class ElementRegistry {
21729
21754
  }
21730
21755
  /** Used when animate.leave is only applying classes */
21731
21756
  trackClasses(details, classes) {
21732
- const classList = typeof classes === 'string' ? [classes] : classes;
21757
+ const classList = getClassListFromValue(classes);
21758
+ if (!classList)
21759
+ return;
21733
21760
  for (let klass of classList) {
21734
21761
  details.classes?.add(klass);
21735
21762
  }
@@ -21780,9 +21807,9 @@ class ElementRegistry {
21780
21807
  * using the animateFn stored in the registry. The DOM renderer passes in
21781
21808
  * the removal function to be fired off when the animation finishes.
21782
21809
  */
21783
- animate(el, removeFn) {
21810
+ animate(el, removeFn, maxAnimationTimeout) {
21784
21811
  if (!this.outElements.has(el))
21785
- return;
21812
+ return removeFn();
21786
21813
  const details = this.outElements.get(el);
21787
21814
  let timeoutId;
21788
21815
  let called = false;
@@ -21799,18 +21826,134 @@ class ElementRegistry {
21799
21826
  // this timeout is used to ensure elements actually get removed in the case
21800
21827
  // that the user forgot to call the remove callback. The timeout is cleared
21801
21828
  // in the DOM renderer during the remove child process.
21802
- timeoutId = setTimeout(remove, MAX_ANIMATION_TIMEOUT);
21829
+ timeoutId = setTimeout(remove, maxAnimationTimeout);
21803
21830
  details.animateFn(remove);
21804
21831
  }
21805
21832
  }
21833
+ function getClassListFromValue(value) {
21834
+ const classes = typeof value === 'function' ? value() : value;
21835
+ let classList = Array.isArray(classes) ? classes : null;
21836
+ if (typeof classes === 'string') {
21837
+ classList = classes
21838
+ .trim()
21839
+ .split(/\s+/)
21840
+ .filter((k) => k);
21841
+ }
21842
+ return classList;
21843
+ }
21844
+
21845
+ /** Parses a CSS time value to milliseconds. */
21846
+ function parseCssTimeUnitsToMs(value) {
21847
+ // Some browsers will return it in seconds, whereas others will return milliseconds.
21848
+ const multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;
21849
+ return parseFloat(value) * multiplier;
21850
+ }
21851
+ /** Parses out multiple values from a computed style into an array. */
21852
+ function parseCssPropertyValue(computedStyle, name) {
21853
+ const value = computedStyle.getPropertyValue(name);
21854
+ return value.split(',').map((part) => part.trim());
21855
+ }
21856
+ /** Gets the transform transition duration, including the delay, of an element in milliseconds. */
21857
+ function getLongestComputedTransition(computedStyle) {
21858
+ const transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');
21859
+ const rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');
21860
+ const rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');
21861
+ const longest = { propertyName: '', duration: 0, animationName: undefined };
21862
+ for (let i = 0; i < transitionedProperties.length; i++) {
21863
+ const duration = parseCssTimeUnitsToMs(rawDelays[i]) + parseCssTimeUnitsToMs(rawDurations[i]);
21864
+ if (duration > longest.duration) {
21865
+ longest.propertyName = transitionedProperties[i];
21866
+ longest.duration = duration;
21867
+ }
21868
+ }
21869
+ return longest;
21870
+ }
21871
+ function getLongestComputedAnimation(computedStyle) {
21872
+ const rawNames = parseCssPropertyValue(computedStyle, 'animation-name');
21873
+ const rawDelays = parseCssPropertyValue(computedStyle, 'animation-delay');
21874
+ const rawDurations = parseCssPropertyValue(computedStyle, 'animation-duration');
21875
+ const longest = { animationName: '', propertyName: undefined, duration: 0 };
21876
+ for (let i = 0; i < rawNames.length; i++) {
21877
+ const duration = parseCssTimeUnitsToMs(rawDelays[i]) + parseCssTimeUnitsToMs(rawDurations[i]);
21878
+ if (duration > longest.duration) {
21879
+ longest.animationName = rawNames[i];
21880
+ longest.duration = duration;
21881
+ }
21882
+ }
21883
+ return longest;
21884
+ }
21885
+ /**
21886
+ * Determines the longest animation, but with `getComputedStyles` instead of `getAnimations`. This
21887
+ * is ultimately safer than getAnimations because it can be used when recalculations are in
21888
+ * progress. `getAnimations()` will be empty in that case.
21889
+ */
21890
+ function determineLongestAnimationFromComputedStyles(el, animationsMap) {
21891
+ const computedStyle = getComputedStyle(el);
21892
+ const longestAnimation = getLongestComputedAnimation(computedStyle);
21893
+ const longestTransition = getLongestComputedTransition(computedStyle);
21894
+ const longest = longestAnimation.duration > longestTransition.duration ? longestAnimation : longestTransition;
21895
+ if (animationsMap.has(el) && animationsMap.get(el).duration > longest.duration) {
21896
+ return;
21897
+ }
21898
+ animationsMap.set(el, longest);
21899
+ }
21900
+ /**
21901
+ * Multiple animations can be set on an element. This grabs an element and
21902
+ * determines which of those will be the longest duration. If we didn't do
21903
+ * this, elements would be removed whenever the first animation completes.
21904
+ * This ensures we get the longest running animation and only remove when
21905
+ * that animation completes.
21906
+ */
21907
+ function determineLongestAnimation(event, el, animationsMap, areAnimationSupported) {
21908
+ if (!areAnimationSupported || !(event.target instanceof Element) || event.target !== el)
21909
+ return;
21910
+ const animations = el.getAnimations();
21911
+ return animations.length === 0
21912
+ ? // fallback to computed styles if getAnimations is empty. This would happen if styles are
21913
+ // currently recalculating due to a reflow happening elsewhere.
21914
+ determineLongestAnimationFromComputedStyles(el, animationsMap)
21915
+ : determineLongestAnimationFromElementAnimations(el, animationsMap, animations);
21916
+ }
21917
+ function determineLongestAnimationFromElementAnimations(el, animationsMap, animations) {
21918
+ let currentLongest = {
21919
+ animationName: undefined,
21920
+ propertyName: undefined,
21921
+ duration: 0,
21922
+ };
21923
+ for (const animation of animations) {
21924
+ const timing = animation.effect?.getTiming();
21925
+ // duration can be a string 'auto' or a number.
21926
+ const animDuration = typeof timing?.duration === 'number' ? timing.duration : 0;
21927
+ let duration = (timing?.delay ?? 0) + animDuration;
21928
+ let propertyName;
21929
+ let animationName;
21930
+ if (animation.animationName) {
21931
+ animationName = animation.animationName;
21932
+ }
21933
+ else {
21934
+ // Check for CSSTransition specific property
21935
+ propertyName = animation.transitionProperty;
21936
+ }
21937
+ if (duration >= currentLongest.duration) {
21938
+ currentLongest = { animationName, propertyName, duration };
21939
+ }
21940
+ }
21941
+ if (animationsMap.has(el) && animationsMap.get(el).duration > currentLongest.duration) {
21942
+ return;
21943
+ }
21944
+ animationsMap.set(el, currentLongest);
21945
+ }
21806
21946
 
21807
21947
  const DEFAULT_ANIMATIONS_DISABLED = false;
21808
- const WS_REGEXP = /\s+/;
21809
21948
  const areAnimationSupported = (typeof ngServerMode === 'undefined' || !ngServerMode) &&
21810
21949
  typeof document !== 'undefined' &&
21811
21950
  // tslint:disable-next-line:no-toplevel-property-access
21812
21951
  typeof document?.documentElement?.getAnimations === 'function';
21813
21952
  const noOpAnimationComplete = () => { };
21953
+ // Tracks the list of classes added to a DOM node from `animate.enter` calls to ensure
21954
+ // we remove all of the classes in the case of animation composition via host bindings.
21955
+ const enterClassMap = new WeakMap();
21956
+ const longestAnimations = new WeakMap();
21814
21957
  /**
21815
21958
  * Instruction to handle the `animate.enter` behavior for class bindings.
21816
21959
  *
@@ -21830,20 +21973,22 @@ function ɵɵanimateEnter(value) {
21830
21973
  const nativeElement = getNativeByTNode(tNode, lView);
21831
21974
  const renderer = lView[RENDERER];
21832
21975
  const injector = lView[INJECTOR];
21833
- const ngZone = injector.get(NgZone);
21834
21976
  const animationsDisabled = injector.get(ANIMATIONS_DISABLED, DEFAULT_ANIMATIONS_DISABLED);
21977
+ const ngZone = injector.get(NgZone);
21978
+ if (animationsDisabled) {
21979
+ return ɵɵanimateEnter;
21980
+ }
21835
21981
  // Retrieve the actual class list from the value. This will resolve any resolver functions from
21836
21982
  // bindings.
21837
21983
  const activeClasses = getClassListFromValue(value);
21838
- let longestAnimation;
21839
21984
  const cleanupFns = [];
21840
21985
  // In the case where multiple animations are happening on the element, we need
21841
21986
  // to get the longest animation to ensure we don't complete animations early.
21842
21987
  // This also allows us to setup cancellation of animations in progress if the
21843
21988
  // gets removed early.
21844
21989
  const handleAnimationStart = (event) => {
21845
- setupAnimationCancel(event, activeClasses, renderer);
21846
- longestAnimation = getLongestAnimation(event);
21990
+ determineLongestAnimation(event, nativeElement, longestAnimations, areAnimationSupported);
21991
+ setupAnimationCancel(event, renderer);
21847
21992
  const eventName = event instanceof AnimationEvent ? 'animationend' : 'transitionend';
21848
21993
  ngZone.runOutsideAngular(() => {
21849
21994
  cleanupFns.push(renderer.listen(nativeElement, eventName, handleInAnimationEnd));
@@ -21851,38 +21996,41 @@ function ɵɵanimateEnter(value) {
21851
21996
  };
21852
21997
  // When the longest animation ends, we can remove all the classes
21853
21998
  const handleInAnimationEnd = (event) => {
21854
- animationEnd(event, nativeElement, longestAnimation, activeClasses, renderer, cleanupFns);
21999
+ animationEnd(event, nativeElement, renderer, cleanupFns);
21855
22000
  };
21856
22001
  // We only need to add these event listeners if there are actual classes to apply
21857
22002
  if (activeClasses && activeClasses.length > 0) {
21858
- if (!animationsDisabled) {
21859
- ngZone.runOutsideAngular(() => {
21860
- cleanupFns.push(renderer.listen(nativeElement, 'animationstart', handleAnimationStart));
21861
- cleanupFns.push(renderer.listen(nativeElement, 'transitionstart', handleAnimationStart));
21862
- });
21863
- }
22003
+ ngZone.runOutsideAngular(() => {
22004
+ cleanupFns.push(renderer.listen(nativeElement, 'animationstart', handleAnimationStart));
22005
+ cleanupFns.push(renderer.listen(nativeElement, 'transitionstart', handleAnimationStart));
22006
+ });
22007
+ trackEnterClasses(nativeElement, activeClasses, cleanupFns);
21864
22008
  for (const klass of activeClasses) {
21865
22009
  renderer.addClass(nativeElement, klass);
21866
22010
  }
21867
22011
  }
21868
- if (animationsDisabled) {
21869
- // The animations will only be disabled in a test environment, and adding a microtask here
21870
- // will allow the tests to be able to tick forward to resolve the next phase of animation
21871
- // in their tests.
21872
- Promise.resolve().then(() => {
21873
- if (activeClasses !== null) {
21874
- for (const klass of activeClasses) {
21875
- renderer.removeClass(nativeElement, klass);
21876
- }
21877
- }
21878
- for (const fn of cleanupFns) {
21879
- fn();
21880
- }
21881
- // Classes remain, no animation, no automatic cleanup of these classes by this instruction.
21882
- });
21883
- }
21884
22012
  return ɵɵanimateEnter; // For chaining
21885
22013
  }
22014
+ /**
22015
+ * trackEnterClasses is necessary in the case of composition where animate.enter
22016
+ * is used on the same element in multiple places, like on the element and in a
22017
+ * host binding. When removing classes, we need the entire list of animation classes
22018
+ * added to properly remove them when the longest animation fires.
22019
+ */
22020
+ function trackEnterClasses(el, classList, cleanupFns) {
22021
+ const elementData = enterClassMap.get(el);
22022
+ if (elementData) {
22023
+ for (const klass of classList) {
22024
+ elementData.classList.push(klass);
22025
+ }
22026
+ for (const fn of cleanupFns) {
22027
+ elementData.cleanupFns.push(fn);
22028
+ }
22029
+ }
22030
+ else {
22031
+ enterClassMap.set(el, { classList, cleanupFns });
22032
+ }
22033
+ }
21886
22034
  /**
21887
22035
  * Instruction to handle the `(animate.enter)` behavior for event bindings, aka when
21888
22036
  * a user wants to use a custom animation function rather than a class.
@@ -21901,6 +22049,10 @@ function ɵɵanimateEnterListener(value) {
21901
22049
  const lView = getLView();
21902
22050
  const tNode = getCurrentTNode();
21903
22051
  const nativeElement = getNativeByTNode(tNode, lView);
22052
+ const animationsDisabled = lView[INJECTOR].get(ANIMATIONS_DISABLED, DEFAULT_ANIMATIONS_DISABLED);
22053
+ if (animationsDisabled) {
22054
+ return ɵɵanimateEnterListener;
22055
+ }
21904
22056
  value.call(lView[CONTEXT], { target: nativeElement, animationComplete: noOpAnimationComplete });
21905
22057
  return ɵɵanimateEnterListener;
21906
22058
  }
@@ -21983,20 +22135,16 @@ function ɵɵanimateLeaveListener(value) {
21983
22135
  const animationsDisabled = injector.get(ANIMATIONS_DISABLED, DEFAULT_ANIMATIONS_DISABLED);
21984
22136
  const animate = (el, value) => {
21985
22137
  return (removeFn) => {
21986
- const event = {
21987
- target: nativeElement,
21988
- animationComplete: () => {
21989
- removeFn();
21990
- },
21991
- };
21992
22138
  if (animationsDisabled) {
21993
- // add a microtask for test environments to be able to see classes
21994
- // were added, then removed.
21995
- Promise.resolve().then(() => {
21996
- removeFn();
21997
- });
22139
+ removeFn();
21998
22140
  }
21999
22141
  else {
22142
+ const event = {
22143
+ target: nativeElement,
22144
+ animationComplete: () => {
22145
+ removeFn();
22146
+ },
22147
+ };
22000
22148
  value.call(lView[CONTEXT], event);
22001
22149
  }
22002
22150
  };
@@ -22032,87 +22180,55 @@ function getClassList(value, resolvers) {
22032
22180
  }
22033
22181
  return classList;
22034
22182
  }
22035
- function cancelAnimationsIfRunning(element) {
22036
- if (areAnimationSupported) {
22183
+ function cancelAnimationsIfRunning(element, renderer) {
22184
+ if (!areAnimationSupported)
22185
+ return;
22186
+ const elementData = enterClassMap.get(element);
22187
+ if (element.getAnimations().length > 0) {
22037
22188
  for (const animation of element.getAnimations()) {
22038
22189
  if (animation.playState === 'running') {
22039
22190
  animation.cancel();
22040
22191
  }
22041
22192
  }
22042
22193
  }
22043
- }
22044
- /**
22045
- * Multiple animations can be set on an element. This grabs an element and
22046
- * determines which of those will be the longest duration. If we didn't do
22047
- * this, elements would be removed whenever the first animation completes.
22048
- * This ensures we get the longest running animation and only remove when
22049
- * that animation completes.
22050
- */
22051
- function getLongestAnimation(event) {
22052
- if (!areAnimationSupported || !(event.target instanceof Element))
22053
- return;
22054
- const nativeElement = event.target;
22055
- const animations = nativeElement.getAnimations();
22056
- if (animations.length === 0)
22057
- return;
22058
- let currentLongest = {
22059
- animationName: undefined,
22060
- propertyName: undefined,
22061
- duration: 0,
22062
- };
22063
- for (const animation of animations) {
22064
- const timing = animation.effect?.getTiming();
22065
- // duration can be a string 'auto' or a number.
22066
- const animDuration = typeof timing?.duration === 'number' ? timing.duration : 0;
22067
- let duration = (timing?.delay ?? 0) + animDuration;
22068
- let propertyName;
22069
- let animationName;
22070
- if (animation.animationName) {
22071
- animationName = animation.animationName;
22072
- }
22073
- else {
22074
- // Check for CSSTransition specific property
22075
- propertyName = animation.transitionProperty;
22076
- }
22077
- if (duration >= currentLongest.duration) {
22078
- currentLongest = { animationName, propertyName, duration };
22194
+ else {
22195
+ if (elementData) {
22196
+ for (const klass of elementData.classList) {
22197
+ renderer.removeClass(element, klass);
22198
+ }
22079
22199
  }
22080
22200
  }
22081
- return currentLongest;
22082
- }
22083
- function getClassListFromValue(value) {
22084
- const classes = typeof value === 'function' ? value() : value;
22085
- let classList = classes instanceof Array ? classes : null;
22086
- if (typeof classes === 'string') {
22087
- classList = classes
22088
- .trim()
22089
- .split(WS_REGEXP)
22090
- .filter((k) => k);
22201
+ // We need to prevent any enter animation listeners from firing if they exist.
22202
+ if (elementData) {
22203
+ for (const fn of elementData.cleanupFns) {
22204
+ fn();
22205
+ }
22091
22206
  }
22092
- return classList;
22207
+ longestAnimations.delete(element);
22208
+ enterClassMap.delete(element);
22093
22209
  }
22094
- function setupAnimationCancel(event, classList, renderer) {
22210
+ function setupAnimationCancel(event, renderer) {
22095
22211
  if (!(event.target instanceof Element))
22096
22212
  return;
22097
22213
  const nativeElement = event.target;
22098
22214
  if (areAnimationSupported) {
22215
+ const elementData = enterClassMap.get(nativeElement);
22099
22216
  const animations = nativeElement.getAnimations();
22100
22217
  if (animations.length === 0)
22101
22218
  return;
22102
22219
  for (let animation of animations) {
22103
22220
  animation.addEventListener('cancel', (event) => {
22104
- if (nativeElement === event.target) {
22105
- if (classList !== null) {
22106
- for (const klass of classList) {
22107
- renderer.removeClass(nativeElement, klass);
22108
- }
22221
+ if (nativeElement === event.target && elementData?.classList) {
22222
+ for (const klass of elementData.classList) {
22223
+ renderer.removeClass(nativeElement, klass);
22109
22224
  }
22110
22225
  }
22111
22226
  });
22112
22227
  }
22113
22228
  }
22114
22229
  }
22115
- function isLongestAnimation(event, nativeElement, longestAnimation) {
22230
+ function isLongestAnimation(event, nativeElement) {
22231
+ const longestAnimation = longestAnimations.get(nativeElement);
22116
22232
  return (nativeElement === event.target &&
22117
22233
  longestAnimation !== undefined &&
22118
22234
  ((longestAnimation.animationName !== undefined &&
@@ -22120,18 +22236,21 @@ function isLongestAnimation(event, nativeElement, longestAnimation) {
22120
22236
  (longestAnimation.propertyName !== undefined &&
22121
22237
  event.propertyName === longestAnimation.propertyName)));
22122
22238
  }
22123
- function animationEnd(event, nativeElement, longestAnimation, classList, renderer, cleanupFns) {
22124
- if (isLongestAnimation(event, nativeElement, longestAnimation)) {
22239
+ function animationEnd(event, nativeElement, renderer, cleanupFns) {
22240
+ const elementData = enterClassMap.get(nativeElement);
22241
+ if (!elementData)
22242
+ return;
22243
+ if (isLongestAnimation(event, nativeElement)) {
22125
22244
  // Now that we've found the longest animation, there's no need
22126
22245
  // to keep bubbling up this event as it's not going to apply to
22127
22246
  // other elements further up. We don't want it to inadvertently
22128
22247
  // affect any other animations on the page.
22129
22248
  event.stopImmediatePropagation();
22130
- if (classList !== null) {
22131
- for (const klass of classList) {
22132
- renderer.removeClass(nativeElement, klass);
22133
- }
22249
+ for (const klass of elementData.classList) {
22250
+ renderer.removeClass(nativeElement, klass);
22134
22251
  }
22252
+ enterClassMap.delete(nativeElement);
22253
+ longestAnimations.delete(nativeElement);
22135
22254
  for (const fn of cleanupFns) {
22136
22255
  fn();
22137
22256
  }
@@ -22147,18 +22266,22 @@ function assertAnimationTypes(value, instruction) {
22147
22266
  * Once it finishes, it calls the remove function that was provided by the DOM renderer.
22148
22267
  */
22149
22268
  function animateLeaveClassRunner(el, classList, finalRemoveFn, renderer, animationsDisabled, ngZone) {
22150
- cancelAnimationsIfRunning(el);
22151
- let longestAnimation;
22269
+ if (animationsDisabled) {
22270
+ longestAnimations.delete(el);
22271
+ finalRemoveFn();
22272
+ }
22273
+ cancelAnimationsIfRunning(el, renderer);
22152
22274
  const handleAnimationStart = (event) => {
22153
- longestAnimation = getLongestAnimation(event);
22275
+ determineLongestAnimation(event, el, longestAnimations, areAnimationSupported);
22154
22276
  };
22155
22277
  const handleOutAnimationEnd = (event) => {
22156
- if (isLongestAnimation(event, el, longestAnimation)) {
22278
+ if (isLongestAnimation(event, el)) {
22157
22279
  // Now that we've found the longest animation, there's no need
22158
22280
  // to keep bubbling up this event as it's not going to apply to
22159
22281
  // other elements further up. We don't want it to inadvertently
22160
22282
  // affect any other animations on the page.
22161
22283
  event.stopImmediatePropagation();
22284
+ longestAnimations.delete(el);
22162
22285
  finalRemoveFn();
22163
22286
  }
22164
22287
  };
@@ -22169,16 +22292,9 @@ function animateLeaveClassRunner(el, classList, finalRemoveFn, renderer, animati
22169
22292
  renderer.listen(el, 'animationend', handleOutAnimationEnd);
22170
22293
  renderer.listen(el, 'transitionend', handleOutAnimationEnd);
22171
22294
  });
22172
- }
22173
- for (const item of classList) {
22174
- renderer.addClass(el, item);
22175
- }
22176
- if (animationsDisabled) {
22177
- // add a microtask for test environments to be able to see classes
22178
- // were added, then removed.
22179
- Promise.resolve().then(() => {
22180
- finalRemoveFn();
22181
- });
22295
+ for (const item of classList) {
22296
+ renderer.addClass(el, item);
22297
+ }
22182
22298
  }
22183
22299
  }
22184
22300
 
@@ -30828,11 +30944,8 @@ class ChangeDetectionSchedulerImpl {
30828
30944
  * ]});
30829
30945
  * ```
30830
30946
  *
30831
- * This API is experimental. Neither the shape, nor the underlying behavior is stable and can change
30832
- * in patch versions. There are known feature gaps and API ergonomic considerations. We will iterate
30833
- * on the exact API based on the feedback and our understanding of the problem and solution space.
30947
+ * @publicApi 20.2
30834
30948
  *
30835
- * @developerPreview 20.0
30836
30949
  * @see {@link /api/platform-browser/bootstrapApplication bootstrapApplication}
30837
30950
  */
30838
30951
  function provideZonelessChangeDetection() {
@@ -31623,5 +31736,5 @@ function getDebugNode(nativeNode) {
31623
31736
  return null;
31624
31737
  }
31625
31738
 
31626
- export { AFTER_RENDER_PHASES, ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AcxChangeDetectionStrategy, AcxViewEncapsulation, AfterRenderImpl, AfterRenderManager, AfterRenderSequence, ApplicationInitStatus, ApplicationRef, Attribute, COMPILER_OPTIONS, CONTAINERS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionSchedulerImpl, ChangeDetectionStrategy, Compiler, CompilerFactory, Component, ComponentFactory, ComponentFactory$1, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ComponentRef as ComponentRef$1, Console, DEFAULT_CURRENCY_CODE, DEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DEFER_BLOCK_ID, DEFER_BLOCK_SSR_ID_ATTRIBUTE, DEFER_BLOCK_STATE$1 as DEFER_BLOCK_STATE, DEFER_BLOCK_STATE as DEFER_BLOCK_STATE$1, DEFER_HYDRATE_TRIGGERS, DEFER_PARENT_BLOCK_ID, DEHYDRATED_BLOCK_REGISTRY, DISCONNECTED_NODES, DebugElement, DebugEventListener, DebugNode, DeferBlockBehavior, DeferBlockState, DehydratedBlockRegistry, Directive, ELEMENT_CONTAINERS, EVENT_REPLAY_ENABLED_DEFAULT, ElementRef, ElementRegistry, EnvironmentNgModuleRefAdapter, EventEmitter, Framework, Host, HostBinding, HostListener, HydrationStatus, I18N_DATA, IMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS, IS_EVENT_REPLAY_ENABLED, IS_HYDRATION_DOM_REUSE_ENABLED, IS_I18N_HYDRATION_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED, Inject, Injectable, Input, JSACTION_BLOCK_ELEMENT_MAP, JSACTION_EVENT_CONTRACT, LContext, LOCALE_ID, LocaleDataIndex, MULTIPLIER, MissingTranslationStrategy, ModuleWithComponentFactories, NGH_ATTR_NAME, NGH_DATA_KEY, NGH_DEFER_BLOCKS_KEY, NODES, NOOP_AFTER_RENDER_REF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE, NO_ERRORS_SCHEMA, NUM_ROOT_NODES, NgModule, NgModuleFactory, NgModuleFactory$1, NgModuleRef, NgModuleRef$1, NgProbeToken, NgZone, NoopNgZone, Optional, Output, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PRESERVE_HOST_CONTENT, PROVIDED_NG_ZONE, Pipe, QueryList, ReflectionCapabilities, Renderer2, RendererFactory2, RendererStyleFlags2, SKIP_HYDRATION_ATTR_NAME, SSR_CONTENT_INTEGRITY_MARKER, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TEMPLATES, TEMPLATE_ID, TESTABILITY, TESTABILITY_GETTER, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TimerScheduler, TracingAction, TracingService, TransferState, Type, UseExhaustiveCheckNoChanges, ViewContainerRef, ViewEncapsulation, ViewRef, _sanitizeHtml, _sanitizeUrl, afterEveryRender, afterNextRender, allowSanitizationBypassAndThrow, angularCoreEnv, appendDeferBlocksToJSActionMap, asNativeElements, assertComponentDef, assertStandaloneComponentType, bypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript, bypassSanitizationTrustStyle, bypassSanitizationTrustUrl, calcPathForNode, checkNoChangesInternal, cleanupDehydratedViews, clearResolutionOfComponentResourcesQueue, collectNativeNodes, collectNativeNodesInLContainer, compileComponent, compileDirective, compileNgModule, compileNgModuleDefs, compilePipe, convertHydrateTriggersToJsAction, countBlocksSkippedByHydration, createEnvironmentInjector, createMultiResultQuerySignalFn, createNgModule, createNgModuleRef, createNgModuleRefWithProviders, createSingleResultOptionalQuerySignalFn, createSingleResultRequiredQuerySignalFn, depsTracker, devModeEqual, enableApplyRootElementTransformImpl, enableClaimDehydratedIcuCaseImpl, enableFindMatchingDehydratedViewImpl, enableLocateOrCreateContainerAnchorImpl, enableLocateOrCreateContainerRefImpl, enableLocateOrCreateElementContainerNodeImpl, enableLocateOrCreateElementNodeImpl, enableLocateOrCreateI18nNodeImpl, enableLocateOrCreateTextNodeImpl, enablePrepareI18nBlockForHydrationImpl, enableProfiling, enableRetrieveDeferBlockDataImpl, enableRetrieveHydrationInfoImpl, enableStashEventListenerImpl, findLocaleData, flushModuleScopingQueueAsMuchAsPossible, gatherDeferBlocksCommentNodes, generateStandaloneInDeclarationsError, getAsyncClassMetadataFn, getCompilerFacade, getDebugNode, getDeferBlocks$1 as getDeferBlocks, getDirectives, getDocument, getHostElement, getLContext, getLDeferBlockDetails, getLNodeForHydration, getLocaleCurrencyCode, getLocalePluralCase, getNgZone, getNgZoneOptions, getOrComputeI18nChildren, getRegisteredNgModuleType, getSanitizationBypassType, getTDeferBlockDetails, getTransferState, inferTagNameFromDefinition, inputBinding, internalProvideZoneChangeDetection, invokeListeners, isBoundToModule, isComponentDefPendingResolution, isComponentResourceResolutionQueueEmpty, isDeferBlock, isDetachedByI18n, isDisconnectedNode, isI18nHydrationEnabled, isI18nHydrationSupportEnabled, isInSkipHydrationBlock, isIncrementalHydrationEnabled, isJsObject, isLetDeclaration, isListLikeIterable, isNgModule, isPromise, isSubscribable, isTNodeShape, isViewDirty, iterateListLike, makePropDecorator, makeStateKey, markForRefresh, noSideEffects, optionsReducer, outputBinding, patchComponentDefWithScope, performanceMarkFeature, processAndInitTriggers, processBlockData, processTextNodeBeforeSerialization, profiler, provideAppInitializer, provideNgReflectAttributes, provideZoneChangeDetection, provideZonelessChangeDetection, publishDefaultGlobalUtils, publishExternalGlobalUtil, publishSignalConfiguration, readHydrationInfo, readPatchedLView, registerLocaleData, registerNgModuleType, remove, removeListeners, renderDeferBlockState, resetCompiledComponents, resetJitOptions, resolveComponentResources, restoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest, setClassMetadata, setClassMetadataAsync, setDocument, setIsI18nHydrationSupportEnabled, setJSActionAttributes, setJitOptions, setLocaleId, setStashFn, setTestabilityGetter, sharedMapFunction, sharedStashFunction, transitiveScopesFor, triggerHydrationFromBlockName, triggerResourceLoading, trySerializeI18nBlock, twoWayBinding, unregisterAllLocaleData, unsupportedProjectionOfDomNodes, unwrapSafeValue, validateMatchingNode, validateNodeExists, verifySsrContentsIntegrity, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, ɵsetClassDebugInfo, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, ɵɵAnimationsFeature, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵanimateEnter, ɵɵanimateEnterListener, ɵɵanimateLeave, ɵɵanimateLeaveListener, ɵɵariaProperty, ɵɵattachSourceLocations, ɵɵattribute, ɵɵclassMap, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵconditionalBranchCreate, ɵɵconditionalCreate, ɵɵ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, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdomElement, ɵɵdomElementContainer, ɵɵdomElementContainerEnd, ɵɵdomElementContainerStart, ɵɵdomElementEnd, ɵɵdomElementStart, ɵɵdomListener, ɵɵdomProperty, ɵɵdomTemplate, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵgetReplaceMetadataURL, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinjectAttribute, ɵɵinterpolate, ɵɵinterpolate1, ɵɵinterpolate2, ɵɵinterpolate3, ɵɵinterpolate4, ɵɵinterpolate5, ɵɵinterpolate6, ɵɵinterpolate7, ɵɵinterpolate8, ɵɵinterpolateV, ɵɵinvalidFactory, ɵɵlistener, ɵɵloadQuery, ɵɵnextContext, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleProp, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
31739
+ export { AFTER_RENDER_PHASES, ANIMATIONS_DISABLED, ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AcxChangeDetectionStrategy, AcxViewEncapsulation, AfterRenderImpl, AfterRenderManager, AfterRenderSequence, ApplicationInitStatus, ApplicationRef, Attribute, COMPILER_OPTIONS, CONTAINERS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionSchedulerImpl, ChangeDetectionStrategy, Compiler, CompilerFactory, Component, ComponentFactory, ComponentFactory$1, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ComponentRef as ComponentRef$1, Console, DEFAULT_CURRENCY_CODE, DEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DEFER_BLOCK_ID, DEFER_BLOCK_SSR_ID_ATTRIBUTE, DEFER_BLOCK_STATE$1 as DEFER_BLOCK_STATE, DEFER_BLOCK_STATE as DEFER_BLOCK_STATE$1, DEFER_HYDRATE_TRIGGERS, DEFER_PARENT_BLOCK_ID, DEHYDRATED_BLOCK_REGISTRY, DISCONNECTED_NODES, DebugElement, DebugEventListener, DebugNode, DeferBlockBehavior, DeferBlockState, DehydratedBlockRegistry, Directive, ELEMENT_CONTAINERS, EVENT_REPLAY_ENABLED_DEFAULT, ElementRef, ElementRegistry, EnvironmentNgModuleRefAdapter, EventEmitter, Framework, Host, HostBinding, HostListener, HydrationStatus, I18N_DATA, IMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS, IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, IS_EVENT_REPLAY_ENABLED, IS_HYDRATION_DOM_REUSE_ENABLED, IS_I18N_HYDRATION_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED, Inject, Injectable, Input, JSACTION_BLOCK_ELEMENT_MAP, JSACTION_EVENT_CONTRACT, LContext, LOCALE_ID, LocaleDataIndex, MAX_ANIMATION_TIMEOUT, MULTIPLIER, MissingTranslationStrategy, ModuleWithComponentFactories, NGH_ATTR_NAME, NGH_DATA_KEY, NGH_DEFER_BLOCKS_KEY, NODES, NOOP_AFTER_RENDER_REF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE, NO_ERRORS_SCHEMA, NUM_ROOT_NODES, NgModule, NgModuleFactory, NgModuleFactory$1, NgModuleRef, NgModuleRef$1, NgProbeToken, NgZone, NoopNgZone, Optional, Output, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PRESERVE_HOST_CONTENT, PROVIDED_NG_ZONE, Pipe, QueryList, ReflectionCapabilities, Renderer2, RendererFactory2, RendererStyleFlags2, SKIP_HYDRATION_ATTR_NAME, SSR_CONTENT_INTEGRITY_MARKER, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TEMPLATES, TEMPLATE_ID, TESTABILITY, TESTABILITY_GETTER, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TimerScheduler, TracingAction, TracingService, TransferState, Type, UseExhaustiveCheckNoChanges, ViewContainerRef, ViewEncapsulation, ViewRef, _sanitizeHtml, _sanitizeUrl, afterEveryRender, afterNextRender, allowSanitizationBypassAndThrow, angularCoreEnv, appendDeferBlocksToJSActionMap, asNativeElements, assertComponentDef, assertStandaloneComponentType, bypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript, bypassSanitizationTrustStyle, bypassSanitizationTrustUrl, calcPathForNode, checkNoChangesInternal, cleanupDehydratedViews, clearResolutionOfComponentResourcesQueue, collectNativeNodes, collectNativeNodesInLContainer, compileComponent, compileDirective, compileNgModule, compileNgModuleDefs, compilePipe, convertHydrateTriggersToJsAction, countBlocksSkippedByHydration, createEnvironmentInjector, createMultiResultQuerySignalFn, createNgModule, createNgModuleRef, createNgModuleRefWithProviders, createSingleResultOptionalQuerySignalFn, createSingleResultRequiredQuerySignalFn, depsTracker, devModeEqual, enableApplyRootElementTransformImpl, enableClaimDehydratedIcuCaseImpl, enableFindMatchingDehydratedViewImpl, enableLocateOrCreateContainerAnchorImpl, enableLocateOrCreateContainerRefImpl, enableLocateOrCreateElementContainerNodeImpl, enableLocateOrCreateElementNodeImpl, enableLocateOrCreateI18nNodeImpl, enableLocateOrCreateTextNodeImpl, enablePrepareI18nBlockForHydrationImpl, enableProfiling, enableRetrieveDeferBlockDataImpl, enableRetrieveHydrationInfoImpl, enableStashEventListenerImpl, findLocaleData, flushModuleScopingQueueAsMuchAsPossible, gatherDeferBlocksCommentNodes, generateStandaloneInDeclarationsError, getAsyncClassMetadataFn, getCompilerFacade, getDebugNode, getDeferBlocks$1 as getDeferBlocks, getDirectives, getDocument, getHostElement, getLContext, getLDeferBlockDetails, getLNodeForHydration, getLocaleCurrencyCode, getLocalePluralCase, getNgZone, getNgZoneOptions, getOrComputeI18nChildren, getRegisteredNgModuleType, getSanitizationBypassType, getTDeferBlockDetails, getTransferState, inferTagNameFromDefinition, inputBinding, internalProvideZoneChangeDetection, invokeListeners, isBoundToModule, isComponentDefPendingResolution, isComponentResourceResolutionQueueEmpty, isDeferBlock, isDetachedByI18n, isDisconnectedNode, isI18nHydrationEnabled, isI18nHydrationSupportEnabled, isInSkipHydrationBlock, isIncrementalHydrationEnabled, isJsObject, isLetDeclaration, isListLikeIterable, isNgModule, isPromise, isSubscribable, isTNodeShape, isViewDirty, iterateListLike, makePropDecorator, makeStateKey, markForRefresh, noSideEffects, optionsReducer, outputBinding, patchComponentDefWithScope, performanceMarkFeature, processAndInitTriggers, processBlockData, processTextNodeBeforeSerialization, profiler, provideAppInitializer, provideNgReflectAttributes, provideZoneChangeDetection, provideZonelessChangeDetection, publishDefaultGlobalUtils, publishExternalGlobalUtil, publishSignalConfiguration, readHydrationInfo, readPatchedLView, registerLocaleData, registerNgModuleType, remove, removeListeners, renderDeferBlockState, resetCompiledComponents, resetJitOptions, resolveComponentResources, restoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest, setClassMetadata, setClassMetadataAsync, setDocument, setIsI18nHydrationSupportEnabled, setJSActionAttributes, setJitOptions, setLocaleId, setStashFn, setTestabilityGetter, sharedMapFunction, sharedStashFunction, transitiveScopesFor, triggerHydrationFromBlockName, triggerResourceLoading, trySerializeI18nBlock, twoWayBinding, unregisterAllLocaleData, unsupportedProjectionOfDomNodes, unwrapSafeValue, validateMatchingNode, validateNodeExists, verifySsrContentsIntegrity, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, ɵsetClassDebugInfo, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, ɵɵAnimationsFeature, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵanimateEnter, ɵɵanimateEnterListener, ɵɵanimateLeave, ɵɵanimateLeaveListener, ɵɵariaProperty, ɵɵattachSourceLocations, ɵɵattribute, ɵɵclassMap, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵconditionalBranchCreate, ɵɵconditionalCreate, ɵɵ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, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdomElement, ɵɵdomElementContainer, ɵɵdomElementContainerEnd, ɵɵdomElementContainerStart, ɵɵdomElementEnd, ɵɵdomElementStart, ɵɵdomListener, ɵɵdomProperty, ɵɵdomTemplate, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵgetReplaceMetadataURL, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinjectAttribute, ɵɵinterpolate, ɵɵinterpolate1, ɵɵinterpolate2, ɵɵinterpolate3, ɵɵinterpolate4, ɵɵinterpolate5, ɵɵinterpolate6, ɵɵinterpolate7, ɵɵinterpolate8, ɵɵinterpolateV, ɵɵinvalidFactory, ɵɵlistener, ɵɵloadQuery, ɵɵnextContext, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleProp, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
31627
31740
  //# sourceMappingURL=debug_node.mjs.map