@angular/forms 22.0.0-next.3 → 22.0.0-next.5

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/forms",
3
- "version": "22.0.0-next.3",
3
+ "version": "22.0.0-next.5",
4
4
  "description": "Angular - directives and services for creating forms",
5
5
  "author": "angular",
6
6
  "license": "MIT",
@@ -12,9 +12,9 @@
12
12
  "@standard-schema/spec": "^1.0.0"
13
13
  },
14
14
  "peerDependencies": {
15
- "@angular/core": "22.0.0-next.3",
16
- "@angular/common": "22.0.0-next.3",
17
- "@angular/platform-browser": "22.0.0-next.3",
15
+ "@angular/core": "22.0.0-next.5",
16
+ "@angular/common": "22.0.0-next.5",
17
+ "@angular/platform-browser": "22.0.0-next.5",
18
18
  "rxjs": "^6.5.3 || ^7.4.0"
19
19
  },
20
20
  "repository": {
Binary file
@@ -1,11 +1,11 @@
1
1
  /**
2
- * @license Angular v22.0.0-next.3
2
+ * @license Angular v22.0.0-next.5
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import * as i0 from '@angular/core';
8
- import { Signal, WritableSignal, Injector, InjectionToken, Provider } from '@angular/core';
8
+ import { Signal, Injector, WritableSignal, InjectionToken, Provider } from '@angular/core';
9
9
  import { AbstractControl, ValidationErrors, FormControlStatus, ControlValueAccessor, ValidatorFn } from '@angular/forms';
10
10
  import { StandardSchemaV1 } from '@standard-schema/spec';
11
11
 
@@ -49,10 +49,22 @@ interface FormSubmitOptions<TRootModel, TSubmittedModel> {
49
49
  * Whether to ignore any of the validators when submitting:
50
50
  * - 'pending': Will submit if there are no invalid validators, pending validators do not block submission (default)
51
51
  * - 'none': Will not submit unless all validators are passing, pending validators block submission
52
- * - 'ignore': Will always submit regardless of invalid or pending validators
52
+ * - 'all': Will always submit regardless of invalid or pending validators
53
53
  */
54
54
  ignoreValidators?: 'pending' | 'none' | 'all';
55
55
  }
56
+ /**
57
+ * Options for the `markAsTouched` method.
58
+ *
59
+ * @experimental 21.2.0
60
+ */
61
+ interface MarkAsTouchedOptions {
62
+ /**
63
+ * If `true`, only marks the current field as touched.
64
+ * If `false` or not provided, marks the field and all its descendants as touched.
65
+ */
66
+ skipDescendants?: boolean;
67
+ }
56
68
  /**
57
69
  * A type that represents either a single value of type `T` or a readonly array of `T`.
58
70
  * @template T The type of the value(s).
@@ -177,7 +189,7 @@ type Field<TValue, TKey extends string | number = string | number> = () => Field
177
189
  * @category types
178
190
  * @experimental 21.0
179
191
  */
180
- type FieldTree<TModel, TKey extends string | number = string | number, TMode extends 'writable' | 'readonly' = 'writable'> = (() => [TModel] extends [AbstractControl] ? CompatFieldState<TModel, TKey, TMode> : FieldStateByMode<TModel, TKey, TMode>) & ([TModel] extends [AbstractControl] ? object : [TModel] extends [ReadonlyArray<infer U>] ? ReadonlyArrayLike<MaybeFieldTree<U, number, TMode>> : TModel extends Record<string, any> ? Subfields<TModel, TMode> : object);
192
+ type FieldTree<TModel, TKey extends string | number = string | number, TMode extends 'writable' | 'readonly' = 'writable'> = (() => [TModel] extends [AbstractControl] ? CompatFieldState<TModel, TKey, TMode> : FieldStateByMode<TModel, TKey, TMode>) & (TModel extends AbstractControl ? object : TModel extends ReadonlyArray<infer U> ? ReadonlyArrayLike<MaybeFieldTree<U, number, TMode>> : TModel extends Record<string, any> ? Subfields<TModel, TMode> : object);
181
193
  /**
182
194
  * A readonly {@link FieldTree}.
183
195
  *
@@ -205,7 +217,11 @@ type Subfields<TModel, TMode extends 'writable' | 'readonly' = 'writable'> = {
205
217
  *
206
218
  * @experimental 21.0
207
219
  */
208
- type ReadonlyArrayLike<T> = Pick<ReadonlyArray<T>, number | 'length' | typeof Symbol.iterator>;
220
+ interface ReadonlyArrayLike<T> {
221
+ readonly [n: number]: T;
222
+ readonly length: number;
223
+ [Symbol.iterator](): IterableIterator<T>;
224
+ }
209
225
  /**
210
226
  * Helper type for defining `FieldTree`. Given a type `TValue` that may include `undefined`,
211
227
  * it extracts the `undefined` outside the `FieldTree` type.
@@ -260,25 +276,25 @@ interface ReadonlyFieldState<TValue, TKey extends string | number = string | num
260
276
  *
261
277
  * Applies to `<input>` with a numeric or date `type` attribute and custom controls.
262
278
  */
263
- readonly max?: Signal<number | undefined>;
279
+ readonly max: Signal<number | undefined> | undefined;
264
280
  /**
265
281
  * A signal indicating the field's maximum string length, if applicable.
266
282
  *
267
283
  * Applies to `<input>`, `<textarea>`, and custom controls.
268
284
  */
269
- readonly maxLength?: Signal<number | undefined>;
285
+ readonly maxLength: Signal<number | undefined> | undefined;
270
286
  /**
271
287
  * A signal indicating the field's minimum value, if applicable.
272
288
  *
273
289
  * Applies to `<input>` with a numeric or date `type` attribute and custom controls.
274
290
  */
275
- readonly min?: Signal<number | undefined>;
291
+ readonly min: Signal<number | undefined> | undefined;
276
292
  /**
277
293
  * A signal indicating the field's minimum string length, if applicable.
278
294
  *
279
295
  * Applies to `<input>`, `<textarea>`, and custom controls.
280
296
  */
