@angular/forms 18.0.0-next.2 → 18.0.0-next.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/esm2022/src/directives/abstract_form_group_directive.mjs +3 -3
  2. package/esm2022/src/directives/checkbox_value_accessor.mjs +3 -3
  3. package/esm2022/src/directives/control_value_accessor.mjs +6 -6
  4. package/esm2022/src/directives/default_value_accessor.mjs +3 -3
  5. package/esm2022/src/directives/ng_control_status.mjs +6 -6
  6. package/esm2022/src/directives/ng_form.mjs +3 -3
  7. package/esm2022/src/directives/ng_model.mjs +3 -3
  8. package/esm2022/src/directives/ng_model_group.mjs +3 -3
  9. package/esm2022/src/directives/ng_no_validate_directive.mjs +3 -3
  10. package/esm2022/src/directives/number_value_accessor.mjs +3 -3
  11. package/esm2022/src/directives/radio_control_value_accessor.mjs +6 -6
  12. package/esm2022/src/directives/range_value_accessor.mjs +3 -3
  13. package/esm2022/src/directives/reactive_directives/form_control_directive.mjs +5 -6
  14. package/esm2022/src/directives/reactive_directives/form_control_name.mjs +5 -7
  15. package/esm2022/src/directives/reactive_directives/form_group_directive.mjs +5 -5
  16. package/esm2022/src/directives/reactive_directives/form_group_name.mjs +9 -9
  17. package/esm2022/src/directives/select_control_value_accessor.mjs +6 -6
  18. package/esm2022/src/directives/select_multiple_control_value_accessor.mjs +6 -6
  19. package/esm2022/src/directives/validators.mjs +36 -36
  20. package/esm2022/src/directives.mjs +4 -4
  21. package/esm2022/src/form_builder.mjs +11 -11
  22. package/esm2022/src/form_providers.mjs +13 -13
  23. package/esm2022/src/forms.mjs +2 -2
  24. package/esm2022/src/model/abstract_model.mjs +147 -133
  25. package/esm2022/src/model/form_array.mjs +3 -3
  26. package/esm2022/src/model/form_control.mjs +1 -1
  27. package/esm2022/src/model/form_group.mjs +3 -3
  28. package/esm2022/src/validators.mjs +2 -2
  29. package/esm2022/src/version.mjs +1 -1
  30. package/fesm2022/forms.mjs +293 -283
  31. package/fesm2022/forms.mjs.map +1 -1
  32. package/index.d.ts +131 -37
  33. package/package.json +4 -4
@@ -1,13 +1,13 @@
1
1
  /**
2
- * @license Angular v18.0.0-next.2
3
- * (c) 2010-2022 Google LLC. https://angular.io/
2
+ * @license Angular v18.0.0-next.4
3
+ * (c) 2010-2024 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import * as i0 from '@angular/core';
8
8
  import { Directive, InjectionToken, forwardRef, Optional, Inject, ɵisPromise, ɵisSubscribable, ɵRuntimeError, Self, EventEmitter, Input, Host, SkipSelf, booleanAttribute, ChangeDetectorRef, Output, Injectable, inject, NgModule, Version } from '@angular/core';
9
9
  import { ɵgetDOM } from '@angular/common';
10
- import { from, forkJoin } from 'rxjs';
10
+ import { from, forkJoin, Subject } from 'rxjs';
11
11
  import { map } from 'rxjs/operators';
12
12
 
13
13
  /**
@@ -62,10 +62,10 @@ class BaseControlValueAccessor {
62
62
  setDisabledState(isDisabled) {
63
63
  this.setProperty('disabled', isDisabled);
64
64
  }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: BaseControlValueAccessor, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
66
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: BaseControlValueAccessor, ngImport: i0 }); }
65
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: BaseControlValueAccessor, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
66
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: BaseControlValueAccessor, ngImport: i0 }); }
67
67
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: BaseControlValueAccessor, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: BaseControlValueAccessor, decorators: [{
69
69
  type: Directive
70
70
  }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }] });
71
71
  /**
@@ -78,10 +78,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2",
78
78
  * applications code.
79
79
  */
80
80
  class BuiltInControlValueAccessor extends BaseControlValueAccessor {
81
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: BuiltInControlValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
82
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: BuiltInControlValueAccessor, usesInheritance: true, ngImport: i0 }); }
81
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: BuiltInControlValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
82
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: BuiltInControlValueAccessor, usesInheritance: true, ngImport: i0 }); }
83
83
  }
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: BuiltInControlValueAccessor, decorators: [{
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: BuiltInControlValueAccessor, decorators: [{
85
85
  type: Directive
86
86
  }] });
87
87
  /**
@@ -129,10 +129,10 @@ class CheckboxControlValueAccessor extends BuiltInControlValueAccessor {
129
129
  writeValue(value) {
130
130
  this.setProperty('checked', value);
131
131
  }
132
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: CheckboxControlValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
133
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]", host: { listeners: { "change": "onChange($event.target.checked)", "blur": "onTouched()" } }, providers: [CHECKBOX_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
132
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: CheckboxControlValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
133
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]", host: { listeners: { "change": "onChange($event.target.checked)", "blur": "onTouched()" } }, providers: [CHECKBOX_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
134
134
  }
135
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: CheckboxControlValueAccessor, decorators: [{
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: CheckboxControlValueAccessor, decorators: [{
136
136
  type: Directive,
137
137
  args: [{
138
138
  selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',
@@ -229,10 +229,10 @@ class DefaultValueAccessor extends BaseControlValueAccessor {
229
229
  this._composing = false;
230
230
  this._compositionMode && this.onChange(value);
231
231
  }
232
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: DefaultValueAccessor, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: COMPOSITION_BUFFER_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
233
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]", host: { listeners: { "input": "$any(this)._handleInput($event.target.value)", "blur": "onTouched()", "compositionstart": "$any(this)._compositionStart()", "compositionend": "$any(this)._compositionEnd($event.target.value)" } }, providers: [DEFAULT_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
232
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: DefaultValueAccessor, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: COMPOSITION_BUFFER_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
233
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]", host: { listeners: { "input": "$any(this)._handleInput($event.target.value)", "blur": "onTouched()", "compositionstart": "$any(this)._compositionStart()", "compositionend": "$any(this)._compositionEnd($event.target.value)" } }, providers: [DEFAULT_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
234
234
  }
235
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: DefaultValueAccessor, decorators: [{
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: DefaultValueAccessor, decorators: [{
236
236
  type: Directive,
237
237
  args: [{
238
238
  selector: 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',
@@ -364,7 +364,7 @@ const EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(
364
364
  * A validator is a function that processes a `FormControl` or collection of
365
365
  * controls and returns an error map or null. A null map means that validation has passed.
366
366
  *
367
- * @see [Form Validation](/guide/form-validation)
367
+ * @see [Form Validation](guide/forms/form-validation)
368
368
  *
369
369
  * @publicApi
370
370
  */
@@ -1322,10 +1322,10 @@ class NgControlStatus extends AbstractControlStatus {
1322
1322
  constructor(cd) {
1323
1323
  super(cd);
1324
1324
  }
1325
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgControlStatus, deps: [{ token: NgControl, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
1326
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: NgControlStatus, selector: "[formControlName],[ngModel],[formControl]", host: { properties: { "class.ng-untouched": "isUntouched", "class.ng-touched": "isTouched", "class.ng-pristine": "isPristine", "class.ng-dirty": "isDirty", "class.ng-valid": "isValid", "class.ng-invalid": "isInvalid", "class.ng-pending": "isPending" } }, usesInheritance: true, ngImport: i0 }); }
1325
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgControlStatus, deps: [{ token: NgControl, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
1326
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: NgControlStatus, selector: "[formControlName],[ngModel],[formControl]", host: { properties: { "class.ng-untouched": "isUntouched", "class.ng-touched": "isTouched", "class.ng-pristine": "isPristine", "class.ng-dirty": "isDirty", "class.ng-valid": "isValid", "class.ng-invalid": "isInvalid", "class.ng-pending": "isPending" } }, usesInheritance: true, ngImport: i0 }); }
1327
1327
  }
