@angular/core 21.0.0 → 21.0.2

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 (76) hide show
  1. package/fesm2022/_attribute-chunk.mjs +1 -1
  2. package/fesm2022/_attribute-chunk.mjs.map +1 -1
  3. package/fesm2022/_debug_node-chunk.mjs +469 -367
  4. package/fesm2022/_debug_node-chunk.mjs.map +1 -1
  5. package/fesm2022/_effect-chunk.mjs +1 -1
  6. package/fesm2022/_effect-chunk.mjs.map +1 -1
  7. package/fesm2022/_linked_signal-chunk.mjs +1 -1
  8. package/fesm2022/_linked_signal-chunk.mjs.map +1 -1
  9. package/fesm2022/_not_found-chunk.mjs +1 -1
  10. package/fesm2022/_not_found-chunk.mjs.map +1 -1
  11. package/fesm2022/_resource-chunk.mjs +33 -19
  12. package/fesm2022/_resource-chunk.mjs.map +1 -1
  13. package/fesm2022/_untracked-chunk.mjs +14 -6
  14. package/fesm2022/_untracked-chunk.mjs.map +1 -1
  15. package/fesm2022/_weak_ref-chunk.mjs +1 -1
  16. package/fesm2022/_weak_ref-chunk.mjs.map +1 -1
  17. package/fesm2022/core.mjs +27 -16
  18. package/fesm2022/core.mjs.map +1 -1
  19. package/fesm2022/primitives-di.mjs +1 -1
  20. package/fesm2022/primitives-di.mjs.map +1 -1
  21. package/fesm2022/primitives-event-dispatch.mjs +1 -1
  22. package/fesm2022/primitives-event-dispatch.mjs.map +1 -1
  23. package/fesm2022/primitives-signals.mjs +3 -3
  24. package/fesm2022/primitives-signals.mjs.map +1 -1
  25. package/fesm2022/rxjs-interop.mjs +12 -4
  26. package/fesm2022/rxjs-interop.mjs.map +1 -1
  27. package/fesm2022/testing.mjs +1 -1
  28. package/fesm2022/testing.mjs.map +1 -1
  29. package/package.json +3 -3
  30. package/resources/best-practices.md +0 -1
  31. package/schematics/bundles/add-bootstrap-context-to-server-main.cjs +1 -1
  32. package/schematics/bundles/application-config-core.cjs +1 -1
  33. package/schematics/bundles/apply_import_manager-1Zs_gpB6.cjs +1 -1
  34. package/schematics/bundles/bootstrap-options-migration.cjs +53 -7
  35. package/schematics/bundles/cleanup-unused-imports.cjs +1 -1
  36. package/schematics/bundles/common-to-standalone-migration.cjs +5 -3
  37. package/schematics/bundles/compiler_host-DBwYMlTo.cjs +1 -1
  38. package/schematics/bundles/control-flow-migration.cjs +1 -1
  39. package/schematics/bundles/imports-DP72APSx.cjs +1 -1
  40. package/schematics/bundles/index-B7I9sIUx.cjs +1 -1
  41. package/schematics/bundles/inject-migration.cjs +1 -1
  42. package/schematics/bundles/leading_space-D9nQ8UQC.cjs +1 -1
  43. package/schematics/bundles/migrate_ts_type_references-UGIUl7En.cjs +1 -1
  44. package/schematics/bundles/ng_component_template-Dsuq1Lw7.cjs +1 -1
  45. package/schematics/bundles/ng_decorators-DSFlWYQY.cjs +1 -1
  46. package/schematics/bundles/ngclass-to-class-migration.cjs +1 -1
  47. package/schematics/bundles/ngstyle-to-style-migration.cjs +1 -1
  48. package/schematics/bundles/nodes-B16H9JUd.cjs +1 -1
  49. package/schematics/bundles/output-migration.cjs +1 -1
  50. package/schematics/bundles/parse_html-8VLCL37B.cjs +1 -1
  51. package/schematics/bundles/project_paths-DvD50ouC.cjs +1 -1
  52. package/schematics/bundles/project_tsconfig_paths-CDVxT6Ov.cjs +1 -1
  53. package/schematics/bundles/property_name-BBwFuqMe.cjs +1 -1
  54. package/schematics/bundles/route-lazy-loading.cjs +1 -1
  55. package/schematics/bundles/router-current-navigation.cjs +1 -1
  56. package/schematics/bundles/router-last-successful-navigation.cjs +1 -1
  57. package/schematics/bundles/router-testing-module-migration.cjs +1 -1
  58. package/schematics/bundles/self-closing-tags-migration.cjs +1 -1
  59. package/schematics/bundles/signal-input-migration.cjs +1 -1
  60. package/schematics/bundles/signal-queries-migration.cjs +1 -1
  61. package/schematics/bundles/signals.cjs +1 -1
  62. package/schematics/bundles/standalone-migration.cjs +1 -1
  63. package/schematics/bundles/symbol-BObKoqes.cjs +1 -1
  64. package/types/_api-chunk.d.ts +7 -2
  65. package/types/_chrome_dev_tools_performance-chunk.d.ts +9 -1
  66. package/types/_discovery-chunk.d.ts +28 -21
  67. package/types/_effect-chunk.d.ts +1 -1
  68. package/types/_event_dispatcher-chunk.d.ts +1 -1
  69. package/types/_formatter-chunk.d.ts +1 -1
  70. package/types/_weak_ref-chunk.d.ts +1 -1
  71. package/types/core.d.ts +158 -147
  72. package/types/primitives-di.d.ts +1 -1
  73. package/types/primitives-event-dispatch.d.ts +1 -1
  74. package/types/primitives-signals.d.ts +1 -1
  75. package/types/rxjs-interop.d.ts +5 -1
  76. package/types/testing.d.ts +13 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/core",