281
- readonly minLength?: Signal<number | undefined>;
297
+ readonly minLength: Signal<number | undefined> | undefined;
282
298
  /**
283
299
  * A signal of a unique name for the field, by default based on the name of its parent field.
284
300
  */
@@ -416,9 +432,21 @@ interface FieldState<TValue, TKey extends string | number = string | number> ext
416
432
  */
417
433
  markAsDirty(): void;
418
434
  /**
419
- * Sets the touched status of the field to `true`.
435
+ * Sets the touched status of the field and its descendants to `true`.
436
+ *
437
+ * @param options Options for marking the field as touched.
438
+ */
439
+ markAsTouched(options?: MarkAsTouchedOptions): void;
440
+ /**
441
+ * Gets the first validation error of the given kind on this field.
442
+ *
443
+ * This method is reactive and will re-evaluate when the field's errors change if called
444
+ * within a reactive context (e.g. `computed` or `effect`).
445
+ *
446
+ * @param kind The kind of error (e.g. 'required', 'min').
447
+ * @returns The first matching error, or `undefined` if none.
420
448
  */
421
- markAsTouched(): void;
449
+ getError(kind: string): ValidationError.WithFieldTree | undefined;
422
450
  /**
423
451
  * Resets the {@link touched} and {@link dirty} state of the field and its descendants.
424
452
  *
@@ -427,6 +455,10 @@ interface FieldState<TValue, TKey extends string | number = string | number> ext
427
455
  * @param value Optional value to set to the form. If not passed, the value will not be changed.
428
456
  */
429
457
  reset(value?: TValue): void;
458
+ /**
459
+ * Reloads all asynchronous validators for this field and its descendants.
460
+ */
461
+ reloadValidation(): void;
430
462
  }
431
463
  /**
432
464
  * This is FieldState also providing access to the wrapped FormControl.
@@ -532,7 +564,9 @@ type CompatSchemaPath<TControl extends AbstractControl, TPathKind extends PathKi
532
564
  *
533
565
  * @experimental 21.0
534
566
  */