1328
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgControlStatus, decorators: [{
1328
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgControlStatus, decorators: [{
1329
1329
  type: Directive,
1330
1330
  args: [{ selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost }]
1331
1331
  }], ctorParameters: () => [{ type: NgControl, decorators: [{
@@ -1347,10 +1347,10 @@ class NgControlStatusGroup extends AbstractControlStatus {
1347
1347
  constructor(cd) {
1348
1348
  super(cd);
1349
1349
  }
1350
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgControlStatusGroup, deps: [{ token: ControlContainer, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
1351
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]", host: { properties: { "class.ng-untouched": "isUntouched", "class.ng-touched": "isTouched", "class.ng-pristine": "isPristine", "class.ng-dirty": "isDirty", "class.ng-valid": "isValid", "class.ng-invalid": "isInvalid", "class.ng-pending": "isPending", "class.ng-submitted": "isSubmitted" } }, usesInheritance: true, ngImport: i0 }); }
1350
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgControlStatusGroup, deps: [{ token: ControlContainer, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
1351
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]", host: { properties: { "class.ng-untouched": "isUntouched", "class.ng-touched": "isTouched", "class.ng-pristine": "isPristine", "class.ng-dirty": "isDirty", "class.ng-valid": "isValid", "class.ng-invalid": "isInvalid", "class.ng-pending": "isPending", "class.ng-submitted": "isSubmitted" } }, usesInheritance: true, ngImport: i0 }); }
1352
1352
  }
1353
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgControlStatusGroup, decorators: [{
1353
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgControlStatusGroup, decorators: [{
1354
1354
  type: Directive,
1355
1355
  args: [{
1356
1356
  selector: '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',
@@ -1541,6 +1541,61 @@ const PENDING = 'PENDING';
1541
1541
  * @see {@link status}
1542
1542
  */
1543
1543
  const DISABLED = 'DISABLED';
1544
+ /**
1545
+ * Base class for every event sent by `AbstractControl.events()`
1546
+ *
1547
+ * @publicApi
1548
+ */
1549
+ class ControlEvent {
1550
+ }
1551
+ /**
1552
+ * Event fired when the value of a control changes.
1553
+ *
1554
+ * @publicApi
1555
+ */
1556
+ class ValueChangeEvent extends ControlEvent {
1557
+ constructor(value, source) {
1558
+ super();
1559
+ this.value = value;
1560
+ this.source = source;
1561
+ }
1562
+ }
1563
+ /**
1564
+ * Event fired when the control's pristine state changes (pristine <=> dirty).
1565
+ *
1566
+ * @publicApi
1567
+ */
1568
+ class PristineChangeEvent extends ControlEvent {
1569
+ constructor(pristine, source) {
1570
+ super();
1571
+ this.pristine = pristine;
1572
+ this.source = source;
1573
+ }
1574
+ }
1575
+ /**
1576
+ * Event fired when the control's touched status changes (touched <=> untouched).
1577
+ *
1578
+ * @publicApi
1579
+ */
1580
+ class TouchedChangeEvent extends ControlEvent {
1581
+ constructor(touched, source) {
1582
+ super();
1583
+ this.touched = touched;
1584
+ this.source = source;
1585
+ }
1586
+ }
1587
+ /**
1588
+ * Event fired when the control's status changes.
1589
+ *
1590
+ * @publicApi
1591
+ */
1592
+ class StatusChangeEvent extends ControlEvent {
1593
+ constructor(status, source) {
1594
+ super();
1595
+ this.status = status;
1596
+ this.source = source;
1597
+ }
1598
+ }
1544
1599
  /**
1545
1600
  * Gets validators from either an options object or given validators.
1546
1601
  */
@@ -1605,9 +1660,9 @@ function assertAllValuesPresent(control, isGroup, value) {
1605
1660
  * The first type parameter TValue represents the value type of the control (`control.value`).
1606
1661
  * The optional type parameter TRawValue represents the raw value type (`control.getRawValue()`).
1607
1662
  *
1608
- * @see [Forms Guide](/guide/forms)
1609
- * @see [Reactive Forms Guide](/guide/reactive-forms)
1610
- * @see [Dynamic Forms Guide](/guide/dynamic-form)
1663
+ * @see [Forms Guide](guide/forms)
1664
+ * @see [Reactive Forms Guide](guide/forms/reactive-forms)
1665
+ * @see [Dynamic Forms Guide](guide/forms/dynamic-forms)
1611
1666
  *
1612
1667
  * @publicApi
1613
1668
  */
@@ -1649,6 +1704,25 @@ class AbstractControl {
1649
1704
  * a `blur` event on it.
1650
1705
  */
1651
1706
  this.touched = false;
1707
+ /**
1708
+ * Exposed as observable, see below.
1709
+ *
1710
+ * @internal
1711
+ */
1712
+ this._events = new Subject();
1713
+ /**
1714
+ * A multicasting observable that emits an event every time the state of the control changes.
1715
+ * It emits for value, status, pristine or touched changes.
1716
+ *
1717
+ * **Note**: On value change, the emit happens right after a value of this control is updated. The
1718
+ * value of a parent control (for example if this FormControl is a part of a FormGroup) is updated
1719
+ * later, so accessing a value of a parent control (using the `value` property) from the callback
1720
+ * of this event might result in getting a value that has not been updated yet. Subscribe to the
1721
+ * `events` of the parent control instead.
1722
+ * For other event types, the events are emitted after the parent control has been updated.
1723
+ *
1724
+ */
1725
+ this.events = this._events.asObservable();
1652
1726
  /** @internal */
1653
1727
  this._onDisabledChange = [];
1654
1728
  this._assignValidators(validators);
@@ -1927,145 +2001,84 @@ class AbstractControl {
1927
2001
  clearAsyncValidators() {
1928
2002
  this.asyncValidator = null;
1929
2003
  }
1930
- /**
1931
- * Marks the control as `touched`. A control is touched by focus and
1932
- * blur events that do not change the value.
1933
- *
1934
- * @see {@link markAsUntouched()}
1935
- * @see {@link markAsDirty()}
1936
- * @see {@link markAsPristine()}
1937
- *
1938
- * @param opts Configuration options that determine how the control propagates changes
1939
- * and emits events after marking is applied.
1940
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
1941
- * marks all direct ancestors. Default is false.
1942
- */
1943
2004
  markAsTouched(opts = {}) {
2005
+ const changed = this.touched === false;
1944
2006
  this.touched = true;
2007
+ const sourceControl = opts.sourceControl ?? this;
1945
2008
  if (this._parent && !opts.onlySelf) {
1946
- this._parent.markAsTouched(opts);
2009
+ this._parent.markAsTouched({ ...opts, sourceControl });
2010
+ }
2011
+ if (changed && opts.emitEvent !== false) {
2012
+ this._events.next(new TouchedChangeEvent(true, sourceControl));
1947
2013
  }
1948
2014
  }
1949
2015
  /**
1950
2016
  * Marks the control and all its descendant controls as `touched`.
1951
2017
  * @see {@link markAsTouched()}
1952
- */
1953
- markAllAsTouched() {
1954
- this.markAsTouched({ onlySelf: true });
1955
- this._forEachChild((control) => control.markAllAsTouched());
1956
- }
1957
- /**
1958
- * Marks the control as `untouched`.
1959
- *
1960
- * If the control has any children, also marks all children as `untouched`
1961
- * and recalculates the `touched` status of all parent controls.
1962
- *
1963
- * @see {@link markAsTouched()}
1964
- * @see {@link markAsDirty()}
1965
- * @see {@link markAsPristine()}
1966
2018
  *
1967
2019
  * @param opts Configuration options that determine how the control propagates changes
1968
- * and emits events after the marking is applied.
1969
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
1970
- * marks all direct ancestors. Default is false.
2020
+ * and emits events after marking is applied.
2021
+ * * `emitEvent`: When true or not supplied (the default), the `events`
2022
+ * observable emits a `TouchedChangeEvent` with the `touched` property being `true`.
2023
+ * When false, no events are emitted.
1971
2024
  */
2025
+ markAllAsTouched(opts = {}) {
2026
+ this.markAsTouched({ onlySelf: true, emitEvent: opts.emitEvent, sourceControl: this });
2027
+ this._forEachChild((control) => control.markAllAsTouched(opts));
2028
+ }
1972
2029
  markAsUntouched(opts = {}) {
2030
+ const changed = this.touched === true;
1973
2031
  this.touched = false;
1974
2032
  this._pendingTouched = false;
2033
+ const sourceControl = opts.sourceControl ?? this;
1975
2034
  this._forEachChild((control) => {
1976
- control.markAsUntouched({ onlySelf: true });
2035
+ control.markAsUntouched({ onlySelf: true, emitEvent: opts.emitEvent, sourceControl });
1977
2036
  });
1978
2037
  if (this._parent && !opts.onlySelf) {
1979
- this._parent._updateTouched(opts);
2038
+ this._parent._updateTouched(opts, sourceControl);
2039
+ }
2040
+ if (changed && opts.emitEvent !== false) {
2041
+ this._events.next(new TouchedChangeEvent(false, sourceControl));
1980
2042
  }
1981
2043
  }
1982
- /**
1983
- * Marks the control as `dirty`. A control becomes dirty when
1984
- * the control's value is changed through the UI; compare `markAsTouched`.
1985
- *
1986
- * @see {@link markAsTouched()}
1987
- * @see {@link markAsUntouched()}
1988
- * @see {@link markAsPristine()}
1989
- *
1990
- * @param opts Configuration options that determine how the control propagates changes
1991
- * and emits events after marking is applied.
1992
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
1993
- * marks all direct ancestors. Default is false.
1994
- */
1995
2044
  markAsDirty(opts = {}) {
2045
+ const changed = this.pristine === true;
1996
2046
  this.pristine = false;
2047
+ const sourceControl = opts.sourceControl ?? this;
1997
2048
  if (this._parent && !opts.onlySelf) {
1998
- this._parent.markAsDirty(opts);
2049
+ this._parent.markAsDirty({ ...opts, sourceControl });
2050
+ }
2051
+ if (changed && opts.emitEvent !== false) {
2052
+ this._events.next(new PristineChangeEvent(false, sourceControl));
1999
2053
  }
2000
2054
  }
2001
- /**
2002
- * Marks the control as `pristine`.
2003
- *
2004
- * If the control has any children, marks all children as `pristine`,
2005
- * and recalculates the `pristine` status of all parent
2006
- * controls.
2007
- *
2008
- * @see {@link markAsTouched()}
2009
- * @see {@link markAsUntouched()}
2010
- * @see {@link markAsDirty()}
2011
- *
2012
- * @param opts Configuration options that determine how the control emits events after
2013
- * marking is applied.
2014
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
2015
- * marks all direct ancestors. Default is false.
2016
- */
2017
2055
  markAsPristine(opts = {}) {
2056
+ const changed = this.pristine === false;
2018
2057
  this.pristine = true;
2019
2058
  this._pendingDirty = false;
2059
+ const sourceControl = opts.sourceControl ?? this;
2020
2060
  this._forEachChild((control) => {
2021
- control.markAsPristine({ onlySelf: true });
2061
+ /** We don't propagate the source control downwards */
2062
+ control.markAsPristine({ onlySelf: true, emitEvent: opts.emitEvent });
2022
2063
  });
2023
2064
  if (this._parent && !opts.onlySelf) {
2024
- this._parent._updatePristine(opts);
2065
+ this._parent._updatePristine(opts, sourceControl);
2066
+ }
2067
+ if (changed && opts.emitEvent !== false) {
2068
+ this._events.next(new PristineChangeEvent(true, sourceControl));
2025
2069
  }
2026
2070
  }
2027
- /**
2028
- * Marks the control as `pending`.
2029
- *
2030
- * A control is pending while the control performs async validation.
2031
- *
2032
- * @see {@link AbstractControl.status}
2033
- *
2034
- * @param opts Configuration options that determine how the control propagates changes and
2035
- * emits events after marking is applied.
2036
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
2037
- * marks all direct ancestors. Default is false.
2038
- * * `emitEvent`: When true or not supplied (the default), the `statusChanges`
2039
- * observable emits an event with the latest status the control is marked pending.
2040
- * When false, no events are emitted.
2041
- *
2042
- */
2043
2071
  markAsPending(opts = {}) {
2044
2072
  this.status = PENDING;
2073
+ const sourceControl = opts.sourceControl ?? this;
2045
2074
  if (opts.emitEvent !== false) {
2075
+ this._events.next(new StatusChangeEvent(this.status, sourceControl));
2046
2076
  this.statusChanges.emit(this.status);
2047
2077
  }
2048
2078
  if (this._parent && !opts.onlySelf) {
2049
- this._parent.markAsPending(opts);
2079
+ this._parent.markAsPending({ ...opts, sourceControl });
2050
2080
  }
2051
2081
  }
2052
- /**
2053
- * Disables the control. This means the control is exempt from validation checks and
2054
- * excluded from the aggregate value of any parent. Its status is `DISABLED`.
2055
- *
2056
- * If the control has children, all children are also disabled.
2057
- *
2058
- * @see {@link AbstractControl.status}
2059
- *
2060
- * @param opts Configuration options that determine how the control propagates
2061
- * changes and emits events after the control is disabled.
2062
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
2063
- * marks all direct ancestors. Default is false.
2064
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
2065
- * `valueChanges`
2066
- * observables emit events with the latest status and value when the control is disabled.
2067
- * When false, no events are emitted.
2068
- */
2069
2082
  disable(opts = {}) {
2070
2083
  // If parent has been marked artificially dirty we don't want to re-calculate the
2071
2084
  // parent's dirtiness based on the children.
@@ -2073,14 +2086,18 @@ class AbstractControl {
2073
2086
  this.status = DISABLED;
2074
2087
  this.errors = null;
2075
2088
  this._forEachChild((control) => {
2089
+ /** We don't propagate the source control downwards */
2076
2090
  control.disable({ ...opts, onlySelf: true });
2077
2091
  });
2078
2092
  this._updateValue();
2093
+ const sourceControl = opts.sourceControl ?? this;
2079
2094
  if (opts.emitEvent !== false) {
2095
+ this._events.next(new ValueChangeEvent(this.value, sourceControl));
2096
+ this._events.next(new StatusChangeEvent(this.status, sourceControl));
2080
2097
  this.valueChanges.emit(this.value);
2081
2098
  this.statusChanges.emit(this.status);
2082
2099
  }
2083
- this._updateAncestors({ ...opts, skipPristineCheck });
2100
+ this._updateAncestors({ ...opts, skipPristineCheck }, this);
2084
2101
  this._onDisabledChange.forEach((changeFn) => changeFn(true));
2085
2102
  }
2086
2103
  /**
@@ -2096,8 +2113,8 @@ class AbstractControl {
2096
2113
  * emits events when marked as untouched
2097
2114
  * * `onlySelf`: When true, mark only this control. When false or not supplied,
2098
2115
  * marks all direct ancestors. Default is false.
2099
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
2100
- * `valueChanges`
2116
+ * * `emitEvent`: When true or not supplied (the default), the `statusChanges`,
2117
+ * `valueChanges` and `events`
2101
2118
  * observables emit events with the latest status and value when the control is enabled.
2102
2119
  * When false, no events are emitted.
2103
2120
  */
@@ -2110,16 +2127,16 @@ class AbstractControl {
2110
2127
  control.enable({ ...opts, onlySelf: true });
2111
2128
  });
2112
2129
  this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });
2113
- this._updateAncestors({ ...opts, skipPristineCheck });
2130
+ this._updateAncestors({ ...opts, skipPristineCheck }, this);
2114
2131
  this._onDisabledChange.forEach((changeFn) => changeFn(false));
2115
2132
  }
2116
- _updateAncestors(opts) {
2133
+ _updateAncestors(opts, sourceControl) {
2117
2134
  if (this._parent && !opts.onlySelf) {
2118
2135
  this._parent.updateValueAndValidity(opts);
2119
2136
  if (!opts.skipPristineCheck) {
2120
- this._parent._updatePristine();
2137
+ this._parent._updatePristine({}, sourceControl);
2121
2138
  }
2122
- this._parent._updateTouched();
2139
+ this._parent._updateTouched({}, sourceControl);
2123
2140
  }
2124
2141
  }
2125
2142
  /**
@@ -2137,20 +2154,6 @@ class AbstractControl {
2137
2154
  getRawValue() {
2138
2155
  return this.value;
2139
2156
  }
2140
- /**
2141
- * Recalculates the value and validation status of the control.
2142
- *
2143
- * By default, it also updates the value and validity of its ancestors.
2144
- *
2145
- * @param opts Configuration options determine how the control propagates changes and emits events
2146
- * after updates and validity checks are applied.
2147
- * * `onlySelf`: When true, only update this control. When false or not supplied,
2148
- * update all direct ancestors. Default is false.
2149
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
2150
- * `valueChanges`
2151
- * observables emit events with the latest status and value when the control is updated.
2152
- * When false, no events are emitted.
2153
- */
2154
2157
  updateValueAndValidity(opts = {}) {
2155
2158
  this._setInitialStatus();
2156
2159
  this._updateValue();
@@ -2162,12 +2165,15 @@ class AbstractControl {
2162
2165
  this._runAsyncValidator(opts.emitEvent);
2163
2166
  }
2164
2167
  }
2168
+ const sourceControl = opts.sourceControl ?? this;
2165
2169
  if (opts.emitEvent !== false) {
2170
+ this._events.next(new ValueChangeEvent(this.value, sourceControl));
2171
+ this._events.next(new StatusChangeEvent(this.status, sourceControl));
2166
2172
  this.valueChanges.emit(this.value);
2167
2173
  this.statusChanges.emit(this.status);
2168
2174
  }
2169
2175
  if (this._parent && !opts.onlySelf) {
2170
- this._parent.updateValueAndValidity(opts);
2176
+ this._parent.updateValueAndValidity({ ...opts, sourceControl });
2171
2177
  }
2172
2178
  }
2173
2179
  /** @internal */
@@ -2231,7 +2237,7 @@ class AbstractControl {
2231
2237
  */
2232
2238
  setErrors(errors, opts = {}) {
2233
2239
  this.errors = errors;
2234
- this._updateControlsErrors(opts.emitEvent !== false);
2240
+ this._updateControlsErrors(opts.emitEvent !== false, this);
2235
2241
  }
2236
2242
  /**
2237
2243
  * Retrieves a child control given the control's name or path.
@@ -2348,13 +2354,14 @@ class AbstractControl {
2348
2354
  return x;
2349
2355
  }
2350
2356
  /** @internal */
2351
- _updateControlsErrors(emitEvent) {
2357
+ _updateControlsErrors(emitEvent, changedControl) {
2352
2358
  this.status = this._calculateStatus();
2353
2359
  if (emitEvent) {
2354
2360
  this.statusChanges.emit(this.status);
2361
+ this._events.next(new StatusChangeEvent(this.status, changedControl));
2355
2362
  }
2356
2363
  if (this._parent) {
2357
- this._parent._updateControlsErrors(emitEvent);
2364
+ this._parent._updateControlsErrors(emitEvent, changedControl);
2358
2365
  }
2359
2366
  }
2360
2367
  /** @internal */
@@ -2386,17 +2393,23 @@ class AbstractControl {
2386
2393
  return this._anyControls((control) => control.touched);
2387
2394
  }
2388
2395
  /** @internal */
2389
- _updatePristine(opts = {}) {
2390
- this.pristine = !this._anyControlsDirty();
2396
+ _updatePristine(opts, changedControl) {
2397
+ const newPristine = !this._anyControlsDirty();
2398
+ const changed = this.pristine !== newPristine;
2399
+ this.pristine = newPristine;
2391
2400
  if (this._parent && !opts.onlySelf) {
2392
- this._parent._updatePristine(opts);
2401
+ this._parent._updatePristine(opts, changedControl);
2402
+ }
2403
+ if (changed) {
2404
+ this._events.next(new PristineChangeEvent(this.pristine, changedControl));
2393
2405
  }
2394
2406
  }
2395
2407
  /** @internal */
2396
- _updateTouched(opts = {}) {
2408
+ _updateTouched(opts = {}, changedControl) {
2397
2409
  this.touched = this._anyControlsTouched();
2410
+ this._events.next(new TouchedChangeEvent(this.touched, changedControl));
2398
2411
  if (this._parent && !opts.onlySelf) {
2399
- this._parent._updateTouched(opts);
2412
+ this._parent._updateTouched(opts, changedControl);
2400
2413
  }
2401
2414
  }
2402
2415
  /** @internal */
@@ -2782,8 +2795,8 @@ class FormGroup extends AbstractControl {
2782
2795
  this._forEachChild((control, name) => {
2783
2796
  control.reset(value ? value[name] : null, { onlySelf: true, emitEvent: options.emitEvent });
2784
2797
  });
2785
- this._updatePristine(options);
2786
- this._updateTouched(options);
2798
+ this._updatePristine(options, this);
2799
+ this._updateTouched(options, this);
2787
2800
  this.updateValueAndValidity(options);
2788
2801
  }
2789
2802
  /**
@@ -3514,10 +3527,10 @@ class NgForm extends ControlContainer {
3514
3527
  path.pop();
3515
3528
  return path.length ? this.form.get(path) : this.form;
3516
3529
  }
3517
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgForm, deps: [{ token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: CALL_SET_DISABLED_STATE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3518
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: { options: ["ngFormOptions", "options"] }, outputs: { ngSubmit: "ngSubmit" }, host: { listeners: { "submit": "onSubmit($event)", "reset": "onReset()" } }, providers: [formDirectiveProvider$1], exportAs: ["ngForm"], usesInheritance: true, ngImport: i0 }); }
3530
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgForm, deps: [{ token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: CALL_SET_DISABLED_STATE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3531
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: { options: ["ngFormOptions", "options"] }, outputs: { ngSubmit: "ngSubmit" }, host: { listeners: { "submit": "onSubmit($event)", "reset": "onReset()" } }, providers: [formDirectiveProvider$1], exportAs: ["ngForm"], usesInheritance: true, ngImport: i0 }); }
3519
3532
  }
3520
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgForm, decorators: [{
3533
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgForm, decorators: [{
3521
3534
  type: Directive,
3522
3535
  args: [{
3523
3536
  selector: 'form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]',
@@ -3712,10 +3725,10 @@ class AbstractFormGroupDirective extends ControlContainer {
3712
3725
  }
3713
3726
  /** @internal */
3714
3727
  _checkParentType() { }
3715
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: AbstractFormGroupDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
3716
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: AbstractFormGroupDirective, usesInheritance: true, ngImport: i0 }); }
3728
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: AbstractFormGroupDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
3729
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: AbstractFormGroupDirective, usesInheritance: true, ngImport: i0 }); }
3717
3730
  }
3718
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: AbstractFormGroupDirective, decorators: [{
3731
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: AbstractFormGroupDirective, decorators: [{
3719
3732
  type: Directive
3720
3733
  }] });
3721
3734
 
@@ -3814,10 +3827,10 @@ class NgModelGroup extends AbstractFormGroupDirective {
3814
3827
  throw modelGroupParentException();
3815
3828
  }
3816
3829
  }
3817
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgModelGroup, deps: [{ token: ControlContainer, host: true, skipSelf: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3818
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: NgModelGroup, selector: "[ngModelGroup]", inputs: { name: ["ngModelGroup", "name"] }, providers: [modelGroupProvider], exportAs: ["ngModelGroup"], usesInheritance: true, ngImport: i0 }); }
3830
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgModelGroup, deps: [{ token: ControlContainer, host: true, skipSelf: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3831
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: NgModelGroup, selector: "[ngModelGroup]", inputs: { name: ["ngModelGroup", "name"] }, providers: [modelGroupProvider], exportAs: ["ngModelGroup"], usesInheritance: true, ngImport: i0 }); }
3819
3832
  }
3820
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgModelGroup, decorators: [{
3833
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgModelGroup, decorators: [{
3821
3834
  type: Directive,
3822
3835
  args: [{ selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup' }]
3823
3836
  }], ctorParameters: () => [{ type: ControlContainer, decorators: [{
@@ -4093,10 +4106,10 @@ class NgModel extends NgControl {
4093
4106
  _getPath(controlName) {
4094
4107
  return this._parent ? controlPath(controlName, this._parent) : [controlName];
4095
4108
  }
4096
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgModel, deps: [{ token: ControlContainer, host: true, optional: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: NG_VALUE_ACCESSOR, optional: true, self: true }, { token: ChangeDetectorRef, optional: true }, { token: CALL_SET_DISABLED_STATE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
4097
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: { name: "name", isDisabled: ["disabled", "isDisabled"], model: ["ngModel", "model"], options: ["ngModelOptions", "options"] }, outputs: { update: "ngModelChange" }, providers: [formControlBinding$1], exportAs: ["ngModel"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
4109
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgModel, deps: [{ token: ControlContainer, host: true, optional: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: NG_VALUE_ACCESSOR, optional: true, self: true }, { token: ChangeDetectorRef, optional: true }, { token: CALL_SET_DISABLED_STATE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
4110
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: { name: "name", isDisabled: ["disabled", "isDisabled"], model: ["ngModel", "model"], options: ["ngModelOptions", "options"] }, outputs: { update: "ngModelChange" }, providers: [formControlBinding$1], exportAs: ["ngModel"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
4098
4111
  }
4099
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgModel, decorators: [{
4112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgModel, decorators: [{
4100
4113
  type: Directive,
4101
4114
  args: [{
4102
4115
  selector: '[ngModel]:not([formControlName]):not([formControl])',
@@ -4172,10 +4185,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2",
4172
4185
  * @ngModule FormsModule
4173
4186
  */
4174
4187
  class ɵNgNoValidate {
4175
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: ɵNgNoValidate, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4176
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])", host: { attributes: { "novalidate": "" } }, ngImport: i0 }); }
4188
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: ɵNgNoValidate, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4189
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])", host: { attributes: { "novalidate": "" } }, ngImport: i0 }); }
4177
4190
  }
4178
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: ɵNgNoValidate, decorators: [{
4191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: ɵNgNoValidate, decorators: [{
4179
4192
  type: Directive,
4180
4193
  args: [{
4181
4194
  selector: 'form:not([ngNoForm]):not([ngNativeValidate])',
@@ -4231,10 +4244,10 @@ class NumberValueAccessor extends BuiltInControlValueAccessor {
4231
4244
  fn(value == '' ? null : parseFloat(value));
4232
4245
  };
4233
4246
  }
4234
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NumberValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
4235
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]", host: { listeners: { "input": "onChange($event.target.value)", "blur": "onTouched()" } }, providers: [NUMBER_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
4247
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NumberValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
4248
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]", host: { listeners: { "input": "onChange($event.target.value)", "blur": "onTouched()" } }, providers: [NUMBER_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
4236
4249
  }
4237
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NumberValueAccessor, decorators: [{
4250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NumberValueAccessor, decorators: [{
4238
4251
  type: Directive,
4239
4252
  args: [{
4240
4253
  selector: 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',
@@ -4298,10 +4311,10 @@ class RadioControlRegistry {
4298
4311
  return controlPair[0]._parent === accessor._control._parent &&
4299
4312
  controlPair[1].name === accessor.name;
4300
4313
  }
4301
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: RadioControlRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4302
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: RadioControlRegistry, providedIn: 'root' }); }
4314
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: RadioControlRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4315
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: RadioControlRegistry, providedIn: 'root' }); }
4303
4316
  }
4304
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: RadioControlRegistry, decorators: [{
4317
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: RadioControlRegistry, decorators: [{
4305
4318
  type: Injectable,
4306
4319
  args: [{ providedIn: 'root' }]
4307
4320
  }] });
@@ -4412,10 +4425,10 @@ class RadioControlValueAccessor extends BuiltInControlValueAccessor {
4412
4425
  if (!this.name && this.formControlName)
4413
4426
  this.name = this.formControlName;
4414
4427
  }
4415
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: RadioControlValueAccessor, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: RadioControlRegistry }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
4416
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: { name: "name", formControlName: "formControlName", value: "value" }, host: { listeners: { "change": "onChange()", "blur": "onTouched()" } }, providers: [RADIO_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
4428
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: RadioControlValueAccessor, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: RadioControlRegistry }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
4429
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: { name: "name", formControlName: "formControlName", value: "value" }, host: { listeners: { "change": "onChange()", "blur": "onTouched()" } }, providers: [RADIO_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
4417
4430
  }
4418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: RadioControlValueAccessor, decorators: [{
4431
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: RadioControlValueAccessor, decorators: [{
4419
4432
  type: Directive,
4420
4433
  args: [{
4421
4434
  selector: 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',
@@ -4476,10 +4489,10 @@ class RangeValueAccessor extends BuiltInControlValueAccessor {
4476
4489
  fn(value == '' ? null : parseFloat(value));
4477
4490
  };
4478
4491
  }
4479
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: RangeValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
4480
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]", host: { listeners: { "change": "onChange($event.target.value)", "input": "onChange($event.target.value)", "blur": "onTouched()" } }, providers: [RANGE_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
4492
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: RangeValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
4493
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]", host: { listeners: { "change": "onChange($event.target.value)", "input": "onChange($event.target.value)", "blur": "onTouched()" } }, providers: [RANGE_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
4481
4494
  }
4482
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: RangeValueAccessor, decorators: [{
4495
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: RangeValueAccessor, decorators: [{
4483
4496
  type: Directive,
4484
4497
  args: [{
4485
4498
  selector: 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',
@@ -4507,9 +4520,8 @@ const formControlBinding = {
4507
4520
  * Note that support for using the `ngModel` input property and `ngModelChange` event with reactive
4508
4521
  * form directives was deprecated in Angular v6 and is scheduled for removal in
4509
4522
  * a future version of Angular.
4510
- * For details, see [Deprecated features](guide/deprecations#ngmodel-with-reactive-forms).
4511
4523
  *
4512
- * @see [Reactive Forms Guide](guide/reactive-forms)
4524
+ * @see [Reactive Forms Guide](guide/forms/reactive-forms)
4513
4525
  * @see {@link FormControl}
4514
4526
  * @see {@link AbstractControl}
4515
4527
  *
@@ -4610,10 +4622,10 @@ class FormControlDirective extends NgControl {
4610
4622
  _isControlChanged(changes) {
4611
4623
  return changes.hasOwnProperty('form');
4612
4624
  }
4613
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormControlDirective, deps: [{ token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: NG_VALUE_ACCESSOR, optional: true, self: true }, { token: NG_MODEL_WITH_FORM_CONTROL_WARNING, optional: true }, { token: CALL_SET_DISABLED_STATE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
4614
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: FormControlDirective, selector: "[formControl]", inputs: { form: ["formControl", "form"], isDisabled: ["disabled", "isDisabled"], model: ["ngModel", "model"] }, outputs: { update: "ngModelChange" }, providers: [formControlBinding], exportAs: ["ngForm"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
4625
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormControlDirective, deps: [{ token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: NG_VALUE_ACCESSOR, optional: true, self: true }, { token: NG_MODEL_WITH_FORM_CONTROL_WARNING, optional: true }, { token: CALL_SET_DISABLED_STATE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
4626
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: FormControlDirective, selector: "[formControl]", inputs: { form: ["formControl", "form"], isDisabled: ["disabled", "isDisabled"], model: ["ngModel", "model"] }, outputs: { update: "ngModelChange" }, providers: [formControlBinding], exportAs: ["ngForm"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
4615
4627
  }
4616
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormControlDirective, decorators: [{
4628
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormControlDirective, decorators: [{
4617
4629
  type: Directive,
4618
4630
  args: [{ selector: '[formControl]', providers: [formControlBinding], exportAs: 'ngForm' }]
4619
4631
  }], ctorParameters: () => [{ type: undefined, decorators: [{
@@ -4675,7 +4687,7 @@ const formDirectiveProvider = {
4675
4687
  * and `FormArray` instances to child `FormControlName`, `FormGroupName`,
4676
4688
  * and `FormArrayName` directives.
4677
4689
  *
4678
- * @see [Reactive Forms Guide](guide/reactive-forms)
4690
+ * @see [Reactive Forms Guide](guide/forms/reactive-forms)
4679
4691
  * @see {@link AbstractControl}
4680
4692
  *
4681
4693
  * @usageNotes
@@ -4956,10 +4968,10 @@ class FormGroupDirective extends ControlContainer {
4956
4968
  throw missingFormException();
4957
4969
  }
4958
4970
  }
4959
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormGroupDirective, deps: [{ token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: CALL_SET_DISABLED_STATE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
4960
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: FormGroupDirective, selector: "[formGroup]", inputs: { form: ["formGroup", "form"] }, outputs: { ngSubmit: "ngSubmit" }, host: { listeners: { "submit": "onSubmit($event)", "reset": "onReset()" } }, providers: [formDirectiveProvider], exportAs: ["ngForm"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
4971
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormGroupDirective, deps: [{ token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: CALL_SET_DISABLED_STATE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
4972
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: FormGroupDirective, selector: "[formGroup]", inputs: { form: ["formGroup", "form"] }, outputs: { ngSubmit: "ngSubmit" }, host: { listeners: { "submit": "onSubmit($event)", "reset": "onReset()" } }, providers: [formDirectiveProvider], exportAs: ["ngForm"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
4961
4973
  }
4962
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormGroupDirective, decorators: [{
4974
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormGroupDirective, decorators: [{
4963
4975
  type: Directive,
4964
4976
  args: [{
4965
4977
  selector: '[formGroup]',
@@ -5012,7 +5024,7 @@ const formGroupNameProvider = {
5012
5024
  * form separately from the rest or to group the values of certain
5013
5025
  * controls into their own nested object.
5014
5026
  *
5015
- * @see [Reactive Forms Guide](guide/reactive-forms)
5027
+ * @see [Reactive Forms Guide](guide/forms/reactive-forms)
5016
5028
  *
5017
5029
  * @usageNotes
5018
5030
  *
@@ -5067,10 +5079,10 @@ class FormGroupName extends AbstractFormGroupDirective {
5067
5079
  throw groupParentException();
5068
5080
  }
5069
5081
  }
5070
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormGroupName, deps: [{ token: ControlContainer, host: true, optional: true, skipSelf: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5071
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: FormGroupName, selector: "[formGroupName]", inputs: { name: ["formGroupName", "name"] }, providers: [formGroupNameProvider], usesInheritance: true, ngImport: i0 }); }
5082
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormGroupName, deps: [{ token: ControlContainer, host: true, optional: true, skipSelf: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5083
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: FormGroupName, selector: "[formGroupName]", inputs: { name: ["formGroupName", "name"] }, providers: [formGroupNameProvider], usesInheritance: true, ngImport: i0 }); }
5072
5084
  }
5073
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormGroupName, decorators: [{
5085
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormGroupName, decorators: [{
5074
5086
  type: Directive,
5075
5087
  args: [{ selector: '[formGroupName]', providers: [formGroupNameProvider] }]
5076
5088
  }], ctorParameters: () => [{ type: ControlContainer, decorators: [{
@@ -5113,7 +5125,7 @@ const formArrayNameProvider = {
5113
5125
  * will look for a `FormArray` registered with that name in the parent
5114
5126
  * `FormGroup` instance you passed into `FormGroupDirective`.
5115
5127
  *
5116
- * @see [Reactive Forms Guide](guide/reactive-forms)
5128
+ * @see [Reactive Forms Guide](guide/forms/reactive-forms)
5117
5129
  * @see {@link AbstractControl}
5118
5130
  *
5119
5131
  * @usageNotes
@@ -5187,10 +5199,10 @@ class FormArrayName extends ControlContainer {
5187
5199
  throw arrayParentException();
5188
5200
  }
5189
5201
  }
5190
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormArrayName, deps: [{ token: ControlContainer, host: true, optional: true, skipSelf: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5191
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: FormArrayName, selector: "[formArrayName]", inputs: { name: ["formArrayName", "name"] }, providers: [formArrayNameProvider], usesInheritance: true, ngImport: i0 }); }
5202
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormArrayName, deps: [{ token: ControlContainer, host: true, optional: true, skipSelf: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5203
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: FormArrayName, selector: "[formArrayName]", inputs: { name: ["formArrayName", "name"] }, providers: [formArrayNameProvider], usesInheritance: true, ngImport: i0 }); }
5192
5204
  }
5193
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormArrayName, decorators: [{
5205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormArrayName, decorators: [{
5194
5206
  type: Directive,
5195
5207
  args: [{ selector: '[formArrayName]', providers: [formArrayNameProvider] }]
5196
5208
  }], ctorParameters: () => [{ type: ControlContainer, decorators: [{
@@ -5231,7 +5243,7 @@ const controlNameBinding = {
5231
5243
  * Syncs a `FormControl` in an existing `FormGroup` to a form control
5232
5244
  * element by name.
5233
5245
  *
5234
- * @see [Reactive Forms Guide](guide/reactive-forms)
5246
+ * @see [Reactive Forms Guide](guide/forms/reactive-forms)
5235
5247
  * @see {@link FormControl}
5236
5248
  * @see {@link AbstractControl}
5237
5249
  *
@@ -5255,8 +5267,6 @@ const controlNameBinding = {
5255
5267
  * form directives has been deprecated in Angular v6 and is scheduled for removal in
5256
5268
  * a future version of Angular.
5257
5269
  *
5258
- * For details, see [Deprecated features](guide/deprecations#ngmodel-with-reactive-forms).
5259
- *
5260
5270
  * @ngModule ReactiveFormsModule
5261
5271
  * @publicApi
5262
5272
  */
@@ -5368,10 +5378,10 @@ class FormControlName extends NgControl {
5368
5378
  this.control = this.formDirective.addControl(this);
5369
5379
  this._added = true;
5370
5380
  }
5371
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormControlName, deps: [{ token: ControlContainer, host: true, optional: true, skipSelf: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: NG_VALUE_ACCESSOR, optional: true, self: true }, { token: NG_MODEL_WITH_FORM_CONTROL_WARNING, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5372
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: FormControlName, selector: "[formControlName]", inputs: { name: ["formControlName", "name"], isDisabled: ["disabled", "isDisabled"], model: ["ngModel", "model"] }, outputs: { update: "ngModelChange" }, providers: [controlNameBinding], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
5381
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormControlName, deps: [{ token: ControlContainer, host: true, optional: true, skipSelf: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: NG_VALUE_ACCESSOR, optional: true, self: true }, { token: NG_MODEL_WITH_FORM_CONTROL_WARNING, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5382
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: FormControlName, selector: "[formControlName]", inputs: { name: ["formControlName", "name"], isDisabled: ["disabled", "isDisabled"], model: ["ngModel", "model"] }, outputs: { update: "ngModelChange" }, providers: [controlNameBinding], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
5373
5383
  }
5374
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormControlName, decorators: [{
5384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormControlName, decorators: [{
5375
5385
  type: Directive,
5376
5386
  args: [{ selector: '[formControlName]', providers: [controlNameBinding] }]
5377
5387
  }], ctorParameters: () => [{ type: ControlContainer, decorators: [{
@@ -5548,10 +5558,10 @@ class SelectControlValueAccessor extends BuiltInControlValueAccessor {
5548
5558
  const id = _extractId$1(valueString);
5549
5559
  return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;
5550
5560
  }
5551
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: SelectControlValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
5552
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: { compareWith: "compareWith" }, host: { listeners: { "change": "onChange($event.target.value)", "blur": "onTouched()" } }, providers: [SELECT_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
5561
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: SelectControlValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
5562
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: { compareWith: "compareWith" }, host: { listeners: { "change": "onChange($event.target.value)", "blur": "onTouched()" } }, providers: [SELECT_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
5553
5563
  }
5554
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: SelectControlValueAccessor, decorators: [{
5564
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: SelectControlValueAccessor, decorators: [{
5555
5565
  type: Directive,
5556
5566
  args: [{
5557
5567
  selector: 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',
@@ -5612,10 +5622,10 @@ class NgSelectOption {
5612
5622
  this._select.writeValue(this._select.value);
5613
5623
  }
5614
5624
  }
5615
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgSelectOption, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: SelectControlValueAccessor, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5616
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: NgSelectOption, selector: "option", inputs: { ngValue: "ngValue", value: "value" }, ngImport: i0 }); }
5625
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgSelectOption, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: SelectControlValueAccessor, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5626
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: NgSelectOption, selector: "option", inputs: { ngValue: "ngValue", value: "value" }, ngImport: i0 }); }
5617
5627
  }
5618
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NgSelectOption, decorators: [{
5628
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NgSelectOption, decorators: [{
5619
5629
  type: Directive,
5620
5630
  args: [{ selector: 'option' }]
5621
5631
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: SelectControlValueAccessor, decorators: [{
@@ -5779,10 +5789,10 @@ class SelectMultipleControlValueAccessor extends BuiltInControlValueAccessor {
5779
5789
  const id = _extractId(valueString);
5780
5790
  return this._optionMap.has(id) ? this._optionMap.get(id)._value : valueString;
5781
5791
  }
5782
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: SelectMultipleControlValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
5783
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: { compareWith: "compareWith" }, host: { listeners: { "change": "onChange($event.target)", "blur": "onTouched()" } }, providers: [SELECT_MULTIPLE_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
5792
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: SelectMultipleControlValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
5793
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: { compareWith: "compareWith" }, host: { listeners: { "change": "onChange($event.target)", "blur": "onTouched()" } }, providers: [SELECT_MULTIPLE_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0 }); }
5784
5794
  }
5785
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: SelectMultipleControlValueAccessor, decorators: [{
5795
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: SelectMultipleControlValueAccessor, decorators: [{
5786
5796
  type: Directive,
5787
5797
  args: [{
5788
5798
  selector: 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',
@@ -5853,10 +5863,10 @@ class ɵNgSelectMultipleOption {
5853
5863
  this._select.writeValue(this._select.value);
5854
5864
  }
5855
5865
  }
5856
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: ɵNgSelectMultipleOption, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: SelectMultipleControlValueAccessor, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5857
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: ɵNgSelectMultipleOption, selector: "option", inputs: { ngValue: "ngValue", value: "value" }, ngImport: i0 }); }
5866
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: ɵNgSelectMultipleOption, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: SelectMultipleControlValueAccessor, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5867
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: ɵNgSelectMultipleOption, selector: "option", inputs: { ngValue: "ngValue", value: "value" }, ngImport: i0 }); }
5858
5868
  }
5859
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: ɵNgSelectMultipleOption, decorators: [{
5869
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: ɵNgSelectMultipleOption, decorators: [{
5860
5870
  type: Directive,
5861
5871
  args: [{ selector: 'option' }]
5862
5872
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: SelectMultipleControlValueAccessor, decorators: [{
@@ -5928,10 +5938,10 @@ class AbstractValidatorDirective {
5928
5938
  enabled(input) {
5929
5939
  return input != null /* both `null` and `undefined` */;
5930
5940
  }
5931
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: AbstractValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5932
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: AbstractValidatorDirective, usesOnChanges: true, ngImport: i0 }); }
5941
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: AbstractValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5942
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: AbstractValidatorDirective, usesOnChanges: true, ngImport: i0 }); }
5933
5943
  }
5934
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: AbstractValidatorDirective, decorators: [{
5944
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: AbstractValidatorDirective, decorators: [{
5935
5945
  type: Directive
5936
5946
  }] });
5937
5947
  /**
@@ -5947,7 +5957,7 @@ const MAX_VALIDATOR = {
5947
5957
  * A directive which installs the {@link MaxValidator} for any `formControlName`,
5948
5958
  * `formControl`, or control with `ngModel` that also has a `max` attribute.
5949
5959
  *
5950
- * @see [Form Validation](guide/form-validation)
5960
+ * @see [Form Validation](guide/forms/form-validation)
5951
5961
  *
5952
5962
  * @usageNotes
5953
5963
  *
@@ -5974,10 +5984,10 @@ class MaxValidator extends AbstractValidatorDirective {
5974
5984
  /** @internal */
5975
5985
  this.createValidator = (max) => maxValidator(max);
5976
5986
  }
5977
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: MaxValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
5978
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: { max: "max" }, host: { properties: { "attr.max": "_enabled ? max : null" } }, providers: [MAX_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
5987
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: MaxValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
5988
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: { max: "max" }, host: { properties: { "attr.max": "_enabled ? max : null" } }, providers: [MAX_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
5979
5989
  }
5980
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: MaxValidator, decorators: [{
5990
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: MaxValidator, decorators: [{
5981
5991
  type: Directive,
5982
5992
  args: [{
5983
5993
  selector: 'input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]',
@@ -6000,7 +6010,7 @@ const MIN_VALIDATOR = {
6000
6010
  * A directive which installs the {@link MinValidator} for any `formControlName`,
6001
6011
  * `formControl`, or control with `ngModel` that also has a `min` attribute.
6002
6012
  *
6003
- * @see [Form Validation](guide/form-validation)
6013
+ * @see [Form Validation](guide/forms/form-validation)
6004
6014
  *
6005
6015
  * @usageNotes
6006
6016
  *
@@ -6027,10 +6037,10 @@ class MinValidator extends AbstractValidatorDirective {
6027
6037
  /** @internal */
6028
6038
  this.createValidator = (min) => minValidator(min);
6029
6039
  }
6030
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: MinValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6031
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: { min: "min" }, host: { properties: { "attr.min": "_enabled ? min : null" } }, providers: [MIN_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6040
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: MinValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6041
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: { min: "min" }, host: { properties: { "attr.min": "_enabled ? min : null" } }, providers: [MIN_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6032
6042
  }
6033
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: MinValidator, decorators: [{
6043
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: MinValidator, decorators: [{
6034
6044
  type: Directive,
6035
6045
  args: [{
6036
6046
  selector: 'input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]',
@@ -6063,7 +6073,7 @@ const CHECKBOX_REQUIRED_VALIDATOR = {
6063
6073
  * A directive that adds the `required` validator to any controls marked with the
6064
6074
  * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
6065
6075
  *
6066
- * @see [Form Validation](guide/form-validation)
6076
+ * @see [Form Validation](guide/forms/form-validation)
6067
6077
  *
6068
6078
  * @usageNotes
6069
6079
  *
@@ -6091,10 +6101,10 @@ class RequiredValidator extends AbstractValidatorDirective {
6091
6101
  enabled(input) {
6092
6102
  return input;
6093
6103
  }
6094
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: RequiredValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6095
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: { required: "required" }, host: { properties: { "attr.required": "_enabled ? \"\" : null" } }, providers: [REQUIRED_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: RequiredValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6105
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: { required: "required" }, host: { properties: { "attr.required": "_enabled ? \"\" : null" } }, providers: [REQUIRED_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6096
6106
  }
6097
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: RequiredValidator, decorators: [{
6107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: RequiredValidator, decorators: [{
6098
6108
  type: Directive,
6099
6109
  args: [{
6100
6110
  selector: ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',
@@ -6108,7 +6118,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2",
6108
6118
  * A Directive that adds the `required` validator to checkbox controls marked with the
6109
6119
  * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
6110
6120
  *
6111
- * @see [Form Validation](guide/form-validation)
6121
+ * @see [Form Validation](guide/forms/form-validation)
6112
6122
  *
6113
6123
  * @usageNotes
6114
6124
  *
@@ -6131,10 +6141,10 @@ class CheckboxRequiredValidator extends RequiredValidator {
6131
6141
  /** @internal */
6132
6142
  this.createValidator = (input) => requiredTrueValidator;
6133
6143
  }
6134
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: CheckboxRequiredValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6135
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]", host: { properties: { "attr.required": "_enabled ? \"\" : null" } }, providers: [CHECKBOX_REQUIRED_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6144
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: CheckboxRequiredValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6145
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]", host: { properties: { "attr.required": "_enabled ? \"\" : null" } }, providers: [CHECKBOX_REQUIRED_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6136
6146
  }
6137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: CheckboxRequiredValidator, decorators: [{
6147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: CheckboxRequiredValidator, decorators: [{
6138
6148
  type: Directive,
6139
6149
  args: [{
6140
6150
  selector: 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',
@@ -6159,7 +6169,7 @@ const EMAIL_VALIDATOR = {
6159
6169
  * incorporate more RFC rules. More information can be found on the [Validators.email
6160
6170
  * page](api/forms/Validators#email).
6161
6171
  *
6162
- * @see [Form Validation](guide/form-validation)
6172
+ * @see [Form Validation](guide/forms/form-validation)
6163
6173
  *
6164
6174
  * @usageNotes
6165
6175
  *
@@ -6192,10 +6202,10 @@ class EmailValidator extends AbstractValidatorDirective {
6192
6202
  enabled(input) {
6193
6203
  return input;
6194
6204
  }
6195
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: EmailValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6196
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: { email: "email" }, providers: [EMAIL_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6205
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: EmailValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6206
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: { email: "email" }, providers: [EMAIL_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6197
6207
  }
6198
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: EmailValidator, decorators: [{
6208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: EmailValidator, decorators: [{
6199
6209
  type: Directive,
6200
6210
  args: [{
6201
6211
  selector: '[email][formControlName],[email][formControl],[email][ngModel]',
@@ -6217,7 +6227,7 @@ const MIN_LENGTH_VALIDATOR = {
6217
6227
  * A directive that adds minimum length validation to controls marked with the
6218
6228
  * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
6219
6229
  *
6220
- * @see [Form Validation](guide/form-validation)
6230
+ * @see [Form Validation](guide/forms/form-validation)
6221
6231
  *
6222
6232
  * @usageNotes
6223
6233
  *
@@ -6244,10 +6254,10 @@ class MinLengthValidator extends AbstractValidatorDirective {
6244
6254
  /** @internal */
6245
6255
  this.createValidator = (minlength) => minLengthValidator(minlength);
6246
6256
  }
6247
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: MinLengthValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6248
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: { minlength: "minlength" }, host: { properties: { "attr.minlength": "_enabled ? minlength : null" } }, providers: [MIN_LENGTH_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6257
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: MinLengthValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6258
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: { minlength: "minlength" }, host: { properties: { "attr.minlength": "_enabled ? minlength : null" } }, providers: [MIN_LENGTH_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6249
6259
  }
6250
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: MinLengthValidator, decorators: [{
6260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: MinLengthValidator, decorators: [{
6251
6261
  type: Directive,
6252
6262
  args: [{
6253
6263
  selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',
@@ -6270,7 +6280,7 @@ const MAX_LENGTH_VALIDATOR = {
6270
6280
  * A directive that adds maximum length validation to controls marked with the
6271
6281
  * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
6272
6282
  *
6273
- * @see [Form Validation](guide/form-validation)
6283
+ * @see [Form Validation](guide/forms/form-validation)
6274
6284
  *
6275
6285
  * @usageNotes
6276
6286
  *
@@ -6297,10 +6307,10 @@ class MaxLengthValidator extends AbstractValidatorDirective {
6297
6307
  /** @internal */
6298
6308
  this.createValidator = (maxlength) => maxLengthValidator(maxlength);
6299
6309
  }
6300
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: MaxLengthValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6301
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: { maxlength: "maxlength" }, host: { properties: { "attr.maxlength": "_enabled ? maxlength : null" } }, providers: [MAX_LENGTH_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6310
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: MaxLengthValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6311
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: { maxlength: "maxlength" }, host: { properties: { "attr.maxlength": "_enabled ? maxlength : null" } }, providers: [MAX_LENGTH_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6302
6312
  }
6303
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: MaxLengthValidator, decorators: [{
6313
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: MaxLengthValidator, decorators: [{
6304
6314
  type: Directive,
6305
6315
  args: [{
6306
6316
  selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',
@@ -6325,7 +6335,7 @@ const PATTERN_VALIDATOR = {
6325
6335
  * `pattern` attribute. The regex must match the entire control value.
6326
6336
  * The directive is provided with the `NG_VALIDATORS` multi-provider list.
6327
6337
  *
6328
- * @see [Form Validation](guide/form-validation)
6338
+ * @see [Form Validation](guide/forms/form-validation)
6329
6339
  *
6330
6340
  * @usageNotes
6331
6341
  *
@@ -6352,10 +6362,10 @@ class PatternValidator extends AbstractValidatorDirective {
6352
6362
  /** @internal */
6353
6363
  this.createValidator = (input) => patternValidator(input);
6354
6364
  }
6355
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: PatternValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6356
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.2", type: PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: { pattern: "pattern" }, host: { properties: { "attr.pattern": "_enabled ? pattern : null" } }, providers: [PATTERN_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6365
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: PatternValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6366
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0-next.4", type: PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: { pattern: "pattern" }, host: { properties: { "attr.pattern": "_enabled ? pattern : null" } }, providers: [PATTERN_VALIDATOR], usesInheritance: true, ngImport: i0 }); }
6357
6367
  }
6358
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: PatternValidator, decorators: [{
6368
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: PatternValidator, decorators: [{
6359
6369
  type: Directive,
6360
6370
  args: [{
6361
6371
  selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',
@@ -6394,8 +6404,8 @@ const REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, Fo
6394
6404
  * Internal module used for sharing directives between FormsModule and ReactiveFormsModule
6395
6405
  */
6396
6406
  class ɵInternalFormsSharedModule {
6397
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: ɵInternalFormsSharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6398
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.0-next.2", ngImport: i0, type: ɵInternalFormsSharedModule, declarations: [ɵNgNoValidate,
6407
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: ɵInternalFormsSharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6408
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.0-next.4", ngImport: i0, type: ɵInternalFormsSharedModule, declarations: [ɵNgNoValidate,
6399
6409
  NgSelectOption,
6400
6410
  ɵNgSelectMultipleOption,
6401
6411
  DefaultValueAccessor,
@@ -6434,9 +6444,9 @@ class ɵInternalFormsSharedModule {
6434
6444
  EmailValidator,
6435
6445
  MinValidator,
6436
6446
  MaxValidator] }); }
6437
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: ɵInternalFormsSharedModule }); }
6447
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: ɵInternalFormsSharedModule }); }
6438
6448
  }
6439
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: ɵInternalFormsSharedModule, decorators: [{
6449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: ɵInternalFormsSharedModule, decorators: [{
6440
6450
  type: NgModule,
6441
6451
  args: [{
6442
6452
  declarations: SHARED_FORM_DIRECTIVES,
@@ -6779,8 +6789,8 @@ class FormArray extends AbstractControl {
6779
6789
  this._forEachChild((control, index) => {
6780
6790
  control.reset(value[index], { onlySelf: true, emitEvent: options.emitEvent });
6781
6791
  });
6782
- this._updatePristine(options);
6783
- this._updateTouched(options);
6792
+ this._updatePristine(options, this);
6793
+ this._updateTouched(options, this);
6784
6794
  this.updateValueAndValidity(options);
6785
6795
  }
6786
6796
  /**
@@ -6912,7 +6922,7 @@ function isAbstractControlOptions(options) {
6912
6922
  * `FormControl`, `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to
6913
6923
  * build complex forms.
6914
6924
  *
6915
- * @see [Reactive Forms Guide](guide/reactive-forms)
6925
+ * @see [Reactive Forms Guide](guide/forms/reactive-forms)
6916
6926
  *
6917
6927
  * @publicApi
6918
6928
  */
@@ -7088,10 +7098,10 @@ class FormBuilder {
7088
7098
  return this.control(controls);
7089
7099
  }
7090
7100
  }
7091
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7092
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormBuilder, providedIn: 'root' }); }
7101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7102
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormBuilder, providedIn: 'root' }); }
7093
7103
  }
7094
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormBuilder, decorators: [{
7104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormBuilder, decorators: [{
7095
7105
  type: Injectable,
7096
7106
  args: [{ providedIn: 'root' }]
7097
7107
  }] });
@@ -7103,10 +7113,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2",
7103
7113
  * @publicApi
7104
7114
  */
7105
7115
  class NonNullableFormBuilder {
7106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NonNullableFormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7107
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NonNullableFormBuilder, providedIn: 'root', useFactory: () => inject(FormBuilder).nonNullable }); }
7116
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NonNullableFormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7117
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NonNullableFormBuilder, providedIn: 'root', useFactory: () => inject(FormBuilder).nonNullable }); }
7108
7118
  }
7109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: NonNullableFormBuilder, decorators: [{
7119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: NonNullableFormBuilder, decorators: [{
7110
7120
  type: Injectable,
7111
7121
  args: [{
7112
7122
  providedIn: 'root',
@@ -7132,10 +7142,10 @@ class UntypedFormBuilder extends FormBuilder {
7132
7142
  array(controlsConfig, validatorOrOpts, asyncValidator) {
7133
7143
  return super.array(controlsConfig, validatorOrOpts, asyncValidator);
7134
7144
  }
7135
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: UntypedFormBuilder, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
7136
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: UntypedFormBuilder, providedIn: 'root' }); }
7145
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: UntypedFormBuilder, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
7146
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: UntypedFormBuilder, providedIn: 'root' }); }
7137
7147
  }
7138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: UntypedFormBuilder, decorators: [{
7148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: UntypedFormBuilder, decorators: [{
7139
7149
  type: Injectable,
7140
7150
  args: [{ providedIn: 'root' }]
7141
7151
  }] });
@@ -7148,14 +7158,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2",
7148
7158
  /**
7149
7159
  * @publicApi
7150
7160
  */
7151
- const VERSION = new Version('18.0.0-next.2');
7161
+ const VERSION = new Version('18.0.0-next.4');
7152
7162
 
7153
7163
  /**
7154
7164
  * Exports the required providers and directives for template-driven forms,
7155
7165
  * making them available for import by NgModules that import this module.
7156
7166
  *
7157
- * @see [Forms Overview](/guide/forms-overview)
7158
- * @see [Template-driven Forms Guide](/guide/forms)
7167
+ * @see [Forms Overview](guide/forms)
7168
+ * @see [Template-driven Forms Guide](guide/forms)
7159
7169
  *
7160
7170
  * @publicApi
7161
7171
  */
@@ -7177,11 +7187,11 @@ class FormsModule {
7177
7187
  }]
7178
7188
  };
7179
7189
  }
7180
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7181
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormsModule, declarations: [NgModel, NgModelGroup, NgForm], exports: [ɵInternalFormsSharedModule, NgModel, NgModelGroup, NgForm] }); }
7182
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormsModule, imports: [ɵInternalFormsSharedModule] }); }
7190
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7191
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormsModule, declarations: [NgModel, NgModelGroup, NgForm], exports: [ɵInternalFormsSharedModule, NgModel, NgModelGroup, NgForm] }); }
7192
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormsModule, imports: [ɵInternalFormsSharedModule] }); }
7183
7193
  }
7184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: FormsModule, decorators: [{
7194
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: FormsModule, decorators: [{
7185
7195
  type: NgModule,
7186
7196
  args: [{
7187
7197
  declarations: TEMPLATE_DRIVEN_DIRECTIVES,
@@ -7192,8 +7202,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2",
7192
7202
  * Exports the required infrastructure and directives for reactive forms,
7193
7203
  * making them available for import by NgModules that import this module.
7194
7204
  *
7195
- * @see [Forms Overview](guide/forms-overview)
7196
- * @see [Reactive Forms Guide](guide/reactive-forms)
7205
+ * @see [Forms Overview](guide/forms)
7206
+ * @see [Reactive Forms Guide](guide/forms/reactive-forms)
7197
7207
  *
7198
7208
  * @publicApi
7199
7209
  */
@@ -7223,11 +7233,11 @@ class ReactiveFormsModule {
7223
7233
  ]
7224
7234
  };
7225
7235
  }
7226
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: ReactiveFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7227
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.0-next.2", ngImport: i0, type: ReactiveFormsModule, declarations: [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName], exports: [ɵInternalFormsSharedModule, FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName] }); }
7228
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: ReactiveFormsModule, imports: [ɵInternalFormsSharedModule] }); }
7236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: ReactiveFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7237
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.0-next.4", ngImport: i0, type: ReactiveFormsModule, declarations: [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName], exports: [ɵInternalFormsSharedModule, FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName] }); }
7238
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: ReactiveFormsModule, imports: [ɵInternalFormsSharedModule] }); }
7229
7239
  }
7230
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2", ngImport: i0, type: ReactiveFormsModule, decorators: [{
7240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: ReactiveFormsModule, decorators: [{
7231
7241
  type: NgModule,
7232
7242
  args: [{
7233
7243
  declarations: [REACTIVE_DRIVEN_DIRECTIVES],
@@ -7259,5 +7269,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.2",
7259
7269
  * Generated bundle index. Do not edit.
7260
7270
  */
7261
7271
 
7262
- export { AbstractControl, AbstractControlDirective, AbstractFormGroupDirective, COMPOSITION_BUFFER_MODE, CheckboxControlValueAccessor, CheckboxRequiredValidator, ControlContainer, DefaultValueAccessor, EmailValidator, FormArray, FormArrayName, FormBuilder, FormControl, FormControlDirective, FormControlName, FormGroup, FormGroupDirective, FormGroupName, FormRecord, FormsModule, MaxLengthValidator, MaxValidator, MinLengthValidator, MinValidator, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, NgSelectOption, NonNullableFormBuilder, NumberValueAccessor, PatternValidator, RadioControlValueAccessor, RangeValueAccessor, ReactiveFormsModule, RequiredValidator, SelectControlValueAccessor, SelectMultipleControlValueAccessor, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, VERSION, Validators, isFormArray, isFormControl, isFormGroup, isFormRecord, ɵInternalFormsSharedModule, ɵNgNoValidate, ɵNgSelectMultipleOption };
7272
+ export { AbstractControl, AbstractControlDirective, AbstractFormGroupDirective, COMPOSITION_BUFFER_MODE, CheckboxControlValueAccessor, CheckboxRequiredValidator, ControlContainer, ControlEvent, DefaultValueAccessor, EmailValidator, FormArray, FormArrayName, FormBuilder, FormControl, FormControlDirective, FormControlName, FormGroup, FormGroupDirective, FormGroupName, FormRecord, FormsModule, MaxLengthValidator, MaxValidator, MinLengthValidator, MinValidator, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, NgSelectOption, NonNullableFormBuilder, NumberValueAccessor, PatternValidator, PristineChangeEvent as PristineEvent, RadioControlValueAccessor, RangeValueAccessor, ReactiveFormsModule, RequiredValidator, SelectControlValueAccessor, SelectMultipleControlValueAccessor, StatusChangeEvent as StatusEvent, TouchedChangeEvent as TouchedEvent, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, VERSION, Validators, ValueChangeEvent, isFormArray, isFormControl, isFormGroup, isFormRecord, ɵInternalFormsSharedModule, ɵNgNoValidate, ɵNgSelectMultipleOption };
7263
7273
  //# sourceMappingURL=forms.mjs.map