3
- "version": "21.0.0",
3
+ "version": "21.0.2",
4
4
  "description": "Angular - the core framework",
5
5
  "author": "angular",
6
6
  "license": "MIT",
@@ -46,9 +46,9 @@
46
46
  "tslib": "^2.3.0"
47
47
  },
48
48
  "peerDependencies": {
49
- "@angular/compiler": "21.0.0",
49
+ "@angular/compiler": "21.0.2",
50
50
  "rxjs": "^6.5.3 || ^7.4.0",
51
- "zone.js": "~0.15.0"
51
+ "zone.js": "~0.15.0 || ~0.16.0"
52
52
  },
53
53
  "peerDependenciesMeta": {
54
54
  "@angular/compiler": {
@@ -47,7 +47,6 @@ You are an expert in TypeScript, Angular, and scalable web application developme
47
47
  - Use the async pipe to handle observables
48
48
  - Do not assume globals like (`new Date()`) are available.
49
49
  - Do not write arrow functions in templates (they are not supported).
50
- - Do not write Regular expressions in templates (they are not supported).
51
50
 
52
51
  ## Services
53
52
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -118,13 +118,11 @@ class BootstrapOptionsMigration extends project_paths.TsurgeFunnelMigration {
118
118
  optionLiteral = optionsNode;
119
119
  addProvidersToBootstrapOption(optionProjectFile, optionLiteral, providerFn, replacements);
120
120
  }
121
+ else if (this.isServerConfigZoneless(optionsNode, typeChecker)) {
122
+ // Nothing to migrate for the SSR bootstrap
123
+ return;
124
+ }
121
125
  else if (ts.isIdentifier(optionsNode)) {
122
- // This case handled both `bootstrapApplication(App, appConfig)` and the server () => bootstrapApplication(App, appConfig)
123
- // where appConfig is the result of a `mergeApplicationConfig` call.
124
- // This is tricky case to handle, in G3 we're might not be able to resolve the identifier's value
125
- // Our best alternative is to assume there is not CD providers set and add the ZoneChangeDetection provider
126
- // In the cases where it is, we'll just override the zone provider we just set by re-used inthe appConfig providers
127
- // TODO: Should we insert a TODO to clean this up ?
128
126
  const text = `{...${optionsNode.getText()}, providers: [${providerFn}, ...${optionsNode.getText()}.providers]}`;
129
127
  replacements.push(new project_paths.Replacement(currentProjectFile, new project_paths.TextUpdate({
130
128
  position: optionsNode.getStart(),
@@ -148,6 +146,53 @@ class BootstrapOptionsMigration extends project_paths.TsurgeFunnelMigration {
148
146
  requestedFile: sourceFile,
149
147
  });
150
148
  }
149
+ /**
150
+ * The optionsNode can be a appConfig built with mergeApplicationConfig
151
+ * In this case we need to analyze if the base config uses provideZonelessChangeDetection
152
+ */
153
+ isServerConfigZoneless(optionsNode, typeChecker) {
154
+ // Check if optionsNode is a result of mergeApplicationConfig
155
+ let symbol = typeChecker.getSymbolAtLocation(optionsNode);
156
+ if (symbol && (symbol.flags & ts.SymbolFlags.Alias) !== 0) {
157
+ symbol = typeChecker.getAliasedSymbol(symbol);
158
+ }
159
+ const optionDeclaration = symbol?.getDeclarations()?.[0];
160
+ if (!optionDeclaration) {
161
+ return false;
162
+ }
163
+ if (!ts.isVariableDeclaration(optionDeclaration) ||
164
+ !optionDeclaration.initializer ||
165
+ !ts.isCallExpression(optionDeclaration.initializer) ||
166
+ !ts.isIdentifier(optionDeclaration.initializer.expression) ||
167
+ optionDeclaration.initializer.expression.text !== 'mergeApplicationConfig') {
168
+ // We didn't find a mergeApplicationConfig call, this isn't a server config
169
+ return false;
170
+ }
171
+ let maybeAppConfig = optionDeclaration.initializer.arguments[0];
172
+ if (ts.isIdentifier(maybeAppConfig)) {
173
+ const resolved = getObjectLiteralFromIdentifier(maybeAppConfig, typeChecker);
174
+ if (resolved) {
175
+ maybeAppConfig = resolved;
176
+ }
177
+ }
178
+ if (maybeAppConfig && ts.isObjectLiteralExpression(maybeAppConfig)) {
179
+ for (const prop of maybeAppConfig.properties) {
180
+ if (ts.isPropertyAssignment(prop) &&
181
+ ts.isIdentifier(prop.name) &&
182
+ prop.name.text === 'providers' &&
183
+ ts.isArrayLiteralExpression(prop.initializer)) {
184
+ for (const el of prop.initializer.elements) {
185
+ if (ts.isCallExpression(el) &&
186
+ ts.isIdentifier(el.expression) &&
187
+ el.expression.text === 'provideZonelessChangeDetection') {
188
+ return true;
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+ return false;
195
+ }
151
196
  analyzeCreateApplication(node, sourceFile, info, typeChecker, importManager, replacements) {
152
197
  const hasExistingChangeDetectionProvider = hasChangeDetectionProvider(node, typeChecker);
153
198
  if (hasExistingChangeDetectionProvider)
@@ -533,6 +578,7 @@ function getSpecifiers(sourceFile) {
533
578
  if (!createApplicationSpecifier &&
534
579
  !bootstrapAppSpecifier &&
535
580
  !platformBrowserSpecifier &&
581
+ !platformBrowserDynamicSpecifier &&
536
582
  !testBedSpecifier &&
537
583
  !ngModuleSpecifier &&
538
584
  !getTestBedSpecifier) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -39,8 +39,10 @@ const PATTERN_IMPORTS = [
39
39
  { pattern: /\[ngStyle\]/g, imports: ['NgStyle'] },
40
40
  // Match ngSwitch as property binding [ngSwitch] or attribute ngSwitch="value"
41
41
  { pattern: /(\[ngSwitch\]|\s+ngSwitch\s*=)/g, imports: ['NgSwitch'] },
42
- { pattern: /\[ngTemplateOutlet\]/g, imports: ['NgTemplateOutlet'] },
43
- { pattern: /\[ngComponentOutlet\]/g, imports: ['NgComponentOutlet'] },
42
+ // Match ngTemplateOutlet as structural (*ngTemplateOutlet) or property binding [ngTemplateOutlet]
43
+ { pattern: /(\*ngTemplateOutlet\b|\[ngTemplateOutlet\])/g, imports: ['NgTemplateOutlet'] },
44
+ // Match ngComponentOutlet as structural (*ngComponentOutlet) or property binding [ngComponentOutlet]
45
+ { pattern: /(\*ngComponentOutlet\b|\[ngComponentOutlet\])/g, imports: ['NgComponentOutlet'] },
44
46
  // Common pipes
45
47
  { pattern: /\|\s*async\b/g, imports: ['AsyncPipe'] },
46
48
  { pattern: /\|\s*json\b/g, imports: ['JsonPipe'] },
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0
3
+ * @license Angular v21.0.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.0.0
2
+ * @license Angular v21.0.2
3
3
  * (c) 2010-2025 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -278,7 +278,12 @@ interface StreamingResourceOptions<T, R> extends BaseResourceOptions<T, R> {
278
278
  /**
279
279
  * @experimental
280
280
  */
281
- type ResourceOptions<T, R> = PromiseResourceOptions<T, R> | StreamingResourceOptions<T, R>;
281
+ type ResourceOptions<T, R> = (PromiseResourceOptions<T, R> | StreamingResourceOptions<T, R>) & {
282
+ /**
283
+ * A debug name for the reactive node. Used in Angular DevTools to identify the node.
284
+ */
285
+ debugName?: string;
286
+ };
282
287
  /**
283
288
  * @experimental
284
289
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.0.0
2
+ * @license Angular v21.0.2
3
3
  * (c) 2010-2025 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -66,6 +66,8 @@ declare function signal<T>(initialValue: T, options?: CreateSignalOptions<T>): W
66
66
  *
67
67
  * Ordinary values can be turned into `Signal`s with the `signal` function.
68
68
  *
69
+ * @see [What are signals?](guide/signals#what-are-signals)
70
+ *
69
71
  * @publicApi 17.0
70
72
  */
71
73
  type Signal<T> = (() => T) & {
@@ -74,18 +76,24 @@ type Signal<T> = (() => T) & {
74
76
  /**
75
77
  * Checks if the given `value` is a reactive `Signal`.
76
78
  *
79
+ * @see [Type checking signals](guide/signals#type-checking-signals)
80
+ *
77
81
  * @publicApi 17.0
78
82
  */
79
83
  declare function isSignal(value: unknown): value is Signal<unknown>;
80
84
  /**
81
85
  * A comparison function which can determine if two values are equal.
82
86
  *
87
+ * @see [Signal equality functions](guide/signals#signal-equality-functions)
88
+ *
83
89
  * @publicApi 17.0
84
90
  */
85
91
  type ValueEqualityFn<T> = (a: T, b: T) => boolean;
86
92
  /**
87
93
  * Checks if the given `value` is a writeable signal.
88
94
  *
95
+ * @see [Type checking signals](guide/signals#type-checking-signals)
96
+ *
89
97
  * @publicApi 21.1
90
98
  */
91
99
  declare function isWritableSignal(value: unknown): value is WritableSignal<unknown>;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.0.0
2
+ * @license Angular v21.0.2
3
3
  * (c) 2010-2025 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1165,49 +1165,42 @@ declare const enum TNodeFlags {
1165
1165
  */
1166
1166
  isInControlFlow = 512,
1167
1167
  /**
1168
- * Bit #11 - This bit is set if the node represents a form control.
1169
- *
1170
- * True when the node has an input binding to a `ɵControl` directive (but not also to a custom
1171
- * component).
1172
- */
1173
- isFormControl = 1024,
1174
- /**
1175
- * Bit #12 - This bit is set if the node hosts a custom control component.
1168
+ * Bit #11 - This bit is set if the node hosts a custom control component.
1176
1169
  *
1177
1170
  * A custom control component's model property is named `value`.
1178
1171
  */
1179
- isFormValueControl = 2048,
1172
+ isFormValueControl = 1024,
1180
1173
  /**
1181
- * Bit #13 - This bit is set if the node hosts a custom checkbox component.
1174
+ * Bit #12 - This bit is set if the node hosts a custom checkbox component.
1182
1175
  *
1183
1176
  * A custom checkbox component's model property is named `checked`.
1184
1177
  */
1185
- isFormCheckboxControl = 4096,
1178
+ isFormCheckboxControl = 2048,
1186
1179
  /**
1187
- * Bit #14 - This bit is set if the node hosts an interoperable control implementation.
1180
+ * Bit #13 - This bit is set if the node hosts an interoperable control implementation.
1188
1181
  *
1189
1182
  * This is used to bind to a `ControlValueAccessor` from `@angular/forms`.
1190
1183
  */
1191
- isInteropControl = 8192,
1184
+ isInteropControl = 4096,
1192
1185
  /**
1193
- * Bit #15 - This bit is set if the node is a native control.
1186
+ * Bit #14 - This bit is set if the node is a native control.
1194
1187
  *
1195
1188
  * This is used to determine whether we can bind common control properties to the host element of
1196
1189
  * a custom control when it doesn't define a corresponding input.
1197
1190
  */
1198
- isNativeControl = 16384,
1191
+ isNativeControl = 8192,
1199
1192
  /**
1200
- * Bit #16 - This bit is set if the node is a native control with a numeric type.
1193
+ * Bit #15 - This bit is set if the node is a native control with a numeric type.
1201
1194
  *
1202
1195
  * This is used to determine whether the control supports the `min` and `max` properties.
1203
1196
  */
1204
- isNativeNumericControl = 32768,
1197
+ isNativeNumericControl = 16384,
1205
1198
  /**
1206
- * Bit #17 - This bit is set if the node is a native text control.
1199
+ * Bit #16 - This bit is set if the node is a native text control.
1207
1200
  *
1208
1201
  * This is used to determine whether control supports the `minLength` and `maxLength` properties.
1209
1202
  */
1210
- isNativeTextControl = 65536
1203
+ isNativeTextControl = 32768
1211
1204
  }
1212
1205
  /**
1213
1206
  * Corresponds to the TNode.providerIndexes property.
@@ -1354,6 +1347,16 @@ interface TNode {
1354
1347
  * `directiveStart + componentOffset`.
1355
1348
  */
1356
1349
  componentOffset: number;
1350
+ /**
1351
+ * Index at which the signal forms field directive is stored.
1352
+ * Value is set to -1 if there are no field directives.
1353
+ */
1354
+ fieldIndex: number;
1355
+ /**
1356
+ * Index at which the custom control directive is stored.
1357
+ * Value is set to -1 if there is no custom control directive.
1358
+ */
1359
+ customControlIndex: number;
1357
1360
  /**
1358
1361
  * Stores the last directive which had a styling instruction.
1359
1362
  *
@@ -2987,6 +2990,8 @@ declare enum SecurityContext {
2987
2990
  /**
2988
2991
  * Sanitizer is used by the views to sanitize potentially dangerous values.
2989
2992
  *
2993
+ * @see [Sanitization and security contexts](best-practices/security#sanitization-and-security-contexts)
2994
+ *
2990
2995
  * @publicApi
2991
2996
  */
2992
2997
  declare abstract class Sanitizer {
@@ -3236,7 +3241,7 @@ interface EffectNode extends BaseEffectNode, SchedulableEffect {
3236
3241
  cleanupFns: EffectCleanupFn[] | undefined;
3237
3242
  injector: Injector;
3238
3243
  notifier: ChangeDetectionScheduler;
3239
- onDestroyFn: () => void;
3244
+ onDestroyFns: (() => void)[] | null;
3240
3245
  }
3241
3246
  interface ViewEffectNode extends EffectNode {
3242
3247
  view: LView;
@@ -6067,6 +6072,8 @@ declare abstract class EmbeddedViewRef<C> extends ViewRef {
6067
6072
  * Provides access to the component instance and related objects,
6068
6073
  * and provides the means of destroying the instance.
6069
6074
  *
6075
+ * @see [Programmatically rendering components](guide/components/programmatic-rendering)
6076
+ *
6070
6077
  * @publicApi
6071
6078
  */
6072
6079
  declare abstract class ComponentRef<C> {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.0.0
2
+ * @license Angular v21.0.2
3
3
  * (c) 2010-2025 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.0.0
2
+ * @license Angular v21.0.2
3
3
  * (c) 2010-2025 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.0.0
2
+ * @license Angular v21.0.2
3
3
  * (c) 2010-2025 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.0.0
2
+ * @license Angular v21.0.2
3
3
  * (c) 2010-2025 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */