@angular/core 20.3.1 → 20.3.3

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 (70) hide show
  1. package/api.d.d.ts +7 -4
  2. package/chrome_dev_tools_performance.d.d.ts +2 -2
  3. package/discovery.d.d.ts +7 -6
  4. package/effect.d.d.ts +2 -3
  5. package/event_dispatcher.d.d.ts +1 -1
  6. package/fesm2022/attribute.mjs +1 -1
  7. package/fesm2022/attribute.mjs.map +1 -1
  8. package/fesm2022/core.mjs +4 -4
  9. package/fesm2022/core.mjs.map +1 -1
  10. package/fesm2022/debug_node.mjs +31 -42
  11. package/fesm2022/debug_node.mjs.map +1 -1
  12. package/fesm2022/effect.mjs +3 -4
  13. package/fesm2022/effect.mjs.map +1 -1
  14. package/fesm2022/not_found.mjs +1 -1
  15. package/fesm2022/not_found.mjs.map +1 -1
  16. package/fesm2022/primitives/di.mjs +1 -1
  17. package/fesm2022/primitives/di.mjs.map +1 -1
  18. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  19. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  20. package/fesm2022/primitives/signals.mjs +138 -6
  21. package/fesm2022/primitives/signals.mjs.map +1 -1
  22. package/fesm2022/resource.mjs +5 -4
  23. package/fesm2022/resource.mjs.map +1 -1
  24. package/fesm2022/root_effect_scheduler.mjs +2 -2
  25. package/fesm2022/root_effect_scheduler.mjs.map +1 -1
  26. package/fesm2022/rxjs-interop.mjs +1 -1
  27. package/fesm2022/rxjs-interop.mjs.map +1 -1
  28. package/fesm2022/signal.mjs +8 -8
  29. package/fesm2022/signal.mjs.map +1 -1
  30. package/fesm2022/testing.mjs +1 -1
  31. package/fesm2022/testing.mjs.map +1 -1
  32. package/fesm2022/weak_ref.mjs +1 -1
  33. package/fesm2022/weak_ref.mjs.map +1 -1
  34. package/{graph.d.d.ts → formatter.d.d.ts} +14 -2
  35. package/index.d.ts +10 -8
  36. package/package.json +2 -2
  37. package/primitives/di/index.d.ts +1 -1
  38. package/primitives/event-dispatch/index.d.ts +1 -1
  39. package/primitives/signals/index.d.ts +3 -4
  40. package/rxjs-interop/index.d.ts +2 -2
  41. package/schematics/bundles/add-bootstrap-context-to-server-main.cjs +5 -5
  42. package/schematics/bundles/{apply_import_manager-C8vgfoJx.cjs → apply_import_manager-CUBvPp_2.cjs} +3 -3
  43. package/schematics/bundles/cleanup-unused-imports.cjs +5 -5
  44. package/schematics/bundles/{compiler_host-DC7Yquzy.cjs → compiler_host-DJHZ7M9N.cjs} +2 -2
  45. package/schematics/bundles/control-flow-migration.cjs +70 -38
  46. package/schematics/bundles/document-core.cjs +5 -5
  47. package/schematics/bundles/imports-CIX-JgAN.cjs +1 -1
  48. package/schematics/bundles/{index-B5lv9x1v.cjs → index-BZJ8bv9v.cjs} +50 -26
  49. package/schematics/bundles/{index-Bufm9_1r.cjs → index-DU_evmAi.cjs} +4 -4
  50. package/schematics/bundles/inject-flags.cjs +5 -5
  51. package/schematics/bundles/inject-migration.cjs +3 -3
  52. package/schematics/bundles/leading_space-D9nQ8UQC.cjs +1 -1
  53. package/schematics/bundles/{migrate_ts_type_references-Ctl6-8qO.cjs → migrate_ts_type_references-58gA72Ti.cjs} +5 -5
  54. package/schematics/bundles/ng_decorators-B5HCqr20.cjs +1 -1
  55. package/schematics/bundles/nodes-B16H9JUd.cjs +1 -1
  56. package/schematics/bundles/output-migration.cjs +6 -6
  57. package/schematics/bundles/{project_paths-CIUSEdn4.cjs → project_paths-DcM18127.cjs} +3 -3
  58. package/schematics/bundles/{project_tsconfig_paths-crm5NKE7.cjs → project_tsconfig_paths-Dqd0J7st.cjs} +50 -42
  59. package/schematics/bundles/property_name-BBwFuqMe.cjs +1 -1
  60. package/schematics/bundles/route-lazy-loading.cjs +3 -3
  61. package/schematics/bundles/router-current-navigation.cjs +4 -4
  62. package/schematics/bundles/self-closing-tags-migration.cjs +4 -4
  63. package/schematics/bundles/signal-input-migration.cjs +67 -8
  64. package/schematics/bundles/signal-queries-migration.cjs +7 -7
  65. package/schematics/bundles/signals.cjs +7 -7
  66. package/schematics/bundles/standalone-migration.cjs +70 -43
  67. package/schematics/bundles/symbol-VPWguRxr.cjs +1 -1
  68. package/schematics/bundles/test-bed-get.cjs +4 -4
  69. package/testing/index.d.ts +2 -2
  70. package/weak_ref.d.d.ts +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v20.3.1