535
- type SchemaPathTree<TModel, TPathKind extends PathKind = PathKind.Root> = ([TModel] extends [AbstractControl] ? CompatSchemaPath<TModel, TPathKind> : SchemaPath<TModel, SchemaPathRules.Supported, TPathKind>) & (TModel extends AbstractControl ? unknown : TModel extends ReadonlyArray<any> ? unknown : TModel extends Record<string, any> ? {
567
+ type SchemaPathTree<TModel, TPathKind extends PathKind = PathKind.Root> = ([TModel] extends [AbstractControl] ? CompatSchemaPath<TModel, TPathKind> : SchemaPath<TModel, SchemaPathRules.Supported, TPathKind>) & ([TModel] extends [AbstractControl] ? unknown : [
568
+ TModel
569
+ ] extends [ReadonlyArray<any>] ? unknown : TModel extends Record<string, any> ? {
536
570
  [K in keyof TModel]: MaybeSchemaPathTree<TModel[K], PathKind.Child>;
537
571
  } : unknown);
538
572
  /**
@@ -693,10 +727,10 @@ interface RootFieldContext<TValue> {
693
727
  /** Gets the value of the field represented by the given path. */
694
728
  valueOf<PValue>(p: SchemaPath<PValue, SchemaPathRules>): PValue;
695
729
  /** Gets the state of the field represented by the given path. */
696
- stateOf<PControl extends AbstractControl>(p: CompatSchemaPath<PControl>): ReadonlyCompatFieldState<PControl>;
697
- stateOf<PValue>(p: SchemaPath<PValue, SchemaPathRules>): ReadonlyFieldState<PValue>;
730
+ stateOf<PControl extends AbstractControl>(p: CompatSchemaPath<PControl>): [PControl] extends [any] ? ReadonlyCompatFieldState<PControl> : never;
731
+ stateOf<PValue>(p: SchemaPath<PValue, SchemaPathRules>): [PValue] extends [any] ? ReadonlyFieldState<PValue> : never;
698
732
  /** Gets the field represented by the given path. */
699
- fieldTreeOf<PModel>(p: SchemaPathTree<PModel>): ReadonlyFieldTree<PModel>;
733
+ fieldTreeOf<PModel>(p: SchemaPathTree<PModel>): [PModel] extends [any] ? ReadonlyFieldTree<PModel> : never;
700
734
  /** The list of keys that lead from the root field to the current field. */
701
735
  readonly pathKeys: Signal<readonly string[]>;
702
736
  }
@@ -785,6 +819,13 @@ declare const MetadataReducer: {
785
819
  };
786
820
  declare function override<T>(): MetadataReducer<T | undefined, T>;
787
821
  declare function override<T>(getInitial: () => T): MetadataReducer<T, T>;
822
+ /**
823
+ * A symbol used to tag a `MetadataKey` as representing an asynchronous validation resource.
824
+ *
825
+ * @category validation
826
+ * @experimental 21.0.0
827
+ */
828
+ declare const IS_ASYNC_VALIDATION_RESOURCE: unique symbol;
788
829
  /**
789
830
  * Represents metadata that is aggregated from multiple parts according to the key's reducer
790
831
  * function. A value can be contributed to the aggregated value for a field using an
@@ -799,10 +840,10 @@ declare function override<T>(getInitial: () => T): MetadataReducer<T, T>;
799
840
  */
800
841
  declare class MetadataKey<TRead, TWrite, TAcc> {
801
842
  readonly reducer: MetadataReducer<TAcc, TWrite>;
802
- readonly create: ((s: Signal<TAcc>) => TRead) | undefined;
843
+ readonly create: ((state: FieldState<unknown>, data: Signal<TAcc>) => TRead) | undefined;
803
844
  private brand;
804
845
  /** Use {@link reducedMetadataKey}. */
805
- protected constructor(reducer: MetadataReducer<TAcc, TWrite>, create: ((s: Signal<TAcc>) => TRead) | undefined);
846
+ protected constructor(reducer: MetadataReducer<TAcc, TWrite>, create: ((state: FieldState<unknown>, data: Signal<TAcc>) => TRead) | undefined);
806
847
  }
807
848
  /**
808
849
  * Extracts the the type that can be set into the given metadata key type using the `metadata()` rule.
@@ -844,7 +885,7 @@ declare function createMetadataKey<TWrite, TAcc>(reducer: MetadataReducer<TAcc,
844
885
  *
845
886
  * @experimental 21.0.0
846
887
  */
847
- declare function createManagedMetadataKey<TRead, TWrite>(create: (s: Signal<TWrite | undefined>) => TRead): MetadataKey<TRead, TWrite, TWrite | undefined>;
888
+ declare function createManagedMetadataKey<TRead, TWrite>(create: (state: FieldState<unknown>, data: Signal<TWrite | undefined>) => TRead): MetadataKey<TRead, TWrite, TWrite | undefined>;
848
889
  /**
849
890
  * Creates a metadata key that exposes a managed value based on the accumulated result of the values
850
891
  * written to the key.
@@ -860,7 +901,7 @@ declare function createManagedMetadataKey<TRead, TWrite>(create: (s: Signal<TWri
860
901
  *
861
902
  * @experimental 21.0.0
862
903
  */
863
- declare function createManagedMetadataKey<TRead, TWrite, TAcc>(create: (s: Signal<TAcc>) => TRead, reducer: MetadataReducer<TAcc, TWrite>): MetadataKey<TRead, TWrite, TAcc>;
904
+ declare function createManagedMetadataKey<TRead, TWrite, TAcc>(create: (state: FieldState<unknown>, data: Signal<TAcc>) => TRead, reducer: MetadataReducer<TAcc, TWrite>): MetadataKey<TRead, TWrite, TAcc>;
864
905
  /**
865
906
  * A {@link MetadataKey} representing whether the field is required.
866
907
  *
@@ -1083,6 +1124,7 @@ declare class FormField<T> {
1083
1124
  /** Any `ControlValueAccessor` instances provided on the host element. */
1084
1125
  private readonly controlValueAccessors;
1085
1126
  private readonly config;
1127
+ private readonly validityMonitor;
1086
1128
  private readonly parseErrorsSource;
1087
1129
  /** A lazily instantiated fake `NgControl`. */
1088
1130
  private _interopNgControl;
@@ -1138,8 +1180,6 @@ interface ValidationErrorOptions {
1138
1180
  type WithFieldTree<T> = T & {
1139
1181
  fieldTree: ReadonlyFieldTree<unknown>;
1140
1182
  };
1141
- /** @deprecated Use `WithFieldTree` instead */
1142
- type WithField<T> = WithFieldTree<T>;
1143
1183
  /**
1144
1184
  * A type that allows the given type `T` to optionally have a `field` property.
1145
1185
  * @template T The type to optionally add a `field` to.
@@ -1149,8 +1189,6 @@ type WithField<T> = WithFieldTree<T>;
1149
1189
  type WithOptionalFieldTree<T> = Omit<T, 'fieldTree'> & {
1150
1190
  fieldTree?: ReadonlyFieldTree<unknown>;
1151
1191
  };
1152
- /** @deprecated Use `WithOptionalFieldTree` instead */
1153
- type WithOptionalField<T> = WithOptionalFieldTree<T>;
1154
1192
  /**
1155
1193
  * A type that ensures the given type `T` does not have a `field` property.
1156
1194
  * @template T The type to remove the `field` from.
@@ -1160,8 +1198,6 @@ type WithOptionalField<T> = WithOptionalFieldTree<T>;
1160
1198
  type WithoutFieldTree<T> = T & {
1161
1199
  fieldTree: never;
1162
1200
  };
1163
- /** @deprecated Use `WithoutFieldTree` instead */
1164
- type WithoutField<T> = WithoutFieldTree<T>;
1165
1201
  /**
1166
1202
  * Create a required error associated with the target field
1167
1203
  * @param options The validation error options
@@ -1761,5 +1797,5 @@ declare function submit<TModel>(form: FieldTree<TModel>, action: NoInfer<FormSub
1761
1797
  */
1762
1798
  declare function schema<TValue>(fn: SchemaFn<TValue>): Schema<TValue>;
1763
1799
 
1764
- export { BaseNgValidationError, EmailValidationError, FORM_FIELD, FormField, MAX, MAX_LENGTH, MIN, MIN_LENGTH, MaxLengthValidationError, MaxValidationError, MetadataKey, MetadataReducer, MinLengthValidationError, MinValidationError, NativeInputParseError, NgValidationError, PATTERN, PathKind, PatternValidationError, REQUIRED, RequiredValidationError, SchemaPathRules, StandardSchemaValidationError, ValidationError, apply, applyEach, applyWhen, applyWhenValue, createManagedMetadataKey, createMetadataKey, emailError, form, maxError, maxLengthError, metadata, minError, minLengthError, patternError, provideSignalFormsConfig, requiredError, schema, standardSchemaError, submit, validateStandardSchema, ɵNgFieldDirective };
1765
- export type { AsyncValidationResult, ChildFieldContext, CompatFieldState, CompatSchemaPath, Debouncer, DisabledReason, Field, FieldContext, FieldState, FieldStateByMode, FieldTree, FieldValidator, FormFieldBinding, FormFieldBindingOptions, FormOptions, FormSubmitOptions, IgnoreUnknownProperties, ItemFieldContext, ItemType, LogicFn, MaybeFieldTree, MaybeSchemaPathTree, MetadataSetterType, OneOrMany, ReadonlyArrayLike, ReadonlyCompatFieldState, ReadonlyFieldState, ReadonlyFieldTree, RemoveStringIndexUnknownKey, RootFieldContext, Schema, SchemaFn, SchemaOrSchemaFn, SchemaPath, SchemaPathTree, SignalFormsConfig, Subfields, TreeValidationResult, TreeValidator, ValidationErrorOptions, ValidationResult, ValidationSuccess, Validator, WithField, WithFieldTree, WithOptionalField, WithOptionalFieldTree, WithoutField, WithoutFieldTree };
1800
+ export { BaseNgValidationError, EmailValidationError, FORM_FIELD, FormField, IS_ASYNC_VALIDATION_RESOURCE, MAX, MAX_LENGTH, MIN, MIN_LENGTH, MaxLengthValidationError, MaxValidationError, MetadataKey, MetadataReducer, MinLengthValidationError, MinValidationError, NativeInputParseError, NgValidationError, PATTERN, PathKind, PatternValidationError, REQUIRED, RequiredValidationError, SchemaPathRules, StandardSchemaValidationError, ValidationError, apply, applyEach, applyWhen, applyWhenValue, createManagedMetadataKey, createMetadataKey, emailError, form, maxError, maxLengthError, metadata, minError, minLengthError, patternError, provideSignalFormsConfig, requiredError, schema, standardSchemaError, submit, validateStandardSchema, ɵNgFieldDirective };
1801
+ export type { AsyncValidationResult, ChildFieldContext, CompatFieldState, CompatSchemaPath, Debouncer, DisabledReason, Field, FieldContext, FieldState, FieldStateByMode, FieldTree, FieldValidator, FormFieldBinding, FormFieldBindingOptions, FormOptions, FormSubmitOptions, IgnoreUnknownProperties, ItemFieldContext, ItemType, LogicFn, MarkAsTouchedOptions, MaybeFieldTree, MaybeSchemaPathTree, MetadataSetterType, OneOrMany, ReadonlyArrayLike, ReadonlyCompatFieldState, ReadonlyFieldState, ReadonlyFieldTree, RemoveStringIndexUnknownKey, RootFieldContext, Schema, SchemaFn, SchemaOrSchemaFn, SchemaPath, SchemaPathTree, SignalFormsConfig, Subfields, TreeValidationResult, TreeValidator, ValidationErrorOptions, ValidationResult, ValidationSuccess, Validator, WithFieldTree, WithOptionalFieldTree, WithoutFieldTree };
package/types/forms.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
- * @license Angular v22.0.0-next.3
2
+ * @license Angular v22.0.0-next.5
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import * as i0 from '@angular/core';
8
- import { InjectionToken, Renderer2, ElementRef, OnDestroy, OnChanges, SimpleChanges, OnInit, Injector, EventEmitter, ChangeDetectorRef, AfterViewInit, Version, ModuleWithProviders } from '@angular/core';
8
+ import { Renderer2, ElementRef, InjectionToken, OnDestroy, OnChanges, SimpleChanges, Injector, ɵControlDirectiveHost as _ControlDirectiveHost, OnInit, EventEmitter, Signal, ChangeDetectorRef, AfterViewInit, Version, ModuleWithProviders } from '@angular/core';
9
9
  import { Observable } from 'rxjs';
10
10
 
11
11
  /**
@@ -298,7 +298,7 @@ declare class SelectControlValueAccessor extends BuiltInControlValueAccessor imp
298
298
  */
299
299
  registerOnChange(fn: (value: any) => any): void;
300
300
  static ɵfac: i0.ɵɵFactoryDeclaration<SelectControlValueAccessor, never>;
301
- static ɵdir: i0.ɵɵDirectiveDeclaration<SelectControlValueAccessor, "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", never, { "compareWith": { "alias": "compareWith"; "required": false; }; }, {}, never, never, false, never>;
301
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SelectControlValueAccessor, "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", never, { "compareWith": { "alias": "compareWith"; "required": false; }; }, {}, never, never, false, never>;
302
302
  }
303
303
  /**
304
304
  * @description
@@ -398,7 +398,7 @@ declare class SelectMultipleControlValueAccessor extends BuiltInControlValueAcce
398
398
  */
399
399
  registerOnChange(fn: (value: any) => any): void;
400
400
  static ɵfac: i0.ɵɵFactoryDeclaration<SelectMultipleControlValueAccessor, never>;
401
- static ɵdir: i0.ɵɵDirectiveDeclaration<SelectMultipleControlValueAccessor, "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", never, { "compareWith": { "alias": "compareWith"; "required": false; }; }, {}, never, never, false, never>;
401
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SelectMultipleControlValueAccessor, "select[multiple]:not([ngNoCva])[formControlName],select[multiple]:not([ngNoCva])[formControl],select[multiple]:not([ngNoCva])[ngModel]", never, { "compareWith": { "alias": "compareWith"; "required": false; }; }, {}, never, never, false, never>;
402
402
  }
403
403
  /**
404
404
  * @description
@@ -486,7 +486,7 @@ declare class DefaultValueAccessor extends BaseControlValueAccessor implements C
486
486
  */
487
487
  writeValue(value: any): void;
488
488
  static ɵfac: i0.ɵɵFactoryDeclaration<DefaultValueAccessor, [null, null, { optional: true; }]>;
489
- static ɵdir: i0.ɵɵDirectiveDeclaration<DefaultValueAccessor, "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]", never, {}, {}, never, never, false, never>;
489
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DefaultValueAccessor, "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]", never, {}, {}, never, never, false, never>;
490
490
  }
491
491
 
492
492
  /**
@@ -525,7 +525,7 @@ declare class NumberValueAccessor extends BuiltInControlValueAccessor implements
525
525
  */
526
526
  registerOnChange(fn: (_: number | null) => void): void;
527
527
  static ɵfac: i0.ɵɵFactoryDeclaration<NumberValueAccessor, never>;
528
- static ɵdir: i0.ɵɵDirectiveDeclaration<NumberValueAccessor, "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]", never, {}, {}, never, never, false, never>;
528
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NumberValueAccessor, "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]", never, {}, {}, never, never, false, never>;
529
529
  }
530
530
 
531
531
  /**
@@ -564,7 +564,7 @@ declare class RangeValueAccessor extends BuiltInControlValueAccessor implements
564
564
  */