2
+ * @license Angular v20.3.3
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -6804,9 +6804,11 @@ function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove)
6804
6804
  * @param renderer A renderer to be used
6805
6805
  * @param rNode The native node that should be removed
6806
6806
  * @param isHostElement A flag indicating if a node to be removed is a host of a component.
6807
+ * @param requireSynchronousElementRemoval A flag indicating if a node requires synchronous
6808
+ * removal from the DOM.
6807
6809
  */
6808
- function nativeRemoveNode(renderer, rNode, isHostElement) {
6809
- renderer.removeChild(null, rNode, isHostElement);
6810
+ function nativeRemoveNode(renderer, rNode, isHostElement, requireSynchronousElementRemoval) {
6811
+ renderer.removeChild(null, rNode, isHostElement, requireSynchronousElementRemoval);
6810
6812
  }
6811
6813
  /**
6812
6814
  * Clears the contents of a given RElement.
@@ -7357,8 +7359,11 @@ function applyToElementOrContainer(action, renderer, parent, lNodeToHandle, befo
7357
7359
  nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);
7358
7360
  }
7359
7361
  else if (action === 2 /* WalkTNodeTreeAction.Detach */) {
7360
- runLeaveAnimationsWithCallback(parentLView, () => {
7361
- nativeRemoveNode(renderer, rNode, isComponent);
7362
+ runLeaveAnimationsWithCallback(parentLView, (nodeHasLeaveAnimations) => {
7363
+ // the nodeHasLeaveAnimations indicates to the renderer that the element needs to
7364
+ // be removed synchronously and sets the requireSynchronousElementRemoval flag in
7365
+ // the renderer.
7366
+ nativeRemoveNode(renderer, rNode, isComponent, nodeHasLeaveAnimations);
7362
7367
  });
7363
7368
  }
7364
7369
  else if (action === 3 /* WalkTNodeTreeAction.Destroy */) {
@@ -7569,11 +7574,11 @@ function runAfterLeaveAnimations(lView, callback) {
7569
7574
  lView[ANIMATIONS].running = undefined;
7570
7575
  }
7571
7576
  allLeavingAnimations.delete(lView);
7572
- callback();
7577
+ callback(true);
7573
7578
  });
7574
7579
  return;
7575
7580
  }
7576
- callback();
7581
+ callback(false);
7577
7582
  }
7578
7583
  /** Removes listeners and unsubscribes from output subscriptions */
7579
7584
  function processCleanups(tView, lView) {
@@ -13650,13 +13655,8 @@ class ComponentFactory extends ComponentFactory$1 {
13650
13655
  try {
13651
13656
  const hostTNode = directiveHostFirstCreatePass(HEADER_OFFSET, rootLView, 2 /* TNodeType.Element */, '#host', () => rootTView.directiveRegistry, true, 0);
13652
13657
  // ---- element instruction
13653
- // TODO(crisbeto): in practice `hostElement` should always be defined, but there are some
13654
- // tests where the renderer is mocked out and `undefined` is returned. We should update the
13655
- // tests so that this check can be removed.
13656
- if (hostElement) {
13657
- setupStaticAttributes(hostRenderer, hostElement, hostTNode);
13658
- attachPatchData(hostElement, rootLView);
13659
- }
13658
+ setupStaticAttributes(hostRenderer, hostElement, hostTNode);
13659
+ attachPatchData(hostElement, rootLView);
13660
13660
  // TODO(pk): this logic is similar to the instruction code where a node can have directives
13661
13661
  createDirectivesInstances(rootTView, rootLView, hostTNode);
13662
13662
  executeContentQueries(rootTView, hostTNode, rootLView);
@@ -13691,7 +13691,7 @@ class ComponentFactory extends ComponentFactory$1 {
13691
13691
  }
13692
13692
  function createRootTView(rootSelectorOrNode, componentDef, componentBindings, directives) {
13693
13693
  const tAttributes = rootSelectorOrNode
13694
- ? ['ng-version', '20.3.1']
13694
+ ? ['ng-version', '20.3.3']
13695
13695
  : // Extract attributes and classes from the first selector only to match VE behavior.
13696
13696
  extractAttrsAndClassesFromSelector(componentDef.selectors[0]);
13697
13697
  let creationBindings = null;
@@ -21405,7 +21405,6 @@ function ɵɵdeferPrefetchWhen(rawValue) {
21405
21405
  try {
21406
21406
  const value = Boolean(rawValue); // handle truthy or falsy values
21407
21407
  const tView = lView[TVIEW];
21408
- const tNode = getSelectedTNode();
21409
21408
  const tDetails = getTDeferBlockDetails(tView, tNode);
21410
21409
  if (value === true && tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
21411
21410
  // If loading has not been started yet, trigger it now.
@@ -21831,14 +21830,13 @@ function ɵɵdeferHydrateOnViewport() {
21831
21830
  // since these instructions won't exist for dehydrated content.
21832
21831
  }
21833
21832
 
21834
- const ARIA_PREFIX = 'aria';
21835
21833
  /**
21836
- * Update an ARIA attribute by either its attribute or property name on a selected element.
21834
+ * Update an ARIA attribute on a selected element.
21837
21835
  *
21838
- * If the property name also exists as an input property on any of the element's directives, those
21839
- * inputs will be set instead of the element property.
21836
+ * If the attribute name also exists as an input property on any of the element's directives, those
21837
+ * inputs will be set instead of the element attribute.
21840
21838
  *
21841
- * @param name Name of the ARIA attribute or property (beginning with `aria`).
21839
+ * @param name Name of the ARIA attribute (beginning with `aria-`).
21842
21840
  * @param value New value to write.
21843
21841
  * @returns This function returns itself so that it may be chained.
21844
21842
  *
@@ -21858,31 +21856,12 @@ function ɵɵariaProperty(name, value) {
21858
21856
  else {
21859
21857
  ngDevMode && assertTNodeType(tNode, 2 /* TNodeType.Element */);
21860
21858
  const element = getNativeByTNode(tNode, lView);
21861
- const attributeName = ariaAttrName(name);
21862
- setElementAttribute(lView[RENDERER], element, null, tNode.value, attributeName, value, null);
21859
+ setElementAttribute(lView[RENDERER], element, null, tNode.value, name, value, null);
21863
21860
  }
21864
21861
  ngDevMode && storePropertyBindingMetadata(tView.data, tNode, name, bindingIndex);
21865
21862
  }
21866
21863
  return ɵɵariaProperty;
21867
21864
  }
21868
- /**
21869
- * Converts an ARIA property name to its corresponding attribute name, if necessary.
21870
- *
21871
- * For example, converts `ariaLabel` to `aria-label`.
21872
- *
21873
- * https://www.w3.org/TR/wai-aria-1.2/#accessibilityroleandproperties-correspondence
21874
- *
21875
- * This must be kept in sync with the the function of the same name in
21876
- * packages/compiler/src/template/pipeline/src/phases/reify.ts
21877
- *
21878
- * @param name A property name that starts with `aria`.
21879
- * @returns The corresponding attribute name.
21880
- */
21881
- function ariaAttrName(name) {
21882
- return name.charAt(ARIA_PREFIX.length) !== '-'
21883
- ? ARIA_PREFIX + '-' + name.slice(ARIA_PREFIX.length).toLowerCase()
21884
- : name; // Property already has attribute name.
21885
- }
21886
21865
 
21887
21866
  /**
21888
21867
  * Updates the value of or removes a bound attribute on an Element.
@@ -22166,6 +22145,9 @@ function runEnterAnimation(lView, tNode, value) {
22166
22145
  // This also allows us to setup cancellation of animations in progress if the
22167
22146
  // gets removed early.
22168
22147
  const handleEnterAnimationStart = (event) => {
22148
+ // this early exit case is to prevent issues with bubbling events that are from child element animations
22149
+ if (event.target !== nativeElement)
22150
+ return;
22169
22151
  const eventName = event instanceof AnimationEvent ? 'animationend' : 'transitionend';
22170
22152
  ngZone.runOutsideAngular(() => {
22171
22153
  cleanupFns.push(renderer.listen(nativeElement, eventName, handleEnterAnimationEnd));
@@ -22173,6 +22155,9 @@ function runEnterAnimation(lView, tNode, value) {
22173
22155
  };
22174
22156
  // When the longest animation ends, we can remove all the classes
22175
22157
  const handleEnterAnimationEnd = (event) => {
22158
+ // this early exit case is to prevent issues with bubbling events that are from child element animations
22159
+ if (event.target !== nativeElement)
22160
+ return;
22176
22161
  enterAnimationEnd(event, nativeElement, renderer);
22177
22162
  };
22178
22163
  // We only need to add these event listeners if there are actual classes to apply
@@ -22203,7 +22188,8 @@ function runEnterAnimation(lView, tNode, value) {
22203
22188
  }
22204
22189
  function enterAnimationEnd(event, nativeElement, renderer) {
22205
22190
  const elementData = enterClassMap.get(nativeElement);
22206
- if (!elementData)
22191
+ // this event.target check is to prevent issues with bubbling events that are from child element animations
22192
+ if (event.target !== nativeElement || !elementData)
22207
22193
  return;
22208
22194
  if (isLongestAnimation(event, nativeElement)) {
22209
22195
  // Now that we've found the longest animation, there's no need
@@ -22302,6 +22288,9 @@ function animateLeaveClassRunner(el, tNode, classList, renderer, animationsDisab
22302
22288
  }
22303
22289
  cancelAnimationsIfRunning(el, renderer);
22304
22290
  const handleOutAnimationEnd = (event) => {
22291
+ // this early exit case is to prevent issues with bubbling events that are from child element animations
22292
+ if (event.target !== el)
22293
+ return;
22305
22294
  if (event instanceof CustomEvent || isLongestAnimation(event, el)) {
22306
22295
  // Now that we've found the longest animation, there's no need
22307
22296
  // to keep bubbling up this event as it's not going to apply to