565
565
  registerOnChange(fn: (_: number | null) => void): void;
566
566
  static ɵfac: i0.ɵɵFactoryDeclaration<RangeValueAccessor, never>;
567
- static ɵdir: i0.ɵɵDirectiveDeclaration<RangeValueAccessor, "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]", never, {}, {}, never, never, false, never>;
567
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RangeValueAccessor, "input[type=range]:not([ngNoCva])[formControlName],input[type=range]:not([ngNoCva])[formControl],input[type=range]:not([ngNoCva])[ngModel]", never, {}, {}, never, never, false, never>;
568
568
  }
569
569
 
570
570
  /**
@@ -597,7 +597,7 @@ declare class CheckboxControlValueAccessor extends BuiltInControlValueAccessor i
597
597
  */
598
598
  writeValue(value: any): void;
599
599
  static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxControlValueAccessor, never>;
600
- static ɵdir: i0.ɵɵDirectiveDeclaration<CheckboxControlValueAccessor, "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]", never, {}, {}, never, never, false, never>;
600
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CheckboxControlValueAccessor, "input[type=checkbox]:not([ngNoCva])[formControlName],input[type=checkbox]:not([ngNoCva])[formControl],input[type=checkbox]:not([ngNoCva])[ngModel]", never, {}, {}, never, never, false, never>;
601
601
  }
602
602
 
603
603
  /**
@@ -3212,6 +3212,7 @@ declare abstract class AbstractControl<TValue = any, TRawValue extends TValue =
3212
3212
  * a control is extended.
3213
3213
  */
3214
3214
  private _assignAsyncValidators;
3215
+ private _updateHasRequiredValidator;
3215
3216
  }
3216
3217
 
3217
3218
  /**
@@ -3430,6 +3431,14 @@ declare abstract class NgControl extends AbstractControlDirective {
3430
3431
  * The value accessor for the control
3431
3432
  */
3432
3433
  valueAccessor: ControlValueAccessor | null;
3434
+ protected isCustomControlBased: boolean;
3435
+ private isNativeFormElement;
3436
+ /**
3437
+ * Raw `ControlValueAccessor`s retrieved from DI.
3438
+ */
3439
+ private readonly rawValueAccessors;
3440
+ private _selectedValueAccessor;
3441
+ protected get selectedValueAccessor(): ControlValueAccessor | null;
3433
3442
  /**
3434
3443
  * @description
3435
3444
  * The callback method to update the model from the view when requested
@@ -3437,6 +3446,63 @@ declare abstract class NgControl extends AbstractControlDirective {
3437
3446
  * @param newValue The new value for the view
3438
3447
  */
3439
3448
  abstract viewToModelUpdate(newValue: any): void;
3449
+ /**
3450
+ * Validator function that returns current parse errors.
3451
+ */
3452
+ protected parseErrorsValidator: ValidatorFn | null;
3453
+ /**
3454
+ * Renderer for setting native DOM properties. Set by subclass constructor.
3455
+ */
3456
+ private renderer;
3457
+ /**
3458
+ * Injector for creating effects. Set by subclass constructor.
3459
+ */
3460
+ private readonly injector;
3461
+ private requiredValidatorViaDi;
3462
+ /**
3463
+ * Container for any RxJS subscriptions related to the current control.
3464
+ *
3465
+ * This gets cleaned up and recreated when the control changes.
3466
+ */
3467
+ private subscription;
3468
+ /**
3469
+ * Tracks last bound values to avoid unnecessary FVC updates.
3470
+ */
3471
+ protected customControlBindings: {
3472
+ value?: unknown;
3473
+ disabled?: boolean;
3474
+ touched?: boolean;
3475
+ dirty?: boolean;
3476
+ valid?: boolean;
3477
+ invalid?: boolean;
3478
+ pending?: boolean;
3479
+ required?: boolean;
3480
+ errors?: ValidationErrors | null;
3481
+ } | null;
3482
+ constructor(injector?: Injector, renderer?: Renderer2, rawValueAccessors?: ControlValueAccessor[]);
3483
+ protected setupCustomControl(): void;
3484
+ protected ngControlUpdate(host: _ControlDirectiveHost, bindRequired: boolean): void;
3485
+ /**
3486
+ * Returns true if the control is currently considered required, false otherwise.
3487
+ *
3488
+ * A control can be required either via `NG_VALIDATORS` including the `RequiredValidator`.
3489
+ */
3490
+ private get isRequired();
3491
+ /**
3492
+ * Whether the control should bind the `required` property (in custom control mode).
3493
+ *
3494
+ * Can be overridden by subclasses that handle `required` in a different way.
3495
+ */
3496
+ protected get shouldBindRequired(): boolean;
3497
+ /**
3498
+ * Binds a status property to FVC, falling back to native DOM if FVC lacks the input.
3499
+ */
3500
+ private bindControlProperty;
3501
+ /**
3502
+ * Converts Reactive Forms errors to Signal Forms error format.
3503
+ */
3504
+ private _convertErrors;
3505
+ protected removeParseErrorsValidator(control: AbstractControl | null | undefined): void;
3440
3506
  }
3441
3507
 
3442
3508
  /**
@@ -3538,7 +3604,7 @@ declare class RadioControlValueAccessor extends BuiltInControlValueAccessor impl
3538
3604
  fireUncheck(value: any): void;
3539
3605
  private _checkName;
3540
3606
  static ɵfac: i0.ɵɵFactoryDeclaration<RadioControlValueAccessor, never>;
3541
- static ɵdir: i0.ɵɵDirectiveDeclaration<RadioControlValueAccessor, "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", never, { "name": { "alias": "name"; "required": false; }; "formControlName": { "alias": "formControlName"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, {}, never, never, false, never>;
3607
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RadioControlValueAccessor, "input[type=radio]:not([ngNoCva])[formControlName],input[type=radio]:not([ngNoCva])[formControl],input[type=radio]:not([ngNoCva])[ngModel]", never, { "name": { "alias": "name"; "required": false; }; "formControlName": { "alias": "formControlName"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, {}, never, never, false, never>;
3542
3608
  }
3543
3609
 
3544
3610
  /**
@@ -3774,7 +3840,7 @@ declare class FormControlName extends NgControl implements OnChanges, OnDestroy
3774
3840
  model: any;
3775
3841
  /** @deprecated as of v6 */
3776
3842
  update: EventEmitter<any>;
3777
- constructor(parent: ControlContainer, validators: (Validator | ValidatorFn)[], asyncValidators: (AsyncValidator | AsyncValidatorFn)[], valueAccessors: ControlValueAccessor[], _ngModelWarningConfig: string | null);
3843
+ constructor(parent: ControlContainer, validators: (Validator | ValidatorFn)[], asyncValidators: (AsyncValidator | AsyncValidatorFn)[], valueAccessors: ControlValueAccessor[], _ngModelWarningConfig: string | null, renderer?: Renderer2, injector?: Injector);
3778
3844
  /** @docs-private */
3779
3845
  ngOnChanges(changes: SimpleChanges): void;
3780
3846
  /** @docs-private */
@@ -3798,7 +3864,7 @@ declare class FormControlName extends NgControl implements OnChanges, OnDestroy
3798
3864
  */
3799
3865
  get formDirective(): any;
3800
3866
  private _setUpControl;
3801
- static ɵfac: i0.ɵɵFactoryDeclaration<FormControlName, [{ optional: true; host: true; skipSelf: true; }, { optional: true; self: true; }, { optional: true; self: true; }, { optional: true; self: true; }, { optional: true; }]>;
3867
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormControlName, [{ optional: true; host: true; skipSelf: true; }, { optional: true; self: true; }, { optional: true; self: true; }, { optional: true; self: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
3802
3868
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormControlName, "[formControlName]", never, { "name": { "alias": "formControlName"; "required": false; }; "isDisabled": { "alias": "disabled"; "required": false; }; "model": { "alias": "ngModel"; "required": false; }; }, { "update": "ngModelChange"; }, never, never, false, never>;
3803
3869
  }
3804
3870
 
@@ -4099,6 +4165,15 @@ declare class FormArrayName extends ControlContainer implements OnInit, OnDestro
4099
4165
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormArrayName, "[formArrayName]", never, { "name": { "alias": "formArrayName"; "required": false; }; }, {}, never, never, false, never>;
4100
4166
  }
4101
4167
 
4168
+ /**
4169
+ * DI token that provides a writable signal that controls can use to set the signal of parse errors
4170
+ * for the `FormField` directive or reactive directives. Used internally by `transformedValue`.
4171
+ */
4172
+ declare const ɵFORM_FIELD_PARSE_ERRORS: InjectionToken<{
4173
+ readonly set: (value: Signal<ReadonlyArray<{
4174
+ readonly kind: string;
4175
+ }>> | undefined) => void;
4176
+ }>;
4102
4177
  /**
4103
4178
  * The type for CALL_SET_DISABLED_STATE. If `always`, then ControlValueAccessor will always call
4104
4179
  * `setDisabledState` when attached, which is the most correct behavior. Otherwise, it will only be
@@ -4248,11 +4323,18 @@ declare class NgModel extends NgControl implements OnChanges, OnDestroy {
4248
4323
  * the view model updates.
4249
4324
  */
4250
4325
  update: EventEmitter<any>;
4251
- constructor(parent: ControlContainer, validators: (Validator | ValidatorFn)[], asyncValidators: (AsyncValidator | AsyncValidatorFn)[], valueAccessors: ControlValueAccessor[], _changeDetectorRef?: (ChangeDetectorRef | null) | undefined, callSetDisabledState?: SetDisabledStateOption | undefined);
4326
+ constructor(parent: ControlContainer, validators: (Validator | ValidatorFn)[], asyncValidators: (AsyncValidator | AsyncValidatorFn)[], valueAccessors: ControlValueAccessor[], _changeDetectorRef?: (ChangeDetectorRef | null) | undefined, callSetDisabledState?: SetDisabledStateOption | undefined, injector?: Injector, renderer?: Renderer2);
4252
4327
  /** @docs-private */
4253
4328
  ngOnChanges(changes: SimpleChanges): void;
4254
4329
  /** @docs-private */
4255
4330
  ngOnDestroy(): void;
4331
+ /**
4332
+ * Template-driven forms handle `required` via the `RequiredValidator` directive.
4333
+ *
4334
+ * This directive has a `required` input and a host binding to `[attr.required]`. It defines the
4335
+ * source of truth for required-ness, so disable the normal control binding for it.
4336
+ */
4337
+ protected get shouldBindRequired(): boolean;
4256
4338
  /**
4257
4339
  * @description
4258
4340
  * Returns an array that represents the path from the top-level form to this control.
@@ -4280,7 +4362,7 @@ declare class NgModel extends NgControl implements OnChanges, OnDestroy {
4280
4362
  private _updateValue;
4281
4363
  private _updateDisabled;
4282
4364
  private _getPath;
4283
- static ɵfac: i0.ɵɵFactoryDeclaration<NgModel, [{ optional: true; host: true; }, { optional: true; self: true; }, { optional: true; self: true; }, { optional: true; self: true; }, { optional: true; }, { optional: true; }]>;
4365
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgModel, [{ optional: true; host: true; }, { optional: true; self: true; }, { optional: true; self: true; }, { optional: true; self: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
4284
4366
  static ɵdir: i0.ɵɵDirectiveDeclaration<NgModel, "[ngModel]:not([formControlName]):not([formControl])", ["ngModel"], { "name": { "alias": "name"; "required": false; }; "isDisabled": { "alias": "disabled"; "required": false; }; "model": { "alias": "ngModel"; "required": false; }; "options": { "alias": "ngModelOptions"; "required": false; }; }, { "update": "ngModelChange"; }, never, never, false, never>;
4285
4367
  }
4286
4368
 
@@ -4613,7 +4695,7 @@ declare class FormControlDirective extends NgControl implements OnChanges, OnDes
4613
4695
  model: any;
4614
4696
  /** @deprecated as of v6 */
4615
4697
  update: EventEmitter<any>;
4616
- constructor(validators: (Validator | ValidatorFn)[], asyncValidators: (AsyncValidator | AsyncValidatorFn)[], valueAccessors: ControlValueAccessor[], _ngModelWarningConfig: string | null, callSetDisabledState?: SetDisabledStateOption | undefined);
4698
+ constructor(validators: (Validator | ValidatorFn)[], asyncValidators: (AsyncValidator | AsyncValidatorFn)[], valueAccessors: ControlValueAccessor[], _ngModelWarningConfig: string | null, callSetDisabledState?: SetDisabledStateOption | undefined, renderer?: Renderer2, injector?: Injector);
4617
4699
  /** @docs-private */
4618
4700
  ngOnChanges(changes: SimpleChanges): void;
4619
4701
  /** @docs-private */
@@ -4637,7 +4719,7 @@ declare class FormControlDirective extends NgControl implements OnChanges, OnDes
4637
4719
  */
4638
4720
  viewToModelUpdate(newValue: any): void;
4639
4721
  private _isControlChanged;
4640
- static ɵfac: i0.ɵɵFactoryDeclaration<FormControlDirective, [{ optional: true; self: true; }, { optional: true; self: true; }, { optional: true; self: true; }, { optional: true; }, { optional: true; }]>;
4722
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormControlDirective, [{ optional: true; self: true; }, { optional: true; self: true; }, { optional: true; self: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
4641
4723
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormControlDirective, "[formControl]", ["ngForm"], { "form": { "alias": "formControl"; "required": false; }; "isDisabled": { "alias": "disabled"; "required": false; }; "model": { "alias": "ngModel"; "required": false; }; }, { "update": "ngModelChange"; }, never, never, false, never>;
4642
4724
  }
4643
4725
 
@@ -5335,6 +5417,30 @@ declare class Validators {
5335
5417
  */
5336
5418
  declare const VERSION: Version;
5337
5419
 
5420
+ /**
5421
+ * Supported native control element types.
5422
+ *
5423
+ * The `type` property of a {@link HTMLTextAreaElement} should always be 'textarea', but the
5424
+ * TypeScript DOM API type definition lacks this detail, so we include it here.
5425
+ *
5426
+ * https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement/type
5427
+ */
5428
+ type NativeFormControl = HTMLInputElement | HTMLSelectElement | (HTMLTextAreaElement & {
5429
+ type: 'textarea';
5430
+ });
5431
+ declare function isNativeFormElement(element: HTMLElement): element is NativeFormControl;
5432
+ declare function isNumericFormElement(element: HTMLElement): boolean;
5433
+ declare function isTextualFormElement(element: HTMLElement): boolean;
5434
+ /**
5435
+ * Updates the native DOM property on the given node.
5436
+ *
5437
+ * @param renderer The renderer to use for DOM operations.
5438
+ * @param element The native form control element.
5439
+ * @param name The DOM attribute/property name.
5440
+ * @param value The new value for the property.
5441
+ */
5442
+ declare function setNativeDomProperty(renderer: Renderer2, element: NativeFormControl, name: 'name' | 'disabled' | 'required' | 'readonly' | 'min' | 'max' | 'minLength' | 'maxLength', value: string | number | boolean | undefined): void;
5443
+
5338
5444
  /**
5339
5445
  * Exports the required providers and directives for template-driven forms,
5340
5446
  * making them available for import by NgModules that import this module.
@@ -5389,5 +5495,5 @@ declare class ReactiveFormsModule {
5389
5495
  static ɵinj: i0.ɵɵInjectorDeclaration<ReactiveFormsModule>;
5390
5496
  }
5391
5497
 
5392
- export { AbstractControl, AbstractControlDirective, AbstractFormDirective, AbstractFormGroupDirective, COMPOSITION_BUFFER_MODE, CheckboxControlValueAccessor, CheckboxRequiredValidator, ControlContainer, ControlEvent, DefaultValueAccessor, EmailValidator, FormArray, FormArrayDirective, FormArrayName, FormBuilder, FormControl, FormControlDirective, FormControlName, FormGroup, FormGroupDirective, FormGroupName, FormRecord, FormResetEvent, FormSubmittedEvent, FormsModule, MaxLengthValidator, MaxValidator, MinLengthValidator, MinValidator, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, NgSelectOption, NonNullableFormBuilder, NumberValueAccessor, PatternValidator, PristineChangeEvent, RadioControlValueAccessor, RangeValueAccessor, ReactiveFormsModule, RequiredValidator, SelectControlValueAccessor, SelectMultipleControlValueAccessor, StatusChangeEvent, TouchedChangeEvent, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, VERSION, Validators, ValueChangeEvent, isFormArray, isFormControl, isFormGroup, isFormRecord, ɵInternalFormsSharedModule, ɵNgNoValidate, ɵNgSelectMultipleOption };
5393
- export type { AbstractControlOptions, AsyncValidator, AsyncValidatorFn, ControlConfig, ControlValueAccessor, Form, FormControlOptions, FormControlState, FormControlStatus, SetDisabledStateOption, ValidationErrors, Validator, ValidatorFn, ɵCoerceStrArrToNumArr, ɵElement, ɵFormArrayRawValue, ɵFormArrayValue, ɵFormControlCtor, ɵFormGroupRawValue, ɵFormGroupValue, ɵGetProperty, ɵNavigate, ɵOptionalKeys, ɵRawValue, ɵTokenize, ɵTypedOrUntyped, ɵValue, ɵWriteable };
5498
+ export { AbstractControl, AbstractControlDirective, AbstractFormDirective, AbstractFormGroupDirective, COMPOSITION_BUFFER_MODE, CheckboxControlValueAccessor, CheckboxRequiredValidator, ControlContainer, ControlEvent, DefaultValueAccessor, EmailValidator, FormArray, FormArrayDirective, FormArrayName, FormBuilder, FormControl, FormControlDirective, FormControlName, FormGroup, FormGroupDirective, FormGroupName, FormRecord, FormResetEvent, FormSubmittedEvent, FormsModule, MaxLengthValidator, MaxValidator, MinLengthValidator, MinValidator, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, NgSelectOption, NonNullableFormBuilder, NumberValueAccessor, PatternValidator, PristineChangeEvent, RadioControlValueAccessor, RangeValueAccessor, ReactiveFormsModule, RequiredValidator, SelectControlValueAccessor, SelectMultipleControlValueAccessor, StatusChangeEvent, TouchedChangeEvent, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, VERSION, Validators, ValueChangeEvent, isFormArray, isFormControl, isFormGroup, isFormRecord, ɵFORM_FIELD_PARSE_ERRORS, ɵInternalFormsSharedModule, ɵNgNoValidate, ɵNgSelectMultipleOption, isNativeFormElement as ɵisNativeFormElement, isNumericFormElement as ɵisNumericFormElement, isTextualFormElement as ɵisTextualFormElement, setNativeDomProperty as ɵsetNativeDomProperty };
5499
+ export type { AbstractControlOptions, AsyncValidator, AsyncValidatorFn, ControlConfig, ControlValueAccessor, Form, FormControlOptions, FormControlState, FormControlStatus, SetDisabledStateOption, ValidationErrors, Validator, ValidatorFn, ɵCoerceStrArrToNumArr, ɵElement, ɵFormArrayRawValue, ɵFormArrayValue, ɵFormControlCtor, ɵFormGroupRawValue, ɵFormGroupValue, ɵGetProperty, NativeFormControl as ɵNativeFormControl, ɵNavigate, ɵOptionalKeys, ɵRawValue, ɵTokenize, ɵTypedOrUntyped, ɵValue, ɵWriteable };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.0-next.3
2
+ * @license Angular v22.0.0-next.5
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -112,6 +112,64 @@ declare function compatForm<TModel>(model: WritableSignal<TModel>, schemaOrOptio
112
112
  */
113
113
  declare function compatForm<TModel>(model: WritableSignal<TModel>, schema: SchemaOrSchemaFn<TModel>, options: CompatFormOptions<TModel>): FieldTree<TModel>;
114
114
 
115
+ /**
116
+ * Type utility that recursively unwraps the value type of a `FieldTree`.
117
+ *
118
+ * If the value type contains `AbstractControl` instances (common in compat mode),
119
+ * they are replaced with their underlying value types.
120
+ */
121
+ type RawValue<T> = T extends AbstractControl<infer TValue, any> ? TValue : T extends (infer U)[] ? RawValue<U>[] : T extends object ? {
122
+ [K in keyof T]: RawValue<T[K]>;
123
+ } : T;
124
+ /**
125
+ * A type that recursively makes all properties of T optional.
126
+ * Used for the result of `extractValue` when filtering is applied.
127
+ * @experimental 21.2.0
128
+ */
129
+ type DeepPartial<T> = (T extends (infer U)[] ? DeepPartial<U>[] : T extends object ? {
130
+ [K in keyof T]?: DeepPartial<T[K]>;
131
+ } : T) | undefined;
132
+ /**
133
+ * Criteria that determine whether a field should be included in the extraction.
134
+ *
135
+ * Each property is optional; when provided, the field must match the specified state.
136
+ *
137
+ * @category interop
138
+ * @experimental 21.2.0
139
+ */
140
+ interface ExtractFilter {
141
+ readonly dirty?: boolean;
142
+ readonly touched?: boolean;
143
+ readonly enabled?: boolean;
144
+ }
145
+ /**
146
+ * Utility to unwrap a {@link FieldTree} into its underlying raw value.
147
+ *
148
+ * This function is recursive, so if the field tree represents an object or an array,
149
+ * the result will be an object or an array of the raw values of its children.
150
+ *
151
+ * @param field The field tree to extract the value from.
152
+ * @returns The raw value of the field tree.
153
+ *
154
+ * @category interop
155
+ * @experimental 21.2.0
156
+ */
157
+ declare function extractValue<T>(field: FieldTree<T>): RawValue<T>;
158
+ /**
159
+ * Utility to unwrap a {@link FieldTree} into its underlying raw value.
160
+ *
161
+ * This function is recursive, so if the field tree represents an object or an array,
162
+ * the result will be an object or an array of the raw values of its children.
163
+ *
164
+ * @param field The field tree to extract the value from.
165
+ * @param filter Criteria to include only fields matching certain state (dirty, touched, enabled).
166
+ * @returns A partial value containing only the fields matching the filter, or `undefined` if none match.
167
+ *
168
+ * @category interop
169
+ * @experimental 21.2.0
170
+ */
171
+ declare function extractValue<T>(field: FieldTree<T>, filter: ExtractFilter): DeepPartial<RawValue<T>>;
172
+
115
173
  /**
116
174
  * An error used for compat errors.
117
175
  *
@@ -262,5 +320,5 @@ declare class SignalFormControl<T> extends AbstractControl {
262
320
  }): void;
263
321
  }
264
322
 
265
- export { CompatValidationError, NG_STATUS_CLASSES, SignalFormControl, compatForm };
323
+ export { CompatValidationError, NG_STATUS_CLASSES, SignalFormControl, compatForm, extractValue };
266
324
  export type { CompatFormOptions };