Files

Return to Package Diff Home.
Brought to you by Intrinsic.

Package Diff: @angular/forms @ 7.2.7 .. 7.2.8

bundles/forms.umd.js

@@ -1,5 +1,5 @@
/**
- * @license Angular v7.2.7
+ * @license Angular v7.2.8
* (c) 2010-2019 Google LLC. https://angular.io/
* License: MIT
*/
@@ -6517,8 +6517,8 @@
}
else {
// `options` are legacy form group options
- validators = options.validator != null ? options.validator : null;
- asyncValidators = options.asyncValidator != null ? options.asyncValidator : null;
+ validators = options['validator'] != null ? options['validator'] : null;
+ asyncValidators = options['asyncValidator'] != null ? options['asyncValidator'] : null;
}
}
return new FormGroup(controls, { asyncValidators: asyncValidators, updateOn: updateOn, validators: validators });
@@ -6610,7 +6610,7 @@
/**
* @publicApi
*/
- var VERSION = new core.Version('7.2.7');
+ var VERSION = new core.Version('7.2.8');
/**
* @license

bundles/forms.umd.js.map

@@ -1 +1 @@
-{"version":3,"file":"forms.umd.js","sources":["../../../../../packages/forms/src/directives/abstract_control_directive.ts","../../../../../../../../../../external/ngdeps/node_modules/tslib/tslib.es6.js","../../../../../packages/forms/src/directives/control_container.ts","../../../../../packages/forms/src/validators.ts","../../../../../packages/forms/src/directives/control_value_accessor.ts","../../../../../packages/forms/src/directives/checkbox_value_accessor.ts","../../../../../packages/forms/src/directives/default_value_accessor.ts","../../../../../packages/forms/src/directives/normalize_validator.ts","../../../../../packages/forms/src/directives/number_value_accessor.ts","../../../../../packages/forms/src/directives/ng_control.ts","../../../../../packages/forms/src/directives/radio_control_value_accessor.ts","../../../../../packages/forms/src/directives/range_value_accessor.ts","../../../../../packages/forms/src/directives/error_examples.ts","../../../../../packages/forms/src/directives/reactive_errors.ts","../../../../../packages/forms/src/directives/select_control_value_accessor.ts","../../../../../packages/forms/src/directives/select_multiple_control_value_accessor.ts","../../../../../packages/forms/src/directives/shared.ts","../../../../../packages/forms/src/directives/abstract_form_group_directive.ts","../../../../../packages/forms/src/directives/ng_control_status.ts","../../../../../packages/forms/src/model.ts","../../../../../packages/forms/src/directives/ng_form.ts","../../../../../packages/forms/src/directives/template_driven_errors.ts","../../../../../packages/forms/src/directives/ng_form_selector_warning.ts","../../../../../packages/forms/src/directives/ng_model_group.ts","../../../../../packages/forms/src/directives/ng_model.ts","../../../../../packages/forms/src/directives/reactive_directives/form_control_directive.ts","../../../../../packages/forms/src/directives/reactive_directives/form_group_directive.ts","../../../../../packages/forms/src/directives/reactive_directives/form_group_name.ts","../../../../../packages/forms/src/directives/reactive_directives/form_control_name.ts","../../../../../packages/forms/src/directives/validators.ts","../../../../../packages/forms/src/form_builder.ts","../../../../../packages/forms/src/version.ts","../../../../../packages/forms/src/directives/ng_no_validate_directive.ts","../../../../../packages/forms/src/directives.ts","../../../../../packages/forms/src/form_providers.ts","../../../../../packages/forms/src/forms.ts","../../../../../packages/forms/public_api.ts","../../../../../packages/forms/index.ts","../../../../../packages/forms/forms.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable} from 'rxjs';\nimport {AbstractControl} from '../model';\nimport {ValidationErrors} from './validators';\n\n/**\n * @description\n * Base class for control directives.\n *\n * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.\n *\n * @publicApi\n */\nexport abstract class AbstractControlDirective {\n /**\n * @description\n * A reference to the underlying control.\n *\n * @returns the control that backs this directive. Most properties fall through to that instance.\n */\n abstract get control(): AbstractControl|null;\n\n /**\n * @description\n * Reports the value of the control if it is present, otherwise null.\n */\n get value(): any { return this.control ? this.control.value : null; }\n\n /**\n * @description\n * Reports whether the control is valid. A control is considered valid if no\n * validation errors exist with the current value.\n * If the control is not present, null is returned.\n */\n get valid(): boolean|null { return this.control ? this.control.valid : null; }\n\n /**\n * @description\n * Reports whether the control is invalid, meaning that an error exists in the input value.\n * If the control is not present, null is returned.\n */\n get invalid(): boolean|null { return this.control ? this.control.invalid : null; }\n\n /**\n * @description\n * Reports whether a control is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value. If the control is not present, null is\n * returned.\n */\n get pending(): boolean|null { return this.control ? this.control.pending : null; }\n\n /**\n * @description\n * Reports whether the control is disabled, meaning that the control is disabled\n * in the UI and is exempt from validation checks and excluded from aggregate\n * values of ancestor controls. If the control is not present, null is returned.\n */\n get disabled(): boolean|null { return this.control ? this.control.disabled : null; }\n\n /**\n * @description\n * Reports whether the control is enabled, meaning that the control is included in ancestor\n * calculations of validity or value. If the control is not present, null is returned.\n */\n get enabled(): boolean|null { return this.control ? this.control.enabled : null; }\n\n /**\n * @description\n * Reports the control's validation errors. If the control is not present, null is returned.\n */\n get errors(): ValidationErrors|null { return this.control ? this.control.errors : null; }\n\n /**\n * @description\n * Reports whether the control is pristine, meaning that the user has not yet changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get pristine(): boolean|null { return this.control ? this.control.pristine : null; }\n\n /**\n * @description\n * Reports whether the control is dirty, meaning that the user has changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get dirty(): boolean|null { return this.control ? this.control.dirty : null; }\n\n /**\n * @description\n * Reports whether the control is touched, meaning that the user has triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get touched(): boolean|null { return this.control ? this.control.touched : null; }\n\n /**\n * @description\n * Reports the validation status of the control. Possible values include:\n * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.\n * If the control is not present, null is returned.\n */\n get status(): string|null { return this.control ? this.control.status : null; }\n\n /**\n * @description\n * Reports whether the control is untouched, meaning that the user has not yet triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get untouched(): boolean|null { return this.control ? this.control.untouched : null; }\n\n /**\n * @description\n * Returns a multicasting observable that emits a validation status whenever it is\n * calculated for the control. If the control is not present, null is returned.\n */\n get statusChanges(): Observable<any>|null {\n return this.control ? this.control.statusChanges : null;\n }\n\n /**\n * @description\n * Returns a multicasting observable of value changes for the control that emits every time the\n * value of the control changes in the UI or programmatically.\n * If the control is not present, null is returned.\n */\n get valueChanges(): Observable<any>|null {\n return this.control ? this.control.valueChanges : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[]|null { return null; }\n\n /**\n * @description\n * Resets the control with the provided value if the control is present.\n */\n reset(value: any = undefined): void {\n if (this.control) this.control.reset(value);\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return this.control ? this.control.hasError(errorCode, path) : false;\n }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n return this.control ? this.control.getError(errorCode, path) : null;\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {Form} from './form_interface';\n\n\n/**\n * @description\n * A base class for directives that contain multiple registered instances of `NgControl`.\n * Only used by the forms module.\n *\n * @publicApi\n */\nexport abstract class ControlContainer extends AbstractControlDirective {\n /**\n * @description\n * The name for the control\n */\n // TODO(issue/24571): remove '!'.\n name !: string;\n\n /**\n * @description\n * The top-level form directive for the control.\n */\n get formDirective(): Form|null { return null; }\n\n /**\n * @description\n * The path to this group.\n */\n get path(): string[]|null { return null; }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken, ɵisObservable as isObservable, ɵisPromise as isPromise} from '@angular/core';\nimport {Observable, forkJoin, from} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {AsyncValidatorFn, ValidationErrors, Validator, ValidatorFn} from './directives/validators';\nimport {AbstractControl, FormControl} from './model';\n\nfunction isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n}\n\n/**\n * @description\n * An `InjectionToken` for registering additional synchronous validators used with `AbstractControl`s.\n *\n * @see `NG_ASYNC_VALIDATORS`\n *\n * @usageNotes\n *\n * ### Providing a custom validator\n *\n * The following example registers a custom validator directive. Adding the validator to the\n * existing collection of validators requires the `multi: true` option.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors | null {\n * return { 'custom': true };\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport const NG_VALIDATORS = new InjectionToken<Array<Validator|Function>>('NgValidators');\n\n/**\n * @description\n * An `InjectionToken` for registering additional asynchronous validators used with `AbstractControl`s.\n *\n * @see `NG_VALIDATORS`\n *\n * @publicApi\n */\nexport const NG_ASYNC_VALIDATORS =\n new InjectionToken<Array<Validator|Function>>('NgAsyncValidators');\n\nconst EMAIL_REGEXP =\n /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n\n/**\n * @description\n * Provides a set of built-in validators that can be used by form controls.\n *\n * A validator is a function that processes a `FormControl` or collection of\n * controls and returns an error map or null. A null map means that validation has passed.\n *\n * @see [Form Validation](/guide/form-validation)\n *\n * @publicApi\n */\nexport class Validators {\n /**\n * @description\n * Validator that requires the control's value to be greater than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a minimum of 3\n *\n * ```typescript\n * const control = new FormControl(2, Validators.min(3));\n *\n * console.log(control.errors); // {min: {min: 3, actual: 2}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `min` property if the validation check fails, otherwise `null`.\n *\n */\n static min(min: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value < min ? {'min': {'min': min, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to be less than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a maximum of 15\n *\n * ```typescript\n * const control = new FormControl(16, Validators.max(15));\n *\n * console.log(control.errors); // {max: {max: 15, actual: 16}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `max` property if the validation check fails, otherwise `null`.\n *\n */\n static max(max: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n return !isNaN(value) && value > max ? {'max': {'max': max, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control have a non-empty value.\n *\n * @usageNotes\n *\n * ### Validate that the field is non-empty\n *\n * ```typescript\n * const control = new FormControl('', Validators.required);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map with the `required` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static required(control: AbstractControl): ValidationErrors|null {\n return isEmptyInputValue(control.value) ? {'required': true} : null;\n }\n\n /**\n * @description\n * Validator that requires the control's value be true. This validator is commonly\n * used for required checkboxes.\n *\n * @usageNotes\n *\n * ### Validate that the field value is true\n *\n * ```typescript\n * const control = new FormControl('', Validators.requiredTrue);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map that contains the `required` property\n * set to `true` if the validation check fails, otherwise `null`.\n */\n static requiredTrue(control: AbstractControl): ValidationErrors|null {\n return control.value === true ? null : {'required': true};\n }\n\n /**\n * @description\n * Validator that requires the control's value pass an email validation test.\n *\n * @usageNotes\n *\n * ### Validate that the field matches a valid email pattern\n *\n * ```typescript\n * const control = new FormControl('bad@', Validators.email);\n *\n * console.log(control.errors); // {email: true}\n * ```\n *\n * @returns An error map with the `email` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static email(control: AbstractControl): ValidationErrors|null {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n return EMAIL_REGEXP.test(control.value) ? null : {'email': true};\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be greater than or equal\n * to the provided minimum length. This validator is also provided by default if you use the\n * the HTML5 `minlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has a minimum of 3 characters\n *\n * ```typescript\n * const control = new FormControl('ng', Validators.minLength(3));\n *\n * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}\n * ```\n *\n * ```html\n * <input minlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `minlength` if the validation check fails, otherwise `null`.\n */\n static minLength(minLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const length: number = control.value ? control.value.length : 0;\n return length < minLength ?\n {'minlength': {'requiredLength': minLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be less than or equal\n * to the provided maximum length. This validator is also provided by default if you use the\n * the HTML5 `maxlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has maximum of 5 characters\n *\n * ```typescript\n * const control = new FormControl('Angular', Validators.maxLength(5));\n *\n * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}\n * ```\n *\n * ```html\n * <input maxlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `maxlength` property if the validation check fails, otherwise `null`.\n */\n static maxLength(maxLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const length: number = control.value ? control.value.length : 0;\n return length > maxLength ?\n {'maxlength': {'requiredLength': maxLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to match a regex pattern. This validator is also\n * provided by default if you use the HTML5 `pattern` attribute.\n *\n * Note that if a Regexp is provided, the Regexp is used as is to test the values. On the other\n * hand, if a string is passed, the `^` character is prepended and the `$` character is\n * appended to the provided string (if not already present), and the resulting regular\n * expression is used to test the values.\n *\n * @usageNotes\n *\n * ### Validate that the field only contains letters or spaces\n *\n * ```typescript\n * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));\n *\n * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}\n * ```\n *\n * ```html\n * <input pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `pattern` property if the validation check fails, otherwise `null`.\n */\n static pattern(pattern: string|RegExp): ValidatorFn {\n if (!pattern) return Validators.nullValidator;\n let regex: RegExp;\n let regexStr: string;\n if (typeof pattern === 'string') {\n regexStr = '';\n\n if (pattern.charAt(0) !== '^') regexStr += '^';\n\n regexStr += pattern;\n\n if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$';\n\n regex = new RegExp(regexStr);\n } else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value: string = control.value;\n return regex.test(value) ? null :\n {'pattern': {'requiredPattern': regexStr, 'actualValue': value}};\n };\n }\n\n /**\n * @description\n * Validator that performs no operation.\n */\n static nullValidator(control: AbstractControl): ValidationErrors|null { return null; }\n\n /**\n * @description\n * Compose multiple validators into a single function that returns the union\n * of the individual error maps for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error maps of the validators if the validation check fails, otherwise `null`.\n */\n static compose(validators: null): null;\n static compose(validators: (ValidatorFn|null|undefined)[]): ValidatorFn|null;\n static compose(validators: (ValidatorFn|null|undefined)[]|null): ValidatorFn|null {\n if (!validators) return null;\n const presentValidators: ValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n return _mergeErrors(_executeValidators(control, presentValidators));\n };\n }\n\n /**\n * @description\n * Compose multiple async validators into a single function that returns the union\n * of the individual error objects for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error objects of the async validators if the validation check fails, otherwise `null`.\n */\n static composeAsync(validators: (AsyncValidatorFn|null)[]): AsyncValidatorFn|null {\n if (!validators) return null;\n const presentValidators: AsyncValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n const observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n return forkJoin(observables).pipe(map(_mergeErrors));\n };\n }\n}\n\nfunction isPresent(o: any): boolean {\n return o != null;\n}\n\nexport function toObservable(r: any): Observable<any> {\n const obs = isPromise(r) ? from(r) : r;\n if (!(isObservable(obs))) {\n throw new Error(`Expected validator to return Promise or Observable.`);\n }\n return obs;\n}\n\nfunction _executeValidators(control: AbstractControl, validators: ValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _executeAsyncValidators(control: AbstractControl, validators: AsyncValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _mergeErrors(arrayOfErrors: ValidationErrors[]): ValidationErrors|null {\n const res: {[key: string]: any} =\n arrayOfErrors.reduce((res: ValidationErrors | null, errors: ValidationErrors | null) => {\n return errors != null ? {...res !, ...errors} : res !;\n }, {});\n return Object.keys(res).length === 0 ? null : res;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * @description\n * Defines an interface that acts as a bridge between the Angular forms API and a\n * native element in the DOM.\n *\n * Implement this interface to create a custom form control directive\n * that integrates with Angular forms.\n *\n * @see DefaultValueAccessor\n *\n * @publicApi\n */\nexport interface ControlValueAccessor {\n /**\n * @description\n * Writes a new value to the element.\n *\n * This method is called by the forms API to write to the view when programmatic\n * changes from model to view are requested.\n *\n * @usageNotes\n * ### Write a value to the element\n *\n * The following example writes a value to the native DOM element.\n *\n * ```ts\n * writeValue(value: any): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'value', value);\n * }\n * ```\n *\n * @param obj The new value for the element\n */\n writeValue(obj: any): void;\n\n /**\n * @description\n * Registers a callback function that is called when the control's value\n * changes in the UI.\n *\n * This method is called by the forms API on initialization to update the form\n * model when values propagate from the view to the model.\n *\n * When implementing the `registerOnChange` method in your own value accessor,\n * save the given function so your class calls it at the appropriate time.\n *\n * @usageNotes\n * ### Store the change function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnChange(fn: (_: any) => void): void {\n * this._onChange = fn;\n * }\n * ```\n *\n * When the value changes in the UI, call the registered\n * function to allow the forms API to update itself:\n *\n * ```ts\n * host: {\n * (change): '_onChange($event.target.value)'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnChange(fn: any): void;\n\n /**\n * @description\n * Registers a callback function is called by the forms API on initialization\n * to update the form model on blur.\n *\n * When implementing `registerOnTouched` in your own value accessor, save the given\n * function so your class calls it when the control should be considered\n * blurred or \"touched\".\n *\n * @usageNotes\n * ### Store the callback function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnTouched(fn: any): void {\n * this._onTouched = fn;\n * }\n * ```\n *\n * On blur (or equivalent), your class should call the registered function to allow\n * the forms API to update itself:\n *\n * ```ts\n * host: {\n * '(blur)': '_onTouched()'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnTouched(fn: any): void;\n\n /**\n * @description\n * Function that is called by the forms API when the control status changes to\n * or from 'DISABLED'. Depending on the status, it enables or disables the\n * appropriate DOM element.\n *\n * @usageNotes\n * The following is an example of writing the disabled property to a native DOM element:\n *\n * ```ts\n * setDisabledState(isDisabled: boolean): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n * }\n * ```\n *\n * @param isDisabled The disabled status to set on the element\n */\n setDisabledState?(isDisabled: boolean): void;\n}\n\n/**\n * Used to provide a `ControlValueAccessor` for form controls.\n *\n * See `DefaultValueAccessor` for how to implement one.\n *\n * @publicApi\n */\nexport const NG_VALUE_ACCESSOR = new InjectionToken<ControlValueAccessor>('NgValueAccessor');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const CHECKBOX_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlValueAccessor),\n multi: true,\n};\n\n/**\n * @description\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\n * element.\n *\n * @usageNotes\n *\n * ### Using a checkbox with a reactive form.\n *\n * The following example shows how to use a checkbox with a reactive form.\n *\n * ```ts\n * const rememberLoginControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"checkbox\" [formControl]=\"rememberLoginControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: {'(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()'},\n providers: [CHECKBOX_VALUE_ACCESSOR]\n})\nexport class CheckboxControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"checked\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Inject, InjectionToken, Optional, Renderer2, forwardRef} from '@angular/core';\nimport {ɵgetDOM as getDOM} from '@angular/platform-browser';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const DEFAULT_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DefaultValueAccessor),\n multi: true\n};\n\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\nfunction _isAndroid(): boolean {\n const userAgent = getDOM() ? getDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n\n/**\n * @description\n * Provide this token to control if form directives buffer IME input until\n * the \"compositionend\" event occurs.\n * @publicApi\n */\nexport const COMPOSITION_BUFFER_MODE = new InjectionToken<boolean>('CompositionEventMode');\n\n/**\n * @description\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using the default value accessor\n *\n * The following example shows how to use an input element that activates the default value accessor\n * (in this case, a text field).\n *\n * ```ts\n * const firstNameControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"text\" [formControl]=\"firstNameControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n // TODO: vsavkin replace the above selector with the one below it once\n // https://github.com/angular/angular/issues/3011 is implemented\n // selector: '[ngModel],[formControl],[formControlName]',\n host: {\n '(input)': '$any(this)._handleInput($event.target.value)',\n '(blur)': 'onTouched()',\n '(compositionstart)': '$any(this)._compositionStart()',\n '(compositionend)': '$any(this)._compositionEnd($event.target.value)'\n },\n providers: [DEFAULT_VALUE_ACCESSOR]\n})\nexport class DefaultValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when an input event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /** Whether the user is creating a composition string (IME events). */\n private _composing = false;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n @Optional() @Inject(COMPOSITION_BUFFER_MODE) private _compositionMode: boolean) {\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _handleInput(value: any): void {\n if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n this.onChange(value);\n }\n }\n\n /** @internal */\n _compositionStart(): void { this._composing = true; }\n\n /** @internal */\n _compositionEnd(value: any): void {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControl} from '../model';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport function normalizeValidator(validator: ValidatorFn | Validator): ValidatorFn {\n if ((<Validator>validator).validate) {\n return (c: AbstractControl) => (<Validator>validator).validate(c);\n } else {\n return <ValidatorFn>validator;\n }\n}\n\nexport function normalizeAsyncValidator(validator: AsyncValidatorFn | AsyncValidator):\n AsyncValidatorFn {\n if ((<AsyncValidator>validator).validate) {\n return (c: AbstractControl) => (<AsyncValidator>validator).validate(c);\n } else {\n return <AsyncValidatorFn>validator;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const NUMBER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a number value and listening to number input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a number input with a reactive form.\n *\n * The following example shows how to use a number input with a reactive form.\n *\n * ```ts\n * const totalCountControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"number\" [formControl]=\"totalCountControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [NUMBER_VALUE_ACCESSOR]\n})\nexport class NumberValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: number): void {\n // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nfunction unimplemented(): any {\n throw new Error('unimplemented');\n}\n\n/**\n * @description\n * A base class that all control `FormControl`-based directives extend. It binds a `FormControl`\n * object to a DOM element.\n *\n * @publicApi\n */\nexport abstract class NgControl extends AbstractControlDirective {\n /**\n * @description\n * The parent form for the control.\n *\n * @internal\n */\n _parent: ControlContainer|null = null;\n\n /**\n * @description\n * The name for the control\n */\n name: string|null = null;\n\n /**\n * @description\n * The value accessor for the control\n */\n valueAccessor: ControlValueAccessor|null = null;\n\n /**\n * @description\n * The uncomposed array of synchronous validators for the control\n *\n * @internal\n */\n _rawValidators: Array<Validator|ValidatorFn> = [];\n\n /**\n * @description\n * The uncomposed array of async validators for the control\n *\n * @internal\n */\n _rawAsyncValidators: Array<AsyncValidator|AsyncValidatorFn> = [];\n\n /**\n * @description\n * The registered synchronous validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get validator(): ValidatorFn|null { return <ValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The registered async validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get asyncValidator(): AsyncValidatorFn|null { return <AsyncValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The callback method to update the model from the view when requested\n *\n * @param newValue The new value for the view\n */\n abstract viewToModelUpdate(newValue: any): void;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Injectable, Injector, Input, OnDestroy, OnInit, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\n\nexport const RADIO_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioControlValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * Class used by Angular to track radio buttons. For internal use only.\n */\n@Injectable()\nexport class RadioControlRegistry {\n private _accessors: any[] = [];\n\n /**\n * @description\n * Adds a control to the internal registry. For internal use only.\n */\n add(control: NgControl, accessor: RadioControlValueAccessor) {\n this._accessors.push([control, accessor]);\n }\n\n /**\n * @description\n * Removes a control from the internal registry. For internal use only.\n */\n remove(accessor: RadioControlValueAccessor) {\n for (let i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n }\n\n /**\n * @description\n * Selects a radio button. For internal use only.\n */\n select(accessor: RadioControlValueAccessor) {\n this._accessors.forEach((c) => {\n if (this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n }\n\n private _isSameGroup(\n controlPair: [NgControl, RadioControlValueAccessor],\n accessor: RadioControlValueAccessor): boolean {\n if (!controlPair[0].control) return false;\n return controlPair[0]._parent === accessor._control._parent &&\n controlPair[1].name === accessor.name;\n }\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing radio control values and listening to radio control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using radio buttons with reactive form directives\n *\n * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in\n * a reactive form, radio buttons in the same group should have the same `formControlName`.\n * Providing a `name` attribute is optional.\n *\n * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n host: {'(change)': 'onChange()', '(blur)': 'onTouched()'},\n providers: [RADIO_VALUE_ACCESSOR]\n})\nexport class RadioControlValueAccessor implements ControlValueAccessor,\n OnDestroy, OnInit {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _state !: boolean;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _control !: NgControl;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _fn !: Function;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = () => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the name of the radio input element.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input() formControlName !: string;\n\n /**\n * @description\n * Tracks the value of the radio input element\n */\n @Input() value: any;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n private _registry: RadioControlRegistry, private _injector: Injector) {}\n\n /**\n * @description\n * A lifecycle method called when the directive is initialized. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnInit(): void {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnDestroy(): void { this._registry.remove(this); }\n\n /**\n * @description\n * Sets the \"checked\" property value on the radio input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._state = value === this.value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void {\n this._fn = fn;\n this.onChange = () => {\n fn(this.value);\n this._registry.select(this);\n };\n }\n\n /**\n * Sets the \"value\" on the radio input element and unchecks it.\n *\n * @param value\n */\n fireUncheck(value: any): void { this.writeValue(value); }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n private _checkName(): void {\n if (this.name && this.formControlName && this.name !== this.formControlName) {\n this._throwNameError();\n }\n if (!this.name && this.formControlName) this.name = this.formControlName;\n }\n\n private _throwNameError(): void {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, StaticProvider, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const RANGE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a range value and listening to range input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a range input with a reactive form\n *\n * The following example shows how to use a range input with a reactive form.\n *\n * ```ts\n * const ageControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"range\" [formControl]=\"ageControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [RANGE_VALUE_ACCESSOR]\n})\nexport class RangeValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the range input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const FormErrorExamples = {\n formControlName: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });`,\n\n formGroupName: `\n <div [formGroup]=\"myGroup\">\n <div formGroupName=\"person\">\n <input formControlName=\"firstName\">\n </div>\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });`,\n\n formArrayName: `\n <div [formGroup]=\"myGroup\">\n <div formArrayName=\"cities\">\n <div *ngFor=\"let city of cityArray.controls; index as i\">\n <input [formControlName]=\"i\">\n </div>\n </div>\n </div>\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl('SF')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });`,\n\n ngModelGroup: `\n <form>\n <div ngModelGroup=\"person\">\n <input [(ngModel)]=\"person.name\" name=\"firstName\">\n </div>\n </form>`,\n\n ngModelWithFormGroup: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n `\n};\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class ReactiveErrors {\n static controlParentException(): void {\n throw new Error(\n `formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static ngModelGroupException(): void {\n throw new Error(\n `formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n ${Examples.formGroupName}\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n ${Examples.ngModelGroup}`);\n }\n static missingFormException(): void {\n throw new Error(`formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static groupParentException(): void {\n throw new Error(\n `formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formGroupName}`);\n }\n\n static arrayParentException(): void {\n throw new Error(\n `formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formArrayName}`);\n }\n\n static disabledAttrWarning(): void {\n console.warn(`\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n \n Example: \n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n `);\n }\n\n static ngModelWarning(directiveName: string): void {\n console.warn(`\n It looks like you're using ngModel on the same form field as ${directiveName}. \n Support for using the ngModel input property and ngModelChange event with \n reactive form directives has been deprecated in Angular v6 and will be removed \n in Angular v7.\n \n For more information on this, see our API docs here:\n https://angular.io/api/forms/${directiveName === 'formControl' ? 'FormControlDirective' \n : 'FormControlName'}#use-with-ngmodel\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string | null, value: any): string {\n if (id == null) return `${value}`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing select control values and listening to select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using select controls in a reactive form\n *\n * The following examples show how to use a select control in a reactive form.\n *\n * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Using select controls in a template-driven form\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * {@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * ### Customizing option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * ```ts\n * const selectedCountriesControl = new FormControl();\n * ```\n *\n * ```\n * <select [compareWith]=\"compareFn\" [formControl]=\"selectedCountriesControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{country.name}}\n * </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n * return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * **Note:** We listen to the 'change' event because 'input' events aren't fired\n * for selects in Firefox and IE:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n host: {'(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()'},\n providers: [SELECT_VALUE_ACCESSOR]\n})\nexport class SelectControlValueAccessor implements ControlValueAccessor {\n value: any;\n /** @internal */\n _optionMap: Map<string, any> = new Map<string, any>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element. The \"selectedIndex\"\n * property is also set if an ID is provided on the option element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this.value = value;\n const id: string|null = this._getOptionId(value);\n if (id == null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n }\n const valueString = _buildValueString(id, value);\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (valueString: string) => {\n this.value = this._getOptionValue(valueString);\n fn(this.value);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(): string { return (this._idCounter++).toString(); }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id), value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectOption implements OnDestroy {\n /**\n * @description\n * ID of the option element\n */\n // TODO(issue/24571): remove '!'.\n id !: string;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectControlValueAccessor) {\n if (this._select) this.id = this._select._registerOption();\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n this._setElementValue(value);\n if (this._select) this._select.writeValue(this._select.value);\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_MULTIPLE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectMultipleControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string, value: any): string {\n if (id == null) return `${value}`;\n if (typeof value === 'string') value = `'${value}'`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/** Mock interface for HTML Options */\ninterface HTMLOption {\n value: string;\n selected: boolean;\n}\n\n/** Mock interface for HTMLCollection */\nabstract class HTMLCollection {\n // TODO(issue/24571): remove '!'.\n length !: number;\n abstract item(_: number): HTMLOption;\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n * \n * @see `SelectControlValueAccessor`\n *\n * @usageNotes\n * \n * ### Using a multi-select control\n * \n * The follow example shows you how to use a multi-select control with a reactive form.\n * \n * ```ts\n * const countryControl = new FormControl();\n * ```\n *\n * ```\n * <select multiple name=\"countries\" [formControl]=\"countryControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{ country.name }}\n * </option>\n * </select>\n * ```\n * \n * ### Customizing option selection\n * \n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * See the `SelectControlValueAccessor` for usage.\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n host: {'(change)': 'onChange($event.target)', '(blur)': 'onTouched()'},\n providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]\n})\nexport class SelectMultipleControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The current value\n */\n value: any;\n\n /** @internal */\n _optionMap: Map<string, NgSelectMultipleOption> = new Map<string, NgSelectMultipleOption>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * @description\n * Sets the \"value\" property on one or of more\n * of the select's options.\n *\n * @param value The value\n */\n writeValue(value: any): void {\n this.value = value;\n let optionSelectedStateSetter: (opt: NgSelectMultipleOption, o: any) => void;\n if (Array.isArray(value)) {\n // convert values to ids\n const ids = value.map((v) => this._getOptionId(v));\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(ids.indexOf(o.toString()) > -1); };\n } else {\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(false); };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes\n * and writes an array of the selected options.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (_: any) => {\n const selected: Array<any> = [];\n if (_.hasOwnProperty('selectedOptions')) {\n const options: HTMLCollection = _.selectedOptions;\n for (let i = 0; i < options.length; i++) {\n const opt: any = options.item(i);\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n // Degrade on IE\n else {\n const options: HTMLCollection = <HTMLCollection>_.options;\n for (let i = 0; i < options.length; i++) {\n const opt: HTMLOption = options.item(i);\n if (opt.selected) {\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n this.value = selected;\n fn(selected);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(value: NgSelectMultipleOption): string {\n const id: string = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id) !._value, value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) !._value : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectMultipleControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectMultipleOption implements OnDestroy {\n // TODO(issue/24571): remove '!'.\n id !: string;\n /** @internal */\n _value: any;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectMultipleControlValueAccessor) {\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n } else {\n this._setElementValue(value);\n }\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /** @internal */\n _setSelected(selected: boolean) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {isDevMode, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {FormArray, FormControl, FormGroup} from '../model';\nimport {Validators} from '../validators';\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {CheckboxControlValueAccessor} from './checkbox_value_accessor';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {DefaultValueAccessor} from './default_value_accessor';\nimport {NgControl} from './ng_control';\nimport {normalizeAsyncValidator, normalizeValidator} from './normalize_validator';\nimport {NumberValueAccessor} from './number_value_accessor';\nimport {RadioControlValueAccessor} from './radio_control_value_accessor';\nimport {RangeValueAccessor} from './range_value_accessor';\nimport {FormArrayName} from './reactive_directives/form_group_name';\nimport {ReactiveErrors} from './reactive_errors';\nimport {SelectControlValueAccessor} from './select_control_value_accessor';\nimport {SelectMultipleControlValueAccessor} from './select_multiple_control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\n\nexport function controlPath(name: string, parent: ControlContainer): string[] {\n return [...parent.path !, name];\n}\n\nexport function setUpControl(control: FormControl, dir: NgControl): void {\n if (!control) _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor) _throwError(dir, 'No value accessor for form control with');\n\n control.validator = Validators.compose([control.validator !, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator !, dir.asyncValidator]);\n dir.valueAccessor !.writeValue(control.value);\n\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n\n setUpBlurPipeline(control, dir);\n\n if (dir.valueAccessor !.setDisabledState) {\n control.registerOnDisabledChange(\n (isDisabled: boolean) => { dir.valueAccessor !.setDisabledState !(isDisabled); });\n }\n\n // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n dir._rawValidators.forEach((validator: Validator | ValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n\n dir._rawAsyncValidators.forEach((validator: AsyncValidator | AsyncValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n}\n\nexport function cleanUpControl(control: FormControl, dir: NgControl) {\n dir.valueAccessor !.registerOnChange(() => _noControlError(dir));\n dir.valueAccessor !.registerOnTouched(() => _noControlError(dir));\n\n dir._rawValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n dir._rawAsyncValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n if (control) control._clearChangeFns();\n}\n\nfunction setUpViewChangePipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnChange((newValue: any) => {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n\n if (control.updateOn === 'change') updateControl(control, dir);\n });\n}\n\nfunction setUpBlurPipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnTouched(() => {\n control._pendingTouched = true;\n\n if (control.updateOn === 'blur' && control._pendingChange) updateControl(control, dir);\n if (control.updateOn !== 'submit') control.markAsTouched();\n });\n}\n\nfunction updateControl(control: FormControl, dir: NgControl): void {\n if (control._pendingDirty) control.markAsDirty();\n control.setValue(control._pendingValue, {emitModelToViewChange: false});\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n}\n\nfunction setUpModelChangePipeline(control: FormControl, dir: NgControl): void {\n control.registerOnChange((newValue: any, emitModelEvent: boolean) => {\n // control -> view\n dir.valueAccessor !.writeValue(newValue);\n\n // control -> ngModel\n if (emitModelEvent) dir.viewToModelUpdate(newValue);\n });\n}\n\nexport function setUpFormContainer(\n control: FormGroup | FormArray, dir: AbstractFormGroupDirective | FormArrayName) {\n if (control == null) _throwError(dir, 'Cannot find control with');\n control.validator = Validators.compose([control.validator, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n}\n\nfunction _noControlError(dir: NgControl) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\n\nfunction _throwError(dir: AbstractControlDirective, message: string): void {\n let messageEnd: string;\n if (dir.path !.length > 1) {\n messageEnd = `path: '${dir.path!.join(' -> ')}'`;\n } else if (dir.path ![0]) {\n messageEnd = `name: '${dir.path}'`;\n } else {\n messageEnd = 'unspecified name attribute';\n }\n throw new Error(`${message} ${messageEnd}`);\n}\n\nexport function composeValidators(validators: Array<Validator|Function>): ValidatorFn|null {\n return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n}\n\nexport function composeAsyncValidators(validators: Array<Validator|Function>): AsyncValidatorFn|\n null {\n return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n null;\n}\n\nexport function isPropertyUpdated(changes: {[key: string]: any}, viewModel: any): boolean {\n if (!changes.hasOwnProperty('model')) return false;\n const change = changes['model'];\n\n if (change.isFirstChange()) return true;\n return !looseIdentical(viewModel, change.currentValue);\n}\n\nconst BUILTIN_ACCESSORS = [\n CheckboxControlValueAccessor,\n RangeValueAccessor,\n NumberValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n];\n\nexport function isBuiltInAccessor(valueAccessor: ControlValueAccessor): boolean {\n return BUILTIN_ACCESSORS.some(a => valueAccessor.constructor === a);\n}\n\nexport function syncPendingControls(form: FormGroup, directives: NgControl[]): void {\n form._syncPendingControls();\n directives.forEach(dir => {\n const control = dir.control as FormControl;\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n}\n\n// TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented\nexport function selectValueAccessor(\n dir: NgControl, valueAccessors: ControlValueAccessor[]): ControlValueAccessor|null {\n if (!valueAccessors) return null;\n\n if (!Array.isArray(valueAccessors))\n _throwError(dir, 'Value accessor was not provided as an array for form control with');\n\n let defaultAccessor: ControlValueAccessor|undefined = undefined;\n let builtinAccessor: ControlValueAccessor|undefined = undefined;\n let customAccessor: ControlValueAccessor|undefined = undefined;\n\n valueAccessors.forEach((v: ControlValueAccessor) => {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n\n } else if (isBuiltInAccessor(v)) {\n if (builtinAccessor)\n _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n\n } else {\n if (customAccessor)\n _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n\n if (customAccessor) return customAccessor;\n if (builtinAccessor) return builtinAccessor;\n if (defaultAccessor) return defaultAccessor;\n\n _throwError(dir, 'No valid value accessor for form control with');\n return null;\n}\n\nexport function removeDir<T>(list: T[], el: T): void {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\n\n// TODO(kara): remove after deprecation period\nexport function _ngModelWarning(\n name: string, type: {_ngModelWarningSentOnce: boolean},\n instance: {_ngModelWarningSent: boolean}, warningConfig: string | null) {\n if (!isDevMode() || warningConfig === 'never') return;\n\n if (((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce) ||\n (warningConfig === 'always' && !instance._ngModelWarningSent)) {\n ReactiveErrors.ngModelWarning(name);\n type._ngModelWarningSentOnce = true;\n instance._ngModelWarningSent = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {OnDestroy, OnInit} from '@angular/core';\n\nimport {FormGroup} from '../model';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {composeAsyncValidators, composeValidators, controlPath} from './shared';\nimport {AsyncValidatorFn, ValidatorFn} from './validators';\n\n\n\n/**\n * @description\n * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.\n *\n * @publicApi\n */\nexport class AbstractFormGroupDirective extends ControlContainer implements OnInit, OnDestroy {\n /**\n * @description\n * The parent control for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _parent !: ControlContainer;\n\n /**\n * @description\n * An array of synchronous validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _validators !: any[];\n\n /**\n * @description\n * An array of async validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _asyncValidators !: any[];\n\n /**\n * @description\n * An internal callback method triggered on the instance after the inputs are set.\n * Registers the group with its parent group.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormGroup(this);\n }\n\n /**\n * @description\n * An internal callback method triggered before the instance is destroyed.\n * Removes the group from its parent group.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormGroup(this);\n }\n }\n\n /**\n * @description\n * The `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.formDirective !.getFormGroup(this); }\n\n /**\n * @description\n * The path to this group from the top-level directive.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): Form|null { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * The synchronous validators registered with this group.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * The async validators registered with this group.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n /** @internal */\n _checkParentType(): void {}\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Self} from '@angular/core';\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {NgControl} from './ng_control';\n\nexport class AbstractControlStatus {\n private _cd: AbstractControlDirective;\n\n constructor(cd: AbstractControlDirective) { this._cd = cd; }\n\n get ngClassUntouched(): boolean { return this._cd.control ? this._cd.control.untouched : false; }\n get ngClassTouched(): boolean { return this._cd.control ? this._cd.control.touched : false; }\n get ngClassPristine(): boolean { return this._cd.control ? this._cd.control.pristine : false; }\n get ngClassDirty(): boolean { return this._cd.control ? this._cd.control.dirty : false; }\n get ngClassValid(): boolean { return this._cd.control ? this._cd.control.valid : false; }\n get ngClassInvalid(): boolean { return this._cd.control ? this._cd.control.invalid : false; }\n get ngClassPending(): boolean { return this._cd.control ? this._cd.control.pending : false; }\n}\n\nexport const ngControlStatusHost = {\n '[class.ng-untouched]': 'ngClassUntouched',\n '[class.ng-touched]': 'ngClassTouched',\n '[class.ng-pristine]': 'ngClassPristine',\n '[class.ng-dirty]': 'ngClassDirty',\n '[class.ng-valid]': 'ngClassValid',\n '[class.ng-invalid]': 'ngClassInvalid',\n '[class.ng-pending]': 'ngClassPending',\n};\n\n/**\n * @description\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status.\n *\n * @usageNotes\n *\n * ### CSS classes applied\n *\n * The following classes are applied as the properties become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost})\nexport class NgControlStatus extends AbstractControlStatus {\n constructor(@Self() cd: NgControl) { super(cd); }\n}\n\n/**\n * @description\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n * \n * @see `NgControlStatus`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n host: ngControlStatusHost\n})\nexport class NgControlStatusGroup extends AbstractControlStatus {\n constructor(@Self() cd: ControlContainer) { super(cd); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {EventEmitter} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {composeAsyncValidators, composeValidators} from './directives/shared';\nimport {AsyncValidatorFn, ValidationErrors, ValidatorFn} from './directives/validators';\nimport {toObservable} from './validators';\n\n/**\n * Reports that a FormControl is valid, meaning that no errors exist in the input value.\n *\n * @see `status`\n */\nexport const VALID = 'VALID';\n\n/**\n * Reports that a FormControl is invalid, meaning that an error exists in the input value.\n *\n * @see `status`\n */\nexport const INVALID = 'INVALID';\n\n/**\n * Reports that a FormControl is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value.\n *\n * @see `markAsPending`\n * @see `status`\n */\nexport const PENDING = 'PENDING';\n\n/**\n * Reports that a FormControl is disabled, meaning that the control is exempt from ancestor\n * calculations of validity or value.\n *\n * @see `markAsDisabled`\n * @see `status`\n */\nexport const DISABLED = 'DISABLED';\n\nfunction _find(control: AbstractControl, path: Array<string|number>| string, delimiter: string) {\n if (path == null) return null;\n\n if (!(path instanceof Array)) {\n path = (<string>path).split(delimiter);\n }\n if (path instanceof Array && (path.length === 0)) return null;\n\n return (<Array<string|number>>path).reduce((v: AbstractControl, name) => {\n if (v instanceof FormGroup) {\n return v.controls.hasOwnProperty(name as string) ? v.controls[name] : null;\n }\n\n if (v instanceof FormArray) {\n return v.at(<number>name) || null;\n }\n\n return null;\n }, control);\n}\n\nfunction coerceToValidator(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): ValidatorFn|\n null {\n const validator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).validators :\n validatorOrOpts) as ValidatorFn |\n ValidatorFn[] | null;\n\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\n\nfunction coerceToAsyncValidator(\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null, validatorOrOpts?: ValidatorFn |\n ValidatorFn[] | AbstractControlOptions | null): AsyncValidatorFn|null {\n const origAsyncValidator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).asyncValidators :\n asyncValidator) as AsyncValidatorFn |\n AsyncValidatorFn | null;\n\n return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :\n origAsyncValidator || null;\n}\n\nexport type FormHooks = 'change' | 'blur' | 'submit';\n\n/**\n * Interface for options provided to an `AbstractControl`.\n *\n * @publicApi\n */\nexport interface AbstractControlOptions {\n /**\n * @description\n * The list of validators applied to a control.\n */\n validators?: ValidatorFn|ValidatorFn[]|null;\n /**\n * @description\n * The list of async validators applied to control.\n */\n asyncValidators?: AsyncValidatorFn|AsyncValidatorFn[]|null;\n /**\n * @description\n * The event name for control to update upon.\n */\n updateOn?: 'change'|'blur'|'submit';\n}\n\n\nfunction isOptionsObj(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): boolean {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&\n typeof validatorOrOpts === 'object';\n}\n\n\n/**\n * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * @see [Forms Guide](/guide/forms)\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n * @see [Dynamic Forms Guide](/guide/dynamic-form)\n *\n * @publicApi\n */\nexport abstract class AbstractControl {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingDirty !: boolean;\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingTouched !: boolean;\n\n /** @internal */\n _onCollectionChange = () => {};\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _updateOn !: FormHooks;\n\n // TODO(issue/24571): remove '!'.\n private _parent !: FormGroup | FormArray;\n private _asyncValidationSubscription: any;\n\n /**\n * The current value of the control.\n *\n * * For a `FormControl`, the current value.\n * * For a `FormGroup`, the values of enabled controls as an object\n * with a key-value pair for each member of the group.\n * * For a `FormArray`, the values of enabled controls as an array.\n *\n */\n public readonly value: any;\n\n /**\n * Initialize the AbstractControl instance.\n *\n * @param validator The function that determines the synchronous validity of this control.\n * @param asyncValidator The function that determines the asynchronous validity of this\n * control.\n */\n constructor(public validator: ValidatorFn|null, public asyncValidator: AsyncValidatorFn|null) {}\n\n /**\n * The parent control.\n */\n get parent(): FormGroup|FormArray { return this._parent; }\n\n /**\n * The validation status of the control. There are four possible\n * validation status values:\n *\n * * **VALID**: This control has passed all validation checks.\n * * **INVALID**: This control has failed at least one validation check.\n * * **PENDING**: This control is in the midst of conducting a validation check.\n * * **DISABLED**: This control is exempt from validation checks.\n *\n * These status values are mutually exclusive, so a control cannot be\n * both valid AND invalid or invalid AND disabled.\n */\n // TODO(issue/24571): remove '!'.\n public readonly status !: string;\n\n /**\n * A control is `valid` when its `status` is `VALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control has passed all of its validation tests,\n * false otherwise.\n */\n get valid(): boolean { return this.status === VALID; }\n\n /**\n * A control is `invalid` when its `status` is `INVALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control has failed one or more of its validation checks,\n * false otherwise.\n */\n get invalid(): boolean { return this.status === INVALID; }\n\n /**\n * A control is `pending` when its `status` is `PENDING`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control is in the process of conducting a validation check,\n * false otherwise.\n */\n get pending(): boolean { return this.status == PENDING; }\n\n /**\n * A control is `disabled` when its `status` is `DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control is disabled, false otherwise.\n */\n get disabled(): boolean { return this.status === DISABLED; }\n\n /**\n * A control is `enabled` as long as its `status` is not `DISABLED`.\n *\n * @returns True if the control has any status other than 'DISABLED',\n * false if the status is 'DISABLED'.\n *\n * @see {@link AbstractControl.status}\n *\n */\n get enabled(): boolean { return this.status !== DISABLED; }\n\n /**\n * An object containing any errors generated by failing validation,\n * or null if there are no errors.\n */\n // TODO(issue/24571): remove '!'.\n public readonly errors !: ValidationErrors | null;\n\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * @returns True if the user has not yet changed the value in the UI; compare `dirty`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n public readonly pristine: boolean = true;\n\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * @returns True if the user has changed the value of this control in the UI; compare `pristine`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n get dirty(): boolean { return !this.pristine; }\n\n /**\n * True if the control is marked as `touched`.\n *\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n */\n public readonly touched: boolean = false;\n\n /**\n * True if the control has not been marked as touched\n *\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n */\n get untouched(): boolean { return !this.touched; }\n\n /**\n * A multicasting observable that emits an event every time the value of the control changes, in\n * the UI or programmatically.\n */\n // TODO(issue/24571): remove '!'.\n public readonly valueChanges !: Observable<any>;\n\n /**\n * A multicasting observable that emits an event every time the validation `status` of the control\n * recalculates.\n *\n * @see {@link AbstractControl.status}\n *\n */\n // TODO(issue/24571): remove '!'.\n public readonly statusChanges !: Observable<any>;\n\n /**\n * Reports the update strategy of the `AbstractControl` (meaning\n * the event on which the control updates itself).\n * Possible values: `'change'` | `'blur'` | `'submit'`\n * Default value: `'change'`\n */\n get updateOn(): FormHooks {\n return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');\n }\n\n /**\n * Sets the synchronous validators that are active on this control. Calling\n * this overwrites any existing sync validators.\n */\n setValidators(newValidator: ValidatorFn|ValidatorFn[]|null): void {\n this.validator = coerceToValidator(newValidator);\n }\n\n /**\n * Sets the async validators that are active on this control. Calling this\n * overwrites any existing async validators.\n */\n setAsyncValidators(newValidator: AsyncValidatorFn|AsyncValidatorFn[]|null): void {\n this.asyncValidator = coerceToAsyncValidator(newValidator);\n }\n\n /**\n * Empties out the sync validator list.\n */\n clearValidators(): void { this.validator = null; }\n\n /**\n * Empties out the async validator list.\n */\n clearAsyncValidators(): void { this.asyncValidator = null; }\n\n /**\n * Marks the control as `touched`. A control is touched by focus and\n * blur events that do not change the value.\n *\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = true;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsTouched(opts);\n }\n }\n\n /**\n * Marks the control as `untouched`.\n *\n * If the control has any children, also marks all children as `untouched`\n * and recalculates the `touched` status of all parent controls.\n *\n * @see `markAsTouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after the marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsUntouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = false;\n this._pendingTouched = false;\n\n this._forEachChild(\n (control: AbstractControl) => { control.markAsUntouched({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /**\n * Marks the control as `dirty`. A control becomes dirty when\n * the control's value is changed through the UI; compare `markAsTouched`.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsDirty(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = false;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsDirty(opts);\n }\n }\n\n /**\n * Marks the control as `pristine`.\n *\n * If the control has any children, marks all children as `pristine`,\n * and recalculates the `pristine` status of all parent\n * controls.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n *\n * @param opts Configuration options that determine how the control emits events after\n * marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n */\n markAsPristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = true;\n this._pendingDirty = false;\n\n this._forEachChild((control: AbstractControl) => { control.markAsPristine({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /**\n * Marks the control as `pending`.\n *\n * A control is pending while the control performs async validation.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates changes and\n * emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), the `statusChanges`\n * observable emits an event with the latest status the control is marked pending.\n * When false, no events are emitted.\n *\n */\n markAsPending(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = PENDING;\n\n if (opts.emitEvent !== false) {\n (this.statusChanges as EventEmitter<any>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsPending(opts);\n }\n }\n\n /**\n * Disables the control. This means the control is exempt from validation checks and\n * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n *\n * If the control has children, all children are also disabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates\n * changes and emits events after the control is disabled.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is disabled.\n * When false, no events are emitted.\n */\n disable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = DISABLED;\n (this as{errors: ValidationErrors | null}).errors = null;\n this._forEachChild(\n (control: AbstractControl) => { control.disable({...opts, onlySelf: true}); });\n this._updateValue();\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(true));\n }\n\n /**\n * Enables the control. This means the control is included in validation checks and\n * the aggregate value of its parent. Its status recalculates based on its value and\n * its validators.\n *\n * By default, if the control has children, all children are enabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configure options that control how the control propagates changes and\n * emits events when marked as untouched\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is enabled.\n * When false, no events are emitted.\n */\n enable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = VALID;\n this._forEachChild(\n (control: AbstractControl) => { control.enable({...opts, onlySelf: true}); });\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(false));\n }\n\n private _updateAncestors(opts: {onlySelf?: boolean, emitEvent?: boolean}) {\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n this._parent._updatePristine();\n this._parent._updateTouched();\n }\n }\n\n /**\n * @param parent Sets the parent of the control\n */\n setParent(parent: FormGroup|FormArray): void { this._parent = parent; }\n\n /**\n * Sets the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract setValue(value: any, options?: Object): void;\n\n /**\n * Patches the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract patchValue(value: any, options?: Object): void;\n\n /**\n * Resets the control. Abstract method (implemented in sub-classes).\n */\n abstract reset(value?: any, options?: Object): void;\n\n /**\n * Recalculates the value and validation status of the control.\n *\n * By default, it also updates the value and validity of its ancestors.\n *\n * @param opts Configuration options determine how the control propagates changes and emits events\n * after updates and validity checks are applied.\n * * `onlySelf`: When true, only update this control. When false or not supplied,\n * update all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is updated.\n * When false, no events are emitted.\n */\n updateValueAndValidity(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._setInitialStatus();\n this._updateValue();\n\n if (this.enabled) {\n this._cancelExistingSubscription();\n (this as{errors: ValidationErrors | null}).errors = this._runValidator();\n (this as{status: string}).status = this._calculateStatus();\n\n if (this.status === VALID || this.status === PENDING) {\n this._runAsyncValidator(opts.emitEvent);\n }\n }\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n }\n }\n\n /** @internal */\n _updateTreeValidity(opts: {emitEvent?: boolean} = {emitEvent: true}) {\n this._forEachChild((ctrl: AbstractControl) => ctrl._updateTreeValidity(opts));\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n }\n\n private _setInitialStatus() {\n (this as{status: string}).status = this._allControlsDisabled() ? DISABLED : VALID;\n }\n\n private _runValidator(): ValidationErrors|null {\n return this.validator ? this.validator(this) : null;\n }\n\n private _runAsyncValidator(emitEvent?: boolean): void {\n if (this.asyncValidator) {\n (this as{status: string}).status = PENDING;\n const obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription =\n obs.subscribe((errors: ValidationErrors | null) => this.setErrors(errors, {emitEvent}));\n }\n }\n\n private _cancelExistingSubscription(): void {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n }\n }\n\n /**\n * Sets errors on a form control when running validations manually, rather than automatically.\n *\n * Calling `setErrors` also updates the validity of the parent control.\n *\n * @usageNotes\n * ### Manually set the errors for a control\n *\n * ```\n * const login = new FormControl('someLogin');\n * login.setErrors({\n * notUnique: true\n * });\n *\n * expect(login.valid).toEqual(false);\n * expect(login.errors).toEqual({ notUnique: true });\n *\n * login.setValue('someOtherLogin');\n *\n * expect(login.valid).toEqual(true);\n * ```\n */\n setErrors(errors: ValidationErrors|null, opts: {emitEvent?: boolean} = {}): void {\n (this as{errors: ValidationErrors | null}).errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false);\n }\n\n /**\n * Retrieves a child control given the control's name or path.\n *\n * @param path A dot-delimited string or array of string/number values that define the path to the\n * control.\n *\n * @usageNotes\n * ### Retrieve a nested control\n *\n * For example, to get a `name` control nested within a `person` sub-group:\n *\n * * `this.form.get('person.name');`\n *\n * -OR-\n *\n * * `this.form.get(['person', 'name']);`\n */\n get(path: Array<string|number>|string): AbstractControl|null { return _find(this, path, '.'); }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n const control = path ? this.get(path) : this;\n return control && control.errors ? control.errors[errorCode] : null;\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return !!this.getError(errorCode, path);\n }\n\n /**\n * Retrieves the top-level ancestor of this control.\n */\n get root(): AbstractControl {\n let x: AbstractControl = this;\n\n while (x._parent) {\n x = x._parent;\n }\n\n return x;\n }\n\n /** @internal */\n _updateControlsErrors(emitEvent: boolean): void {\n (this as{status: string}).status = this._calculateStatus();\n\n if (emitEvent) {\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent);\n }\n }\n\n /** @internal */\n _initObservables() {\n (this as{valueChanges: Observable<any>}).valueChanges = new EventEmitter();\n (this as{statusChanges: Observable<any>}).statusChanges = new EventEmitter();\n }\n\n\n private _calculateStatus(): string {\n if (this._allControlsDisabled()) return DISABLED;\n if (this.errors) return INVALID;\n if (this._anyControlsHaveStatus(PENDING)) return PENDING;\n if (this._anyControlsHaveStatus(INVALID)) return INVALID;\n return VALID;\n }\n\n /** @internal */\n abstract _updateValue(): void;\n\n /** @internal */\n abstract _forEachChild(cb: Function): void;\n\n /** @internal */\n abstract _anyControls(condition: Function): boolean;\n\n /** @internal */\n abstract _allControlsDisabled(): boolean;\n\n /** @internal */\n abstract _syncPendingControls(): boolean;\n\n /** @internal */\n _anyControlsHaveStatus(status: string): boolean {\n return this._anyControls((control: AbstractControl) => control.status === status);\n }\n\n /** @internal */\n _anyControlsDirty(): boolean {\n return this._anyControls((control: AbstractControl) => control.dirty);\n }\n\n /** @internal */\n _anyControlsTouched(): boolean {\n return this._anyControls((control: AbstractControl) => control.touched);\n }\n\n /** @internal */\n _updatePristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = !this._anyControlsDirty();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /** @internal */\n _updateTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = this._anyControlsTouched();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /** @internal */\n _onDisabledChange: Function[] = [];\n\n /** @internal */\n _isBoxedValue(formState: any): boolean {\n return typeof formState === 'object' && formState !== null &&\n Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n }\n\n /** @internal */\n _registerOnCollectionChange(fn: () => void): void { this._onCollectionChange = fn; }\n\n /** @internal */\n _setUpdateStrategy(opts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null): void {\n if (isOptionsObj(opts) && (opts as AbstractControlOptions).updateOn != null) {\n this._updateOn = (opts as AbstractControlOptions).updateOn !;\n }\n }\n}\n\n/**\n * Tracks the value and validation status of an individual form control.\n *\n * This is one of the three fundamental building blocks of Angular forms, along with\n * `FormGroup` and `FormArray`. It extends the `AbstractControl` class that\n * implements most of the base functionality for accessing the value, validation status,\n * user interactions and events.\n *\n * @see `AbstractControl`\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see [Usage Notes](#usage-notes)\n *\n * @usageNotes\n *\n * ### Initializing Form Controls\n *\n * Instantiate a `FormControl`, with an initial value.\n *\n * ```ts\n * const control = new FormControl('some value');\n * console.log(control.value); // 'some value'\n *```\n *\n * The following example initializes the control with a form state object. The `value`\n * and `disabled` keys are required in this case.\n *\n * ```ts\n * const control = new FormControl({ value: 'n/a', disabled: true });\n * console.log(control.value); // 'n/a'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * The following example initializes the control with a sync validator.\n *\n * ```ts\n * const control = new FormControl('', Validators.required);\n * console.log(control.value); // ''\n * console.log(control.status); // 'INVALID'\n * ```\n *\n * The following example initializes the control using an options object.\n *\n * ```ts\n * const control = new FormControl('', {\n * validators: Validators.required,\n * asyncValidators: myAsyncValidator\n * });\n * ```\n *\n * ### Configure the control to update on a blur event\n *\n * Set the `updateOn` option to `'blur'` to update on the blur `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'blur' });\n * ```\n *\n * ### Configure the control to update on a submit event\n *\n * Set the `updateOn` option to `'submit'` to update on a submit `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'submit' });\n * ```\n *\n * ### Reset the control back to an initial value\n *\n * You reset to a specific form state by passing through a standalone\n * value or a form state object that contains both a value and a disabled state\n * (these are the only two properties that cannot be calculated).\n *\n * ```ts\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n *\n * control.reset('Drew');\n *\n * console.log(control.value); // 'Drew'\n * ```\n *\n * ### Reset the control back to an initial value and disabled\n *\n * ```\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n * console.log(control.status); // 'VALID'\n *\n * control.reset({ value: 'Drew', disabled: true });\n *\n * console.log(control.value); // 'Drew'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * @publicApi\n */\nexport class FormControl extends AbstractControl {\n /** @internal */\n _onChange: Function[] = [];\n\n /** @internal */\n _pendingValue: any;\n\n /** @internal */\n _pendingChange: any;\n\n /**\n * Creates a new `FormControl` instance.\n *\n * @param formState Initializes the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n formState: any = null,\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._applyFormState(formState);\n this._setUpdateStrategy(validatorOrOpts);\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n this._initObservables();\n }\n\n /**\n * Sets a new value for the form control.\n *\n * @param value The new value for the control.\n * @param options Configuration options that determine how the control proopagates changes\n * and emits events when the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * * `emitModelToViewChange`: When true or not supplied (the default), each change triggers an\n * `onChange` event to\n * update the view.\n * * `emitViewToModelChange`: When true or not supplied (the default), each change triggers an\n * `ngModelChange`\n * event to update the model.\n *\n */\n setValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n (this as{value: any}).value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach(\n (changeFn) => changeFn(this.value, options.emitViewToModelChange !== false));\n }\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of a control.\n *\n * This function is functionally the same as {@link FormControl#setValue setValue} at this level.\n * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and\n * `FormArrays`, where it does behave differently.\n *\n * @see `setValue` for options\n */\n patchValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n this.setValue(value, options);\n }\n\n /**\n * Resets the form control, marking it `pristine` and `untouched`, and setting\n * the value to null.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n *\n */\n reset(formState: any = null, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n this._pendingChange = false;\n }\n\n /**\n * @internal\n */\n _updateValue() {}\n\n /**\n * @internal\n */\n _anyControls(condition: Function): boolean { return false; }\n\n /**\n * @internal\n */\n _allControlsDisabled(): boolean { return this.disabled; }\n\n /**\n * Register a listener for change events.\n *\n * @param fn The method that is called when the value changes\n */\n registerOnChange(fn: Function): void { this._onChange.push(fn); }\n\n /**\n * @internal\n */\n _clearChangeFns(): void {\n this._onChange = [];\n this._onDisabledChange = [];\n this._onCollectionChange = () => {};\n }\n\n /**\n * Register a listener for disabled events.\n *\n * @param fn The method that is called when the disabled status changes.\n */\n registerOnDisabledChange(fn: (isDisabled: boolean) => void): void {\n this._onDisabledChange.push(fn);\n }\n\n /**\n * @internal\n */\n _forEachChild(cb: Function): void {}\n\n /** @internal */\n _syncPendingControls(): boolean {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty) this.markAsDirty();\n if (this._pendingTouched) this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, {onlySelf: true, emitModelToViewChange: false});\n return true;\n }\n }\n return false;\n }\n\n private _applyFormState(formState: any) {\n if (this._isBoxedValue(formState)) {\n (this as{value: any}).value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({onlySelf: true, emitEvent: false}) :\n this.enable({onlySelf: true, emitEvent: false});\n } else {\n (this as{value: any}).value = this._pendingValue = formState;\n }\n }\n}\n\n/**\n * Tracks the value and validity state of a group of `FormControl` instances.\n *\n * A `FormGroup` aggregates the values of each child `FormControl` into one object,\n * with each control name as the key. It calculates its status by reducing the status values\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormArray`.\n *\n * When instantiating a `FormGroup`, pass in a collection of child controls as the first\n * argument. The key for each child registers the name for the control.\n *\n * @usageNotes\n *\n * ### Create a form group with 2 controls\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('Nancy', Validators.minLength(2)),\n * last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value); // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status); // 'VALID'\n * ```\n *\n * ### Create a form group with a group-level validator\n *\n * You include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('', Validators.minLength(2)),\n * passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n * return g.get('password').value === g.get('passwordConfirm').value\n * ? null : {'mismatch': true};\n * }\n * ```\n *\n * Like `FormControl` instances, you choose to pass in\n * validators and async validators as part of an options object.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('')\n * passwordConfirm: new FormControl('')\n * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });\n * ```\n *\n * ### Set the updateOn property for all controls in a form group\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * group level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormGroup({\n * one: new FormControl()\n * }, { updateOn: 'blur' });\n * ```\n *\n * @publicApi\n */\nexport class FormGroup extends AbstractControl {\n /**\n * Creates a new `FormGroup` instance.\n *\n * @param controls A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: {[key: string]: AbstractControl},\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Registers a control with the group's list of controls.\n *\n * This method does not update the value or validity of the control.\n * Use {@link FormGroup#addControl addControl} instead.\n *\n * @param name The control name to register in the collection\n * @param control Provides the control for the given name\n */\n registerControl(name: string, control: AbstractControl): AbstractControl {\n if (this.controls[name]) return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n }\n\n /**\n * Add a control to this group.\n *\n * This method also updates the value and validity of the control.\n *\n * @param name The control name to add to the collection\n * @param control Provides the control for the given name\n */\n addControl(name: string, control: AbstractControl): void {\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Remove a control from this group.\n *\n * @param name The control name to remove from the collection\n */\n removeControl(name: string): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Replace an existing control.\n *\n * @param name The control name to replace in the collection\n * @param control Provides the control for the given name\n */\n setControl(name: string, control: AbstractControl): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n if (control) this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Check whether there is an enabled control with the given name in the group.\n *\n * Reports false for disabled controls. If you'd like to check for existence in the group\n * only, use {@link AbstractControl#get get} instead.\n *\n * @param name The control name to check for existence in the collection\n *\n * @returns false for disabled controls, true otherwise.\n */\n contains(controlName: string): boolean {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n }\n\n /**\n * Sets the value of the `FormGroup`. It accepts an object that matches\n * the structure of the group, with control names as keys.\n *\n * @usageNotes\n * ### Set the complete value for the form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n *\n * console.log(form.value); // {first: null, last: null}\n *\n * form.setValue({first: 'Nancy', last: 'Drew'});\n * console.log(form.value); // {first: 'Nancy', last: 'Drew'}\n * ```\n *\n * @throws When strict checks fail, such as setting the value of a control\n * that doesn't exist or if you excluding the value of a control.\n *\n * @param value The new value for the control that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n */\n setValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n this._checkAllValuesPresent(value);\n Object.keys(value).forEach(name => {\n this._throwIfControlMissing(name);\n this.controls[name].setValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormGroup`. It accepts an object with control\n * names as keys, and does its best to match the values to the correct controls\n * in the group.\n *\n * It accepts both super-sets and sub-sets of the group without throwing an error.\n *\n * @usageNotes\n * ### Patch the value for a form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n * console.log(form.value); // {first: null, last: null}\n *\n * form.patchValue({first: 'Nancy'});\n * console.log(form.value); // {first: 'Nancy', last: null}\n * ```\n *\n * @param value The object that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes and\n * emits events after the value is patched.\n * * `onlySelf`: When true, each change only affects this control and not its parent. Default is\n * true.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n Object.keys(value).forEach(name => {\n if (this.controls[name]) {\n this.controls[name].patchValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormGroup`, marks all descendants are marked `pristine` and `untouched`, and\n * the value of all descendants to null.\n *\n * You reset to a specific form state by passing in a map of states\n * that matches the structure of your form, with control names as keys. The state\n * is a standalone value or a form state object with both a value and a disabled\n * status.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events when the group is reset.\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * @usageNotes\n *\n * ### Reset the form group values\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * console.log(form.value); // {first: 'first name', last: 'last name'}\n *\n * form.reset({ first: 'name', last: 'last name' });\n *\n * console.log(form.value); // {first: 'name', last: 'last name'}\n * ```\n *\n * ### Reset the form group values and disabled status\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * form.reset({\n * first: {value: 'name', disabled: true},\n * last: 'last'\n * });\n *\n * console.log(this.form.value); // {first: 'name', last: 'last name'}\n * console.log(this.form.get('first').status); // 'DISABLED'\n * ```\n */\n reset(value: any = {}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n control.reset(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the `FormGroup`, including any disabled controls.\n *\n * Retrieves all values regardless of disabled status.\n * The `value` property is the best way to get the value of the group, because\n * it excludes disabled controls in the `FormGroup`.\n */\n getRawValue(): any {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n acc[name] = control instanceof FormControl ? control.value : (<any>control).getRawValue();\n return acc;\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this._reduceChildren(false, (updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(name: string): void {\n if (!Object.keys(this.controls).length) {\n throw new Error(`\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.controls[name]) {\n throw new Error(`Cannot find form control with name: ${name}.`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: (v: any, k: string) => void): void {\n Object.keys(this.controls).forEach(k => cb(this.controls[k], k));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n });\n }\n\n /** @internal */\n _updateValue(): void { (this as{value: any}).value = this._reduceValue(); }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n let res = false;\n this._forEachChild((control: AbstractControl, name: string) => {\n res = res || (this.contains(name) && condition(control));\n });\n return res;\n }\n\n /** @internal */\n _reduceValue() {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n if (control.enabled || this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n }\n\n /** @internal */\n _reduceChildren(initValue: any, fn: Function) {\n let res = initValue;\n this._forEachChild(\n (control: AbstractControl, name: string) => { res = fn(res, control, name); });\n return res;\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const controlName of Object.keys(this.controls)) {\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n if (value[name] === undefined) {\n throw new Error(`Must supply a value for form control with name: '${name}'.`);\n }\n });\n }\n}\n\n/**\n * Tracks the value and validity state of an array of `FormControl`,\n * `FormGroup` or `FormArray` instances.\n *\n * A `FormArray` aggregates the values of each child `FormControl` into an array.\n * It calculates its status by reducing the status values of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormGroup`.\n *\n * @usageNotes\n *\n * ### Create an array of form controls\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy', Validators.minLength(2)),\n * new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value); // ['Nancy', 'Drew']\n * console.log(arr.status); // 'VALID'\n * ```\n *\n * ### Create a form array with array-level validators\n *\n * You include array-level validators and async validators. These come in handy\n * when you want to perform validation that considers the value of more than one child\n * control.\n *\n * The two types of validators are passed in separately as the second and third arg\n * respectively, or together as part of an options object.\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy'),\n * new FormControl('Drew')\n * ], {validators: myValidator, asyncValidators: myAsyncValidator});\n * ```\n *\n * ### Set the updateOn property for all controls in a form array\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * array level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl()\n * ], {updateOn: 'blur'});\n * ```\n *\n * ### Adding or removing controls from a form array\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that result in strange and unexpected behavior such\n * as broken change detection.\n *\n * @publicApi\n */\nexport class FormArray extends AbstractControl {\n /**\n * Creates a new `FormArray` instance.\n *\n * @param controls An array of child controls. Each child control is given an index\n * where it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: AbstractControl[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Get the `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to retrieve the control\n */\n at(index: number): AbstractControl { return this.controls[index]; }\n\n /**\n * Insert a new `AbstractControl` at the end of the array.\n *\n * @param control Form control to be inserted\n */\n push(control: AbstractControl): void {\n this.controls.push(control);\n this._registerControl(control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Insert a new `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to insert the control\n * @param control Form control to be inserted\n */\n insert(index: number, control: AbstractControl): void {\n this.controls.splice(index, 0, control);\n\n this._registerControl(control);\n this.updateValueAndValidity();\n }\n\n /**\n * Remove the control at the given `index` in the array.\n *\n * @param index Index in the array to remove the control\n */\n removeAt(index: number): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n this.updateValueAndValidity();\n }\n\n /**\n * Replace an existing control.\n *\n * @param index Index in the array to replace the control\n * @param control The `AbstractControl` control to replace the existing control\n */\n setControl(index: number, control: AbstractControl): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n\n if (control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n }\n\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Length of the control array.\n */\n get length(): number { return this.controls.length; }\n\n /**\n * Sets the value of the `FormArray`. It accepts an array that matches\n * the structure of the control.\n *\n * This method performs strict checks, and throws an error if you try\n * to set the value of a control that doesn't exist or if you exclude the\n * value of a control.\n *\n * @usageNotes\n * ### Set the values for the controls in the form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.setValue(['Nancy', 'Drew']);\n * console.log(arr.value); // ['Nancy', 'Drew']\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n setValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._checkAllValuesPresent(value);\n value.forEach((newValue: any, index: number) => {\n this._throwIfControlMissing(index);\n this.at(index).setValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormArray`. It accepts an array that matches the\n * structure of the control, and does its best to match the values to the correct\n * controls in the group.\n *\n * It accepts both super-sets and sub-sets of the array without throwing an error.\n *\n * @usageNotes\n * ### Patch the values for controls in a form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.patchValue(['Nancy']);\n * console.log(arr.value); // ['Nancy', null]\n * ```\n *\n * @param value Array of latest values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n value.forEach((newValue: any, index: number) => {\n if (this.at(index)) {\n this.at(index).patchValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the\n * value of all descendants to null or null maps.\n *\n * You reset to a specific form state by passing in an array of states\n * that matches the structure of the control. The state is a standalone value\n * or a form state object with both a value and a disabled status.\n *\n * @usageNotes\n * ### Reset the values in a form array\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * arr.reset(['name', 'last name']);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * ```\n *\n * ### Reset the values in a form array and the disabled status for the first control\n *\n * ```\n * this.arr.reset([\n * {value: 'name', disabled: true},\n * 'last'\n * ]);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * console.log(this.arr.get(0).status); // 'DISABLED'\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n reset(value: any = [], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, index: number) => {\n control.reset(value[index], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the array, including any disabled controls.\n *\n * Reports all values regardless of disabled status.\n * For enabled controls only, the `value` property is the best way to get the value of the array.\n */\n getRawValue(): any[] {\n return this.controls.map((control: AbstractControl) => {\n return control instanceof FormControl ? control.value : (<any>control).getRawValue();\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this.controls.reduce((updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(index: number): void {\n if (!this.controls.length) {\n throw new Error(`\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.at(index)) {\n throw new Error(`Cannot find form control at index ${index}`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: Function): void {\n this.controls.forEach((control: AbstractControl, index: number) => { cb(control, index); });\n }\n\n /** @internal */\n _updateValue(): void {\n (this as{value: any}).value =\n this.controls.filter((control) => control.enabled || this.disabled)\n .map((control) => control.value);\n }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n return this.controls.some((control: AbstractControl) => control.enabled && condition(control));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => this._registerControl(control));\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, i: number) => {\n if (value[i] === undefined) {\n throw new Error(`Must supply a value for form control at index: ${i}.`);\n }\n });\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const control of this.controls) {\n if (control.enabled) return false;\n }\n return this.controls.length > 0 || this.disabled;\n }\n\n private _registerControl(control: AbstractControl) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AfterViewInit, Directive, EventEmitter, Inject, Input, Optional, Self, forwardRef} from '@angular/core';\n\nimport {AbstractControl, FormControl, FormGroup, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {NgControl} from './ng_control';\nimport {NgModel} from './ng_model';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from './shared';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgForm)\n};\n\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a top-level `FormGroup` instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags. You don't need to add a special selector.\n *\n * You optionally export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful. Many properties from the underlying\n * `FormGroup` instance are duplicated on the directive itself, so a reference to it\n * gives you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, use `NgModel` with a `name`\n * attribute. You may use `NgModelGroup` to create sub-groups within the form.\n *\n * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event emits the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * To import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * @usageNotes\n *\n * ### Migrating from deprecated ngForm selector\n *\n * Support for using `ngForm` element selector has been deprecated in Angular v6 and will be removed\n * in Angular v9.\n *\n * This has been deprecated to keep selectors consistent with other core Angular selectors,\n * as element selectors are typically written in kebab-case.\n *\n * Now deprecated:\n * ```html\n * <ngForm #myForm=\"ngForm\">\n * ```\n *\n * After:\n * ```html\n * <ng-form #myForm=\"ngForm\">\n * ```\n *\n * ### Listening for form submission\n *\n * The following example shows how to capture the form values from the \"ngSubmit\" event.\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Setting the update options\n *\n * The following example shows you how to change the \"updateOn\" option from its default using\n * ngFormOptions.\n *\n * ```html\n * <form [ngFormOptions]=\"{updateOn: 'blur'}\">\n * <input name=\"one\" ngModel> <!-- this ngModel will update on blur -->\n * </form>\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,ng-form,[ngForm]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n outputs: ['ngSubmit'],\n exportAs: 'ngForm'\n})\nexport class NgForm extends ControlContainer implements Form,\n AfterViewInit {\n /**\n * @description\n * Returns whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n private _directives: NgModel[] = [];\n\n /**\n * @description\n * The `FormGroup` instance created for this form.\n */\n form: FormGroup;\n\n /**\n * @description\n * Event emitter for the \"ngSubmit\" event\n */\n ngSubmit = new EventEmitter();\n\n /**\n * @description\n * Tracks options for the `NgForm` instance.\n *\n * **updateOn**: Sets the default `updateOn` value for all child `NgModels` below it\n * unless explicitly set by a child `NgModel` using `ngModelOptions`). Defaults to 'change'.\n * Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngFormOptions') options !: {updateOn?: FormHooks};\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this.form =\n new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n }\n\n /**\n * @description\n * Lifecycle method called after the view is initialized. For internal use only.\n */\n ngAfterViewInit() { this._setUpdateStrategy(); }\n\n /**\n * @description\n * The directive instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * The internal `FormGroup` instance.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it is always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Returns a map of the controls in this group.\n */\n get controls(): {[key: string]: AbstractControl} { return this.form.controls; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `NgModel` directive instance.\n */\n addControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n (dir as{control: FormControl}).control =\n <FormControl>container.registerControl(dir.name, dir.control);\n setUpControl(dir.control, dir);\n dir.control.updateValueAndValidity({emitEvent: false});\n this._directives.push(dir);\n });\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `NgModel` directive.\n *\n * @param dir The `NgModel` directive instance.\n */\n getControl(dir: NgModel): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `NgModel` instance from the internal list of directives\n *\n * @param dir The `NgModel` directive instance.\n */\n removeControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n removeDir<NgModel>(this._directives, dir);\n });\n }\n\n /**\n * @description\n * Adds a new `NgModelGroup` directive instance to the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n addFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n const group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({emitEvent: false});\n });\n }\n\n /**\n * @description\n * Removes the `NgModelGroup` directive instance from the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n removeFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n });\n }\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n getFormGroup(dir: NgModelGroup): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `NgControl` directive.\n *\n * @param dir The `NgControl` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: NgControl, value: any): void {\n resolvedPromise.then(() => {\n const ctrl = <FormControl>this.form.get(dir.path !);\n ctrl.setValue(value);\n });\n }\n\n /**\n * @description\n * Sets the value for this `FormGroup`.\n *\n * @param value The new value\n */\n setValue(value: {[key: string]: any}): void { this.control.setValue(value); }\n\n /**\n * @description\n * Method called when the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n private _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n }\n\n /** @internal */\n _findContainer(path: string[]): FormGroup {\n path.pop();\n return path.length ? <FormGroup>this.form.get(path) : this.form;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class TemplateDrivenErrors {\n static modelParentException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup's partner directive \"formControlName\" instead. Example:\n\n ${Examples.formControlName}\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n ${Examples.ngModelWithFormGroup}`);\n }\n\n static formGroupNameException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static missingNameException() {\n throw new Error(\n `If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as 'standalone' in ngModelOptions.\n\n Example 1: <input [(ngModel)]=\"person.firstName\" name=\"first\">\n Example 2: <input [(ngModel)]=\"person.firstName\" [ngModelOptions]=\"{standalone: true}\">`);\n }\n\n static modelGroupParentException() {\n throw new Error(`\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static ngFormWarning() {\n console.warn(`\n It looks like you're using 'ngForm'.\n\n Support for using the 'ngForm' element selector has been deprecated in Angular v6 and will be removed\n in Angular v9.\n\n Use 'ng-form' instead.\n\n Before:\n <ngForm #myForm=\"ngForm\">\n\n After:\n <ng-form #myForm=\"ngForm\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Inject, InjectionToken, Optional} from '@angular/core';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\n/**\n * @description\n * `InjectionToken` to provide to turn off the warning when using 'ngForm' deprecated selector.\n */\nexport const NG_FORM_SELECTOR_WARNING = new InjectionToken('NgFormSelectorWarning');\n\n/**\n * This directive is solely used to display warnings when the deprecated `ngForm` selector is used.\n *\n * @deprecated in Angular v6 and will be removed in Angular v9.\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'ngForm'})\nexport class NgFormSelectorWarning {\n /**\n * Static property used to track whether the deprecation warning for this selector has been sent.\n * Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngFormWarning = false;\n\n constructor(@Optional() @Inject(NG_FORM_SELECTOR_WARNING) ngFormWarning: string|null) {\n if (((!ngFormWarning || ngFormWarning === 'once') && !NgFormSelectorWarning._ngFormWarning) ||\n ngFormWarning === 'always') {\n TemplateDrivenErrors.ngFormWarning();\n NgFormSelectorWarning._ngFormWarning = true;\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {NgForm} from './ng_form';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\nexport const modelGroupProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgModelGroup)\n};\n\n/**\n * @description\n * Creates and binds a `FormGroup` instance to a DOM element.\n *\n * This directive can only be used as a child of `NgForm` (within `<form>` tags).\n *\n * Use this directive to validate a sub-group of your form separately from the\n * rest of your form, or if some values in your domain model make more sense\n * to consume together in a nested object.\n *\n * Provide a name for the sub-group and it will become the key\n * for the sub-group in the form's full value. If you need direct access, export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * @usageNotes\n *\n * ### Consuming controls in a grouping\n *\n * The following example shows you how to combine controls together in a sub-group\n * of the form.\n *\n * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup'})\nexport class NgModelGroup extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `NgModelGroup` bound to the directive. The name corresponds\n * to a key in the parent `NgForm`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelGroup') name !: string;\n\n constructor(\n @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelGroupParentException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\nimport {NgForm} from './ng_form';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor, setUpControl} from './shared';\nimport {TemplateDrivenErrors} from './template_driven_errors';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => NgModel)\n};\n\n/**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have and old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel` have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a `FormControl` instance from a domain model and binds it\n * to a form control element.\n *\n * The `FormControl` instance tracks the value, user interaction, and\n * validation status of the control and keeps the view synced with the model. If used\n * within a parent form, the directive also registers itself with the form as a child\n * control.\n *\n * This directive is used by itself or as part of a larger form. Use the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional `Input`. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\n * class sets the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-box syntax'), the value in the UI always syncs back to\n * the domain model in your class.\n *\n * To inspect the properties of the associated `FormControl` (like validity state), \n * export the directive into a local template variable using `ngModel` as the key (ex: `#myVar=\"ngModel\"`).\n * You then access the control using the directive's `control` property, \n * but most properties used (like `valid` and `dirty`) fall through to the control anyway for direct access. \n * See a full list of properties directly available in `AbstractControlDirective`.\n *\n * @see `RadioControlValueAccessor` \n * @see `SelectControlValueAccessor`\n * \n * @usageNotes\n * \n * ### Using ngModel on a standalone control\n *\n * The following examples show a simple standalone control using `ngModel`:\n *\n * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * In the context of a parent form, it's often unnecessary to include one-way or two-way binding, \n * as the parent form syncs the value for you. You access its properties by exporting it into a \n * local template variable using `ngForm` such as (`#f=\"ngForm\"`). Use the variable where \n * needed on form submission.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n * \n * ### Using ngModel within a form\n *\n * The following example shows controls using `ngModel` within a form:\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n * \n * ### Using a standalone ngModel within a group\n * \n * The following example shows you how to use a standalone ngModel control\n * within a form. This controls the display of the form, but doesn't contain form data.\n *\n * ```html\n * <form>\n * <input name=\"login\" ngModel placeholder=\"Login\">\n * <input type=\"checkbox\" ngModel [ngModelOptions]=\"{standalone: true}\"> Show more options?\n * </form>\n * <!-- form value: {login: ''} -->\n * ```\n * \n * ### Setting the ngModel name attribute through options\n * \n * The following example shows you an alternate way to set the name attribute. The name attribute is used\n * within a custom form component, and the name `@Input` property serves a different purpose.\n *\n * ```html\n * <form>\n * <my-person-control name=\"Nancy\" ngModel [ngModelOptions]=\"{name: 'user'}\">\n * </my-person-control>\n * </form>\n * <!-- form value: {user: ''} -->\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[ngModel]:not([formControlName]):not([formControl])',\n providers: [formControlBinding],\n exportAs: 'ngModel'\n})\nexport class NgModel extends NgControl implements OnChanges,\n OnDestroy {\n public readonly control: FormControl = new FormControl();\n /** @internal */\n _registered = false;\n\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the name bound to the directive. The parent form\n * uses this name as a key to retrieve this control's value.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks whether the control is disabled.\n */\n // TODO(issue/24571): remove '!'.\n @Input('disabled') isDisabled !: boolean;\n\n /**\n * @description\n * Tracks the value bound to this directive.\n */\n @Input('ngModel') model: any;\n\n /**\n * @description\n * Tracks the configuration options for this `ngModel` instance.\n *\n * **name**: An alternative to setting the name attribute on the form control element. See\n * the [example](api/forms/NgModel#using-ngmodel-on-a-standalone-control) for using `NgModel`\n * as a standalone control.\n *\n * **standalone**: When set to true, the `ngModel` will not register itself with its parent form,\n * and acts as if it's not in the form. Defaults to false.\n *\n * **updateOn**: Defines the event upon which the form control value and validity update.\n * Defaults to 'change'. Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelOptions')\n options !: {name?: string, standalone?: boolean, updateOn?: FormHooks};\n\n /**\n * @description\n * Event emitter for producing the `ngModelChange` event after\n * the view model updates.\n */\n @Output('ngModelChange') update = new EventEmitter();\n\n constructor(@Optional() @Host() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[]) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n this._checkForErrors();\n if (!this._registered) this._setUpControl();\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal\n * use only.\n */\n ngOnDestroy(): void { this.formDirective && this.formDirective.removeControl(this); }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] {\n return this._parent ? controlPath(this.name, this._parent) : [this.name];\n }\n\n /**\n * @description\n * The top-level directive for this control if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value emitted by `ngModelChange`.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _setUpControl(): void {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() :\n this.formDirective.addControl(this);\n this._registered = true;\n }\n\n private _setUpdateStrategy(): void {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n }\n\n private _isStandalone(): boolean {\n return !this._parent || !!(this.options && this.options.standalone);\n }\n\n private _setUpStandalone(): void {\n setUpControl(this.control, this);\n this.control.updateValueAndValidity({emitEvent: false});\n }\n\n private _checkForErrors(): void {\n if (!this._isStandalone()) {\n this._checkParentType();\n }\n this._checkName();\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) &&\n this._parent instanceof AbstractFormGroupDirective) {\n TemplateDrivenErrors.formGroupNameException();\n } else if (\n !(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelParentException();\n }\n }\n\n private _checkName(): void {\n if (this.options && this.options.name) this.name = this.options.name;\n\n if (!this._isStandalone() && !this.name) {\n TemplateDrivenErrors.missingNameException();\n }\n }\n\n private _updateValue(value: any): void {\n resolvedPromise.then(\n () => { this.control.setValue(value, {emitViewToModelChange: false}); });\n }\n\n private _updateDisabled(changes: SimpleChanges) {\n const disabledValue = changes['isDisabled'].currentValue;\n\n const isDisabled =\n disabledValue === '' || (disabledValue && disabledValue !== 'false');\n\n resolvedPromise.then(() => {\n if (isDisabled && !this.control.disabled) {\n this.control.disable();\n } else if (!isDisabled && this.control.disabled) {\n this.control.enable();\n }\n });\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, InjectionToken, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, isPropertyUpdated, selectValueAccessor, setUpControl} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\n\n/**\n * Token to provide to turn off the ngModel warning on formControl and formControlName.\n */\nexport const NG_MODEL_WITH_FORM_CONTROL_WARNING =\n new InjectionToken('NgModelWithFormControlWarning');\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlDirective)\n};\n\n/**\n * @description\n * * Syncs a standalone `FormControl` instance to a form control element.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Registering a single form control\n * \n * The following examples shows how to register a standalone control and set its value.\n *\n * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <input [formControl]=\"control\" [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <input [formControl]=\"control\">\n * ```\n *\n * ```ts\n * this.control.setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControl]', providers: [formControlBinding], exportAs: 'ngForm'})\n\nexport class FormControlDirective extends NgControl implements OnChanges {\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControl') form !: FormControl;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlDirective. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular `FormControlDirective` instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(@Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|null) {\n super();\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._isControlChanged(changes)) {\n setUpControl(this.form, this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this.form.updateValueAndValidity({emitEvent: false});\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning(\n 'formControl', FormControlDirective, this, this._ngModelWarningConfig);\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * The `FormControl` bound to this directive.\n */\n get control(): FormControl { return this.form; }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _isControlChanged(changes: {[key: string]: any}): boolean {\n return changes.hasOwnProperty('form');\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\nimport {FormArray, FormControl, FormGroup} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators} from '../../validators';\nimport {ControlContainer} from '../control_container';\nimport {Form} from '../form_interface';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {cleanUpControl, composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from '../shared';\n\nimport {FormControlName} from './form_control_name';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupDirective)\n};\n\n/**\n * @description\n *\n * Binds an existing `FormGroup` to a DOM element.\n *\n * This directive accepts an existing `FormGroup` instance. It will then use this\n * `FormGroup` instance to match any child `FormControl`, `FormGroup`,\n * and `FormArray` instances to child `FormControlName`, `FormGroupName`,\n * and `FormArrayName` directives.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * ### Register Form Group\n *\n * The following example registers a `FormGroup` with first name and last name controls,\n * and listens for the *ngSubmit* event when the button is clicked.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector: '[formGroup]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n exportAs: 'ngForm'\n})\nexport class FormGroupDirective extends ControlContainer implements Form,\n OnChanges {\n /**\n * @description\n * Reports whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n // TODO(issue/24571): remove '!'.\n private _oldForm !: FormGroup;\n\n /**\n * @description\n * Tracks the list of added `FormControlName` instances\n */\n directives: FormControlName[] = [];\n\n /**\n * @description\n * Tracks the `FormGroup` bound to this directive.\n */\n @Input('formGroup') form: FormGroup = null !;\n\n /**\n * @description\n * Emits an event when the form submission has been triggered.\n */\n @Output() ngSubmit = new EventEmitter();\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) private _validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: any[]) {\n super();\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n }\n }\n\n /**\n * @description\n * Returns this directive's instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * Returns the `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `FormControlName` directive instance.\n */\n addControl(dir: FormControlName): FormControl {\n const ctrl: any = this.form.get(dir.path);\n setUpControl(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n this.directives.push(dir);\n return ctrl;\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `FormControlName` directive\n *\n * @param dir The `FormControlName` directive instance.\n */\n getControl(dir: FormControlName): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `FormControlName` instance from the internal list of directives\n *\n * @param dir The `FormControlName` directive instance.\n */\n removeControl(dir: FormControlName): void { removeDir<FormControlName>(this.directives, dir); }\n\n /**\n * Adds a new `FormGroupName` directive instance to the form.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n addFormGroup(dir: FormGroupName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form group.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n removeFormGroup(dir: FormGroupName): void {}\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance\n *\n * @param dir The `FormGroupName` directive instance.\n */\n getFormGroup(dir: FormGroupName): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Adds a new `FormArrayName` directive instance to the form.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n addFormArray(dir: FormArrayName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form array.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n removeFormArray(dir: FormArrayName): void {}\n\n /**\n * @description\n * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n getFormArray(dir: FormArrayName): FormArray { return <FormArray>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `FormControlName` directive.\n *\n * @param dir The `FormControlName` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: FormControlName, value: any): void {\n const ctrl  = <FormControl>this.form.get(dir.path);\n ctrl.setValue(value);\n }\n\n /**\n * @description\n * Method called with the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n\n /** @internal */\n _updateDomValue() {\n this.directives.forEach(dir => {\n const newCtrl: any = this.form.get(dir.path);\n if (dir.control !== newCtrl) {\n cleanUpControl(dir.control, dir);\n if (newCtrl) setUpControl(newCtrl, dir);\n (dir as{control: FormControl}).control = newCtrl;\n }\n });\n\n this.form._updateTreeValidity({emitEvent: false});\n }\n\n private _updateRegistrations() {\n this.form._registerOnCollectionChange(() => this._updateDomValue());\n if (this._oldForm) this._oldForm._registerOnCollectionChange(() => {});\n this._oldForm = this.form;\n }\n\n private _updateValidators() {\n const sync = composeValidators(this._validators);\n this.form.validator = Validators.compose([this.form.validator !, sync !]);\n\n const async = composeAsyncValidators(this._asyncValidators);\n this.form.asyncValidator = Validators.composeAsync([this.form.asyncValidator !, async !]);\n }\n\n private _checkFormPresent() {\n if (!this.form) {\n ReactiveErrors.missingFormException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormArray} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {composeAsyncValidators, composeValidators, controlPath} from '../shared';\nimport {AsyncValidatorFn, ValidatorFn} from '../validators';\n\nimport {FormGroupDirective} from './form_group_directive';\n\nexport const formGroupNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormGroup` to a DOM element.\n *\n * This directive can only be used with a parent `FormGroupDirective`.\n *\n * It accepts the string name of the nested `FormGroup` to link, and\n * looks for a `FormGroup` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * Use nested form groups to validate a sub-group of a\n * form separately from the rest or to group the values of certain\n * controls into their own nested object.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n *\n * @usageNotes\n * \n * ### Access the group by name\n * \n * The following example uses the {@link AbstractControl#get get} method to access the \n * associated `FormGroup`\n *\n * ```ts\n * this.form.get('name');\n * ```\n * \n * ### Access individual controls in the group\n * \n * The following example uses the {@link AbstractControl#get get} method to access \n * individual controls within the group using dot syntax.\n *\n * ```ts\n * this.form.get('name.first');\n * ```\n *\n * ### Register a nested `FormGroup`.\n * \n * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,\n * and provides methods to retrieve the nested `FormGroup` and individual controls.\n *\n * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formGroupName]', providers: [formGroupNameProvider]})\nexport class FormGroupName extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `FormGroup` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formGroupName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.groupParentException();\n }\n }\n}\n\nexport const formArrayNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormArrayName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormArray` to a DOM element.\n *\n * This directive is designed to be used with a parent `FormGroupDirective` (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested `FormArray` you want to link, and\n * will look for a `FormArray` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formArrayName]', providers: [formArrayNameProvider]})\nexport class FormArrayName extends ControlContainer implements OnInit, OnDestroy {\n /** @internal */\n _parent: ControlContainer;\n\n /** @internal */\n _validators: any[];\n\n /** @internal */\n _asyncValidators: any[];\n\n /**\n * @description\n * Tracks the name of the `FormArray` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formArrayName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs are initialized. For internal use only.\n *\n * @throws If the directive does not have a valid parent.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormArray(this);\n }\n\n /**\n * @description\n * A lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormArray(this);\n }\n }\n\n /**\n * @description\n * The `FormArray` bound to this directive.\n */\n get control(): FormArray { return this.formDirective !.getFormArray(this); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): FormGroupDirective|null {\n return this._parent ? <FormGroupDirective>this._parent.formDirective : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators registered with this\n * directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n private _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.arrayParentException();\n }\n }\n}\n\nfunction _hasInvalidParent(parent: ControlContainer): boolean {\n return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n !(parent instanceof FormArrayName);\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\nimport {NG_MODEL_WITH_FORM_CONTROL_WARNING} from './form_control_directive';\nimport {FormGroupDirective} from './form_group_directive';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const controlNameBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlName)\n};\n\n/**\n * @description\n * Syncs a `FormControl` in an existing `FormGroup` to a form control\n * element by name.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n * \n * ### Register `FormControl` within a group\n *\n * The following example shows how to register multiple form controls within a form group\n * and set their value.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: `RadioControlValueAccessor`\n * * Selects: `SelectControlValueAccessor`\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\" [(ngModel)]=\"value\">\n * </form>\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\">\n * </form>\n * ```\n *\n * ```ts\n * this.form.get('first').setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName]', providers: [controlNameBinding]})\nexport class FormControlName extends NgControl implements OnChanges, OnDestroy {\n private _added = false;\n /**\n * @description\n * Internal reference to the view model value.\n * @internal\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n readonly control !: FormControl;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControlName') name !: string;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlName. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular FormControlName instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators:\n Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR) valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|\n null) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n if (!this._added) this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning('formControlName', FormControlName, this, this._ngModelWarningConfig);\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent !); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn {\n return composeAsyncValidators(this._rawAsyncValidators) !;\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof FormGroupName) &&\n this._parent instanceof AbstractFormGroupDirective) {\n ReactiveErrors.ngModelGroupException();\n } else if (\n !(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&\n !(this._parent instanceof FormArrayName)) {\n ReactiveErrors.controlParentException();\n }\n }\n\n private _setUpControl() {\n this._checkParentType();\n (this as{control: FormControl}).control = this.formDirective.addControl(this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this._added = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Input, OnChanges, SimpleChanges, StaticProvider, forwardRef} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {AbstractControl} from '../model';\nimport {NG_VALIDATORS, Validators} from '../validators';\n\n\n/**\n * @description\n * Defines the map of errors returned from failed validation checks.\n *\n * @publicApi\n */\nexport type ValidationErrors = {\n [key: string]: any\n};\n\n/**\n * @description\n * An interface implemented by classes that perform synchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom validator\n *\n * The following example implements the `Validator` interface to create a\n * validator directive with a custom error key.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors|null {\n * return {'custom': true};\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface Validator {\n /**\n * @description\n * Method that performs synchronous validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A map of validation errors if validation fails,\n * otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null;\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange?(fn: () => void): void;\n}\n\n/**\n * @description\n * An interface implemented by classes that perform asynchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom async validator directive\n *\n * The following example implements the `AsyncValidator` interface to create an\n * async validator directive with a custom error key.\n *\n * ```typescript\n * import { of as observableOf } from 'rxjs';\n *\n * @Directive({\n * selector: '[customAsyncValidator]',\n * providers: [{provide: NG_ASYNC_VALIDATORS, useExisting: CustomAsyncValidatorDirective, multi:\n * true}]\n * })\n * class CustomAsyncValidatorDirective implements AsyncValidator {\n * validate(control: AbstractControl): Observable<ValidationErrors|null> {\n * return observableOf({'custom': true});\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface AsyncValidator extends Validator {\n /**\n * @description\n * Method that performs async validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A promise or observable that resolves a map of validation errors\n * if validation fails, otherwise null.\n */\n validate(control: AbstractControl):\n Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RequiredValidator),\n multi: true\n};\n\n/**\n * @description\n * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const CHECKBOX_REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CheckboxRequiredValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds the `required` validator to any controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required validator using template-driven forms\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector:\n ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n providers: [REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class RequiredValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _required !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the required attribute bound to this directive.\n */\n @Input()\n get required(): boolean|string { return this._required; }\n\n set required(value: boolean|string) {\n this._required = value != null && value !== false && `${value}` !== 'false';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether the control is empty.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.required(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n\n/**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required checkbox validator using template-driven forms\n *\n * The following example shows how to add a checkbox required validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector:\n 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n providers: [CHECKBOX_REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class CheckboxRequiredValidator extends RequiredValidator {\n /**\n * @description\n * Method that validates whether or not the checkbox has been checked.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.requiredTrue(control) : null;\n }\n}\n\n/**\n * @description\n * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const EMAIL_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => EmailValidator),\n multi: true\n};\n\n/**\n * A directive that adds the `email` validator to controls marked with the\n * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding an email validator\n *\n * The following example shows how to add an email validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n providers: [EMAIL_VALIDATOR]\n})\nexport class EmailValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _enabled !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the email attribute bound to this directive.\n */\n @Input()\n set email(value: boolean|string) {\n this._enabled = value === '' || value === true || value === 'true';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether an email address is valid.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this._enabled ? Validators.email(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n/**\n * @description\n * A function that receives a control and synchronously returns a map of\n * validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface ValidatorFn { (control: AbstractControl): ValidationErrors|null; }\n\n/**\n * @description\n * A function that receives a control and returns a Promise or observable\n * that emits validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface AsyncValidatorFn {\n (control: AbstractControl): Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MIN_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MinLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds minimum length validation to controls marked with the\n * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` mult-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a minimum length validator\n *\n * The following example shows how to add a minimum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel minlength=\"4\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n providers: [MIN_LENGTH_VALIDATOR],\n host: {'[attr.minlength]': 'minlength ? minlength : null'}\n})\nexport class MinLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the minimum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() minlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('minlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value meets a minimum length\n * requirement. Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.minlength == null ? null : this._validator(control);\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.minLength(parseInt(this.minlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MAX_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaxLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds max length validation to controls marked with the\n * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a maximum length validator\n *\n * The following example shows how to add a maximum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel maxlength=\"25\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n providers: [MAX_LENGTH_VALIDATOR],\n host: {'[attr.maxlength]': 'maxlength ? maxlength : null'}\n})\nexport class MaxLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the maximum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() maxlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('maxlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value exceeds\n * the maximum length requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.maxlength != null ? this._validator(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const PATTERN_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => PatternValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds regex pattern validation to controls marked with the\n * `pattern` attribute. The regex must match the entire control value.\n * The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a pattern validator\n *\n * The following example shows how to add a pattern validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel pattern=\"[a-zA-Z ]*\">\n * ```\n * \n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n providers: [PATTERN_VALIDATOR],\n host: {'[attr.pattern]': 'pattern ? pattern : null'}\n})\nexport class PatternValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the pattern bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() pattern !: string | RegExp;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('pattern' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value matches the\n * the pattern requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null { return this._validator(control); }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void { this._validator = Validators.pattern(this.pattern); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\n\nimport {AsyncValidatorFn, ValidatorFn} from './directives/validators';\nimport {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup, FormHooks} from './model';\n\nfunction isAbstractControlOptions(options: AbstractControlOptions | {[key: string]: any}):\n options is AbstractControlOptions {\n return (<AbstractControlOptions>options).asyncValidators !== undefined ||\n (<AbstractControlOptions>options).validators !== undefined ||\n (<AbstractControlOptions>options).updateOn !== undefined;\n}\n\n/**\n * @description\n * Creates an `AbstractControl` from a user-specified configuration.\n *\n * The `FormBuilder` provides syntactic sugar that shortens creating instances of a `FormControl`,\n * `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to build complex\n * forms.\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@Injectable()\nexport class FormBuilder {\n /**\n * @description\n * Construct a new `FormGroup` instance.\n *\n * @param controlsConfig A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param options Configuration options object for the `FormGroup`. The object can\n * have two shapes:\n *\n * 1) `AbstractControlOptions` object (preferred), which consists of:\n * * `validators`: A synchronous validator function, or an array of validator functions\n * * `asyncValidators`: A single async validator or array of async validator functions\n * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur' |\n * submit')\n *\n * 2) Legacy configuration object, which consists of:\n * * `validator`: A synchronous validator function, or an array of validator functions\n * * `asyncValidator`: A single async validator or array of async validator functions\n *\n */\n group(\n controlsConfig: {[key: string]: any},\n options: AbstractControlOptions|{[key: string]: any}|null = null): FormGroup {\n const controls = this._reduceControls(controlsConfig);\n\n let validators: ValidatorFn|ValidatorFn[]|null = null;\n let asyncValidators: AsyncValidatorFn|AsyncValidatorFn[]|null = null;\n let updateOn: FormHooks|undefined = undefined;\n\n if (options != null) {\n if (isAbstractControlOptions(options)) {\n // `options` are `AbstractControlOptions`\n validators = options.validators != null ? options.validators : null;\n asyncValidators = options.asyncValidators != null ? options.asyncValidators : null;\n updateOn = options.updateOn != null ? options.updateOn : undefined;\n } else {\n // `options` are legacy form group options\n validators = options.validator != null ? options.validator : null;\n asyncValidators = options.asyncValidator != null ? options.asyncValidator : null;\n }\n }\n\n return new FormGroup(controls, {asyncValidators, updateOn, validators});\n }\n\n /**\n * @description\n * Construct a new `FormControl` with the given state, validators and options.\n *\n * @param formState Initializes the control with an initial state value, or\n * with an object that contains both a value and a disabled status.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n *\n * @usageNotes\n *\n * ### Initialize a control as disabled\n *\n * The following example returns a control with an initial value in a disabled state.\n *\n * <code-example path=\"forms/ts/formBuilder/form_builder_example.ts\"\n * linenums=\"false\" region=\"disabled-control\">\n * </code-example>\n */\n control(\n formState: any, validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormControl {\n return new FormControl(formState, validatorOrOpts, asyncValidator);\n }\n\n /**\n * Constructs a new `FormArray` from the given array of configurations,\n * validators and options.\n *\n * @param controlsConfig An array of child controls or control configs. Each\n * child control is given an index when it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n */\n array(\n controlsConfig: any[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormArray {\n const controls = controlsConfig.map(c => this._createControl(c));\n return new FormArray(controls, validatorOrOpts, asyncValidator);\n }\n\n /** @internal */\n _reduceControls(controlsConfig: {[k: string]: any}): {[key: string]: AbstractControl} {\n const controls: {[key: string]: AbstractControl} = {};\n Object.keys(controlsConfig).forEach(controlName => {\n controls[controlName] = this._createControl(controlsConfig[controlName]);\n });\n return controls;\n }\n\n /** @internal */\n _createControl(controlConfig: any): AbstractControl {\n if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n controlConfig instanceof FormArray) {\n return controlConfig;\n\n } else if (Array.isArray(controlConfig)) {\n const value = controlConfig[0];\n const validator: ValidatorFn = controlConfig.length > 1 ? controlConfig[1] : null;\n const asyncValidator: AsyncValidatorFn = controlConfig.length > 2 ? controlConfig[2] : null;\n return this.control(value, validator, asyncValidator);\n\n } else {\n return this.control(controlConfig);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = new Version('7.2.7');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive} from '@angular/core';\n\n/**\n * @description\n *\n * Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```\n * <form ngNativeValidate></form>\n * ```\n *\n * @publicApi\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n host: {'novalidate': ''},\n})\nexport class NgNoValidate {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule, Type} from '@angular/core';\n\nimport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nimport {DefaultValueAccessor} from './directives/default_value_accessor';\nimport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nimport {NgForm} from './directives/ng_form';\nimport {NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nimport {NgModel} from './directives/ng_model';\nimport {NgModelGroup} from './directives/ng_model_group';\nimport {NgNoValidate} from './directives/ng_no_validate_directive';\nimport {NumberValueAccessor} from './directives/number_value_accessor';\nimport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nimport {RangeValueAccessor} from './directives/range_value_accessor';\nimport {FormControlDirective} from './directives/reactive_directives/form_control_directive';\nimport {FormControlName} from './directives/reactive_directives/form_control_name';\nimport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nimport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nimport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nimport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\nimport {CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator} from './directives/validators';\n\nexport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nexport {ControlValueAccessor} from './directives/control_value_accessor';\nexport {DefaultValueAccessor} from './directives/default_value_accessor';\nexport {NgControl} from './directives/ng_control';\nexport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nexport {NgForm} from './directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING, NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nexport {NgModel} from './directives/ng_model';\nexport {NgModelGroup} from './directives/ng_model_group';\nexport {NumberValueAccessor} from './directives/number_value_accessor';\nexport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nexport {RangeValueAccessor} from './directives/range_value_accessor';\nexport {FormControlDirective, NG_MODEL_WITH_FORM_CONTROL_WARNING} from './directives/reactive_directives/form_control_directive';\nexport {FormControlName} from './directives/reactive_directives/form_control_name';\nexport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nexport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nexport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nexport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\n\nexport const SHARED_FORM_DIRECTIVES: Type<any>[] = [\n NgNoValidate,\n NgSelectOption,\n NgSelectMultipleOption,\n DefaultValueAccessor,\n NumberValueAccessor,\n RangeValueAccessor,\n CheckboxControlValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n NgControlStatus,\n NgControlStatusGroup,\n RequiredValidator,\n MinLengthValidator,\n MaxLengthValidator,\n PatternValidator,\n CheckboxRequiredValidator,\n EmailValidator,\n];\n\nexport const TEMPLATE_DRIVEN_DIRECTIVES: Type<any>[] =\n [NgModel, NgModelGroup, NgForm, NgFormSelectorWarning];\n\nexport const REACTIVE_DRIVEN_DIRECTIVES: Type<any>[] =\n [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n\n/**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\n@NgModule({\n declarations: SHARED_FORM_DIRECTIVES,\n exports: SHARED_FORM_DIRECTIVES,\n})\nexport class InternalFormsSharedModule {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModuleWithProviders, NgModule} from '@angular/core';\n\nimport {InternalFormsSharedModule, NG_FORM_SELECTOR_WARNING, NG_MODEL_WITH_FORM_CONTROL_WARNING, REACTIVE_DRIVEN_DIRECTIVES, TEMPLATE_DRIVEN_DIRECTIVES} from './directives';\nimport {RadioControlRegistry} from './directives/radio_control_value_accessor';\nimport {FormBuilder} from './form_builder';\n\n/**\n * Exports the required providers and directives for template-driven forms,\n * making them available for import by NgModules that import this module.\n *\n * @see [Forms Guide](/guide/forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n providers: [RadioControlRegistry],\n exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n})\nexport class FormsModule {\n /**\n * @description\n * Provides options for configuring the template-driven forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnDeprecatedNgFormSelector` Configures when to emit a warning when the deprecated\n * `ngForm` selector is used.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnDeprecatedNgFormSelector?: 'never' | 'once' | 'always',\n }): ModuleWithProviders<FormsModule> {\n return {\n ngModule: FormsModule,\n providers:\n [{provide: NG_FORM_SELECTOR_WARNING, useValue: opts.warnOnDeprecatedNgFormSelector}]\n };\n }\n}\n\n/**\n * Exports the required infrastructure and directives for reactive forms,\n * making them available for import by NgModules that import this module.\n * @see [Forms](guide/reactive-forms)\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n providers: [FormBuilder, RadioControlRegistry],\n exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n})\nexport class ReactiveFormsModule {\n /**\n * @description\n * Provides options for configuring the reactive forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`\n * binding is used with reactive form directives.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnNgModelWithFormControl: 'never' | 'once' | 'always'\n }): ModuleWithProviders<ReactiveFormsModule> {\n return {\n ngModule: ReactiveFormsModule,\n providers: [{\n provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,\n useValue: opts.warnOnNgModelWithFormControl\n }]\n };\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * This module is used for handling user input, by defining and building a `FormGroup` that\n * consists of `FormControl` objects, and mapping them onto the DOM. `FormControl`\n * objects can then be used to read information from the form DOM elements.\n *\n * Forms providers are not included in default providers; you must import these providers\n * explicitly.\n */\n\n\nexport {AbstractControlDirective} from './directives/abstract_control_directive';\nexport {AbstractFormGroupDirective} from './directives/abstract_form_group_directive';\nexport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nexport {ControlContainer} from './directives/control_container';\nexport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './directives/control_value_accessor';\nexport {COMPOSITION_BUFFER_MODE, DefaultValueAccessor} from './directives/default_value_accessor';\nexport {Form} from './directives/form_interface';\nexport {NgControl} from './directives/ng_control';\nexport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nexport {NgForm} from './directives/ng_form';\nexport {NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nexport {NgModel} from './directives/ng_model';\nexport {NgModelGroup} from './directives/ng_model_group';\nexport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nexport {FormControlDirective} from './directives/reactive_directives/form_control_directive';\nexport {FormControlName} from './directives/reactive_directives/form_control_name';\nexport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nexport {FormArrayName} from './directives/reactive_directives/form_group_name';\nexport {FormGroupName} from './directives/reactive_directives/form_group_name';\nexport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nexport {SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\nexport {AsyncValidator, AsyncValidatorFn, CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator, ValidationErrors, Validator, ValidatorFn} from './directives/validators';\nexport {FormBuilder} from './form_builder';\nexport {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup} from './model';\nexport {NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators} from './validators';\nexport {VERSION} from './version';\n\nexport * from './form_providers';\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\nexport * from './src/forms';\n\n// This file only reexports content of the `src` folder. Keep it that way.\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// This file is not used to build this module. It is only used during editing\n// by the TypeScript language service and during build for verification. `ngc`\n// replaces this file with production index.ts when it rewrites private symbol\n// names.\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {InternalFormsSharedModule as ɵangular_packages_forms_forms_bc,REACTIVE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_bb,SHARED_FORM_DIRECTIVES as ɵangular_packages_forms_forms_z,TEMPLATE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_ba} from './src/directives';\nexport {CHECKBOX_VALUE_ACCESSOR as ɵangular_packages_forms_forms_a} from './src/directives/checkbox_value_accessor';\nexport {DEFAULT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_b} from './src/directives/default_value_accessor';\nexport {AbstractControlStatus as ɵangular_packages_forms_forms_c,ngControlStatusHost as ɵangular_packages_forms_forms_d} from './src/directives/ng_control_status';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_e} from './src/directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING as ɵangular_packages_forms_forms_f} from './src/directives/ng_form_selector_warning';\nexport {formControlBinding as ɵangular_packages_forms_forms_g} from './src/directives/ng_model';\nexport {modelGroupProvider as ɵangular_packages_forms_forms_h} from './src/directives/ng_model_group';\nexport {NgNoValidate as ɵangular_packages_forms_forms_bh} from './src/directives/ng_no_validate_directive';\nexport {NUMBER_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bd,NumberValueAccessor as ɵangular_packages_forms_forms_be} from './src/directives/number_value_accessor';\nexport {RADIO_VALUE_ACCESSOR as ɵangular_packages_forms_forms_i,RadioControlRegistry as ɵangular_packages_forms_forms_j} from './src/directives/radio_control_value_accessor';\nexport {RANGE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bf,RangeValueAccessor as ɵangular_packages_forms_forms_bg} from './src/directives/range_value_accessor';\nexport {NG_MODEL_WITH_FORM_CONTROL_WARNING as ɵangular_packages_forms_forms_k,formControlBinding as ɵangular_packages_forms_forms_l} from './src/directives/reactive_directives/form_control_directive';\nexport {controlNameBinding as ɵangular_packages_forms_forms_m} from './src/directives/reactive_directives/form_control_name';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_n} from './src/directives/reactive_directives/form_group_directive';\nexport {formArrayNameProvider as ɵangular_packages_forms_forms_p,formGroupNameProvider as ɵangular_packages_forms_forms_o} from './src/directives/reactive_directives/form_group_name';\nexport {SELECT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_q} from './src/directives/select_control_value_accessor';\nexport {NgSelectMultipleOption as ɵangular_packages_forms_forms_s,SELECT_MULTIPLE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_r} from './src/directives/select_multiple_control_value_accessor';\nexport {CHECKBOX_REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_u,EMAIL_VALIDATOR as ɵangular_packages_forms_forms_v,MAX_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_x,MIN_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_w,PATTERN_VALIDATOR as ɵangular_packages_forms_forms_y,REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_t} from './src/directives/validators';"],"names":["tslib_1.__extends","InjectionToken","forkJoin","map","isPromise","from","isObservable","forwardRef","Directive","Renderer2","ElementRef","getDOM","tslib_1.__param","Optional","Inject","Injectable","tslib_1.__decorate","Input","Injector","Examples","looseIdentical","tslib_1.__values","Host","_buildValueString","_extractId","isDevMode","Self","EventEmitter","SkipSelf","resolvedPromise","Output","formControlBinding","formDirectiveProvider","Version","NgModule"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"forms.umd.js","sources":["../../../../../packages/forms/src/directives/abstract_control_directive.ts","../../../../../../../../../../external/ngdeps/node_modules/tslib/tslib.es6.js","../../../../../packages/forms/src/directives/control_container.ts","../../../../../packages/forms/src/validators.ts","../../../../../packages/forms/src/directives/control_value_accessor.ts","../../../../../packages/forms/src/directives/checkbox_value_accessor.ts","../../../../../packages/forms/src/directives/default_value_accessor.ts","../../../../../packages/forms/src/directives/normalize_validator.ts","../../../../../packages/forms/src/directives/number_value_accessor.ts","../../../../../packages/forms/src/directives/ng_control.ts","../../../../../packages/forms/src/directives/radio_control_value_accessor.ts","../../../../../packages/forms/src/directives/range_value_accessor.ts","../../../../../packages/forms/src/directives/error_examples.ts","../../../../../packages/forms/src/directives/reactive_errors.ts","../../../../../packages/forms/src/directives/select_control_value_accessor.ts","../../../../../packages/forms/src/directives/select_multiple_control_value_accessor.ts","../../../../../packages/forms/src/directives/shared.ts","../../../../../packages/forms/src/directives/abstract_form_group_directive.ts","../../../../../packages/forms/src/directives/ng_control_status.ts","../../../../../packages/forms/src/model.ts","../../../../../packages/forms/src/directives/ng_form.ts","../../../../../packages/forms/src/directives/template_driven_errors.ts","../../../../../packages/forms/src/directives/ng_form_selector_warning.ts","../../../../../packages/forms/src/directives/ng_model_group.ts","../../../../../packages/forms/src/directives/ng_model.ts","../../../../../packages/forms/src/directives/reactive_directives/form_control_directive.ts","../../../../../packages/forms/src/directives/reactive_directives/form_group_directive.ts","../../../../../packages/forms/src/directives/reactive_directives/form_group_name.ts","../../../../../packages/forms/src/directives/reactive_directives/form_control_name.ts","../../../../../packages/forms/src/directives/validators.ts","../../../../../packages/forms/src/form_builder.ts","../../../../../packages/forms/src/version.ts","../../../../../packages/forms/src/directives/ng_no_validate_directive.ts","../../../../../packages/forms/src/directives.ts","../../../../../packages/forms/src/form_providers.ts","../../../../../packages/forms/src/forms.ts","../../../../../packages/forms/public_api.ts","../../../../../packages/forms/index.ts","../../../../../packages/forms/forms.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable} from 'rxjs';\nimport {AbstractControl} from '../model';\nimport {ValidationErrors} from './validators';\n\n/**\n * @description\n * Base class for control directives.\n *\n * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.\n *\n * @publicApi\n */\nexport abstract class AbstractControlDirective {\n /**\n * @description\n * A reference to the underlying control.\n *\n * @returns the control that backs this directive. Most properties fall through to that instance.\n */\n abstract get control(): AbstractControl|null;\n\n /**\n * @description\n * Reports the value of the control if it is present, otherwise null.\n */\n get value(): any { return this.control ? this.control.value : null; }\n\n /**\n * @description\n * Reports whether the control is valid. A control is considered valid if no\n * validation errors exist with the current value.\n * If the control is not present, null is returned.\n */\n get valid(): boolean|null { return this.control ? this.control.valid : null; }\n\n /**\n * @description\n * Reports whether the control is invalid, meaning that an error exists in the input value.\n * If the control is not present, null is returned.\n */\n get invalid(): boolean|null { return this.control ? this.control.invalid : null; }\n\n /**\n * @description\n * Reports whether a control is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value. If the control is not present, null is\n * returned.\n */\n get pending(): boolean|null { return this.control ? this.control.pending : null; }\n\n /**\n * @description\n * Reports whether the control is disabled, meaning that the control is disabled\n * in the UI and is exempt from validation checks and excluded from aggregate\n * values of ancestor controls. If the control is not present, null is returned.\n */\n get disabled(): boolean|null { return this.control ? this.control.disabled : null; }\n\n /**\n * @description\n * Reports whether the control is enabled, meaning that the control is included in ancestor\n * calculations of validity or value. If the control is not present, null is returned.\n */\n get enabled(): boolean|null { return this.control ? this.control.enabled : null; }\n\n /**\n * @description\n * Reports the control's validation errors. If the control is not present, null is returned.\n */\n get errors(): ValidationErrors|null { return this.control ? this.control.errors : null; }\n\n /**\n * @description\n * Reports whether the control is pristine, meaning that the user has not yet changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get pristine(): boolean|null { return this.control ? this.control.pristine : null; }\n\n /**\n * @description\n * Reports whether the control is dirty, meaning that the user has changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get dirty(): boolean|null { return this.control ? this.control.dirty : null; }\n\n /**\n * @description\n * Reports whether the control is touched, meaning that the user has triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get touched(): boolean|null { return this.control ? this.control.touched : null; }\n\n /**\n * @description\n * Reports the validation status of the control. Possible values include:\n * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.\n * If the control is not present, null is returned.\n */\n get status(): string|null { return this.control ? this.control.status : null; }\n\n /**\n * @description\n * Reports whether the control is untouched, meaning that the user has not yet triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get untouched(): boolean|null { return this.control ? this.control.untouched : null; }\n\n /**\n * @description\n * Returns a multicasting observable that emits a validation status whenever it is\n * calculated for the control. If the control is not present, null is returned.\n */\n get statusChanges(): Observable<any>|null {\n return this.control ? this.control.statusChanges : null;\n }\n\n /**\n * @description\n * Returns a multicasting observable of value changes for the control that emits every time the\n * value of the control changes in the UI or programmatically.\n * If the control is not present, null is returned.\n */\n get valueChanges(): Observable<any>|null {\n return this.control ? this.control.valueChanges : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[]|null { return null; }\n\n /**\n * @description\n * Resets the control with the provided value if the control is present.\n */\n reset(value: any = undefined): void {\n if (this.control) this.control.reset(value);\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return this.control ? this.control.hasError(errorCode, path) : false;\n }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n return this.control ? this.control.getError(errorCode, path) : null;\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {Form} from './form_interface';\n\n\n/**\n * @description\n * A base class for directives that contain multiple registered instances of `NgControl`.\n * Only used by the forms module.\n *\n * @publicApi\n */\nexport abstract class ControlContainer extends AbstractControlDirective {\n /**\n * @description\n * The name for the control\n */\n // TODO(issue/24571): remove '!'.\n name !: string;\n\n /**\n * @description\n * The top-level form directive for the control.\n */\n get formDirective(): Form|null { return null; }\n\n /**\n * @description\n * The path to this group.\n */\n get path(): string[]|null { return null; }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken, ɵisObservable as isObservable, ɵisPromise as isPromise} from '@angular/core';\nimport {Observable, forkJoin, from} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {AsyncValidatorFn, ValidationErrors, Validator, ValidatorFn} from './directives/validators';\nimport {AbstractControl, FormControl} from './model';\n\nfunction isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n}\n\n/**\n * @description\n * An `InjectionToken` for registering additional synchronous validators used with `AbstractControl`s.\n *\n * @see `NG_ASYNC_VALIDATORS`\n *\n * @usageNotes\n *\n * ### Providing a custom validator\n *\n * The following example registers a custom validator directive. Adding the validator to the\n * existing collection of validators requires the `multi: true` option.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors | null {\n * return { 'custom': true };\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport const NG_VALIDATORS = new InjectionToken<Array<Validator|Function>>('NgValidators');\n\n/**\n * @description\n * An `InjectionToken` for registering additional asynchronous validators used with `AbstractControl`s.\n *\n * @see `NG_VALIDATORS`\n *\n * @publicApi\n */\nexport const NG_ASYNC_VALIDATORS =\n new InjectionToken<Array<Validator|Function>>('NgAsyncValidators');\n\nconst EMAIL_REGEXP =\n /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n\n/**\n * @description\n * Provides a set of built-in validators that can be used by form controls.\n *\n * A validator is a function that processes a `FormControl` or collection of\n * controls and returns an error map or null. A null map means that validation has passed.\n *\n * @see [Form Validation](/guide/form-validation)\n *\n * @publicApi\n */\nexport class Validators {\n /**\n * @description\n * Validator that requires the control's value to be greater than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a minimum of 3\n *\n * ```typescript\n * const control = new FormControl(2, Validators.min(3));\n *\n * console.log(control.errors); // {min: {min: 3, actual: 2}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `min` property if the validation check fails, otherwise `null`.\n *\n */\n static min(min: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value < min ? {'min': {'min': min, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to be less than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a maximum of 15\n *\n * ```typescript\n * const control = new FormControl(16, Validators.max(15));\n *\n * console.log(control.errors); // {max: {max: 15, actual: 16}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `max` property if the validation check fails, otherwise `null`.\n *\n */\n static max(max: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n return !isNaN(value) && value > max ? {'max': {'max': max, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control have a non-empty value.\n *\n * @usageNotes\n *\n * ### Validate that the field is non-empty\n *\n * ```typescript\n * const control = new FormControl('', Validators.required);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map with the `required` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static required(control: AbstractControl): ValidationErrors|null {\n return isEmptyInputValue(control.value) ? {'required': true} : null;\n }\n\n /**\n * @description\n * Validator that requires the control's value be true. This validator is commonly\n * used for required checkboxes.\n *\n * @usageNotes\n *\n * ### Validate that the field value is true\n *\n * ```typescript\n * const control = new FormControl('', Validators.requiredTrue);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map that contains the `required` property\n * set to `true` if the validation check fails, otherwise `null`.\n */\n static requiredTrue(control: AbstractControl): ValidationErrors|null {\n return control.value === true ? null : {'required': true};\n }\n\n /**\n * @description\n * Validator that requires the control's value pass an email validation test.\n *\n * @usageNotes\n *\n * ### Validate that the field matches a valid email pattern\n *\n * ```typescript\n * const control = new FormControl('bad@', Validators.email);\n *\n * console.log(control.errors); // {email: true}\n * ```\n *\n * @returns An error map with the `email` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static email(control: AbstractControl): ValidationErrors|null {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n return EMAIL_REGEXP.test(control.value) ? null : {'email': true};\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be greater than or equal\n * to the provided minimum length. This validator is also provided by default if you use the\n * the HTML5 `minlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has a minimum of 3 characters\n *\n * ```typescript\n * const control = new FormControl('ng', Validators.minLength(3));\n *\n * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}\n * ```\n *\n * ```html\n * <input minlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `minlength` if the validation check fails, otherwise `null`.\n */\n static minLength(minLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const length: number = control.value ? control.value.length : 0;\n return length < minLength ?\n {'minlength': {'requiredLength': minLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be less than or equal\n * to the provided maximum length. This validator is also provided by default if you use the\n * the HTML5 `maxlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has maximum of 5 characters\n *\n * ```typescript\n * const control = new FormControl('Angular', Validators.maxLength(5));\n *\n * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}\n * ```\n *\n * ```html\n * <input maxlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `maxlength` property if the validation check fails, otherwise `null`.\n */\n static maxLength(maxLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const length: number = control.value ? control.value.length : 0;\n return length > maxLength ?\n {'maxlength': {'requiredLength': maxLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to match a regex pattern. This validator is also\n * provided by default if you use the HTML5 `pattern` attribute.\n *\n * Note that if a Regexp is provided, the Regexp is used as is to test the values. On the other\n * hand, if a string is passed, the `^` character is prepended and the `$` character is\n * appended to the provided string (if not already present), and the resulting regular\n * expression is used to test the values.\n *\n * @usageNotes\n *\n * ### Validate that the field only contains letters or spaces\n *\n * ```typescript\n * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));\n *\n * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}\n * ```\n *\n * ```html\n * <input pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `pattern` property if the validation check fails, otherwise `null`.\n */\n static pattern(pattern: string|RegExp): ValidatorFn {\n if (!pattern) return Validators.nullValidator;\n let regex: RegExp;\n let regexStr: string;\n if (typeof pattern === 'string') {\n regexStr = '';\n\n if (pattern.charAt(0) !== '^') regexStr += '^';\n\n regexStr += pattern;\n\n if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$';\n\n regex = new RegExp(regexStr);\n } else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value: string = control.value;\n return regex.test(value) ? null :\n {'pattern': {'requiredPattern': regexStr, 'actualValue': value}};\n };\n }\n\n /**\n * @description\n * Validator that performs no operation.\n */\n static nullValidator(control: AbstractControl): ValidationErrors|null { return null; }\n\n /**\n * @description\n * Compose multiple validators into a single function that returns the union\n * of the individual error maps for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error maps of the validators if the validation check fails, otherwise `null`.\n */\n static compose(validators: null): null;\n static compose(validators: (ValidatorFn|null|undefined)[]): ValidatorFn|null;\n static compose(validators: (ValidatorFn|null|undefined)[]|null): ValidatorFn|null {\n if (!validators) return null;\n const presentValidators: ValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n return _mergeErrors(_executeValidators(control, presentValidators));\n };\n }\n\n /**\n * @description\n * Compose multiple async validators into a single function that returns the union\n * of the individual error objects for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error objects of the async validators if the validation check fails, otherwise `null`.\n */\n static composeAsync(validators: (AsyncValidatorFn|null)[]): AsyncValidatorFn|null {\n if (!validators) return null;\n const presentValidators: AsyncValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n const observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n return forkJoin(observables).pipe(map(_mergeErrors));\n };\n }\n}\n\nfunction isPresent(o: any): boolean {\n return o != null;\n}\n\nexport function toObservable(r: any): Observable<any> {\n const obs = isPromise(r) ? from(r) : r;\n if (!(isObservable(obs))) {\n throw new Error(`Expected validator to return Promise or Observable.`);\n }\n return obs;\n}\n\nfunction _executeValidators(control: AbstractControl, validators: ValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _executeAsyncValidators(control: AbstractControl, validators: AsyncValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _mergeErrors(arrayOfErrors: ValidationErrors[]): ValidationErrors|null {\n const res: {[key: string]: any} =\n arrayOfErrors.reduce((res: ValidationErrors | null, errors: ValidationErrors | null) => {\n return errors != null ? {...res !, ...errors} : res !;\n }, {});\n return Object.keys(res).length === 0 ? null : res;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * @description\n * Defines an interface that acts as a bridge between the Angular forms API and a\n * native element in the DOM.\n *\n * Implement this interface to create a custom form control directive\n * that integrates with Angular forms.\n *\n * @see DefaultValueAccessor\n *\n * @publicApi\n */\nexport interface ControlValueAccessor {\n /**\n * @description\n * Writes a new value to the element.\n *\n * This method is called by the forms API to write to the view when programmatic\n * changes from model to view are requested.\n *\n * @usageNotes\n * ### Write a value to the element\n *\n * The following example writes a value to the native DOM element.\n *\n * ```ts\n * writeValue(value: any): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'value', value);\n * }\n * ```\n *\n * @param obj The new value for the element\n */\n writeValue(obj: any): void;\n\n /**\n * @description\n * Registers a callback function that is called when the control's value\n * changes in the UI.\n *\n * This method is called by the forms API on initialization to update the form\n * model when values propagate from the view to the model.\n *\n * When implementing the `registerOnChange` method in your own value accessor,\n * save the given function so your class calls it at the appropriate time.\n *\n * @usageNotes\n * ### Store the change function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnChange(fn: (_: any) => void): void {\n * this._onChange = fn;\n * }\n * ```\n *\n * When the value changes in the UI, call the registered\n * function to allow the forms API to update itself:\n *\n * ```ts\n * host: {\n * (change): '_onChange($event.target.value)'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnChange(fn: any): void;\n\n /**\n * @description\n * Registers a callback function is called by the forms API on initialization\n * to update the form model on blur.\n *\n * When implementing `registerOnTouched` in your own value accessor, save the given\n * function so your class calls it when the control should be considered\n * blurred or \"touched\".\n *\n * @usageNotes\n * ### Store the callback function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnTouched(fn: any): void {\n * this._onTouched = fn;\n * }\n * ```\n *\n * On blur (or equivalent), your class should call the registered function to allow\n * the forms API to update itself:\n *\n * ```ts\n * host: {\n * '(blur)': '_onTouched()'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnTouched(fn: any): void;\n\n /**\n * @description\n * Function that is called by the forms API when the control status changes to\n * or from 'DISABLED'. Depending on the status, it enables or disables the\n * appropriate DOM element.\n *\n * @usageNotes\n * The following is an example of writing the disabled property to a native DOM element:\n *\n * ```ts\n * setDisabledState(isDisabled: boolean): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n * }\n * ```\n *\n * @param isDisabled The disabled status to set on the element\n */\n setDisabledState?(isDisabled: boolean): void;\n}\n\n/**\n * Used to provide a `ControlValueAccessor` for form controls.\n *\n * See `DefaultValueAccessor` for how to implement one.\n *\n * @publicApi\n */\nexport const NG_VALUE_ACCESSOR = new InjectionToken<ControlValueAccessor>('NgValueAccessor');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const CHECKBOX_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlValueAccessor),\n multi: true,\n};\n\n/**\n * @description\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\n * element.\n *\n * @usageNotes\n *\n * ### Using a checkbox with a reactive form.\n *\n * The following example shows how to use a checkbox with a reactive form.\n *\n * ```ts\n * const rememberLoginControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"checkbox\" [formControl]=\"rememberLoginControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: {'(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()'},\n providers: [CHECKBOX_VALUE_ACCESSOR]\n})\nexport class CheckboxControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"checked\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Inject, InjectionToken, Optional, Renderer2, forwardRef} from '@angular/core';\nimport {ɵgetDOM as getDOM} from '@angular/platform-browser';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const DEFAULT_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DefaultValueAccessor),\n multi: true\n};\n\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\nfunction _isAndroid(): boolean {\n const userAgent = getDOM() ? getDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n\n/**\n * @description\n * Provide this token to control if form directives buffer IME input until\n * the \"compositionend\" event occurs.\n * @publicApi\n */\nexport const COMPOSITION_BUFFER_MODE = new InjectionToken<boolean>('CompositionEventMode');\n\n/**\n * @description\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using the default value accessor\n *\n * The following example shows how to use an input element that activates the default value accessor\n * (in this case, a text field).\n *\n * ```ts\n * const firstNameControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"text\" [formControl]=\"firstNameControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n // TODO: vsavkin replace the above selector with the one below it once\n // https://github.com/angular/angular/issues/3011 is implemented\n // selector: '[ngModel],[formControl],[formControlName]',\n host: {\n '(input)': '$any(this)._handleInput($event.target.value)',\n '(blur)': 'onTouched()',\n '(compositionstart)': '$any(this)._compositionStart()',\n '(compositionend)': '$any(this)._compositionEnd($event.target.value)'\n },\n providers: [DEFAULT_VALUE_ACCESSOR]\n})\nexport class DefaultValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when an input event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /** Whether the user is creating a composition string (IME events). */\n private _composing = false;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n @Optional() @Inject(COMPOSITION_BUFFER_MODE) private _compositionMode: boolean) {\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _handleInput(value: any): void {\n if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n this.onChange(value);\n }\n }\n\n /** @internal */\n _compositionStart(): void { this._composing = true; }\n\n /** @internal */\n _compositionEnd(value: any): void {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControl} from '../model';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport function normalizeValidator(validator: ValidatorFn | Validator): ValidatorFn {\n if ((<Validator>validator).validate) {\n return (c: AbstractControl) => (<Validator>validator).validate(c);\n } else {\n return <ValidatorFn>validator;\n }\n}\n\nexport function normalizeAsyncValidator(validator: AsyncValidatorFn | AsyncValidator):\n AsyncValidatorFn {\n if ((<AsyncValidator>validator).validate) {\n return (c: AbstractControl) => (<AsyncValidator>validator).validate(c);\n } else {\n return <AsyncValidatorFn>validator;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const NUMBER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a number value and listening to number input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a number input with a reactive form.\n *\n * The following example shows how to use a number input with a reactive form.\n *\n * ```ts\n * const totalCountControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"number\" [formControl]=\"totalCountControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [NUMBER_VALUE_ACCESSOR]\n})\nexport class NumberValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: number): void {\n // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nfunction unimplemented(): any {\n throw new Error('unimplemented');\n}\n\n/**\n * @description\n * A base class that all control `FormControl`-based directives extend. It binds a `FormControl`\n * object to a DOM element.\n *\n * @publicApi\n */\nexport abstract class NgControl extends AbstractControlDirective {\n /**\n * @description\n * The parent form for the control.\n *\n * @internal\n */\n _parent: ControlContainer|null = null;\n\n /**\n * @description\n * The name for the control\n */\n name: string|null = null;\n\n /**\n * @description\n * The value accessor for the control\n */\n valueAccessor: ControlValueAccessor|null = null;\n\n /**\n * @description\n * The uncomposed array of synchronous validators for the control\n *\n * @internal\n */\n _rawValidators: Array<Validator|ValidatorFn> = [];\n\n /**\n * @description\n * The uncomposed array of async validators for the control\n *\n * @internal\n */\n _rawAsyncValidators: Array<AsyncValidator|AsyncValidatorFn> = [];\n\n /**\n * @description\n * The registered synchronous validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get validator(): ValidatorFn|null { return <ValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The registered async validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get asyncValidator(): AsyncValidatorFn|null { return <AsyncValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The callback method to update the model from the view when requested\n *\n * @param newValue The new value for the view\n */\n abstract viewToModelUpdate(newValue: any): void;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Injectable, Injector, Input, OnDestroy, OnInit, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\n\nexport const RADIO_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioControlValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * Class used by Angular to track radio buttons. For internal use only.\n */\n@Injectable()\nexport class RadioControlRegistry {\n private _accessors: any[] = [];\n\n /**\n * @description\n * Adds a control to the internal registry. For internal use only.\n */\n add(control: NgControl, accessor: RadioControlValueAccessor) {\n this._accessors.push([control, accessor]);\n }\n\n /**\n * @description\n * Removes a control from the internal registry. For internal use only.\n */\n remove(accessor: RadioControlValueAccessor) {\n for (let i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n }\n\n /**\n * @description\n * Selects a radio button. For internal use only.\n */\n select(accessor: RadioControlValueAccessor) {\n this._accessors.forEach((c) => {\n if (this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n }\n\n private _isSameGroup(\n controlPair: [NgControl, RadioControlValueAccessor],\n accessor: RadioControlValueAccessor): boolean {\n if (!controlPair[0].control) return false;\n return controlPair[0]._parent === accessor._control._parent &&\n controlPair[1].name === accessor.name;\n }\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing radio control values and listening to radio control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using radio buttons with reactive form directives\n *\n * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in\n * a reactive form, radio buttons in the same group should have the same `formControlName`.\n * Providing a `name` attribute is optional.\n *\n * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n host: {'(change)': 'onChange()', '(blur)': 'onTouched()'},\n providers: [RADIO_VALUE_ACCESSOR]\n})\nexport class RadioControlValueAccessor implements ControlValueAccessor,\n OnDestroy, OnInit {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _state !: boolean;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _control !: NgControl;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _fn !: Function;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = () => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the name of the radio input element.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input() formControlName !: string;\n\n /**\n * @description\n * Tracks the value of the radio input element\n */\n @Input() value: any;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n private _registry: RadioControlRegistry, private _injector: Injector) {}\n\n /**\n * @description\n * A lifecycle method called when the directive is initialized. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnInit(): void {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnDestroy(): void { this._registry.remove(this); }\n\n /**\n * @description\n * Sets the \"checked\" property value on the radio input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._state = value === this.value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void {\n this._fn = fn;\n this.onChange = () => {\n fn(this.value);\n this._registry.select(this);\n };\n }\n\n /**\n * Sets the \"value\" on the radio input element and unchecks it.\n *\n * @param value\n */\n fireUncheck(value: any): void { this.writeValue(value); }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n private _checkName(): void {\n if (this.name && this.formControlName && this.name !== this.formControlName) {\n this._throwNameError();\n }\n if (!this.name && this.formControlName) this.name = this.formControlName;\n }\n\n private _throwNameError(): void {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, StaticProvider, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const RANGE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a range value and listening to range input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a range input with a reactive form\n *\n * The following example shows how to use a range input with a reactive form.\n *\n * ```ts\n * const ageControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"range\" [formControl]=\"ageControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [RANGE_VALUE_ACCESSOR]\n})\nexport class RangeValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the range input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const FormErrorExamples = {\n formControlName: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });`,\n\n formGroupName: `\n <div [formGroup]=\"myGroup\">\n <div formGroupName=\"person\">\n <input formControlName=\"firstName\">\n </div>\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });`,\n\n formArrayName: `\n <div [formGroup]=\"myGroup\">\n <div formArrayName=\"cities\">\n <div *ngFor=\"let city of cityArray.controls; index as i\">\n <input [formControlName]=\"i\">\n </div>\n </div>\n </div>\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl('SF')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });`,\n\n ngModelGroup: `\n <form>\n <div ngModelGroup=\"person\">\n <input [(ngModel)]=\"person.name\" name=\"firstName\">\n </div>\n </form>`,\n\n ngModelWithFormGroup: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n `\n};\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class ReactiveErrors {\n static controlParentException(): void {\n throw new Error(\n `formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static ngModelGroupException(): void {\n throw new Error(\n `formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n ${Examples.formGroupName}\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n ${Examples.ngModelGroup}`);\n }\n static missingFormException(): void {\n throw new Error(`formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static groupParentException(): void {\n throw new Error(\n `formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formGroupName}`);\n }\n\n static arrayParentException(): void {\n throw new Error(\n `formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formArrayName}`);\n }\n\n static disabledAttrWarning(): void {\n console.warn(`\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n \n Example: \n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n `);\n }\n\n static ngModelWarning(directiveName: string): void {\n console.warn(`\n It looks like you're using ngModel on the same form field as ${directiveName}. \n Support for using the ngModel input property and ngModelChange event with \n reactive form directives has been deprecated in Angular v6 and will be removed \n in Angular v7.\n \n For more information on this, see our API docs here:\n https://angular.io/api/forms/${directiveName === 'formControl' ? 'FormControlDirective' \n : 'FormControlName'}#use-with-ngmodel\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string | null, value: any): string {\n if (id == null) return `${value}`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing select control values and listening to select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using select controls in a reactive form\n *\n * The following examples show how to use a select control in a reactive form.\n *\n * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Using select controls in a template-driven form\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * {@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * ### Customizing option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * ```ts\n * const selectedCountriesControl = new FormControl();\n * ```\n *\n * ```\n * <select [compareWith]=\"compareFn\" [formControl]=\"selectedCountriesControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{country.name}}\n * </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n * return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * **Note:** We listen to the 'change' event because 'input' events aren't fired\n * for selects in Firefox and IE:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n host: {'(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()'},\n providers: [SELECT_VALUE_ACCESSOR]\n})\nexport class SelectControlValueAccessor implements ControlValueAccessor {\n value: any;\n /** @internal */\n _optionMap: Map<string, any> = new Map<string, any>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element. The \"selectedIndex\"\n * property is also set if an ID is provided on the option element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this.value = value;\n const id: string|null = this._getOptionId(value);\n if (id == null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n }\n const valueString = _buildValueString(id, value);\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (valueString: string) => {\n this.value = this._getOptionValue(valueString);\n fn(this.value);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(): string { return (this._idCounter++).toString(); }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id), value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectOption implements OnDestroy {\n /**\n * @description\n * ID of the option element\n */\n // TODO(issue/24571): remove '!'.\n id !: string;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectControlValueAccessor) {\n if (this._select) this.id = this._select._registerOption();\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n this._setElementValue(value);\n if (this._select) this._select.writeValue(this._select.value);\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_MULTIPLE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectMultipleControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string, value: any): string {\n if (id == null) return `${value}`;\n if (typeof value === 'string') value = `'${value}'`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/** Mock interface for HTML Options */\ninterface HTMLOption {\n value: string;\n selected: boolean;\n}\n\n/** Mock interface for HTMLCollection */\nabstract class HTMLCollection {\n // TODO(issue/24571): remove '!'.\n length !: number;\n abstract item(_: number): HTMLOption;\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n * \n * @see `SelectControlValueAccessor`\n *\n * @usageNotes\n * \n * ### Using a multi-select control\n * \n * The follow example shows you how to use a multi-select control with a reactive form.\n * \n * ```ts\n * const countryControl = new FormControl();\n * ```\n *\n * ```\n * <select multiple name=\"countries\" [formControl]=\"countryControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{ country.name }}\n * </option>\n * </select>\n * ```\n * \n * ### Customizing option selection\n * \n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * See the `SelectControlValueAccessor` for usage.\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n host: {'(change)': 'onChange($event.target)', '(blur)': 'onTouched()'},\n providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]\n})\nexport class SelectMultipleControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The current value\n */\n value: any;\n\n /** @internal */\n _optionMap: Map<string, NgSelectMultipleOption> = new Map<string, NgSelectMultipleOption>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * @description\n * Sets the \"value\" property on one or of more\n * of the select's options.\n *\n * @param value The value\n */\n writeValue(value: any): void {\n this.value = value;\n let optionSelectedStateSetter: (opt: NgSelectMultipleOption, o: any) => void;\n if (Array.isArray(value)) {\n // convert values to ids\n const ids = value.map((v) => this._getOptionId(v));\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(ids.indexOf(o.toString()) > -1); };\n } else {\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(false); };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes\n * and writes an array of the selected options.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (_: any) => {\n const selected: Array<any> = [];\n if (_.hasOwnProperty('selectedOptions')) {\n const options: HTMLCollection = _.selectedOptions;\n for (let i = 0; i < options.length; i++) {\n const opt: any = options.item(i);\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n // Degrade on IE\n else {\n const options: HTMLCollection = <HTMLCollection>_.options;\n for (let i = 0; i < options.length; i++) {\n const opt: HTMLOption = options.item(i);\n if (opt.selected) {\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n this.value = selected;\n fn(selected);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(value: NgSelectMultipleOption): string {\n const id: string = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id) !._value, value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) !._value : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectMultipleControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectMultipleOption implements OnDestroy {\n // TODO(issue/24571): remove '!'.\n id !: string;\n /** @internal */\n _value: any;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectMultipleControlValueAccessor) {\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n } else {\n this._setElementValue(value);\n }\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /** @internal */\n _setSelected(selected: boolean) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {isDevMode, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {FormArray, FormControl, FormGroup} from '../model';\nimport {Validators} from '../validators';\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {CheckboxControlValueAccessor} from './checkbox_value_accessor';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {DefaultValueAccessor} from './default_value_accessor';\nimport {NgControl} from './ng_control';\nimport {normalizeAsyncValidator, normalizeValidator} from './normalize_validator';\nimport {NumberValueAccessor} from './number_value_accessor';\nimport {RadioControlValueAccessor} from './radio_control_value_accessor';\nimport {RangeValueAccessor} from './range_value_accessor';\nimport {FormArrayName} from './reactive_directives/form_group_name';\nimport {ReactiveErrors} from './reactive_errors';\nimport {SelectControlValueAccessor} from './select_control_value_accessor';\nimport {SelectMultipleControlValueAccessor} from './select_multiple_control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\n\nexport function controlPath(name: string, parent: ControlContainer): string[] {\n return [...parent.path !, name];\n}\n\nexport function setUpControl(control: FormControl, dir: NgControl): void {\n if (!control) _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor) _throwError(dir, 'No value accessor for form control with');\n\n control.validator = Validators.compose([control.validator !, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator !, dir.asyncValidator]);\n dir.valueAccessor !.writeValue(control.value);\n\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n\n setUpBlurPipeline(control, dir);\n\n if (dir.valueAccessor !.setDisabledState) {\n control.registerOnDisabledChange(\n (isDisabled: boolean) => { dir.valueAccessor !.setDisabledState !(isDisabled); });\n }\n\n // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n dir._rawValidators.forEach((validator: Validator | ValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n\n dir._rawAsyncValidators.forEach((validator: AsyncValidator | AsyncValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n}\n\nexport function cleanUpControl(control: FormControl, dir: NgControl) {\n dir.valueAccessor !.registerOnChange(() => _noControlError(dir));\n dir.valueAccessor !.registerOnTouched(() => _noControlError(dir));\n\n dir._rawValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n dir._rawAsyncValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n if (control) control._clearChangeFns();\n}\n\nfunction setUpViewChangePipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnChange((newValue: any) => {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n\n if (control.updateOn === 'change') updateControl(control, dir);\n });\n}\n\nfunction setUpBlurPipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnTouched(() => {\n control._pendingTouched = true;\n\n if (control.updateOn === 'blur' && control._pendingChange) updateControl(control, dir);\n if (control.updateOn !== 'submit') control.markAsTouched();\n });\n}\n\nfunction updateControl(control: FormControl, dir: NgControl): void {\n if (control._pendingDirty) control.markAsDirty();\n control.setValue(control._pendingValue, {emitModelToViewChange: false});\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n}\n\nfunction setUpModelChangePipeline(control: FormControl, dir: NgControl): void {\n control.registerOnChange((newValue: any, emitModelEvent: boolean) => {\n // control -> view\n dir.valueAccessor !.writeValue(newValue);\n\n // control -> ngModel\n if (emitModelEvent) dir.viewToModelUpdate(newValue);\n });\n}\n\nexport function setUpFormContainer(\n control: FormGroup | FormArray, dir: AbstractFormGroupDirective | FormArrayName) {\n if (control == null) _throwError(dir, 'Cannot find control with');\n control.validator = Validators.compose([control.validator, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n}\n\nfunction _noControlError(dir: NgControl) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\n\nfunction _throwError(dir: AbstractControlDirective, message: string): void {\n let messageEnd: string;\n if (dir.path !.length > 1) {\n messageEnd = `path: '${dir.path!.join(' -> ')}'`;\n } else if (dir.path ![0]) {\n messageEnd = `name: '${dir.path}'`;\n } else {\n messageEnd = 'unspecified name attribute';\n }\n throw new Error(`${message} ${messageEnd}`);\n}\n\nexport function composeValidators(validators: Array<Validator|Function>): ValidatorFn|null {\n return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n}\n\nexport function composeAsyncValidators(validators: Array<Validator|Function>): AsyncValidatorFn|\n null {\n return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n null;\n}\n\nexport function isPropertyUpdated(changes: {[key: string]: any}, viewModel: any): boolean {\n if (!changes.hasOwnProperty('model')) return false;\n const change = changes['model'];\n\n if (change.isFirstChange()) return true;\n return !looseIdentical(viewModel, change.currentValue);\n}\n\nconst BUILTIN_ACCESSORS = [\n CheckboxControlValueAccessor,\n RangeValueAccessor,\n NumberValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n];\n\nexport function isBuiltInAccessor(valueAccessor: ControlValueAccessor): boolean {\n return BUILTIN_ACCESSORS.some(a => valueAccessor.constructor === a);\n}\n\nexport function syncPendingControls(form: FormGroup, directives: NgControl[]): void {\n form._syncPendingControls();\n directives.forEach(dir => {\n const control = dir.control as FormControl;\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n}\n\n// TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented\nexport function selectValueAccessor(\n dir: NgControl, valueAccessors: ControlValueAccessor[]): ControlValueAccessor|null {\n if (!valueAccessors) return null;\n\n if (!Array.isArray(valueAccessors))\n _throwError(dir, 'Value accessor was not provided as an array for form control with');\n\n let defaultAccessor: ControlValueAccessor|undefined = undefined;\n let builtinAccessor: ControlValueAccessor|undefined = undefined;\n let customAccessor: ControlValueAccessor|undefined = undefined;\n\n valueAccessors.forEach((v: ControlValueAccessor) => {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n\n } else if (isBuiltInAccessor(v)) {\n if (builtinAccessor)\n _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n\n } else {\n if (customAccessor)\n _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n\n if (customAccessor) return customAccessor;\n if (builtinAccessor) return builtinAccessor;\n if (defaultAccessor) return defaultAccessor;\n\n _throwError(dir, 'No valid value accessor for form control with');\n return null;\n}\n\nexport function removeDir<T>(list: T[], el: T): void {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\n\n// TODO(kara): remove after deprecation period\nexport function _ngModelWarning(\n name: string, type: {_ngModelWarningSentOnce: boolean},\n instance: {_ngModelWarningSent: boolean}, warningConfig: string | null) {\n if (!isDevMode() || warningConfig === 'never') return;\n\n if (((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce) ||\n (warningConfig === 'always' && !instance._ngModelWarningSent)) {\n ReactiveErrors.ngModelWarning(name);\n type._ngModelWarningSentOnce = true;\n instance._ngModelWarningSent = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {OnDestroy, OnInit} from '@angular/core';\n\nimport {FormGroup} from '../model';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {composeAsyncValidators, composeValidators, controlPath} from './shared';\nimport {AsyncValidatorFn, ValidatorFn} from './validators';\n\n\n\n/**\n * @description\n * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.\n *\n * @publicApi\n */\nexport class AbstractFormGroupDirective extends ControlContainer implements OnInit, OnDestroy {\n /**\n * @description\n * The parent control for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _parent !: ControlContainer;\n\n /**\n * @description\n * An array of synchronous validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _validators !: any[];\n\n /**\n * @description\n * An array of async validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _asyncValidators !: any[];\n\n /**\n * @description\n * An internal callback method triggered on the instance after the inputs are set.\n * Registers the group with its parent group.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormGroup(this);\n }\n\n /**\n * @description\n * An internal callback method triggered before the instance is destroyed.\n * Removes the group from its parent group.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormGroup(this);\n }\n }\n\n /**\n * @description\n * The `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.formDirective !.getFormGroup(this); }\n\n /**\n * @description\n * The path to this group from the top-level directive.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): Form|null { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * The synchronous validators registered with this group.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * The async validators registered with this group.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n /** @internal */\n _checkParentType(): void {}\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Self} from '@angular/core';\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {NgControl} from './ng_control';\n\nexport class AbstractControlStatus {\n private _cd: AbstractControlDirective;\n\n constructor(cd: AbstractControlDirective) { this._cd = cd; }\n\n get ngClassUntouched(): boolean { return this._cd.control ? this._cd.control.untouched : false; }\n get ngClassTouched(): boolean { return this._cd.control ? this._cd.control.touched : false; }\n get ngClassPristine(): boolean { return this._cd.control ? this._cd.control.pristine : false; }\n get ngClassDirty(): boolean { return this._cd.control ? this._cd.control.dirty : false; }\n get ngClassValid(): boolean { return this._cd.control ? this._cd.control.valid : false; }\n get ngClassInvalid(): boolean { return this._cd.control ? this._cd.control.invalid : false; }\n get ngClassPending(): boolean { return this._cd.control ? this._cd.control.pending : false; }\n}\n\nexport const ngControlStatusHost = {\n '[class.ng-untouched]': 'ngClassUntouched',\n '[class.ng-touched]': 'ngClassTouched',\n '[class.ng-pristine]': 'ngClassPristine',\n '[class.ng-dirty]': 'ngClassDirty',\n '[class.ng-valid]': 'ngClassValid',\n '[class.ng-invalid]': 'ngClassInvalid',\n '[class.ng-pending]': 'ngClassPending',\n};\n\n/**\n * @description\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status.\n *\n * @usageNotes\n *\n * ### CSS classes applied\n *\n * The following classes are applied as the properties become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost})\nexport class NgControlStatus extends AbstractControlStatus {\n constructor(@Self() cd: NgControl) { super(cd); }\n}\n\n/**\n * @description\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n * \n * @see `NgControlStatus`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n host: ngControlStatusHost\n})\nexport class NgControlStatusGroup extends AbstractControlStatus {\n constructor(@Self() cd: ControlContainer) { super(cd); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {EventEmitter} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {composeAsyncValidators, composeValidators} from './directives/shared';\nimport {AsyncValidatorFn, ValidationErrors, ValidatorFn} from './directives/validators';\nimport {toObservable} from './validators';\n\n/**\n * Reports that a FormControl is valid, meaning that no errors exist in the input value.\n *\n * @see `status`\n */\nexport const VALID = 'VALID';\n\n/**\n * Reports that a FormControl is invalid, meaning that an error exists in the input value.\n *\n * @see `status`\n */\nexport const INVALID = 'INVALID';\n\n/**\n * Reports that a FormControl is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value.\n *\n * @see `markAsPending`\n * @see `status`\n */\nexport const PENDING = 'PENDING';\n\n/**\n * Reports that a FormControl is disabled, meaning that the control is exempt from ancestor\n * calculations of validity or value.\n *\n * @see `markAsDisabled`\n * @see `status`\n */\nexport const DISABLED = 'DISABLED';\n\nfunction _find(control: AbstractControl, path: Array<string|number>| string, delimiter: string) {\n if (path == null) return null;\n\n if (!(path instanceof Array)) {\n path = (<string>path).split(delimiter);\n }\n if (path instanceof Array && (path.length === 0)) return null;\n\n return (<Array<string|number>>path).reduce((v: AbstractControl, name) => {\n if (v instanceof FormGroup) {\n return v.controls.hasOwnProperty(name as string) ? v.controls[name] : null;\n }\n\n if (v instanceof FormArray) {\n return v.at(<number>name) || null;\n }\n\n return null;\n }, control);\n}\n\nfunction coerceToValidator(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): ValidatorFn|\n null {\n const validator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).validators :\n validatorOrOpts) as ValidatorFn |\n ValidatorFn[] | null;\n\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\n\nfunction coerceToAsyncValidator(\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null, validatorOrOpts?: ValidatorFn |\n ValidatorFn[] | AbstractControlOptions | null): AsyncValidatorFn|null {\n const origAsyncValidator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).asyncValidators :\n asyncValidator) as AsyncValidatorFn |\n AsyncValidatorFn | null;\n\n return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :\n origAsyncValidator || null;\n}\n\nexport type FormHooks = 'change' | 'blur' | 'submit';\n\n/**\n * Interface for options provided to an `AbstractControl`.\n *\n * @publicApi\n */\nexport interface AbstractControlOptions {\n /**\n * @description\n * The list of validators applied to a control.\n */\n validators?: ValidatorFn|ValidatorFn[]|null;\n /**\n * @description\n * The list of async validators applied to control.\n */\n asyncValidators?: AsyncValidatorFn|AsyncValidatorFn[]|null;\n /**\n * @description\n * The event name for control to update upon.\n */\n updateOn?: 'change'|'blur'|'submit';\n}\n\n\nfunction isOptionsObj(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): boolean {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&\n typeof validatorOrOpts === 'object';\n}\n\n\n/**\n * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * @see [Forms Guide](/guide/forms)\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n * @see [Dynamic Forms Guide](/guide/dynamic-form)\n *\n * @publicApi\n */\nexport abstract class AbstractControl {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingDirty !: boolean;\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingTouched !: boolean;\n\n /** @internal */\n _onCollectionChange = () => {};\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _updateOn !: FormHooks;\n\n // TODO(issue/24571): remove '!'.\n private _parent !: FormGroup | FormArray;\n private _asyncValidationSubscription: any;\n\n /**\n * The current value of the control.\n *\n * * For a `FormControl`, the current value.\n * * For a `FormGroup`, the values of enabled controls as an object\n * with a key-value pair for each member of the group.\n * * For a `FormArray`, the values of enabled controls as an array.\n *\n */\n public readonly value: any;\n\n /**\n * Initialize the AbstractControl instance.\n *\n * @param validator The function that determines the synchronous validity of this control.\n * @param asyncValidator The function that determines the asynchronous validity of this\n * control.\n */\n constructor(public validator: ValidatorFn|null, public asyncValidator: AsyncValidatorFn|null) {}\n\n /**\n * The parent control.\n */\n get parent(): FormGroup|FormArray { return this._parent; }\n\n /**\n * The validation status of the control. There are four possible\n * validation status values:\n *\n * * **VALID**: This control has passed all validation checks.\n * * **INVALID**: This control has failed at least one validation check.\n * * **PENDING**: This control is in the midst of conducting a validation check.\n * * **DISABLED**: This control is exempt from validation checks.\n *\n * These status values are mutually exclusive, so a control cannot be\n * both valid AND invalid or invalid AND disabled.\n */\n // TODO(issue/24571): remove '!'.\n public readonly status !: string;\n\n /**\n * A control is `valid` when its `status` is `VALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control has passed all of its validation tests,\n * false otherwise.\n */\n get valid(): boolean { return this.status === VALID; }\n\n /**\n * A control is `invalid` when its `status` is `INVALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control has failed one or more of its validation checks,\n * false otherwise.\n */\n get invalid(): boolean { return this.status === INVALID; }\n\n /**\n * A control is `pending` when its `status` is `PENDING`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control is in the process of conducting a validation check,\n * false otherwise.\n */\n get pending(): boolean { return this.status == PENDING; }\n\n /**\n * A control is `disabled` when its `status` is `DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control is disabled, false otherwise.\n */\n get disabled(): boolean { return this.status === DISABLED; }\n\n /**\n * A control is `enabled` as long as its `status` is not `DISABLED`.\n *\n * @returns True if the control has any status other than 'DISABLED',\n * false if the status is 'DISABLED'.\n *\n * @see {@link AbstractControl.status}\n *\n */\n get enabled(): boolean { return this.status !== DISABLED; }\n\n /**\n * An object containing any errors generated by failing validation,\n * or null if there are no errors.\n */\n // TODO(issue/24571): remove '!'.\n public readonly errors !: ValidationErrors | null;\n\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * @returns True if the user has not yet changed the value in the UI; compare `dirty`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n public readonly pristine: boolean = true;\n\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * @returns True if the user has changed the value of this control in the UI; compare `pristine`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n get dirty(): boolean { return !this.pristine; }\n\n /**\n * True if the control is marked as `touched`.\n *\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n */\n public readonly touched: boolean = false;\n\n /**\n * True if the control has not been marked as touched\n *\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n */\n get untouched(): boolean { return !this.touched; }\n\n /**\n * A multicasting observable that emits an event every time the value of the control changes, in\n * the UI or programmatically.\n */\n // TODO(issue/24571): remove '!'.\n public readonly valueChanges !: Observable<any>;\n\n /**\n * A multicasting observable that emits an event every time the validation `status` of the control\n * recalculates.\n *\n * @see {@link AbstractControl.status}\n *\n */\n // TODO(issue/24571): remove '!'.\n public readonly statusChanges !: Observable<any>;\n\n /**\n * Reports the update strategy of the `AbstractControl` (meaning\n * the event on which the control updates itself).\n * Possible values: `'change'` | `'blur'` | `'submit'`\n * Default value: `'change'`\n */\n get updateOn(): FormHooks {\n return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');\n }\n\n /**\n * Sets the synchronous validators that are active on this control. Calling\n * this overwrites any existing sync validators.\n */\n setValidators(newValidator: ValidatorFn|ValidatorFn[]|null): void {\n this.validator = coerceToValidator(newValidator);\n }\n\n /**\n * Sets the async validators that are active on this control. Calling this\n * overwrites any existing async validators.\n */\n setAsyncValidators(newValidator: AsyncValidatorFn|AsyncValidatorFn[]|null): void {\n this.asyncValidator = coerceToAsyncValidator(newValidator);\n }\n\n /**\n * Empties out the sync validator list.\n */\n clearValidators(): void { this.validator = null; }\n\n /**\n * Empties out the async validator list.\n */\n clearAsyncValidators(): void { this.asyncValidator = null; }\n\n /**\n * Marks the control as `touched`. A control is touched by focus and\n * blur events that do not change the value.\n *\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = true;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsTouched(opts);\n }\n }\n\n /**\n * Marks the control as `untouched`.\n *\n * If the control has any children, also marks all children as `untouched`\n * and recalculates the `touched` status of all parent controls.\n *\n * @see `markAsTouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after the marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsUntouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = false;\n this._pendingTouched = false;\n\n this._forEachChild(\n (control: AbstractControl) => { control.markAsUntouched({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /**\n * Marks the control as `dirty`. A control becomes dirty when\n * the control's value is changed through the UI; compare `markAsTouched`.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsDirty(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = false;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsDirty(opts);\n }\n }\n\n /**\n * Marks the control as `pristine`.\n *\n * If the control has any children, marks all children as `pristine`,\n * and recalculates the `pristine` status of all parent\n * controls.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n *\n * @param opts Configuration options that determine how the control emits events after\n * marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n */\n markAsPristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = true;\n this._pendingDirty = false;\n\n this._forEachChild((control: AbstractControl) => { control.markAsPristine({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /**\n * Marks the control as `pending`.\n *\n * A control is pending while the control performs async validation.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates changes and\n * emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), the `statusChanges`\n * observable emits an event with the latest status the control is marked pending.\n * When false, no events are emitted.\n *\n */\n markAsPending(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = PENDING;\n\n if (opts.emitEvent !== false) {\n (this.statusChanges as EventEmitter<any>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsPending(opts);\n }\n }\n\n /**\n * Disables the control. This means the control is exempt from validation checks and\n * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n *\n * If the control has children, all children are also disabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates\n * changes and emits events after the control is disabled.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is disabled.\n * When false, no events are emitted.\n */\n disable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = DISABLED;\n (this as{errors: ValidationErrors | null}).errors = null;\n this._forEachChild(\n (control: AbstractControl) => { control.disable({...opts, onlySelf: true}); });\n this._updateValue();\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(true));\n }\n\n /**\n * Enables the control. This means the control is included in validation checks and\n * the aggregate value of its parent. Its status recalculates based on its value and\n * its validators.\n *\n * By default, if the control has children, all children are enabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configure options that control how the control propagates changes and\n * emits events when marked as untouched\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is enabled.\n * When false, no events are emitted.\n */\n enable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = VALID;\n this._forEachChild(\n (control: AbstractControl) => { control.enable({...opts, onlySelf: true}); });\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(false));\n }\n\n private _updateAncestors(opts: {onlySelf?: boolean, emitEvent?: boolean}) {\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n this._parent._updatePristine();\n this._parent._updateTouched();\n }\n }\n\n /**\n * @param parent Sets the parent of the control\n */\n setParent(parent: FormGroup|FormArray): void { this._parent = parent; }\n\n /**\n * Sets the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract setValue(value: any, options?: Object): void;\n\n /**\n * Patches the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract patchValue(value: any, options?: Object): void;\n\n /**\n * Resets the control. Abstract method (implemented in sub-classes).\n */\n abstract reset(value?: any, options?: Object): void;\n\n /**\n * Recalculates the value and validation status of the control.\n *\n * By default, it also updates the value and validity of its ancestors.\n *\n * @param opts Configuration options determine how the control propagates changes and emits events\n * after updates and validity checks are applied.\n * * `onlySelf`: When true, only update this control. When false or not supplied,\n * update all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is updated.\n * When false, no events are emitted.\n */\n updateValueAndValidity(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._setInitialStatus();\n this._updateValue();\n\n if (this.enabled) {\n this._cancelExistingSubscription();\n (this as{errors: ValidationErrors | null}).errors = this._runValidator();\n (this as{status: string}).status = this._calculateStatus();\n\n if (this.status === VALID || this.status === PENDING) {\n this._runAsyncValidator(opts.emitEvent);\n }\n }\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n }\n }\n\n /** @internal */\n _updateTreeValidity(opts: {emitEvent?: boolean} = {emitEvent: true}) {\n this._forEachChild((ctrl: AbstractControl) => ctrl._updateTreeValidity(opts));\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n }\n\n private _setInitialStatus() {\n (this as{status: string}).status = this._allControlsDisabled() ? DISABLED : VALID;\n }\n\n private _runValidator(): ValidationErrors|null {\n return this.validator ? this.validator(this) : null;\n }\n\n private _runAsyncValidator(emitEvent?: boolean): void {\n if (this.asyncValidator) {\n (this as{status: string}).status = PENDING;\n const obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription =\n obs.subscribe((errors: ValidationErrors | null) => this.setErrors(errors, {emitEvent}));\n }\n }\n\n private _cancelExistingSubscription(): void {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n }\n }\n\n /**\n * Sets errors on a form control when running validations manually, rather than automatically.\n *\n * Calling `setErrors` also updates the validity of the parent control.\n *\n * @usageNotes\n * ### Manually set the errors for a control\n *\n * ```\n * const login = new FormControl('someLogin');\n * login.setErrors({\n * notUnique: true\n * });\n *\n * expect(login.valid).toEqual(false);\n * expect(login.errors).toEqual({ notUnique: true });\n *\n * login.setValue('someOtherLogin');\n *\n * expect(login.valid).toEqual(true);\n * ```\n */\n setErrors(errors: ValidationErrors|null, opts: {emitEvent?: boolean} = {}): void {\n (this as{errors: ValidationErrors | null}).errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false);\n }\n\n /**\n * Retrieves a child control given the control's name or path.\n *\n * @param path A dot-delimited string or array of string/number values that define the path to the\n * control.\n *\n * @usageNotes\n * ### Retrieve a nested control\n *\n * For example, to get a `name` control nested within a `person` sub-group:\n *\n * * `this.form.get('person.name');`\n *\n * -OR-\n *\n * * `this.form.get(['person', 'name']);`\n */\n get(path: Array<string|number>|string): AbstractControl|null { return _find(this, path, '.'); }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n const control = path ? this.get(path) : this;\n return control && control.errors ? control.errors[errorCode] : null;\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return !!this.getError(errorCode, path);\n }\n\n /**\n * Retrieves the top-level ancestor of this control.\n */\n get root(): AbstractControl {\n let x: AbstractControl = this;\n\n while (x._parent) {\n x = x._parent;\n }\n\n return x;\n }\n\n /** @internal */\n _updateControlsErrors(emitEvent: boolean): void {\n (this as{status: string}).status = this._calculateStatus();\n\n if (emitEvent) {\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent);\n }\n }\n\n /** @internal */\n _initObservables() {\n (this as{valueChanges: Observable<any>}).valueChanges = new EventEmitter();\n (this as{statusChanges: Observable<any>}).statusChanges = new EventEmitter();\n }\n\n\n private _calculateStatus(): string {\n if (this._allControlsDisabled()) return DISABLED;\n if (this.errors) return INVALID;\n if (this._anyControlsHaveStatus(PENDING)) return PENDING;\n if (this._anyControlsHaveStatus(INVALID)) return INVALID;\n return VALID;\n }\n\n /** @internal */\n abstract _updateValue(): void;\n\n /** @internal */\n abstract _forEachChild(cb: Function): void;\n\n /** @internal */\n abstract _anyControls(condition: Function): boolean;\n\n /** @internal */\n abstract _allControlsDisabled(): boolean;\n\n /** @internal */\n abstract _syncPendingControls(): boolean;\n\n /** @internal */\n _anyControlsHaveStatus(status: string): boolean {\n return this._anyControls((control: AbstractControl) => control.status === status);\n }\n\n /** @internal */\n _anyControlsDirty(): boolean {\n return this._anyControls((control: AbstractControl) => control.dirty);\n }\n\n /** @internal */\n _anyControlsTouched(): boolean {\n return this._anyControls((control: AbstractControl) => control.touched);\n }\n\n /** @internal */\n _updatePristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = !this._anyControlsDirty();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /** @internal */\n _updateTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = this._anyControlsTouched();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /** @internal */\n _onDisabledChange: Function[] = [];\n\n /** @internal */\n _isBoxedValue(formState: any): boolean {\n return typeof formState === 'object' && formState !== null &&\n Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n }\n\n /** @internal */\n _registerOnCollectionChange(fn: () => void): void { this._onCollectionChange = fn; }\n\n /** @internal */\n _setUpdateStrategy(opts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null): void {\n if (isOptionsObj(opts) && (opts as AbstractControlOptions).updateOn != null) {\n this._updateOn = (opts as AbstractControlOptions).updateOn !;\n }\n }\n}\n\n/**\n * Tracks the value and validation status of an individual form control.\n *\n * This is one of the three fundamental building blocks of Angular forms, along with\n * `FormGroup` and `FormArray`. It extends the `AbstractControl` class that\n * implements most of the base functionality for accessing the value, validation status,\n * user interactions and events.\n *\n * @see `AbstractControl`\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see [Usage Notes](#usage-notes)\n *\n * @usageNotes\n *\n * ### Initializing Form Controls\n *\n * Instantiate a `FormControl`, with an initial value.\n *\n * ```ts\n * const control = new FormControl('some value');\n * console.log(control.value); // 'some value'\n *```\n *\n * The following example initializes the control with a form state object. The `value`\n * and `disabled` keys are required in this case.\n *\n * ```ts\n * const control = new FormControl({ value: 'n/a', disabled: true });\n * console.log(control.value); // 'n/a'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * The following example initializes the control with a sync validator.\n *\n * ```ts\n * const control = new FormControl('', Validators.required);\n * console.log(control.value); // ''\n * console.log(control.status); // 'INVALID'\n * ```\n *\n * The following example initializes the control using an options object.\n *\n * ```ts\n * const control = new FormControl('', {\n * validators: Validators.required,\n * asyncValidators: myAsyncValidator\n * });\n * ```\n *\n * ### Configure the control to update on a blur event\n *\n * Set the `updateOn` option to `'blur'` to update on the blur `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'blur' });\n * ```\n *\n * ### Configure the control to update on a submit event\n *\n * Set the `updateOn` option to `'submit'` to update on a submit `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'submit' });\n * ```\n *\n * ### Reset the control back to an initial value\n *\n * You reset to a specific form state by passing through a standalone\n * value or a form state object that contains both a value and a disabled state\n * (these are the only two properties that cannot be calculated).\n *\n * ```ts\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n *\n * control.reset('Drew');\n *\n * console.log(control.value); // 'Drew'\n * ```\n *\n * ### Reset the control back to an initial value and disabled\n *\n * ```\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n * console.log(control.status); // 'VALID'\n *\n * control.reset({ value: 'Drew', disabled: true });\n *\n * console.log(control.value); // 'Drew'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * @publicApi\n */\nexport class FormControl extends AbstractControl {\n /** @internal */\n _onChange: Function[] = [];\n\n /** @internal */\n _pendingValue: any;\n\n /** @internal */\n _pendingChange: any;\n\n /**\n * Creates a new `FormControl` instance.\n *\n * @param formState Initializes the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n formState: any = null,\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._applyFormState(formState);\n this._setUpdateStrategy(validatorOrOpts);\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n this._initObservables();\n }\n\n /**\n * Sets a new value for the form control.\n *\n * @param value The new value for the control.\n * @param options Configuration options that determine how the control proopagates changes\n * and emits events when the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * * `emitModelToViewChange`: When true or not supplied (the default), each change triggers an\n * `onChange` event to\n * update the view.\n * * `emitViewToModelChange`: When true or not supplied (the default), each change triggers an\n * `ngModelChange`\n * event to update the model.\n *\n */\n setValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n (this as{value: any}).value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach(\n (changeFn) => changeFn(this.value, options.emitViewToModelChange !== false));\n }\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of a control.\n *\n * This function is functionally the same as {@link FormControl#setValue setValue} at this level.\n * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and\n * `FormArrays`, where it does behave differently.\n *\n * @see `setValue` for options\n */\n patchValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n this.setValue(value, options);\n }\n\n /**\n * Resets the form control, marking it `pristine` and `untouched`, and setting\n * the value to null.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n *\n */\n reset(formState: any = null, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n this._pendingChange = false;\n }\n\n /**\n * @internal\n */\n _updateValue() {}\n\n /**\n * @internal\n */\n _anyControls(condition: Function): boolean { return false; }\n\n /**\n * @internal\n */\n _allControlsDisabled(): boolean { return this.disabled; }\n\n /**\n * Register a listener for change events.\n *\n * @param fn The method that is called when the value changes\n */\n registerOnChange(fn: Function): void { this._onChange.push(fn); }\n\n /**\n * @internal\n */\n _clearChangeFns(): void {\n this._onChange = [];\n this._onDisabledChange = [];\n this._onCollectionChange = () => {};\n }\n\n /**\n * Register a listener for disabled events.\n *\n * @param fn The method that is called when the disabled status changes.\n */\n registerOnDisabledChange(fn: (isDisabled: boolean) => void): void {\n this._onDisabledChange.push(fn);\n }\n\n /**\n * @internal\n */\n _forEachChild(cb: Function): void {}\n\n /** @internal */\n _syncPendingControls(): boolean {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty) this.markAsDirty();\n if (this._pendingTouched) this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, {onlySelf: true, emitModelToViewChange: false});\n return true;\n }\n }\n return false;\n }\n\n private _applyFormState(formState: any) {\n if (this._isBoxedValue(formState)) {\n (this as{value: any}).value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({onlySelf: true, emitEvent: false}) :\n this.enable({onlySelf: true, emitEvent: false});\n } else {\n (this as{value: any}).value = this._pendingValue = formState;\n }\n }\n}\n\n/**\n * Tracks the value and validity state of a group of `FormControl` instances.\n *\n * A `FormGroup` aggregates the values of each child `FormControl` into one object,\n * with each control name as the key. It calculates its status by reducing the status values\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormArray`.\n *\n * When instantiating a `FormGroup`, pass in a collection of child controls as the first\n * argument. The key for each child registers the name for the control.\n *\n * @usageNotes\n *\n * ### Create a form group with 2 controls\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('Nancy', Validators.minLength(2)),\n * last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value); // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status); // 'VALID'\n * ```\n *\n * ### Create a form group with a group-level validator\n *\n * You include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('', Validators.minLength(2)),\n * passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n * return g.get('password').value === g.get('passwordConfirm').value\n * ? null : {'mismatch': true};\n * }\n * ```\n *\n * Like `FormControl` instances, you choose to pass in\n * validators and async validators as part of an options object.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('')\n * passwordConfirm: new FormControl('')\n * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });\n * ```\n *\n * ### Set the updateOn property for all controls in a form group\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * group level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormGroup({\n * one: new FormControl()\n * }, { updateOn: 'blur' });\n * ```\n *\n * @publicApi\n */\nexport class FormGroup extends AbstractControl {\n /**\n * Creates a new `FormGroup` instance.\n *\n * @param controls A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: {[key: string]: AbstractControl},\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Registers a control with the group's list of controls.\n *\n * This method does not update the value or validity of the control.\n * Use {@link FormGroup#addControl addControl} instead.\n *\n * @param name The control name to register in the collection\n * @param control Provides the control for the given name\n */\n registerControl(name: string, control: AbstractControl): AbstractControl {\n if (this.controls[name]) return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n }\n\n /**\n * Add a control to this group.\n *\n * This method also updates the value and validity of the control.\n *\n * @param name The control name to add to the collection\n * @param control Provides the control for the given name\n */\n addControl(name: string, control: AbstractControl): void {\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Remove a control from this group.\n *\n * @param name The control name to remove from the collection\n */\n removeControl(name: string): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Replace an existing control.\n *\n * @param name The control name to replace in the collection\n * @param control Provides the control for the given name\n */\n setControl(name: string, control: AbstractControl): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n if (control) this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Check whether there is an enabled control with the given name in the group.\n *\n * Reports false for disabled controls. If you'd like to check for existence in the group\n * only, use {@link AbstractControl#get get} instead.\n *\n * @param name The control name to check for existence in the collection\n *\n * @returns false for disabled controls, true otherwise.\n */\n contains(controlName: string): boolean {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n }\n\n /**\n * Sets the value of the `FormGroup`. It accepts an object that matches\n * the structure of the group, with control names as keys.\n *\n * @usageNotes\n * ### Set the complete value for the form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n *\n * console.log(form.value); // {first: null, last: null}\n *\n * form.setValue({first: 'Nancy', last: 'Drew'});\n * console.log(form.value); // {first: 'Nancy', last: 'Drew'}\n * ```\n *\n * @throws When strict checks fail, such as setting the value of a control\n * that doesn't exist or if you excluding the value of a control.\n *\n * @param value The new value for the control that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n */\n setValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n this._checkAllValuesPresent(value);\n Object.keys(value).forEach(name => {\n this._throwIfControlMissing(name);\n this.controls[name].setValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormGroup`. It accepts an object with control\n * names as keys, and does its best to match the values to the correct controls\n * in the group.\n *\n * It accepts both super-sets and sub-sets of the group without throwing an error.\n *\n * @usageNotes\n * ### Patch the value for a form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n * console.log(form.value); // {first: null, last: null}\n *\n * form.patchValue({first: 'Nancy'});\n * console.log(form.value); // {first: 'Nancy', last: null}\n * ```\n *\n * @param value The object that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes and\n * emits events after the value is patched.\n * * `onlySelf`: When true, each change only affects this control and not its parent. Default is\n * true.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n Object.keys(value).forEach(name => {\n if (this.controls[name]) {\n this.controls[name].patchValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormGroup`, marks all descendants are marked `pristine` and `untouched`, and\n * the value of all descendants to null.\n *\n * You reset to a specific form state by passing in a map of states\n * that matches the structure of your form, with control names as keys. The state\n * is a standalone value or a form state object with both a value and a disabled\n * status.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events when the group is reset.\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * @usageNotes\n *\n * ### Reset the form group values\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * console.log(form.value); // {first: 'first name', last: 'last name'}\n *\n * form.reset({ first: 'name', last: 'last name' });\n *\n * console.log(form.value); // {first: 'name', last: 'last name'}\n * ```\n *\n * ### Reset the form group values and disabled status\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * form.reset({\n * first: {value: 'name', disabled: true},\n * last: 'last'\n * });\n *\n * console.log(this.form.value); // {first: 'name', last: 'last name'}\n * console.log(this.form.get('first').status); // 'DISABLED'\n * ```\n */\n reset(value: any = {}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n control.reset(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the `FormGroup`, including any disabled controls.\n *\n * Retrieves all values regardless of disabled status.\n * The `value` property is the best way to get the value of the group, because\n * it excludes disabled controls in the `FormGroup`.\n */\n getRawValue(): any {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n acc[name] = control instanceof FormControl ? control.value : (<any>control).getRawValue();\n return acc;\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this._reduceChildren(false, (updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(name: string): void {\n if (!Object.keys(this.controls).length) {\n throw new Error(`\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.controls[name]) {\n throw new Error(`Cannot find form control with name: ${name}.`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: (v: any, k: string) => void): void {\n Object.keys(this.controls).forEach(k => cb(this.controls[k], k));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n });\n }\n\n /** @internal */\n _updateValue(): void { (this as{value: any}).value = this._reduceValue(); }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n let res = false;\n this._forEachChild((control: AbstractControl, name: string) => {\n res = res || (this.contains(name) && condition(control));\n });\n return res;\n }\n\n /** @internal */\n _reduceValue() {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n if (control.enabled || this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n }\n\n /** @internal */\n _reduceChildren(initValue: any, fn: Function) {\n let res = initValue;\n this._forEachChild(\n (control: AbstractControl, name: string) => { res = fn(res, control, name); });\n return res;\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const controlName of Object.keys(this.controls)) {\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n if (value[name] === undefined) {\n throw new Error(`Must supply a value for form control with name: '${name}'.`);\n }\n });\n }\n}\n\n/**\n * Tracks the value and validity state of an array of `FormControl`,\n * `FormGroup` or `FormArray` instances.\n *\n * A `FormArray` aggregates the values of each child `FormControl` into an array.\n * It calculates its status by reducing the status values of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormGroup`.\n *\n * @usageNotes\n *\n * ### Create an array of form controls\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy', Validators.minLength(2)),\n * new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value); // ['Nancy', 'Drew']\n * console.log(arr.status); // 'VALID'\n * ```\n *\n * ### Create a form array with array-level validators\n *\n * You include array-level validators and async validators. These come in handy\n * when you want to perform validation that considers the value of more than one child\n * control.\n *\n * The two types of validators are passed in separately as the second and third arg\n * respectively, or together as part of an options object.\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy'),\n * new FormControl('Drew')\n * ], {validators: myValidator, asyncValidators: myAsyncValidator});\n * ```\n *\n * ### Set the updateOn property for all controls in a form array\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * array level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl()\n * ], {updateOn: 'blur'});\n * ```\n *\n * ### Adding or removing controls from a form array\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that result in strange and unexpected behavior such\n * as broken change detection.\n *\n * @publicApi\n */\nexport class FormArray extends AbstractControl {\n /**\n * Creates a new `FormArray` instance.\n *\n * @param controls An array of child controls. Each child control is given an index\n * where it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: AbstractControl[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Get the `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to retrieve the control\n */\n at(index: number): AbstractControl { return this.controls[index]; }\n\n /**\n * Insert a new `AbstractControl` at the end of the array.\n *\n * @param control Form control to be inserted\n */\n push(control: AbstractControl): void {\n this.controls.push(control);\n this._registerControl(control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Insert a new `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to insert the control\n * @param control Form control to be inserted\n */\n insert(index: number, control: AbstractControl): void {\n this.controls.splice(index, 0, control);\n\n this._registerControl(control);\n this.updateValueAndValidity();\n }\n\n /**\n * Remove the control at the given `index` in the array.\n *\n * @param index Index in the array to remove the control\n */\n removeAt(index: number): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n this.updateValueAndValidity();\n }\n\n /**\n * Replace an existing control.\n *\n * @param index Index in the array to replace the control\n * @param control The `AbstractControl` control to replace the existing control\n */\n setControl(index: number, control: AbstractControl): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n\n if (control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n }\n\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Length of the control array.\n */\n get length(): number { return this.controls.length; }\n\n /**\n * Sets the value of the `FormArray`. It accepts an array that matches\n * the structure of the control.\n *\n * This method performs strict checks, and throws an error if you try\n * to set the value of a control that doesn't exist or if you exclude the\n * value of a control.\n *\n * @usageNotes\n * ### Set the values for the controls in the form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.setValue(['Nancy', 'Drew']);\n * console.log(arr.value); // ['Nancy', 'Drew']\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n setValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._checkAllValuesPresent(value);\n value.forEach((newValue: any, index: number) => {\n this._throwIfControlMissing(index);\n this.at(index).setValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormArray`. It accepts an array that matches the\n * structure of the control, and does its best to match the values to the correct\n * controls in the group.\n *\n * It accepts both super-sets and sub-sets of the array without throwing an error.\n *\n * @usageNotes\n * ### Patch the values for controls in a form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.patchValue(['Nancy']);\n * console.log(arr.value); // ['Nancy', null]\n * ```\n *\n * @param value Array of latest values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n value.forEach((newValue: any, index: number) => {\n if (this.at(index)) {\n this.at(index).patchValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the\n * value of all descendants to null or null maps.\n *\n * You reset to a specific form state by passing in an array of states\n * that matches the structure of the control. The state is a standalone value\n * or a form state object with both a value and a disabled status.\n *\n * @usageNotes\n * ### Reset the values in a form array\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * arr.reset(['name', 'last name']);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * ```\n *\n * ### Reset the values in a form array and the disabled status for the first control\n *\n * ```\n * this.arr.reset([\n * {value: 'name', disabled: true},\n * 'last'\n * ]);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * console.log(this.arr.get(0).status); // 'DISABLED'\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n reset(value: any = [], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, index: number) => {\n control.reset(value[index], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the array, including any disabled controls.\n *\n * Reports all values regardless of disabled status.\n * For enabled controls only, the `value` property is the best way to get the value of the array.\n */\n getRawValue(): any[] {\n return this.controls.map((control: AbstractControl) => {\n return control instanceof FormControl ? control.value : (<any>control).getRawValue();\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this.controls.reduce((updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(index: number): void {\n if (!this.controls.length) {\n throw new Error(`\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.at(index)) {\n throw new Error(`Cannot find form control at index ${index}`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: Function): void {\n this.controls.forEach((control: AbstractControl, index: number) => { cb(control, index); });\n }\n\n /** @internal */\n _updateValue(): void {\n (this as{value: any}).value =\n this.controls.filter((control) => control.enabled || this.disabled)\n .map((control) => control.value);\n }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n return this.controls.some((control: AbstractControl) => control.enabled && condition(control));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => this._registerControl(control));\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, i: number) => {\n if (value[i] === undefined) {\n throw new Error(`Must supply a value for form control at index: ${i}.`);\n }\n });\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const control of this.controls) {\n if (control.enabled) return false;\n }\n return this.controls.length > 0 || this.disabled;\n }\n\n private _registerControl(control: AbstractControl) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AfterViewInit, Directive, EventEmitter, Inject, Input, Optional, Self, forwardRef} from '@angular/core';\n\nimport {AbstractControl, FormControl, FormGroup, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {NgControl} from './ng_control';\nimport {NgModel} from './ng_model';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from './shared';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgForm)\n};\n\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a top-level `FormGroup` instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags. You don't need to add a special selector.\n *\n * You optionally export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful. Many properties from the underlying\n * `FormGroup` instance are duplicated on the directive itself, so a reference to it\n * gives you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, use `NgModel` with a `name`\n * attribute. You may use `NgModelGroup` to create sub-groups within the form.\n *\n * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event emits the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * To import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * @usageNotes\n *\n * ### Migrating from deprecated ngForm selector\n *\n * Support for using `ngForm` element selector has been deprecated in Angular v6 and will be removed\n * in Angular v9.\n *\n * This has been deprecated to keep selectors consistent with other core Angular selectors,\n * as element selectors are typically written in kebab-case.\n *\n * Now deprecated:\n * ```html\n * <ngForm #myForm=\"ngForm\">\n * ```\n *\n * After:\n * ```html\n * <ng-form #myForm=\"ngForm\">\n * ```\n *\n * ### Listening for form submission\n *\n * The following example shows how to capture the form values from the \"ngSubmit\" event.\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Setting the update options\n *\n * The following example shows you how to change the \"updateOn\" option from its default using\n * ngFormOptions.\n *\n * ```html\n * <form [ngFormOptions]=\"{updateOn: 'blur'}\">\n * <input name=\"one\" ngModel> <!-- this ngModel will update on blur -->\n * </form>\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,ng-form,[ngForm]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n outputs: ['ngSubmit'],\n exportAs: 'ngForm'\n})\nexport class NgForm extends ControlContainer implements Form,\n AfterViewInit {\n /**\n * @description\n * Returns whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n private _directives: NgModel[] = [];\n\n /**\n * @description\n * The `FormGroup` instance created for this form.\n */\n form: FormGroup;\n\n /**\n * @description\n * Event emitter for the \"ngSubmit\" event\n */\n ngSubmit = new EventEmitter();\n\n /**\n * @description\n * Tracks options for the `NgForm` instance.\n *\n * **updateOn**: Sets the default `updateOn` value for all child `NgModels` below it\n * unless explicitly set by a child `NgModel` using `ngModelOptions`). Defaults to 'change'.\n * Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngFormOptions') options !: {updateOn?: FormHooks};\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this.form =\n new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n }\n\n /**\n * @description\n * Lifecycle method called after the view is initialized. For internal use only.\n */\n ngAfterViewInit() { this._setUpdateStrategy(); }\n\n /**\n * @description\n * The directive instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * The internal `FormGroup` instance.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it is always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Returns a map of the controls in this group.\n */\n get controls(): {[key: string]: AbstractControl} { return this.form.controls; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `NgModel` directive instance.\n */\n addControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n (dir as{control: FormControl}).control =\n <FormControl>container.registerControl(dir.name, dir.control);\n setUpControl(dir.control, dir);\n dir.control.updateValueAndValidity({emitEvent: false});\n this._directives.push(dir);\n });\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `NgModel` directive.\n *\n * @param dir The `NgModel` directive instance.\n */\n getControl(dir: NgModel): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `NgModel` instance from the internal list of directives\n *\n * @param dir The `NgModel` directive instance.\n */\n removeControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n removeDir<NgModel>(this._directives, dir);\n });\n }\n\n /**\n * @description\n * Adds a new `NgModelGroup` directive instance to the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n addFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n const group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({emitEvent: false});\n });\n }\n\n /**\n * @description\n * Removes the `NgModelGroup` directive instance from the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n removeFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n });\n }\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n getFormGroup(dir: NgModelGroup): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `NgControl` directive.\n *\n * @param dir The `NgControl` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: NgControl, value: any): void {\n resolvedPromise.then(() => {\n const ctrl = <FormControl>this.form.get(dir.path !);\n ctrl.setValue(value);\n });\n }\n\n /**\n * @description\n * Sets the value for this `FormGroup`.\n *\n * @param value The new value\n */\n setValue(value: {[key: string]: any}): void { this.control.setValue(value); }\n\n /**\n * @description\n * Method called when the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n private _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n }\n\n /** @internal */\n _findContainer(path: string[]): FormGroup {\n path.pop();\n return path.length ? <FormGroup>this.form.get(path) : this.form;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class TemplateDrivenErrors {\n static modelParentException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup's partner directive \"formControlName\" instead. Example:\n\n ${Examples.formControlName}\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n ${Examples.ngModelWithFormGroup}`);\n }\n\n static formGroupNameException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static missingNameException() {\n throw new Error(\n `If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as 'standalone' in ngModelOptions.\n\n Example 1: <input [(ngModel)]=\"person.firstName\" name=\"first\">\n Example 2: <input [(ngModel)]=\"person.firstName\" [ngModelOptions]=\"{standalone: true}\">`);\n }\n\n static modelGroupParentException() {\n throw new Error(`\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static ngFormWarning() {\n console.warn(`\n It looks like you're using 'ngForm'.\n\n Support for using the 'ngForm' element selector has been deprecated in Angular v6 and will be removed\n in Angular v9.\n\n Use 'ng-form' instead.\n\n Before:\n <ngForm #myForm=\"ngForm\">\n\n After:\n <ng-form #myForm=\"ngForm\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Inject, InjectionToken, Optional} from '@angular/core';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\n/**\n * @description\n * `InjectionToken` to provide to turn off the warning when using 'ngForm' deprecated selector.\n */\nexport const NG_FORM_SELECTOR_WARNING = new InjectionToken('NgFormSelectorWarning');\n\n/**\n * This directive is solely used to display warnings when the deprecated `ngForm` selector is used.\n *\n * @deprecated in Angular v6 and will be removed in Angular v9.\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'ngForm'})\nexport class NgFormSelectorWarning {\n /**\n * Static property used to track whether the deprecation warning for this selector has been sent.\n * Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngFormWarning = false;\n\n constructor(@Optional() @Inject(NG_FORM_SELECTOR_WARNING) ngFormWarning: string|null) {\n if (((!ngFormWarning || ngFormWarning === 'once') && !NgFormSelectorWarning._ngFormWarning) ||\n ngFormWarning === 'always') {\n TemplateDrivenErrors.ngFormWarning();\n NgFormSelectorWarning._ngFormWarning = true;\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {NgForm} from './ng_form';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\nexport const modelGroupProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgModelGroup)\n};\n\n/**\n * @description\n * Creates and binds a `FormGroup` instance to a DOM element.\n *\n * This directive can only be used as a child of `NgForm` (within `<form>` tags).\n *\n * Use this directive to validate a sub-group of your form separately from the\n * rest of your form, or if some values in your domain model make more sense\n * to consume together in a nested object.\n *\n * Provide a name for the sub-group and it will become the key\n * for the sub-group in the form's full value. If you need direct access, export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * @usageNotes\n *\n * ### Consuming controls in a grouping\n *\n * The following example shows you how to combine controls together in a sub-group\n * of the form.\n *\n * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup'})\nexport class NgModelGroup extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `NgModelGroup` bound to the directive. The name corresponds\n * to a key in the parent `NgForm`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelGroup') name !: string;\n\n constructor(\n @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelGroupParentException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\nimport {NgForm} from './ng_form';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor, setUpControl} from './shared';\nimport {TemplateDrivenErrors} from './template_driven_errors';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => NgModel)\n};\n\n/**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have and old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel` have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a `FormControl` instance from a domain model and binds it\n * to a form control element.\n *\n * The `FormControl` instance tracks the value, user interaction, and\n * validation status of the control and keeps the view synced with the model. If used\n * within a parent form, the directive also registers itself with the form as a child\n * control.\n *\n * This directive is used by itself or as part of a larger form. Use the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional `Input`. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\n * class sets the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-box syntax'), the value in the UI always syncs back to\n * the domain model in your class.\n *\n * To inspect the properties of the associated `FormControl` (like validity state), \n * export the directive into a local template variable using `ngModel` as the key (ex: `#myVar=\"ngModel\"`).\n * You then access the control using the directive's `control` property, \n * but most properties used (like `valid` and `dirty`) fall through to the control anyway for direct access. \n * See a full list of properties directly available in `AbstractControlDirective`.\n *\n * @see `RadioControlValueAccessor` \n * @see `SelectControlValueAccessor`\n * \n * @usageNotes\n * \n * ### Using ngModel on a standalone control\n *\n * The following examples show a simple standalone control using `ngModel`:\n *\n * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * In the context of a parent form, it's often unnecessary to include one-way or two-way binding, \n * as the parent form syncs the value for you. You access its properties by exporting it into a \n * local template variable using `ngForm` such as (`#f=\"ngForm\"`). Use the variable where \n * needed on form submission.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n * \n * ### Using ngModel within a form\n *\n * The following example shows controls using `ngModel` within a form:\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n * \n * ### Using a standalone ngModel within a group\n * \n * The following example shows you how to use a standalone ngModel control\n * within a form. This controls the display of the form, but doesn't contain form data.\n *\n * ```html\n * <form>\n * <input name=\"login\" ngModel placeholder=\"Login\">\n * <input type=\"checkbox\" ngModel [ngModelOptions]=\"{standalone: true}\"> Show more options?\n * </form>\n * <!-- form value: {login: ''} -->\n * ```\n * \n * ### Setting the ngModel name attribute through options\n * \n * The following example shows you an alternate way to set the name attribute. The name attribute is used\n * within a custom form component, and the name `@Input` property serves a different purpose.\n *\n * ```html\n * <form>\n * <my-person-control name=\"Nancy\" ngModel [ngModelOptions]=\"{name: 'user'}\">\n * </my-person-control>\n * </form>\n * <!-- form value: {user: ''} -->\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[ngModel]:not([formControlName]):not([formControl])',\n providers: [formControlBinding],\n exportAs: 'ngModel'\n})\nexport class NgModel extends NgControl implements OnChanges,\n OnDestroy {\n public readonly control: FormControl = new FormControl();\n /** @internal */\n _registered = false;\n\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the name bound to the directive. The parent form\n * uses this name as a key to retrieve this control's value.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks whether the control is disabled.\n */\n // TODO(issue/24571): remove '!'.\n @Input('disabled') isDisabled !: boolean;\n\n /**\n * @description\n * Tracks the value bound to this directive.\n */\n @Input('ngModel') model: any;\n\n /**\n * @description\n * Tracks the configuration options for this `ngModel` instance.\n *\n * **name**: An alternative to setting the name attribute on the form control element. See\n * the [example](api/forms/NgModel#using-ngmodel-on-a-standalone-control) for using `NgModel`\n * as a standalone control.\n *\n * **standalone**: When set to true, the `ngModel` will not register itself with its parent form,\n * and acts as if it's not in the form. Defaults to false.\n *\n * **updateOn**: Defines the event upon which the form control value and validity update.\n * Defaults to 'change'. Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelOptions')\n options !: {name?: string, standalone?: boolean, updateOn?: FormHooks};\n\n /**\n * @description\n * Event emitter for producing the `ngModelChange` event after\n * the view model updates.\n */\n @Output('ngModelChange') update = new EventEmitter();\n\n constructor(@Optional() @Host() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[]) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n this._checkForErrors();\n if (!this._registered) this._setUpControl();\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal\n * use only.\n */\n ngOnDestroy(): void { this.formDirective && this.formDirective.removeControl(this); }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] {\n return this._parent ? controlPath(this.name, this._parent) : [this.name];\n }\n\n /**\n * @description\n * The top-level directive for this control if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value emitted by `ngModelChange`.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _setUpControl(): void {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() :\n this.formDirective.addControl(this);\n this._registered = true;\n }\n\n private _setUpdateStrategy(): void {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n }\n\n private _isStandalone(): boolean {\n return !this._parent || !!(this.options && this.options.standalone);\n }\n\n private _setUpStandalone(): void {\n setUpControl(this.control, this);\n this.control.updateValueAndValidity({emitEvent: false});\n }\n\n private _checkForErrors(): void {\n if (!this._isStandalone()) {\n this._checkParentType();\n }\n this._checkName();\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) &&\n this._parent instanceof AbstractFormGroupDirective) {\n TemplateDrivenErrors.formGroupNameException();\n } else if (\n !(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelParentException();\n }\n }\n\n private _checkName(): void {\n if (this.options && this.options.name) this.name = this.options.name;\n\n if (!this._isStandalone() && !this.name) {\n TemplateDrivenErrors.missingNameException();\n }\n }\n\n private _updateValue(value: any): void {\n resolvedPromise.then(\n () => { this.control.setValue(value, {emitViewToModelChange: false}); });\n }\n\n private _updateDisabled(changes: SimpleChanges) {\n const disabledValue = changes['isDisabled'].currentValue;\n\n const isDisabled =\n disabledValue === '' || (disabledValue && disabledValue !== 'false');\n\n resolvedPromise.then(() => {\n if (isDisabled && !this.control.disabled) {\n this.control.disable();\n } else if (!isDisabled && this.control.disabled) {\n this.control.enable();\n }\n });\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, InjectionToken, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, isPropertyUpdated, selectValueAccessor, setUpControl} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\n\n/**\n * Token to provide to turn off the ngModel warning on formControl and formControlName.\n */\nexport const NG_MODEL_WITH_FORM_CONTROL_WARNING =\n new InjectionToken('NgModelWithFormControlWarning');\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlDirective)\n};\n\n/**\n * @description\n * * Syncs a standalone `FormControl` instance to a form control element.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Registering a single form control\n * \n * The following examples shows how to register a standalone control and set its value.\n *\n * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <input [formControl]=\"control\" [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <input [formControl]=\"control\">\n * ```\n *\n * ```ts\n * this.control.setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControl]', providers: [formControlBinding], exportAs: 'ngForm'})\n\nexport class FormControlDirective extends NgControl implements OnChanges {\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControl') form !: FormControl;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlDirective. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular `FormControlDirective` instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(@Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|null) {\n super();\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._isControlChanged(changes)) {\n setUpControl(this.form, this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this.form.updateValueAndValidity({emitEvent: false});\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning(\n 'formControl', FormControlDirective, this, this._ngModelWarningConfig);\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * The `FormControl` bound to this directive.\n */\n get control(): FormControl { return this.form; }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _isControlChanged(changes: {[key: string]: any}): boolean {\n return changes.hasOwnProperty('form');\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\nimport {FormArray, FormControl, FormGroup} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators} from '../../validators';\nimport {ControlContainer} from '../control_container';\nimport {Form} from '../form_interface';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {cleanUpControl, composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from '../shared';\n\nimport {FormControlName} from './form_control_name';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupDirective)\n};\n\n/**\n * @description\n *\n * Binds an existing `FormGroup` to a DOM element.\n *\n * This directive accepts an existing `FormGroup` instance. It will then use this\n * `FormGroup` instance to match any child `FormControl`, `FormGroup`,\n * and `FormArray` instances to child `FormControlName`, `FormGroupName`,\n * and `FormArrayName` directives.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * ### Register Form Group\n *\n * The following example registers a `FormGroup` with first name and last name controls,\n * and listens for the *ngSubmit* event when the button is clicked.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector: '[formGroup]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n exportAs: 'ngForm'\n})\nexport class FormGroupDirective extends ControlContainer implements Form,\n OnChanges {\n /**\n * @description\n * Reports whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n // TODO(issue/24571): remove '!'.\n private _oldForm !: FormGroup;\n\n /**\n * @description\n * Tracks the list of added `FormControlName` instances\n */\n directives: FormControlName[] = [];\n\n /**\n * @description\n * Tracks the `FormGroup` bound to this directive.\n */\n @Input('formGroup') form: FormGroup = null !;\n\n /**\n * @description\n * Emits an event when the form submission has been triggered.\n */\n @Output() ngSubmit = new EventEmitter();\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) private _validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: any[]) {\n super();\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n }\n }\n\n /**\n * @description\n * Returns this directive's instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * Returns the `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `FormControlName` directive instance.\n */\n addControl(dir: FormControlName): FormControl {\n const ctrl: any = this.form.get(dir.path);\n setUpControl(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n this.directives.push(dir);\n return ctrl;\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `FormControlName` directive\n *\n * @param dir The `FormControlName` directive instance.\n */\n getControl(dir: FormControlName): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `FormControlName` instance from the internal list of directives\n *\n * @param dir The `FormControlName` directive instance.\n */\n removeControl(dir: FormControlName): void { removeDir<FormControlName>(this.directives, dir); }\n\n /**\n * Adds a new `FormGroupName` directive instance to the form.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n addFormGroup(dir: FormGroupName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form group.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n removeFormGroup(dir: FormGroupName): void {}\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance\n *\n * @param dir The `FormGroupName` directive instance.\n */\n getFormGroup(dir: FormGroupName): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Adds a new `FormArrayName` directive instance to the form.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n addFormArray(dir: FormArrayName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form array.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n removeFormArray(dir: FormArrayName): void {}\n\n /**\n * @description\n * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n getFormArray(dir: FormArrayName): FormArray { return <FormArray>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `FormControlName` directive.\n *\n * @param dir The `FormControlName` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: FormControlName, value: any): void {\n const ctrl  = <FormControl>this.form.get(dir.path);\n ctrl.setValue(value);\n }\n\n /**\n * @description\n * Method called with the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n\n /** @internal */\n _updateDomValue() {\n this.directives.forEach(dir => {\n const newCtrl: any = this.form.get(dir.path);\n if (dir.control !== newCtrl) {\n cleanUpControl(dir.control, dir);\n if (newCtrl) setUpControl(newCtrl, dir);\n (dir as{control: FormControl}).control = newCtrl;\n }\n });\n\n this.form._updateTreeValidity({emitEvent: false});\n }\n\n private _updateRegistrations() {\n this.form._registerOnCollectionChange(() => this._updateDomValue());\n if (this._oldForm) this._oldForm._registerOnCollectionChange(() => {});\n this._oldForm = this.form;\n }\n\n private _updateValidators() {\n const sync = composeValidators(this._validators);\n this.form.validator = Validators.compose([this.form.validator !, sync !]);\n\n const async = composeAsyncValidators(this._asyncValidators);\n this.form.asyncValidator = Validators.composeAsync([this.form.asyncValidator !, async !]);\n }\n\n private _checkFormPresent() {\n if (!this.form) {\n ReactiveErrors.missingFormException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormArray} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {composeAsyncValidators, composeValidators, controlPath} from '../shared';\nimport {AsyncValidatorFn, ValidatorFn} from '../validators';\n\nimport {FormGroupDirective} from './form_group_directive';\n\nexport const formGroupNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormGroup` to a DOM element.\n *\n * This directive can only be used with a parent `FormGroupDirective`.\n *\n * It accepts the string name of the nested `FormGroup` to link, and\n * looks for a `FormGroup` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * Use nested form groups to validate a sub-group of a\n * form separately from the rest or to group the values of certain\n * controls into their own nested object.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n *\n * @usageNotes\n * \n * ### Access the group by name\n * \n * The following example uses the {@link AbstractControl#get get} method to access the \n * associated `FormGroup`\n *\n * ```ts\n * this.form.get('name');\n * ```\n * \n * ### Access individual controls in the group\n * \n * The following example uses the {@link AbstractControl#get get} method to access \n * individual controls within the group using dot syntax.\n *\n * ```ts\n * this.form.get('name.first');\n * ```\n *\n * ### Register a nested `FormGroup`.\n * \n * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,\n * and provides methods to retrieve the nested `FormGroup` and individual controls.\n *\n * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formGroupName]', providers: [formGroupNameProvider]})\nexport class FormGroupName extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `FormGroup` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formGroupName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.groupParentException();\n }\n }\n}\n\nexport const formArrayNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormArrayName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormArray` to a DOM element.\n *\n * This directive is designed to be used with a parent `FormGroupDirective` (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested `FormArray` you want to link, and\n * will look for a `FormArray` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formArrayName]', providers: [formArrayNameProvider]})\nexport class FormArrayName extends ControlContainer implements OnInit, OnDestroy {\n /** @internal */\n _parent: ControlContainer;\n\n /** @internal */\n _validators: any[];\n\n /** @internal */\n _asyncValidators: any[];\n\n /**\n * @description\n * Tracks the name of the `FormArray` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formArrayName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs are initialized. For internal use only.\n *\n * @throws If the directive does not have a valid parent.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormArray(this);\n }\n\n /**\n * @description\n * A lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormArray(this);\n }\n }\n\n /**\n * @description\n * The `FormArray` bound to this directive.\n */\n get control(): FormArray { return this.formDirective !.getFormArray(this); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): FormGroupDirective|null {\n return this._parent ? <FormGroupDirective>this._parent.formDirective : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators registered with this\n * directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n private _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.arrayParentException();\n }\n }\n}\n\nfunction _hasInvalidParent(parent: ControlContainer): boolean {\n return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n !(parent instanceof FormArrayName);\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\nimport {NG_MODEL_WITH_FORM_CONTROL_WARNING} from './form_control_directive';\nimport {FormGroupDirective} from './form_group_directive';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const controlNameBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlName)\n};\n\n/**\n * @description\n * Syncs a `FormControl` in an existing `FormGroup` to a form control\n * element by name.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n * \n * ### Register `FormControl` within a group\n *\n * The following example shows how to register multiple form controls within a form group\n * and set their value.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: `RadioControlValueAccessor`\n * * Selects: `SelectControlValueAccessor`\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\" [(ngModel)]=\"value\">\n * </form>\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\">\n * </form>\n * ```\n *\n * ```ts\n * this.form.get('first').setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName]', providers: [controlNameBinding]})\nexport class FormControlName extends NgControl implements OnChanges, OnDestroy {\n private _added = false;\n /**\n * @description\n * Internal reference to the view model value.\n * @internal\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n readonly control !: FormControl;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControlName') name !: string;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlName. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular FormControlName instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators:\n Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR) valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|\n null) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n if (!this._added) this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning('formControlName', FormControlName, this, this._ngModelWarningConfig);\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent !); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn {\n return composeAsyncValidators(this._rawAsyncValidators) !;\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof FormGroupName) &&\n this._parent instanceof AbstractFormGroupDirective) {\n ReactiveErrors.ngModelGroupException();\n } else if (\n !(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&\n !(this._parent instanceof FormArrayName)) {\n ReactiveErrors.controlParentException();\n }\n }\n\n private _setUpControl() {\n this._checkParentType();\n (this as{control: FormControl}).control = this.formDirective.addControl(this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this._added = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Input, OnChanges, SimpleChanges, StaticProvider, forwardRef} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {AbstractControl} from '../model';\nimport {NG_VALIDATORS, Validators} from '../validators';\n\n\n/**\n * @description\n * Defines the map of errors returned from failed validation checks.\n *\n * @publicApi\n */\nexport type ValidationErrors = {\n [key: string]: any\n};\n\n/**\n * @description\n * An interface implemented by classes that perform synchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom validator\n *\n * The following example implements the `Validator` interface to create a\n * validator directive with a custom error key.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors|null {\n * return {'custom': true};\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface Validator {\n /**\n * @description\n * Method that performs synchronous validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A map of validation errors if validation fails,\n * otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null;\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange?(fn: () => void): void;\n}\n\n/**\n * @description\n * An interface implemented by classes that perform asynchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom async validator directive\n *\n * The following example implements the `AsyncValidator` interface to create an\n * async validator directive with a custom error key.\n *\n * ```typescript\n * import { of as observableOf } from 'rxjs';\n *\n * @Directive({\n * selector: '[customAsyncValidator]',\n * providers: [{provide: NG_ASYNC_VALIDATORS, useExisting: CustomAsyncValidatorDirective, multi:\n * true}]\n * })\n * class CustomAsyncValidatorDirective implements AsyncValidator {\n * validate(control: AbstractControl): Observable<ValidationErrors|null> {\n * return observableOf({'custom': true});\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface AsyncValidator extends Validator {\n /**\n * @description\n * Method that performs async validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A promise or observable that resolves a map of validation errors\n * if validation fails, otherwise null.\n */\n validate(control: AbstractControl):\n Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RequiredValidator),\n multi: true\n};\n\n/**\n * @description\n * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const CHECKBOX_REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CheckboxRequiredValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds the `required` validator to any controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required validator using template-driven forms\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector:\n ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n providers: [REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class RequiredValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _required !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the required attribute bound to this directive.\n */\n @Input()\n get required(): boolean|string { return this._required; }\n\n set required(value: boolean|string) {\n this._required = value != null && value !== false && `${value}` !== 'false';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether the control is empty.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.required(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n\n/**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required checkbox validator using template-driven forms\n *\n * The following example shows how to add a checkbox required validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector:\n 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n providers: [CHECKBOX_REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class CheckboxRequiredValidator extends RequiredValidator {\n /**\n * @description\n * Method that validates whether or not the checkbox has been checked.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.requiredTrue(control) : null;\n }\n}\n\n/**\n * @description\n * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const EMAIL_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => EmailValidator),\n multi: true\n};\n\n/**\n * A directive that adds the `email` validator to controls marked with the\n * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding an email validator\n *\n * The following example shows how to add an email validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n providers: [EMAIL_VALIDATOR]\n})\nexport class EmailValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _enabled !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the email attribute bound to this directive.\n */\n @Input()\n set email(value: boolean|string) {\n this._enabled = value === '' || value === true || value === 'true';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether an email address is valid.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this._enabled ? Validators.email(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n/**\n * @description\n * A function that receives a control and synchronously returns a map of\n * validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface ValidatorFn { (control: AbstractControl): ValidationErrors|null; }\n\n/**\n * @description\n * A function that receives a control and returns a Promise or observable\n * that emits validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface AsyncValidatorFn {\n (control: AbstractControl): Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MIN_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MinLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds minimum length validation to controls marked with the\n * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` mult-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a minimum length validator\n *\n * The following example shows how to add a minimum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel minlength=\"4\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n providers: [MIN_LENGTH_VALIDATOR],\n host: {'[attr.minlength]': 'minlength ? minlength : null'}\n})\nexport class MinLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the minimum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() minlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('minlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value meets a minimum length\n * requirement. Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.minlength == null ? null : this._validator(control);\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.minLength(parseInt(this.minlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MAX_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaxLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds max length validation to controls marked with the\n * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a maximum length validator\n *\n * The following example shows how to add a maximum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel maxlength=\"25\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n providers: [MAX_LENGTH_VALIDATOR],\n host: {'[attr.maxlength]': 'maxlength ? maxlength : null'}\n})\nexport class MaxLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the maximum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() maxlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('maxlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value exceeds\n * the maximum length requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.maxlength != null ? this._validator(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const PATTERN_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => PatternValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds regex pattern validation to controls marked with the\n * `pattern` attribute. The regex must match the entire control value.\n * The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a pattern validator\n *\n * The following example shows how to add a pattern validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel pattern=\"[a-zA-Z ]*\">\n * ```\n * \n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n providers: [PATTERN_VALIDATOR],\n host: {'[attr.pattern]': 'pattern ? pattern : null'}\n})\nexport class PatternValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the pattern bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() pattern !: string | RegExp;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('pattern' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value matches the\n * the pattern requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null { return this._validator(control); }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void { this._validator = Validators.pattern(this.pattern); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\n\nimport {AsyncValidatorFn, ValidatorFn} from './directives/validators';\nimport {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup, FormHooks} from './model';\n\nfunction isAbstractControlOptions(options: AbstractControlOptions | {[key: string]: any}):\n options is AbstractControlOptions {\n return (<AbstractControlOptions>options).asyncValidators !== undefined ||\n (<AbstractControlOptions>options).validators !== undefined ||\n (<AbstractControlOptions>options).updateOn !== undefined;\n}\n\n/**\n * @description\n * Creates an `AbstractControl` from a user-specified configuration.\n *\n * The `FormBuilder` provides syntactic sugar that shortens creating instances of a `FormControl`,\n * `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to build complex\n * forms.\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@Injectable()\nexport class FormBuilder {\n /**\n * @description\n * Construct a new `FormGroup` instance.\n *\n * @param controlsConfig A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param options Configuration options object for the `FormGroup`. The object can\n * have two shapes:\n *\n * 1) `AbstractControlOptions` object (preferred), which consists of:\n * * `validators`: A synchronous validator function, or an array of validator functions\n * * `asyncValidators`: A single async validator or array of async validator functions\n * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur' |\n * submit')\n *\n * 2) Legacy configuration object, which consists of:\n * * `validator`: A synchronous validator function, or an array of validator functions\n * * `asyncValidator`: A single async validator or array of async validator functions\n *\n */\n group(\n controlsConfig: {[key: string]: any},\n options: AbstractControlOptions|{[key: string]: any}|null = null): FormGroup {\n const controls = this._reduceControls(controlsConfig);\n\n let validators: ValidatorFn|ValidatorFn[]|null = null;\n let asyncValidators: AsyncValidatorFn|AsyncValidatorFn[]|null = null;\n let updateOn: FormHooks|undefined = undefined;\n\n if (options != null) {\n if (isAbstractControlOptions(options)) {\n // `options` are `AbstractControlOptions`\n validators = options.validators != null ? options.validators : null;\n asyncValidators = options.asyncValidators != null ? options.asyncValidators : null;\n updateOn = options.updateOn != null ? options.updateOn : undefined;\n } else {\n // `options` are legacy form group options\n validators = options['validator'] != null ? options['validator'] : null;\n asyncValidators = options['asyncValidator'] != null ? options['asyncValidator'] : null;\n }\n }\n\n return new FormGroup(controls, {asyncValidators, updateOn, validators});\n }\n\n /**\n * @description\n * Construct a new `FormControl` with the given state, validators and options.\n *\n * @param formState Initializes the control with an initial state value, or\n * with an object that contains both a value and a disabled status.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n *\n * @usageNotes\n *\n * ### Initialize a control as disabled\n *\n * The following example returns a control with an initial value in a disabled state.\n *\n * <code-example path=\"forms/ts/formBuilder/form_builder_example.ts\"\n * linenums=\"false\" region=\"disabled-control\">\n * </code-example>\n */\n control(\n formState: any, validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormControl {\n return new FormControl(formState, validatorOrOpts, asyncValidator);\n }\n\n /**\n * Constructs a new `FormArray` from the given array of configurations,\n * validators and options.\n *\n * @param controlsConfig An array of child controls or control configs. Each\n * child control is given an index when it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n */\n array(\n controlsConfig: any[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormArray {\n const controls = controlsConfig.map(c => this._createControl(c));\n return new FormArray(controls, validatorOrOpts, asyncValidator);\n }\n\n /** @internal */\n _reduceControls(controlsConfig: {[k: string]: any}): {[key: string]: AbstractControl} {\n const controls: {[key: string]: AbstractControl} = {};\n Object.keys(controlsConfig).forEach(controlName => {\n controls[controlName] = this._createControl(controlsConfig[controlName]);\n });\n return controls;\n }\n\n /** @internal */\n _createControl(controlConfig: any): AbstractControl {\n if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n controlConfig instanceof FormArray) {\n return controlConfig;\n\n } else if (Array.isArray(controlConfig)) {\n const value = controlConfig[0];\n const validator: ValidatorFn = controlConfig.length > 1 ? controlConfig[1] : null;\n const asyncValidator: AsyncValidatorFn = controlConfig.length > 2 ? controlConfig[2] : null;\n return this.control(value, validator, asyncValidator);\n\n } else {\n return this.control(controlConfig);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = new Version('7.2.8');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive} from '@angular/core';\n\n/**\n * @description\n *\n * Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```\n * <form ngNativeValidate></form>\n * ```\n *\n * @publicApi\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n host: {'novalidate': ''},\n})\nexport class NgNoValidate {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule, Type} from '@angular/core';\n\nimport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nimport {DefaultValueAccessor} from './directives/default_value_accessor';\nimport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nimport {NgForm} from './directives/ng_form';\nimport {NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nimport {NgModel} from './directives/ng_model';\nimport {NgModelGroup} from './directives/ng_model_group';\nimport {NgNoValidate} from './directives/ng_no_validate_directive';\nimport {NumberValueAccessor} from './directives/number_value_accessor';\nimport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nimport {RangeValueAccessor} from './directives/range_value_accessor';\nimport {FormControlDirective} from './directives/reactive_directives/form_control_directive';\nimport {FormControlName} from './directives/reactive_directives/form_control_name';\nimport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nimport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nimport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nimport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\nimport {CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator} from './directives/validators';\n\nexport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nexport {ControlValueAccessor} from './directives/control_value_accessor';\nexport {DefaultValueAccessor} from './directives/default_value_accessor';\nexport {NgControl} from './directives/ng_control';\nexport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nexport {NgForm} from './directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING, NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nexport {NgModel} from './directives/ng_model';\nexport {NgModelGroup} from './directives/ng_model_group';\nexport {NumberValueAccessor} from './directives/number_value_accessor';\nexport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nexport {RangeValueAccessor} from './directives/range_value_accessor';\nexport {FormControlDirective, NG_MODEL_WITH_FORM_CONTROL_WARNING} from './directives/reactive_directives/form_control_directive';\nexport {FormControlName} from './directives/reactive_directives/form_control_name';\nexport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nexport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nexport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nexport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\n\nexport const SHARED_FORM_DIRECTIVES: Type<any>[] = [\n NgNoValidate,\n NgSelectOption,\n NgSelectMultipleOption,\n DefaultValueAccessor,\n NumberValueAccessor,\n RangeValueAccessor,\n CheckboxControlValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n NgControlStatus,\n NgControlStatusGroup,\n RequiredValidator,\n MinLengthValidator,\n MaxLengthValidator,\n PatternValidator,\n CheckboxRequiredValidator,\n EmailValidator,\n];\n\nexport const TEMPLATE_DRIVEN_DIRECTIVES: Type<any>[] =\n [NgModel, NgModelGroup, NgForm, NgFormSelectorWarning];\n\nexport const REACTIVE_DRIVEN_DIRECTIVES: Type<any>[] =\n [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n\n/**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\n@NgModule({\n declarations: SHARED_FORM_DIRECTIVES,\n exports: SHARED_FORM_DIRECTIVES,\n})\nexport class InternalFormsSharedModule {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModuleWithProviders, NgModule} from '@angular/core';\n\nimport {InternalFormsSharedModule, NG_FORM_SELECTOR_WARNING, NG_MODEL_WITH_FORM_CONTROL_WARNING, REACTIVE_DRIVEN_DIRECTIVES, TEMPLATE_DRIVEN_DIRECTIVES} from './directives';\nimport {RadioControlRegistry} from './directives/radio_control_value_accessor';\nimport {FormBuilder} from './form_builder';\n\n/**\n * Exports the required providers and directives for template-driven forms,\n * making them available for import by NgModules that import this module.\n *\n * @see [Forms Guide](/guide/forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n providers: [RadioControlRegistry],\n exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n})\nexport class FormsModule {\n /**\n * @description\n * Provides options for configuring the template-driven forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnDeprecatedNgFormSelector` Configures when to emit a warning when the deprecated\n * `ngForm` selector is used.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnDeprecatedNgFormSelector?: 'never' | 'once' | 'always',\n }): ModuleWithProviders<FormsModule> {\n return {\n ngModule: FormsModule,\n providers:\n [{provide: NG_FORM_SELECTOR_WARNING, useValue: opts.warnOnDeprecatedNgFormSelector}]\n };\n }\n}\n\n/**\n * Exports the required infrastructure and directives for reactive forms,\n * making them available for import by NgModules that import this module.\n * @see [Forms](guide/reactive-forms)\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n providers: [FormBuilder, RadioControlRegistry],\n exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n})\nexport class ReactiveFormsModule {\n /**\n * @description\n * Provides options for configuring the reactive forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`\n * binding is used with reactive form directives.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnNgModelWithFormControl: 'never' | 'once' | 'always'\n }): ModuleWithProviders<ReactiveFormsModule> {\n return {\n ngModule: ReactiveFormsModule,\n providers: [{\n provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,\n useValue: opts.warnOnNgModelWithFormControl\n }]\n };\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * This module is used for handling user input, by defining and building a `FormGroup` that\n * consists of `FormControl` objects, and mapping them onto the DOM. `FormControl`\n * objects can then be used to read information from the form DOM elements.\n *\n * Forms providers are not included in default providers; you must import these providers\n * explicitly.\n */\n\n\nexport {AbstractControlDirective} from './directives/abstract_control_directive';\nexport {AbstractFormGroupDirective} from './directives/abstract_form_group_directive';\nexport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nexport {ControlContainer} from './directives/control_container';\nexport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './directives/control_value_accessor';\nexport {COMPOSITION_BUFFER_MODE, DefaultValueAccessor} from './directives/default_value_accessor';\nexport {Form} from './directives/form_interface';\nexport {NgControl} from './directives/ng_control';\nexport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nexport {NgForm} from './directives/ng_form';\nexport {NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nexport {NgModel} from './directives/ng_model';\nexport {NgModelGroup} from './directives/ng_model_group';\nexport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nexport {FormControlDirective} from './directives/reactive_directives/form_control_directive';\nexport {FormControlName} from './directives/reactive_directives/form_control_name';\nexport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nexport {FormArrayName} from './directives/reactive_directives/form_group_name';\nexport {FormGroupName} from './directives/reactive_directives/form_group_name';\nexport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nexport {SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\nexport {AsyncValidator, AsyncValidatorFn, CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator, ValidationErrors, Validator, ValidatorFn} from './directives/validators';\nexport {FormBuilder} from './form_builder';\nexport {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup} from './model';\nexport {NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators} from './validators';\nexport {VERSION} from './version';\n\nexport * from './form_providers';\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\nexport * from './src/forms';\n\n// This file only reexports content of the `src` folder. Keep it that way.\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// This file is not used to build this module. It is only used during editing\n// by the TypeScript language service and during build for verification. `ngc`\n// replaces this file with production index.ts when it rewrites private symbol\n// names.\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {InternalFormsSharedModule as ɵangular_packages_forms_forms_bc,REACTIVE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_bb,SHARED_FORM_DIRECTIVES as ɵangular_packages_forms_forms_z,TEMPLATE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_ba} from './src/directives';\nexport {CHECKBOX_VALUE_ACCESSOR as ɵangular_packages_forms_forms_a} from './src/directives/checkbox_value_accessor';\nexport {DEFAULT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_b} from './src/directives/default_value_accessor';\nexport {AbstractControlStatus as ɵangular_packages_forms_forms_c,ngControlStatusHost as ɵangular_packages_forms_forms_d} from './src/directives/ng_control_status';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_e} from './src/directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING as ɵangular_packages_forms_forms_f} from './src/directives/ng_form_selector_warning';\nexport {formControlBinding as ɵangular_packages_forms_forms_g} from './src/directives/ng_model';\nexport {modelGroupProvider as ɵangular_packages_forms_forms_h} from './src/directives/ng_model_group';\nexport {NgNoValidate as ɵangular_packages_forms_forms_bh} from './src/directives/ng_no_validate_directive';\nexport {NUMBER_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bd,NumberValueAccessor as ɵangular_packages_forms_forms_be} from './src/directives/number_value_accessor';\nexport {RADIO_VALUE_ACCESSOR as ɵangular_packages_forms_forms_i,RadioControlRegistry as ɵangular_packages_forms_forms_j} from './src/directives/radio_control_value_accessor';\nexport {RANGE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bf,RangeValueAccessor as ɵangular_packages_forms_forms_bg} from './src/directives/range_value_accessor';\nexport {NG_MODEL_WITH_FORM_CONTROL_WARNING as ɵangular_packages_forms_forms_k,formControlBinding as ɵangular_packages_forms_forms_l} from './src/directives/reactive_directives/form_control_directive';\nexport {controlNameBinding as ɵangular_packages_forms_forms_m} from './src/directives/reactive_directives/form_control_name';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_n} from './src/directives/reactive_directives/form_group_directive';\nexport {formArrayNameProvider as ɵangular_packages_forms_forms_p,formGroupNameProvider as ɵangular_packages_forms_forms_o} from './src/directives/reactive_directives/form_group_name';\nexport {SELECT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_q} from './src/directives/select_control_value_accessor';\nexport {NgSelectMultipleOption as ɵangular_packages_forms_forms_s,SELECT_MULTIPLE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_r} from './src/directives/select_multiple_control_value_accessor';\nexport {CHECKBOX_REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_u,EMAIL_VALIDATOR as ɵangular_packages_forms_forms_v,MAX_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_x,MIN_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_w,PATTERN_VALIDATOR as ɵangular_packages_forms_forms_y,REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_t} from './src/directives/validators';"],"names":["tslib_1.__extends","InjectionToken","forkJoin","map","isPromise","from","isObservable","forwardRef","Directive","Renderer2","ElementRef","getDOM","tslib_1.__param","Optional","Inject","Injectable","tslib_1.__decorate","Input","Injector","Examples","looseIdentical","tslib_1.__values","Host","_buildValueString","_extractId","isDevMode","Self","EventEmitter","SkipSelf","resolvedPromise","Output","formControlBinding","formDirectiveProvider","Version","NgModule"],"mappings":"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"}
\ No newline at end of file

bundles/forms.umd.min.js

@@ -1,5 +1,5 @@
/**
- * @license Angular v7.2.7
+ * @license Angular v7.2.8
* (c) 2010-2019 Google LLC. https://angular.io/
* License: MIT
*/
@@ -106,7 +106,7 @@
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
-function a(t){return void 0!==t.asyncValidators||void 0!==t.validators||void 0!==t.updateOn}(e)?(o=null!=e.validators?e.validators:null,r=null!=e.asyncValidators?e.asyncValidators:null,i=null!=e.updateOn?e.updateOn:void 0):(o=null!=e.validator?e.validator:null,r=null!=e.asyncValidator?e.asyncValidator:null)),new Ot(n,{asyncValidators:r,updateOn:i,validators:o})},t.prototype.control=function(t,e,n){return new Ct(t,e,n)},t.prototype.array=function(t,e,n){var o=this,r=t.map(function(t){return o._createControl(t)});return new Vt(r,e,n)},t.prototype._reduceControls=function(t){var e=this,n={};return Object.keys(t).forEach(function(o){n[o]=e._createControl(t[o])}),n},t.prototype._createControl=function(t){return t instanceof Ct||t instanceof Ot||t instanceof Vt?t:Array.isArray(t)?this.control(t[0],t.length>1?t[1]:null,t.length>2?t[2]:null):this.control(t)},l([e.Injectable()],t)}(),ae=new e.Version("7.2.7"),se=function(){return l([e.Directive({selector:"form:not([ngNoForm]):not([ngNativeValidate])",host:{novalidate:""}})],function t(){})}(),ue=[se,z,K,j,x,G,w,H,J,T,gt,mt,Yt,te,ne,re,Jt,Qt],le=[kt,Mt,At,St],ce=[Tt,Gt,Ht,Wt,Lt],pe=function(){return l([e.NgModule({declarations:ue,exports:ue})],function t(){})}(),fe=function(){function t(){}var n;return n=t,t.withConfig=function(t){return{ngModule:n,providers:[{provide:jt,useValue:t.warnOnDeprecatedNgFormSelector}]}},n=l([e.NgModule({declarations:le,providers:[F],exports:[pe,le]})],t)}(),he=function(){function t(){}var n;return n=t,t.withConfig=function(t){return{ngModule:n,providers:[{provide:Nt,useValue:t.warnOnNgModelWithFormControl}]}},n=l([e.NgModule({declarations:[ce],providers:[ie,F],exports:[pe,ce]})],t)}();
+function a(t){return void 0!==t.asyncValidators||void 0!==t.validators||void 0!==t.updateOn}(e)?(o=null!=e.validators?e.validators:null,r=null!=e.asyncValidators?e.asyncValidators:null,i=null!=e.updateOn?e.updateOn:void 0):(o=null!=e.validator?e.validator:null,r=null!=e.asyncValidator?e.asyncValidator:null)),new Ot(n,{asyncValidators:r,updateOn:i,validators:o})},t.prototype.control=function(t,e,n){return new Ct(t,e,n)},t.prototype.array=function(t,e,n){var o=this,r=t.map(function(t){return o._createControl(t)});return new Vt(r,e,n)},t.prototype._reduceControls=function(t){var e=this,n={};return Object.keys(t).forEach(function(o){n[o]=e._createControl(t[o])}),n},t.prototype._createControl=function(t){return t instanceof Ct||t instanceof Ot||t instanceof Vt?t:Array.isArray(t)?this.control(t[0],t.length>1?t[1]:null,t.length>2?t[2]:null):this.control(t)},l([e.Injectable()],t)}(),ae=new e.Version("7.2.8"),se=function(){return l([e.Directive({selector:"form:not([ngNoForm]):not([ngNativeValidate])",host:{novalidate:""}})],function t(){})}(),ue=[se,z,K,j,x,G,w,H,J,T,gt,mt,Yt,te,ne,re,Jt,Qt],le=[kt,Mt,At,St],ce=[Tt,Gt,Ht,Wt,Lt],pe=function(){return l([e.NgModule({declarations:ue,exports:ue})],function t(){})}(),fe=function(){function t(){}var n;return n=t,t.withConfig=function(t){return{ngModule:n,providers:[{provide:jt,useValue:t.warnOnDeprecatedNgFormSelector}]}},n=l([e.NgModule({declarations:le,providers:[F],exports:[pe,le]})],t)}(),he=function(){function t(){}var n;return n=t,t.withConfig=function(t){return{ngModule:n,providers:[{provide:Nt,useValue:t.warnOnNgModelWithFormControl}]}},n=l([e.NgModule({declarations:[ce],providers:[ie,F],exports:[pe,ce]})],t)}();
/**
* @license
* Copyright Google Inc. All Rights Reserved.

bundles/forms.umd.min.js.map

@@ -1 +1 @@
-{"version":3,"sources":["packages/forms/forms.umd.js"],"names":["global","factory","exports","module","require","define","amd","self","ng","forms","core","rxjs","operators","platformBrowser","this","AbstractControlDirective","Object","defineProperty","prototype","get","control","value","enumerable","configurable","valid","invalid","pending","disabled","enabled","errors","pristine","dirty","touched","status","untouched","statusChanges","valueChanges","reset","undefined","hasError","errorCode","path","getError","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","constructor","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__values","o","m","Symbol","iterator","next","done","__read","e","ar","push","error","ControlContainer","_super","isEmptyInputValue","NG_VALIDATORS","InjectionToken","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","Validators","min","parseFloat","isNaN","actual","max","required","requiredTrue","email","test","minLength","minlength","requiredLength","actualLength","maxLength","maxlength","pattern","regexStr","charAt","regex","RegExp","toString","requiredPattern","actualValue","nullValidator","compose","validators","presentValidators","filter","isPresent","_mergeErrors","_executeValidators","map","v","composeAsync","observables","_executeAsyncValidators","toObservable","forkJoin","pipe","obs","ɵisPromise","from","ɵisObservable","Error","arrayOfErrors","res","reduce","keys","NG_VALUE_ACCESSOR","CHECKBOX_VALUE_ACCESSOR","provide","useExisting","forwardRef","CheckboxControlValueAccessor","multi","_renderer","_elementRef","onChange","_","onTouched","writeValue","setProperty","nativeElement","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","Directive","selector","host","(change)","(blur)","providers","Renderer2","ElementRef","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","COMPOSITION_BUFFER_MODE","_compositionMode","_composing","_isAndroid","userAgent","ɵgetDOM","getUserAgent","toLowerCase","_handleInput","_compositionStart","_compositionEnd","(input)","(compositionstart)","(compositionend)","Optional","Inject","Boolean","normalizeValidator","validator","validate","normalizeAsyncValidator","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","unimplemented","NgControl","_this","_parent","name","valueAccessor","_rawValidators","_rawAsyncValidators","RADIO_VALUE_ACCESSOR","RadioControlValueAccessor","RadioControlRegistry","_accessors","add","accessor","remove","splice","select","forEach","_isSameGroup","fireUncheck","controlPair","_control","Injectable","_registry","_injector","ngOnInit","_checkName","ngOnDestroy","_state","_fn","formControlName","_throwNameError","Input","String","Injector","RANGE_VALUE_ACCESSOR","RangeValueAccessor","FormErrorExamples","ReactiveErrors","controlParentException","ngModelGroupException","missingFormException","groupParentException","arrayParentException","disabledAttrWarning","console","warn","ngModelWarning","directiveName","SELECT_VALUE_ACCESSOR","SelectControlValueAccessor","_buildValueString","id","slice","_optionMap","Map","_idCounter","_compareWith","ɵlooseIdentical","set","JSON","stringify","_getOptionId","valueString","_getOptionValue","_registerOption","e_1","_a","_b","_c","e_1_1","return","_extractId","split","has","Function","NgSelectOption","_element","_select","_setElementValue","delete","Host","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","_buildValueString$1","optionSelectedStateSetter","isArray","ids_1","opt","_setSelected","indexOf","selected","options","selectedOptions","item","val","_value","_extractId$1","NgSelectMultipleOption","controlPath","parent","__spread","concat","setUpControl","dir","_throwError","asyncValidator","setUpViewChangePipeline","newValue","_pendingValue","_pendingChange","_pendingDirty","updateOn","updateControl","setUpModelChangePipeline","emitModelEvent","viewToModelUpdate","setUpBlurPipeline","_pendingTouched","markAsTouched","registerOnDisabledChange","registerOnValidatorChange","updateValueAndValidity","markAsDirty","setValue","emitModelToViewChange","setUpFormContainer","_noControlError","message","messageEnd","join","composeValidators","composeAsyncValidators","isPropertyUpdated","changes","viewModel","change","isFirstChange","currentValue","BUILTIN_ACCESSORS","syncPendingControls","form","directives","_syncPendingControls","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","isBuiltInAccessor","some","a","removeDir","list","el","index","_ngModelWarning","type","instance","warningConfig","isDevMode","_ngModelWarningSentOnce","_ngModelWarningSent","AbstractFormGroupDirective","_checkParentType","formDirective","addFormGroup","removeFormGroup","getFormGroup","_validators","_asyncValidators","AbstractControlStatus","cd","_cd","ngControlStatusHost","[class.ng-untouched]","[class.ng-touched]","[class.ng-pristine]","[class.ng-dirty]","[class.ng-valid]","[class.ng-invalid]","[class.ng-pending]","NgControlStatus","Self","NgControlStatusGroup","coerceToValidator","validatorOrOpts","isOptionsObj","coerceToAsyncValidator","origAsyncValidator","asyncValidators","AbstractControl","_onCollectionChange","_onDisabledChange","_updateOn","setValidators","newValidator","setAsyncValidators","clearValidators","clearAsyncValidators","opts","onlySelf","markAsUntouched","_forEachChild","_updateTouched","markAsPristine","_updatePristine","markAsPending","emitEvent","emit","disable","_updateValue","_updateAncestors","changeFn","enable","setParent","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","_updateTreeValidity","ctrl","_allControlsDisabled","_asyncValidationSubscription","subscribe","setErrors","unsubscribe","_updateControlsErrors","_find","delimiter","FormGroup","controls","FormArray","at","x","_initObservables","EventEmitter","_anyControlsHaveStatus","_anyControls","_anyControlsDirty","_anyControlsTouched","_isBoxedValue","formState","_registerOnCollectionChange","_setUpdateStrategy","FormControl","_onChange","_applyFormState","emitViewToModelChange","patchValue","condition","_clearChangeFns","cb","_setUpControls","registerControl","addControl","removeControl","setControl","contains","controlName","_checkAllValuesPresent","_throwIfControlMissing","getRawValue","_reduceChildren","acc","subtreeUpdated","updated","child","k","_reduceValue","initValue","_registerControl","insert","removeAt","e_2","e_2_1","formDirectiveProvider","NgForm","resolvedPromise","Promise","resolve","submitted","_directives","ngSubmit","ngAfterViewInit","then","container","_findContainer","getControl","group","updateModel","onSubmit","$event","onReset","resetForm","pop","(submit)","(reset)","outputs","exportAs","TemplateDrivenErrors","modelParentException","formGroupNameException","missingNameException","modelGroupParentException","ngFormWarning","NG_FORM_SELECTOR_WARNING","NgFormSelectorWarning","NgFormSelectorWarning_1","_ngFormWarning","modelGroupProvider","NgModelGroup","NgModelGroup_1","SkipSelf","formControlBinding","NgModel","resolvedPromise$1","_registered","update","ngOnChanges","_checkForErrors","_setUpControl","_updateDisabled","model","_isStandalone","_setUpStandalone","standalone","disabledValue","Output","NG_MODEL_WITH_FORM_CONTROL_WARNING","formControlBinding$1","FormControlDirective","_ngModelWarningConfig","FormControlDirective_1","_isControlChanged","formDirectiveProvider$1","FormGroupDirective","_checkFormPresent","_updateValidators","_updateDomValue","_updateRegistrations","addFormArray","removeFormArray","getFormArray","newCtrl","cleanUpControl","_oldForm","sync","async","formGroupNameProvider","FormGroupName","_hasInvalidParent","formArrayNameProvider","FormArrayName","controlNameBinding","FormControlName","_added","FormControlName_1","REQUIRED_VALIDATOR","RequiredValidator","CHECKBOX_REQUIRED_VALIDATOR","CheckboxRequiredValidator","_required","[attr.required]","EMAIL_VALIDATOR","EmailValidator","_enabled","MIN_LENGTH_VALIDATOR","MinLengthValidator","_createValidator","_validator","parseInt","[attr.minlength]","MAX_LENGTH_VALIDATOR","MaxLengthValidator","[attr.maxlength]","PATTERN_VALIDATOR","PatternValidator","[attr.pattern]","FormBuilder","controlsConfig","_reduceControls","isAbstractControlOptions","array","_createControl","controlConfig","VERSION","Version","NgNoValidate","novalidate","SHARED_FORM_DIRECTIVES","TEMPLATE_DRIVEN_DIRECTIVES","REACTIVE_DRIVEN_DIRECTIVES","InternalFormsSharedModule","NgModule","declarations","FormsModule","FormsModule_1","withConfig","ngModule","useValue","warnOnDeprecatedNgFormSelector","ReactiveFormsModule","ReactiveFormsModule_1","warnOnNgModelWithFormControl","ɵangular_packages_forms_forms_bc","ɵangular_packages_forms_forms_bb","ɵangular_packages_forms_forms_z","ɵangular_packages_forms_forms_ba","ɵangular_packages_forms_forms_a","ɵangular_packages_forms_forms_b","ɵangular_packages_forms_forms_c","ɵangular_packages_forms_forms_d","ɵangular_packages_forms_forms_e","ɵangular_packages_forms_forms_f","ɵangular_packages_forms_forms_g","ɵangular_packages_forms_forms_h","ɵangular_packages_forms_forms_bh","ɵangular_packages_forms_forms_bd","ɵangular_packages_forms_forms_be","ɵangular_packages_forms_forms_i","ɵangular_packages_forms_forms_j","ɵangular_packages_forms_forms_bf","ɵangular_packages_forms_forms_bg","ɵangular_packages_forms_forms_k","ɵangular_packages_forms_forms_l","ɵangular_packages_forms_forms_m","ɵangular_packages_forms_forms_n","ɵangular_packages_forms_forms_p","ɵangular_packages_forms_forms_o","ɵangular_packages_forms_forms_q","ɵangular_packages_forms_forms_s","ɵangular_packages_forms_forms_r","ɵangular_packages_forms_forms_u","ɵangular_packages_forms_forms_v","ɵangular_packages_forms_forms_x","ɵangular_packages_forms_forms_w","ɵangular_packages_forms_forms_y","ɵangular_packages_forms_forms_t"],"mappings":"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","sourcesContent":["/**\n * @license Angular v7.2.7\n * (c) 2010-2019 Google LLC. https://angular.io/\n * License: MIT\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('rxjs/operators'), require('@angular/platform-browser')) :\n typeof define === 'function' && define.amd ? define('@angular/forms', ['exports', '@angular/core', 'rxjs', 'rxjs/operators', '@angular/platform-browser'], factory) :\n (global = global || self, factory((global.ng = global.ng || {}, global.ng.forms = {}), global.ng.core, global.rxjs, global.rxjs.operators, global.ng.platformBrowser));\n}(this, function (exports, core, rxjs, operators, platformBrowser) { 'use strict';\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n * Base class for control directives.\n *\n * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.\n *\n * @publicApi\n */\n var AbstractControlDirective = /** @class */ (function () {\n function AbstractControlDirective() {\n }\n Object.defineProperty(AbstractControlDirective.prototype, \"value\", {\n /**\n * @description\n * Reports the value of the control if it is present, otherwise null.\n */\n get: function () { return this.control ? this.control.value : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"valid\", {\n /**\n * @description\n * Reports whether the control is valid. A control is considered valid if no\n * validation errors exist with the current value.\n * If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.valid : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"invalid\", {\n /**\n * @description\n * Reports whether the control is invalid, meaning that an error exists in the input value.\n * If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.invalid : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"pending\", {\n /**\n * @description\n * Reports whether a control is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value. If the control is not present, null is\n * returned.\n */\n get: function () { return this.control ? this.control.pending : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"disabled\", {\n /**\n * @description\n * Reports whether the control is disabled, meaning that the control is disabled\n * in the UI and is exempt from validation checks and excluded from aggregate\n * values of ancestor controls. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.disabled : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"enabled\", {\n /**\n * @description\n * Reports whether the control is enabled, meaning that the control is included in ancestor\n * calculations of validity or value. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.enabled : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"errors\", {\n /**\n * @description\n * Reports the control's validation errors. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.errors : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"pristine\", {\n /**\n * @description\n * Reports whether the control is pristine, meaning that the user has not yet changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.pristine : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"dirty\", {\n /**\n * @description\n * Reports whether the control is dirty, meaning that the user has changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.dirty : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"touched\", {\n /**\n * @description\n * Reports whether the control is touched, meaning that the user has triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.touched : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"status\", {\n /**\n * @description\n * Reports the validation status of the control. Possible values include:\n * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.\n * If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.status : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"untouched\", {\n /**\n * @description\n * Reports whether the control is untouched, meaning that the user has not yet triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.untouched : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"statusChanges\", {\n /**\n * @description\n * Returns a multicasting observable that emits a validation status whenever it is\n * calculated for the control. If the control is not present, null is returned.\n */\n get: function () {\n return this.control ? this.control.statusChanges : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"valueChanges\", {\n /**\n * @description\n * Returns a multicasting observable of value changes for the control that emits every time the\n * value of the control changes in the UI or programmatically.\n * If the control is not present, null is returned.\n */\n get: function () {\n return this.control ? this.control.valueChanges : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"path\", {\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get: function () { return null; },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Resets the control with the provided value if the control is present.\n */\n AbstractControlDirective.prototype.reset = function (value) {\n if (value === void 0) { value = undefined; }\n if (this.control)\n this.control.reset(value);\n };\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n AbstractControlDirective.prototype.hasError = function (errorCode, path) {\n return this.control ? this.control.hasError(errorCode, path) : false;\n };\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n AbstractControlDirective.prototype.getError = function (errorCode, path) {\n return this.control ? this.control.getError(errorCode, path) : null;\n };\n return AbstractControlDirective;\n }());\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\r\n /* global Reflect, Promise */\r\n\r\n var extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n\r\n function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n }\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\r\n\r\n function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n }\r\n\r\n function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n }\r\n\r\n function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n }\r\n\r\n function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n }\r\n\r\n function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n }\r\n\r\n function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n }\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n * A base class for directives that contain multiple registered instances of `NgControl`.\n * Only used by the forms module.\n *\n * @publicApi\n */\n var ControlContainer = /** @class */ (function (_super) {\n __extends(ControlContainer, _super);\n function ControlContainer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ControlContainer.prototype, \"formDirective\", {\n /**\n * @description\n * The top-level form directive for the control.\n */\n get: function () { return null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ControlContainer.prototype, \"path\", {\n /**\n * @description\n * The path to this group.\n */\n get: function () { return null; },\n enumerable: true,\n configurable: true\n });\n return ControlContainer;\n }(AbstractControlDirective));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function isEmptyInputValue(value) {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n }\n /**\n * @description\n * An `InjectionToken` for registering additional synchronous validators used with `AbstractControl`s.\n *\n * @see `NG_ASYNC_VALIDATORS`\n *\n * @usageNotes\n *\n * ### Providing a custom validator\n *\n * The following example registers a custom validator directive. Adding the validator to the\n * existing collection of validators requires the `multi: true` option.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors | null {\n * return { 'custom': true };\n * }\n * }\n * ```\n *\n * @publicApi\n */\n var NG_VALIDATORS = new core.InjectionToken('NgValidators');\n /**\n * @description\n * An `InjectionToken` for registering additional asynchronous validators used with `AbstractControl`s.\n *\n * @see `NG_VALIDATORS`\n *\n * @publicApi\n */\n var NG_ASYNC_VALIDATORS = new core.InjectionToken('NgAsyncValidators');\n var EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n /**\n * @description\n * Provides a set of built-in validators that can be used by form controls.\n *\n * A validator is a function that processes a `FormControl` or collection of\n * controls and returns an error map or null. A null map means that validation has passed.\n *\n * @see [Form Validation](/guide/form-validation)\n *\n * @publicApi\n */\n var Validators = /** @class */ (function () {\n function Validators() {\n }\n /**\n * @description\n * Validator that requires the control's value to be greater than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a minimum of 3\n *\n * ```typescript\n * const control = new FormControl(2, Validators.min(3));\n *\n * console.log(control.errors); // {min: {min: 3, actual: 2}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `min` property if the validation check fails, otherwise `null`.\n *\n */\n Validators.min = function (min) {\n return function (control) {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n var value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value < min ? { 'min': { 'min': min, 'actual': control.value } } : null;\n };\n };\n /**\n * @description\n * Validator that requires the control's value to be less than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a maximum of 15\n *\n * ```typescript\n * const control = new FormControl(16, Validators.max(15));\n *\n * console.log(control.errors); // {max: {max: 15, actual: 16}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `max` property if the validation check fails, otherwise `null`.\n *\n */\n Validators.max = function (max) {\n return function (control) {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n return null; // don't validate empty values to allow optional controls\n }\n var value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n return !isNaN(value) && value > max ? { 'max': { 'max': max, 'actual': control.value } } : null;\n };\n };\n /**\n * @description\n * Validator that requires the control have a non-empty value.\n *\n * @usageNotes\n *\n * ### Validate that the field is non-empty\n *\n * ```typescript\n * const control = new FormControl('', Validators.required);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map with the `required` property\n * if the validation check fails, otherwise `null`.\n *\n */\n Validators.required = function (control) {\n return isEmptyInputValue(control.value) ? { 'required': true } : null;\n };\n /**\n * @description\n * Validator that requires the control's value be true. This validator is commonly\n * used for required checkboxes.\n *\n * @usageNotes\n *\n * ### Validate that the field value is true\n *\n * ```typescript\n * const control = new FormControl('', Validators.requiredTrue);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map that contains the `required` property\n * set to `true` if the validation check fails, otherwise `null`.\n */\n Validators.requiredTrue = function (control) {\n return control.value === true ? null : { 'required': true };\n };\n /**\n * @description\n * Validator that requires the control's value pass an email validation test.\n *\n * @usageNotes\n *\n * ### Validate that the field matches a valid email pattern\n *\n * ```typescript\n * const control = new FormControl('bad@', Validators.email);\n *\n * console.log(control.errors); // {email: true}\n * ```\n *\n * @returns An error map with the `email` property\n * if the validation check fails, otherwise `null`.\n *\n */\n Validators.email = function (control) {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n return EMAIL_REGEXP.test(control.value) ? null : { 'email': true };\n };\n /**\n * @description\n * Validator that requires the length of the control's value to be greater than or equal\n * to the provided minimum length. This validator is also provided by default if you use the\n * the HTML5 `minlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has a minimum of 3 characters\n *\n * ```typescript\n * const control = new FormControl('ng', Validators.minLength(3));\n *\n * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}\n * ```\n *\n * ```html\n * <input minlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `minlength` if the validation check fails, otherwise `null`.\n */\n Validators.minLength = function (minLength) {\n return function (control) {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n var length = control.value ? control.value.length : 0;\n return length < minLength ?\n { 'minlength': { 'requiredLength': minLength, 'actualLength': length } } :\n null;\n };\n };\n /**\n * @description\n * Validator that requires the length of the control's value to be less than or equal\n * to the provided maximum length. This validator is also provided by default if you use the\n * the HTML5 `maxlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has maximum of 5 characters\n *\n * ```typescript\n * const control = new FormControl('Angular', Validators.maxLength(5));\n *\n * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}\n * ```\n *\n * ```html\n * <input maxlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `maxlength` property if the validation check fails, otherwise `null`.\n */\n Validators.maxLength = function (maxLength) {\n return function (control) {\n var length = control.value ? control.value.length : 0;\n return length > maxLength ?\n { 'maxlength': { 'requiredLength': maxLength, 'actualLength': length } } :\n null;\n };\n };\n /**\n * @description\n * Validator that requires the control's value to match a regex pattern. This validator is also\n * provided by default if you use the HTML5 `pattern` attribute.\n *\n * Note that if a Regexp is provided, the Regexp is used as is to test the values. On the other\n * hand, if a string is passed, the `^` character is prepended and the `$` character is\n * appended to the provided string (if not already present), and the resulting regular\n * expression is used to test the values.\n *\n * @usageNotes\n *\n * ### Validate that the field only contains letters or spaces\n *\n * ```typescript\n * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));\n *\n * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}\n * ```\n *\n * ```html\n * <input pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `pattern` property if the validation check fails, otherwise `null`.\n */\n Validators.pattern = function (pattern) {\n if (!pattern)\n return Validators.nullValidator;\n var regex;\n var regexStr;\n if (typeof pattern === 'string') {\n regexStr = '';\n if (pattern.charAt(0) !== '^')\n regexStr += '^';\n regexStr += pattern;\n if (pattern.charAt(pattern.length - 1) !== '$')\n regexStr += '$';\n regex = new RegExp(regexStr);\n }\n else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return function (control) {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n var value = control.value;\n return regex.test(value) ? null :\n { 'pattern': { 'requiredPattern': regexStr, 'actualValue': value } };\n };\n };\n /**\n * @description\n * Validator that performs no operation.\n */\n Validators.nullValidator = function (control) { return null; };\n Validators.compose = function (validators) {\n if (!validators)\n return null;\n var presentValidators = validators.filter(isPresent);\n if (presentValidators.length == 0)\n return null;\n return function (control) {\n return _mergeErrors(_executeValidators(control, presentValidators));\n };\n };\n /**\n * @description\n * Compose multiple async validators into a single function that returns the union\n * of the individual error objects for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error objects of the async validators if the validation check fails, otherwise `null`.\n */\n Validators.composeAsync = function (validators) {\n if (!validators)\n return null;\n var presentValidators = validators.filter(isPresent);\n if (presentValidators.length == 0)\n return null;\n return function (control) {\n var observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n return rxjs.forkJoin(observables).pipe(operators.map(_mergeErrors));\n };\n };\n return Validators;\n }());\n function isPresent(o) {\n return o != null;\n }\n function toObservable(r) {\n var obs = core.ɵisPromise(r) ? rxjs.from(r) : r;\n if (!(core.ɵisObservable(obs))) {\n throw new Error(\"Expected validator to return Promise or Observable.\");\n }\n return obs;\n }\n function _executeValidators(control, validators) {\n return validators.map(function (v) { return v(control); });\n }\n function _executeAsyncValidators(control, validators) {\n return validators.map(function (v) { return v(control); });\n }\n function _mergeErrors(arrayOfErrors) {\n var res = arrayOfErrors.reduce(function (res, errors) {\n return errors != null ? __assign({}, res, errors) : res;\n }, {});\n return Object.keys(res).length === 0 ? null : res;\n }\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * Used to provide a `ControlValueAccessor` for form controls.\n *\n * See `DefaultValueAccessor` for how to implement one.\n *\n * @publicApi\n */\n var NG_VALUE_ACCESSOR = new core.InjectionToken('NgValueAccessor');\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return CheckboxControlValueAccessor; }),\n multi: true,\n };\n /**\n * @description\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\n * element.\n *\n * @usageNotes\n *\n * ### Using a checkbox with a reactive form.\n *\n * The following example shows how to use a checkbox with a reactive form.\n *\n * ```ts\n * const rememberLoginControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"checkbox\" [formControl]=\"rememberLoginControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var CheckboxControlValueAccessor = /** @class */ (function () {\n function CheckboxControlValueAccessor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n }\n /**\n * Sets the \"checked\" property on the input element.\n *\n * @param value The checked value\n */\n CheckboxControlValueAccessor.prototype.writeValue = function (value) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n CheckboxControlValueAccessor.prototype.registerOnChange = function (fn) { this.onChange = fn; };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n CheckboxControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n CheckboxControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n CheckboxControlValueAccessor = __decorate([\n core.Directive({\n selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: { '(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()' },\n providers: [CHECKBOX_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef])\n ], CheckboxControlValueAccessor);\n return CheckboxControlValueAccessor;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var DEFAULT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return DefaultValueAccessor; }),\n multi: true\n };\n /**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\n function _isAndroid() {\n var userAgent = platformBrowser.ɵgetDOM() ? platformBrowser.ɵgetDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n }\n /**\n * @description\n * Provide this token to control if form directives buffer IME input until\n * the \"compositionend\" event occurs.\n * @publicApi\n */\n var COMPOSITION_BUFFER_MODE = new core.InjectionToken('CompositionEventMode');\n /**\n * @description\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using the default value accessor\n *\n * The following example shows how to use an input element that activates the default value accessor\n * (in this case, a text field).\n *\n * ```ts\n * const firstNameControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"text\" [formControl]=\"firstNameControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var DefaultValueAccessor = /** @class */ (function () {\n function DefaultValueAccessor(_renderer, _elementRef, _compositionMode) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this._compositionMode = _compositionMode;\n /**\n * @description\n * The registered callback function called when an input event occurs on the input element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n /** Whether the user is creating a composition string (IME events). */\n this._composing = false;\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n DefaultValueAccessor.prototype.writeValue = function (value) {\n var normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n DefaultValueAccessor.prototype.registerOnChange = function (fn) { this.onChange = fn; };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n DefaultValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n DefaultValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n /** @internal */\n DefaultValueAccessor.prototype._handleInput = function (value) {\n if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n this.onChange(value);\n }\n };\n /** @internal */\n DefaultValueAccessor.prototype._compositionStart = function () { this._composing = true; };\n /** @internal */\n DefaultValueAccessor.prototype._compositionEnd = function (value) {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n };\n DefaultValueAccessor = __decorate([\n core.Directive({\n selector: 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n // TODO: vsavkin replace the above selector with the one below it once\n // https://github.com/angular/angular/issues/3011 is implemented\n // selector: '[ngModel],[formControl],[formControlName]',\n host: {\n '(input)': '$any(this)._handleInput($event.target.value)',\n '(blur)': 'onTouched()',\n '(compositionstart)': '$any(this)._compositionStart()',\n '(compositionend)': '$any(this)._compositionEnd($event.target.value)'\n },\n providers: [DEFAULT_VALUE_ACCESSOR]\n }),\n __param(2, core.Optional()), __param(2, core.Inject(COMPOSITION_BUFFER_MODE)),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef, Boolean])\n ], DefaultValueAccessor);\n return DefaultValueAccessor;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function normalizeValidator(validator) {\n if (validator.validate) {\n return function (c) { return validator.validate(c); };\n }\n else {\n return validator;\n }\n }\n function normalizeAsyncValidator(validator) {\n if (validator.validate) {\n return function (c) { return validator.validate(c); };\n }\n else {\n return validator;\n }\n }\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var NUMBER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return NumberValueAccessor; }),\n multi: true\n };\n /**\n * @description\n * The `ControlValueAccessor` for writing a number value and listening to number input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a number input with a reactive form.\n *\n * The following example shows how to use a number input with a reactive form.\n *\n * ```ts\n * const totalCountControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"number\" [formControl]=\"totalCountControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n var NumberValueAccessor = /** @class */ (function () {\n function NumberValueAccessor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n }\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n NumberValueAccessor.prototype.writeValue = function (value) {\n // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n var normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n NumberValueAccessor.prototype.registerOnChange = function (fn) {\n this.onChange = function (value) { fn(value == '' ? null : parseFloat(value)); };\n };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n NumberValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n NumberValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n NumberValueAccessor = __decorate([\n core.Directive({\n selector: 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [NUMBER_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef])\n ], NumberValueAccessor);\n return NumberValueAccessor;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function unimplemented() {\n throw new Error('unimplemented');\n }\n /**\n * @description\n * A base class that all control `FormControl`-based directives extend. It binds a `FormControl`\n * object to a DOM element.\n *\n * @publicApi\n */\n var NgControl = /** @class */ (function (_super) {\n __extends(NgControl, _super);\n function NgControl() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @description\n * The parent form for the control.\n *\n * @internal\n */\n _this._parent = null;\n /**\n * @description\n * The name for the control\n */\n _this.name = null;\n /**\n * @description\n * The value accessor for the control\n */\n _this.valueAccessor = null;\n /**\n * @description\n * The uncomposed array of synchronous validators for the control\n *\n * @internal\n */\n _this._rawValidators = [];\n /**\n * @description\n * The uncomposed array of async validators for the control\n *\n * @internal\n */\n _this._rawAsyncValidators = [];\n return _this;\n }\n Object.defineProperty(NgControl.prototype, \"validator\", {\n /**\n * @description\n * The registered synchronous validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get: function () { return unimplemented(); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgControl.prototype, \"asyncValidator\", {\n /**\n * @description\n * The registered async validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get: function () { return unimplemented(); },\n enumerable: true,\n configurable: true\n });\n return NgControl;\n }(AbstractControlDirective));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var RADIO_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return RadioControlValueAccessor; }),\n multi: true\n };\n /**\n * @description\n * Class used by Angular to track radio buttons. For internal use only.\n */\n var RadioControlRegistry = /** @class */ (function () {\n function RadioControlRegistry() {\n this._accessors = [];\n }\n /**\n * @description\n * Adds a control to the internal registry. For internal use only.\n */\n RadioControlRegistry.prototype.add = function (control, accessor) {\n this._accessors.push([control, accessor]);\n };\n /**\n * @description\n * Removes a control from the internal registry. For internal use only.\n */\n RadioControlRegistry.prototype.remove = function (accessor) {\n for (var i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n };\n /**\n * @description\n * Selects a radio button. For internal use only.\n */\n RadioControlRegistry.prototype.select = function (accessor) {\n var _this = this;\n this._accessors.forEach(function (c) {\n if (_this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n };\n RadioControlRegistry.prototype._isSameGroup = function (controlPair, accessor) {\n if (!controlPair[0].control)\n return false;\n return controlPair[0]._parent === accessor._control._parent &&\n controlPair[1].name === accessor.name;\n };\n RadioControlRegistry = __decorate([\n core.Injectable()\n ], RadioControlRegistry);\n return RadioControlRegistry;\n }());\n /**\n * @description\n * The `ControlValueAccessor` for writing radio control values and listening to radio control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using radio buttons with reactive form directives\n *\n * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in\n * a reactive form, radio buttons in the same group should have the same `formControlName`.\n * Providing a `name` attribute is optional.\n *\n * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var RadioControlValueAccessor = /** @class */ (function () {\n function RadioControlValueAccessor(_renderer, _elementRef, _registry, _injector) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this._registry = _registry;\n this._injector = _injector;\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n this.onChange = function () { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n }\n /**\n * @description\n * A lifecycle method called when the directive is initialized. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n RadioControlValueAccessor.prototype.ngOnInit = function () {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n };\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n RadioControlValueAccessor.prototype.ngOnDestroy = function () { this._registry.remove(this); };\n /**\n * @description\n * Sets the \"checked\" property value on the radio input element.\n *\n * @param value The checked value\n */\n RadioControlValueAccessor.prototype.writeValue = function (value) {\n this._state = value === this.value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n RadioControlValueAccessor.prototype.registerOnChange = function (fn) {\n var _this = this;\n this._fn = fn;\n this.onChange = function () {\n fn(_this.value);\n _this._registry.select(_this);\n };\n };\n /**\n * Sets the \"value\" on the radio input element and unchecks it.\n *\n * @param value\n */\n RadioControlValueAccessor.prototype.fireUncheck = function (value) { this.writeValue(value); };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n RadioControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n RadioControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n RadioControlValueAccessor.prototype._checkName = function () {\n if (this.name && this.formControlName && this.name !== this.formControlName) {\n this._throwNameError();\n }\n if (!this.name && this.formControlName)\n this.name = this.formControlName;\n };\n RadioControlValueAccessor.prototype._throwNameError = function () {\n throw new Error(\"\\n If you define both a name and a formControlName attribute on your radio button, their values\\n must match. Ex: <input type=\\\"radio\\\" formControlName=\\\"food\\\" name=\\\"food\\\">\\n \");\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", String)\n ], RadioControlValueAccessor.prototype, \"name\", void 0);\n __decorate([\n core.Input(),\n __metadata(\"design:type\", String)\n ], RadioControlValueAccessor.prototype, \"formControlName\", void 0);\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Object)\n ], RadioControlValueAccessor.prototype, \"value\", void 0);\n RadioControlValueAccessor = __decorate([\n core.Directive({\n selector: 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n host: { '(change)': 'onChange()', '(blur)': 'onTouched()' },\n providers: [RADIO_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef,\n RadioControlRegistry, core.Injector])\n ], RadioControlValueAccessor);\n return RadioControlValueAccessor;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var RANGE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return RangeValueAccessor; }),\n multi: true\n };\n /**\n * @description\n * The `ControlValueAccessor` for writing a range value and listening to range input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a range input with a reactive form\n *\n * The following example shows how to use a range input with a reactive form.\n *\n * ```ts\n * const ageControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"range\" [formControl]=\"ageControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n var RangeValueAccessor = /** @class */ (function () {\n function RangeValueAccessor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n }\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n RangeValueAccessor.prototype.writeValue = function (value) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n RangeValueAccessor.prototype.registerOnChange = function (fn) {\n this.onChange = function (value) { fn(value == '' ? null : parseFloat(value)); };\n };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n RangeValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the range input element.\n *\n * @param isDisabled The disabled value\n */\n RangeValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n RangeValueAccessor = __decorate([\n core.Directive({\n selector: 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [RANGE_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef])\n ], RangeValueAccessor);\n return RangeValueAccessor;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var FormErrorExamples = {\n formControlName: \"\\n <div [formGroup]=\\\"myGroup\\\">\\n <input formControlName=\\\"firstName\\\">\\n </div>\\n\\n In your class:\\n\\n this.myGroup = new FormGroup({\\n firstName: new FormControl()\\n });\",\n formGroupName: \"\\n <div [formGroup]=\\\"myGroup\\\">\\n <div formGroupName=\\\"person\\\">\\n <input formControlName=\\\"firstName\\\">\\n </div>\\n </div>\\n\\n In your class:\\n\\n this.myGroup = new FormGroup({\\n person: new FormGroup({ firstName: new FormControl() })\\n });\",\n formArrayName: \"\\n <div [formGroup]=\\\"myGroup\\\">\\n <div formArrayName=\\\"cities\\\">\\n <div *ngFor=\\\"let city of cityArray.controls; index as i\\\">\\n <input [formControlName]=\\\"i\\\">\\n </div>\\n </div>\\n </div>\\n\\n In your class:\\n\\n this.cityArray = new FormArray([new FormControl('SF')]);\\n this.myGroup = new FormGroup({\\n cities: this.cityArray\\n });\",\n ngModelGroup: \"\\n <form>\\n <div ngModelGroup=\\\"person\\\">\\n <input [(ngModel)]=\\\"person.name\\\" name=\\\"firstName\\\">\\n </div>\\n </form>\",\n ngModelWithFormGroup: \"\\n <div [formGroup]=\\\"myGroup\\\">\\n <input formControlName=\\\"firstName\\\">\\n <input [(ngModel)]=\\\"showMoreControls\\\" [ngModelOptions]=\\\"{standalone: true}\\\">\\n </div>\\n \"\n };\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var ReactiveErrors = /** @class */ (function () {\n function ReactiveErrors() {\n }\n ReactiveErrors.controlParentException = function () {\n throw new Error(\"formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\\n directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n Example:\\n\\n \" + FormErrorExamples.formControlName);\n };\n ReactiveErrors.ngModelGroupException = function () {\n throw new Error(\"formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\\n that also have a \\\"form\\\" prefix: formGroupName, formArrayName, or formGroup.\\n\\n Option 1: Update the parent to be formGroupName (reactive form strategy)\\n\\n \" + FormErrorExamples.formGroupName + \"\\n\\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\\n\\n \" + FormErrorExamples.ngModelGroup);\n };\n ReactiveErrors.missingFormException = function () {\n throw new Error(\"formGroup expects a FormGroup instance. Please pass one in.\\n\\n Example:\\n\\n \" + FormErrorExamples.formControlName);\n };\n ReactiveErrors.groupParentException = function () {\n throw new Error(\"formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\\n directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n Example:\\n\\n \" + FormErrorExamples.formGroupName);\n };\n ReactiveErrors.arrayParentException = function () {\n throw new Error(\"formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\\n directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n Example:\\n\\n \" + FormErrorExamples.formArrayName);\n };\n ReactiveErrors.disabledAttrWarning = function () {\n console.warn(\"\\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\\n you. We recommend using this approach to avoid 'changed after checked' errors.\\n \\n Example: \\n form = new FormGroup({\\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\\n last: new FormControl('Drew', Validators.required)\\n });\\n \");\n };\n ReactiveErrors.ngModelWarning = function (directiveName) {\n console.warn(\"\\n It looks like you're using ngModel on the same form field as \" + directiveName + \". \\n Support for using the ngModel input property and ngModelChange event with \\n reactive form directives has been deprecated in Angular v6 and will be removed \\n in Angular v7.\\n \\n For more information on this, see our API docs here:\\n https://angular.io/api/forms/\" + (directiveName === 'formControl' ? 'FormControlDirective'\n : 'FormControlName') + \"#use-with-ngmodel\\n \");\n };\n return ReactiveErrors;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var SELECT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return SelectControlValueAccessor; }),\n multi: true\n };\n function _buildValueString(id, value) {\n if (id == null)\n return \"\" + value;\n if (value && typeof value === 'object')\n value = 'Object';\n return (id + \": \" + value).slice(0, 50);\n }\n function _extractId(valueString) {\n return valueString.split(':')[0];\n }\n /**\n * @description\n * The `ControlValueAccessor` for writing select control values and listening to select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using select controls in a reactive form\n *\n * The following examples show how to use a select control in a reactive form.\n *\n * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Using select controls in a template-driven form\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * {@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * ### Customizing option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * ```ts\n * const selectedCountriesControl = new FormControl();\n * ```\n *\n * ```\n * <select [compareWith]=\"compareFn\" [formControl]=\"selectedCountriesControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{country.name}}\n * </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n * return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * **Note:** We listen to the 'change' event because 'input' events aren't fired\n * for selects in Firefox and IE:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var SelectControlValueAccessor = /** @class */ (function () {\n function SelectControlValueAccessor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /** @internal */\n this._optionMap = new Map();\n /** @internal */\n this._idCounter = 0;\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n this._compareWith = core.ɵlooseIdentical;\n }\n Object.defineProperty(SelectControlValueAccessor.prototype, \"compareWith\", {\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n set: function (fn) {\n if (typeof fn !== 'function') {\n throw new Error(\"compareWith must be a function, but received \" + JSON.stringify(fn));\n }\n this._compareWith = fn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the \"value\" property on the input element. The \"selectedIndex\"\n * property is also set if an ID is provided on the option element.\n *\n * @param value The checked value\n */\n SelectControlValueAccessor.prototype.writeValue = function (value) {\n this.value = value;\n var id = this._getOptionId(value);\n if (id == null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n }\n var valueString = _buildValueString(id, value);\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n SelectControlValueAccessor.prototype.registerOnChange = function (fn) {\n var _this = this;\n this.onChange = function (valueString) {\n _this.value = _this._getOptionValue(valueString);\n fn(_this.value);\n };\n };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n SelectControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n SelectControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n /** @internal */\n SelectControlValueAccessor.prototype._registerOption = function () { return (this._idCounter++).toString(); };\n /** @internal */\n SelectControlValueAccessor.prototype._getOptionId = function (value) {\n var e_1, _a;\n try {\n for (var _b = __values(Array.from(this._optionMap.keys())), _c = _b.next(); !_c.done; _c = _b.next()) {\n var id = _c.value;\n if (this._compareWith(this._optionMap.get(id), value))\n return id;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return null;\n };\n /** @internal */\n SelectControlValueAccessor.prototype._getOptionValue = function (valueString) {\n var id = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n ], SelectControlValueAccessor.prototype, \"compareWith\", null);\n SelectControlValueAccessor = __decorate([\n core.Directive({\n selector: 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n host: { '(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()' },\n providers: [SELECT_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef])\n ], SelectControlValueAccessor);\n return SelectControlValueAccessor;\n }());\n /**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var NgSelectOption = /** @class */ (function () {\n function NgSelectOption(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select)\n this.id = this._select._registerOption();\n }\n Object.defineProperty(NgSelectOption.prototype, \"ngValue\", {\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n set: function (value) {\n if (this._select == null)\n return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgSelectOption.prototype, \"value\", {\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n set: function (value) {\n this._setElementValue(value);\n if (this._select)\n this._select.writeValue(this._select.value);\n },\n enumerable: true,\n configurable: true\n });\n /** @internal */\n NgSelectOption.prototype._setElementValue = function (value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n };\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n NgSelectOption.prototype.ngOnDestroy = function () {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n };\n __decorate([\n core.Input('ngValue'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], NgSelectOption.prototype, \"ngValue\", null);\n __decorate([\n core.Input('value'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], NgSelectOption.prototype, \"value\", null);\n NgSelectOption = __decorate([\n core.Directive({ selector: 'option' }),\n __param(2, core.Optional()), __param(2, core.Host()),\n __metadata(\"design:paramtypes\", [core.ElementRef, core.Renderer2,\n SelectControlValueAccessor])\n ], NgSelectOption);\n return NgSelectOption;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var SELECT_MULTIPLE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return SelectMultipleControlValueAccessor; }),\n multi: true\n };\n function _buildValueString$1(id, value) {\n if (id == null)\n return \"\" + value;\n if (typeof value === 'string')\n value = \"'\" + value + \"'\";\n if (value && typeof value === 'object')\n value = 'Object';\n return (id + \": \" + value).slice(0, 50);\n }\n function _extractId$1(valueString) {\n return valueString.split(':')[0];\n }\n /**\n * @description\n * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @see `SelectControlValueAccessor`\n *\n * @usageNotes\n *\n * ### Using a multi-select control\n *\n * The follow example shows you how to use a multi-select control with a reactive form.\n *\n * ```ts\n * const countryControl = new FormControl();\n * ```\n *\n * ```\n * <select multiple name=\"countries\" [formControl]=\"countryControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{ country.name }}\n * </option>\n * </select>\n * ```\n *\n * ### Customizing option selection\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * See the `SelectControlValueAccessor` for usage.\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var SelectMultipleControlValueAccessor = /** @class */ (function () {\n function SelectMultipleControlValueAccessor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /** @internal */\n this._optionMap = new Map();\n /** @internal */\n this._idCounter = 0;\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n this._compareWith = core.ɵlooseIdentical;\n }\n Object.defineProperty(SelectMultipleControlValueAccessor.prototype, \"compareWith\", {\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n set: function (fn) {\n if (typeof fn !== 'function') {\n throw new Error(\"compareWith must be a function, but received \" + JSON.stringify(fn));\n }\n this._compareWith = fn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Sets the \"value\" property on one or of more\n * of the select's options.\n *\n * @param value The value\n */\n SelectMultipleControlValueAccessor.prototype.writeValue = function (value) {\n var _this = this;\n this.value = value;\n var optionSelectedStateSetter;\n if (Array.isArray(value)) {\n // convert values to ids\n var ids_1 = value.map(function (v) { return _this._getOptionId(v); });\n optionSelectedStateSetter = function (opt, o) { opt._setSelected(ids_1.indexOf(o.toString()) > -1); };\n }\n else {\n optionSelectedStateSetter = function (opt, o) { opt._setSelected(false); };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n };\n /**\n * @description\n * Registers a function called when the control value changes\n * and writes an array of the selected options.\n *\n * @param fn The callback function\n */\n SelectMultipleControlValueAccessor.prototype.registerOnChange = function (fn) {\n var _this = this;\n this.onChange = function (_) {\n var selected = [];\n if (_.hasOwnProperty('selectedOptions')) {\n var options = _.selectedOptions;\n for (var i = 0; i < options.length; i++) {\n var opt = options.item(i);\n var val = _this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n // Degrade on IE\n else {\n var options = _.options;\n for (var i = 0; i < options.length; i++) {\n var opt = options.item(i);\n if (opt.selected) {\n var val = _this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n _this.value = selected;\n fn(selected);\n };\n };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n SelectMultipleControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n SelectMultipleControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n /** @internal */\n SelectMultipleControlValueAccessor.prototype._registerOption = function (value) {\n var id = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n };\n /** @internal */\n SelectMultipleControlValueAccessor.prototype._getOptionId = function (value) {\n var e_1, _a;\n try {\n for (var _b = __values(Array.from(this._optionMap.keys())), _c = _b.next(); !_c.done; _c = _b.next()) {\n var id = _c.value;\n if (this._compareWith(this._optionMap.get(id)._value, value))\n return id;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return null;\n };\n /** @internal */\n SelectMultipleControlValueAccessor.prototype._getOptionValue = function (valueString) {\n var id = _extractId$1(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id)._value : valueString;\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n ], SelectMultipleControlValueAccessor.prototype, \"compareWith\", null);\n SelectMultipleControlValueAccessor = __decorate([\n core.Directive({\n selector: 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n host: { '(change)': 'onChange($event.target)', '(blur)': 'onTouched()' },\n providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef])\n ], SelectMultipleControlValueAccessor);\n return SelectMultipleControlValueAccessor;\n }());\n /**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectMultipleControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var NgSelectMultipleOption = /** @class */ (function () {\n function NgSelectMultipleOption(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n Object.defineProperty(NgSelectMultipleOption.prototype, \"ngValue\", {\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n set: function (value) {\n if (this._select == null)\n return;\n this._value = value;\n this._setElementValue(_buildValueString$1(this.id, value));\n this._select.writeValue(this._select.value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgSelectMultipleOption.prototype, \"value\", {\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n set: function (value) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString$1(this.id, value));\n this._select.writeValue(this._select.value);\n }\n else {\n this._setElementValue(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n /** @internal */\n NgSelectMultipleOption.prototype._setElementValue = function (value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n };\n /** @internal */\n NgSelectMultipleOption.prototype._setSelected = function (selected) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n };\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n NgSelectMultipleOption.prototype.ngOnDestroy = function () {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n };\n __decorate([\n core.Input('ngValue'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], NgSelectMultipleOption.prototype, \"ngValue\", null);\n __decorate([\n core.Input('value'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], NgSelectMultipleOption.prototype, \"value\", null);\n NgSelectMultipleOption = __decorate([\n core.Directive({ selector: 'option' }),\n __param(2, core.Optional()), __param(2, core.Host()),\n __metadata(\"design:paramtypes\", [core.ElementRef, core.Renderer2,\n SelectMultipleControlValueAccessor])\n ], NgSelectMultipleOption);\n return NgSelectMultipleOption;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function controlPath(name, parent) {\n return __spread(parent.path, [name]);\n }\n function setUpControl(control, dir) {\n if (!control)\n _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor)\n _throwError(dir, 'No value accessor for form control with');\n control.validator = Validators.compose([control.validator, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n dir.valueAccessor.writeValue(control.value);\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n setUpBlurPipeline(control, dir);\n if (dir.valueAccessor.setDisabledState) {\n control.registerOnDisabledChange(function (isDisabled) { dir.valueAccessor.setDisabledState(isDisabled); });\n }\n // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n dir._rawValidators.forEach(function (validator) {\n if (validator.registerOnValidatorChange)\n validator.registerOnValidatorChange(function () { return control.updateValueAndValidity(); });\n });\n dir._rawAsyncValidators.forEach(function (validator) {\n if (validator.registerOnValidatorChange)\n validator.registerOnValidatorChange(function () { return control.updateValueAndValidity(); });\n });\n }\n function cleanUpControl(control, dir) {\n dir.valueAccessor.registerOnChange(function () { return _noControlError(dir); });\n dir.valueAccessor.registerOnTouched(function () { return _noControlError(dir); });\n dir._rawValidators.forEach(function (validator) {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n dir._rawAsyncValidators.forEach(function (validator) {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n if (control)\n control._clearChangeFns();\n }\n function setUpViewChangePipeline(control, dir) {\n dir.valueAccessor.registerOnChange(function (newValue) {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n if (control.updateOn === 'change')\n updateControl(control, dir);\n });\n }\n function setUpBlurPipeline(control, dir) {\n dir.valueAccessor.registerOnTouched(function () {\n control._pendingTouched = true;\n if (control.updateOn === 'blur' && control._pendingChange)\n updateControl(control, dir);\n if (control.updateOn !== 'submit')\n control.markAsTouched();\n });\n }\n function updateControl(control, dir) {\n if (control._pendingDirty)\n control.markAsDirty();\n control.setValue(control._pendingValue, { emitModelToViewChange: false });\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n function setUpModelChangePipeline(control, dir) {\n control.registerOnChange(function (newValue, emitModelEvent) {\n // control -> view\n dir.valueAccessor.writeValue(newValue);\n // control -> ngModel\n if (emitModelEvent)\n dir.viewToModelUpdate(newValue);\n });\n }\n function setUpFormContainer(control, dir) {\n if (control == null)\n _throwError(dir, 'Cannot find control with');\n control.validator = Validators.compose([control.validator, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n }\n function _noControlError(dir) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n }\n function _throwError(dir, message) {\n var messageEnd;\n if (dir.path.length > 1) {\n messageEnd = \"path: '\" + dir.path.join(' -> ') + \"'\";\n }\n else if (dir.path[0]) {\n messageEnd = \"name: '\" + dir.path + \"'\";\n }\n else {\n messageEnd = 'unspecified name attribute';\n }\n throw new Error(message + \" \" + messageEnd);\n }\n function composeValidators(validators) {\n return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n }\n function composeAsyncValidators(validators) {\n return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n null;\n }\n function isPropertyUpdated(changes, viewModel) {\n if (!changes.hasOwnProperty('model'))\n return false;\n var change = changes['model'];\n if (change.isFirstChange())\n return true;\n return !core.ɵlooseIdentical(viewModel, change.currentValue);\n }\n var BUILTIN_ACCESSORS = [\n CheckboxControlValueAccessor,\n RangeValueAccessor,\n NumberValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n ];\n function isBuiltInAccessor(valueAccessor) {\n return BUILTIN_ACCESSORS.some(function (a) { return valueAccessor.constructor === a; });\n }\n function syncPendingControls(form, directives) {\n form._syncPendingControls();\n directives.forEach(function (dir) {\n var control = dir.control;\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n }\n // TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented\n function selectValueAccessor(dir, valueAccessors) {\n if (!valueAccessors)\n return null;\n if (!Array.isArray(valueAccessors))\n _throwError(dir, 'Value accessor was not provided as an array for form control with');\n var defaultAccessor = undefined;\n var builtinAccessor = undefined;\n var customAccessor = undefined;\n valueAccessors.forEach(function (v) {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n }\n else if (isBuiltInAccessor(v)) {\n if (builtinAccessor)\n _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n }\n else {\n if (customAccessor)\n _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n if (customAccessor)\n return customAccessor;\n if (builtinAccessor)\n return builtinAccessor;\n if (defaultAccessor)\n return defaultAccessor;\n _throwError(dir, 'No valid value accessor for form control with');\n return null;\n }\n function removeDir(list, el) {\n var index = list.indexOf(el);\n if (index > -1)\n list.splice(index, 1);\n }\n // TODO(kara): remove after deprecation period\n function _ngModelWarning(name, type, instance, warningConfig) {\n if (!core.isDevMode() || warningConfig === 'never')\n return;\n if (((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce) ||\n (warningConfig === 'always' && !instance._ngModelWarningSent)) {\n ReactiveErrors.ngModelWarning(name);\n type._ngModelWarningSentOnce = true;\n instance._ngModelWarningSent = true;\n }\n }\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.\n *\n * @publicApi\n */\n var AbstractFormGroupDirective = /** @class */ (function (_super) {\n __extends(AbstractFormGroupDirective, _super);\n function AbstractFormGroupDirective() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @description\n * An internal callback method triggered on the instance after the inputs are set.\n * Registers the group with its parent group.\n */\n AbstractFormGroupDirective.prototype.ngOnInit = function () {\n this._checkParentType();\n this.formDirective.addFormGroup(this);\n };\n /**\n * @description\n * An internal callback method triggered before the instance is destroyed.\n * Removes the group from its parent group.\n */\n AbstractFormGroupDirective.prototype.ngOnDestroy = function () {\n if (this.formDirective) {\n this.formDirective.removeFormGroup(this);\n }\n };\n Object.defineProperty(AbstractFormGroupDirective.prototype, \"control\", {\n /**\n * @description\n * The `FormGroup` bound to this directive.\n */\n get: function () { return this.formDirective.getFormGroup(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractFormGroupDirective.prototype, \"path\", {\n /**\n * @description\n * The path to this group from the top-level directive.\n */\n get: function () { return controlPath(this.name, this._parent); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractFormGroupDirective.prototype, \"formDirective\", {\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get: function () { return this._parent ? this._parent.formDirective : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractFormGroupDirective.prototype, \"validator\", {\n /**\n * @description\n * The synchronous validators registered with this group.\n */\n get: function () { return composeValidators(this._validators); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractFormGroupDirective.prototype, \"asyncValidator\", {\n /**\n * @description\n * The async validators registered with this group.\n */\n get: function () {\n return composeAsyncValidators(this._asyncValidators);\n },\n enumerable: true,\n configurable: true\n });\n /** @internal */\n AbstractFormGroupDirective.prototype._checkParentType = function () { };\n return AbstractFormGroupDirective;\n }(ControlContainer));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var AbstractControlStatus = /** @class */ (function () {\n function AbstractControlStatus(cd) {\n this._cd = cd;\n }\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassUntouched\", {\n get: function () { return this._cd.control ? this._cd.control.untouched : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassTouched\", {\n get: function () { return this._cd.control ? this._cd.control.touched : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassPristine\", {\n get: function () { return this._cd.control ? this._cd.control.pristine : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassDirty\", {\n get: function () { return this._cd.control ? this._cd.control.dirty : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassValid\", {\n get: function () { return this._cd.control ? this._cd.control.valid : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassInvalid\", {\n get: function () { return this._cd.control ? this._cd.control.invalid : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassPending\", {\n get: function () { return this._cd.control ? this._cd.control.pending : false; },\n enumerable: true,\n configurable: true\n });\n return AbstractControlStatus;\n }());\n var ngControlStatusHost = {\n '[class.ng-untouched]': 'ngClassUntouched',\n '[class.ng-touched]': 'ngClassTouched',\n '[class.ng-pristine]': 'ngClassPristine',\n '[class.ng-dirty]': 'ngClassDirty',\n '[class.ng-valid]': 'ngClassValid',\n '[class.ng-invalid]': 'ngClassInvalid',\n '[class.ng-pending]': 'ngClassPending',\n };\n /**\n * @description\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status.\n *\n * @usageNotes\n *\n * ### CSS classes applied\n *\n * The following classes are applied as the properties become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var NgControlStatus = /** @class */ (function (_super) {\n __extends(NgControlStatus, _super);\n function NgControlStatus(cd) {\n return _super.call(this, cd) || this;\n }\n NgControlStatus = __decorate([\n core.Directive({ selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost }),\n __param(0, core.Self()),\n __metadata(\"design:paramtypes\", [NgControl])\n ], NgControlStatus);\n return NgControlStatus;\n }(AbstractControlStatus));\n /**\n * @description\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n *\n * @see `NgControlStatus`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var NgControlStatusGroup = /** @class */ (function (_super) {\n __extends(NgControlStatusGroup, _super);\n function NgControlStatusGroup(cd) {\n return _super.call(this, cd) || this;\n }\n NgControlStatusGroup = __decorate([\n core.Directive({\n selector: '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n host: ngControlStatusHost\n }),\n __param(0, core.Self()),\n __metadata(\"design:paramtypes\", [ControlContainer])\n ], NgControlStatusGroup);\n return NgControlStatusGroup;\n }(AbstractControlStatus));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * Reports that a FormControl is valid, meaning that no errors exist in the input value.\n *\n * @see `status`\n */\n var VALID = 'VALID';\n /**\n * Reports that a FormControl is invalid, meaning that an error exists in the input value.\n *\n * @see `status`\n */\n var INVALID = 'INVALID';\n /**\n * Reports that a FormControl is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value.\n *\n * @see `markAsPending`\n * @see `status`\n */\n var PENDING = 'PENDING';\n /**\n * Reports that a FormControl is disabled, meaning that the control is exempt from ancestor\n * calculations of validity or value.\n *\n * @see `markAsDisabled`\n * @see `status`\n */\n var DISABLED = 'DISABLED';\n function _find(control, path, delimiter) {\n if (path == null)\n return null;\n if (!(path instanceof Array)) {\n path = path.split(delimiter);\n }\n if (path instanceof Array && (path.length === 0))\n return null;\n return path.reduce(function (v, name) {\n if (v instanceof FormGroup) {\n return v.controls.hasOwnProperty(name) ? v.controls[name] : null;\n }\n if (v instanceof FormArray) {\n return v.at(name) || null;\n }\n return null;\n }, control);\n }\n function coerceToValidator(validatorOrOpts) {\n var validator = (isOptionsObj(validatorOrOpts) ? validatorOrOpts.validators :\n validatorOrOpts);\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n }\n function coerceToAsyncValidator(asyncValidator, validatorOrOpts) {\n var origAsyncValidator = (isOptionsObj(validatorOrOpts) ? validatorOrOpts.asyncValidators :\n asyncValidator);\n return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :\n origAsyncValidator || null;\n }\n function isOptionsObj(validatorOrOpts) {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&\n typeof validatorOrOpts === 'object';\n }\n /**\n * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * @see [Forms Guide](/guide/forms)\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n * @see [Dynamic Forms Guide](/guide/dynamic-form)\n *\n * @publicApi\n */\n var AbstractControl = /** @class */ (function () {\n /**\n * Initialize the AbstractControl instance.\n *\n * @param validator The function that determines the synchronous validity of this control.\n * @param asyncValidator The function that determines the asynchronous validity of this\n * control.\n */\n function AbstractControl(validator, asyncValidator) {\n this.validator = validator;\n this.asyncValidator = asyncValidator;\n /** @internal */\n this._onCollectionChange = function () { };\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * @returns True if the user has not yet changed the value in the UI; compare `dirty`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n this.pristine = true;\n /**\n * True if the control is marked as `touched`.\n *\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n */\n this.touched = false;\n /** @internal */\n this._onDisabledChange = [];\n }\n Object.defineProperty(AbstractControl.prototype, \"parent\", {\n /**\n * The parent control.\n */\n get: function () { return this._parent; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"valid\", {\n /**\n * A control is `valid` when its `status` is `VALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control has passed all of its validation tests,\n * false otherwise.\n */\n get: function () { return this.status === VALID; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"invalid\", {\n /**\n * A control is `invalid` when its `status` is `INVALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control has failed one or more of its validation checks,\n * false otherwise.\n */\n get: function () { return this.status === INVALID; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"pending\", {\n /**\n * A control is `pending` when its `status` is `PENDING`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control is in the process of conducting a validation check,\n * false otherwise.\n */\n get: function () { return this.status == PENDING; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"disabled\", {\n /**\n * A control is `disabled` when its `status` is `DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control is disabled, false otherwise.\n */\n get: function () { return this.status === DISABLED; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"enabled\", {\n /**\n * A control is `enabled` as long as its `status` is not `DISABLED`.\n *\n * @returns True if the control has any status other than 'DISABLED',\n * false if the status is 'DISABLED'.\n *\n * @see {@link AbstractControl.status}\n *\n */\n get: function () { return this.status !== DISABLED; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"dirty\", {\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * @returns True if the user has changed the value of this control in the UI; compare `pristine`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n get: function () { return !this.pristine; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"untouched\", {\n /**\n * True if the control has not been marked as touched\n *\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n */\n get: function () { return !this.touched; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"updateOn\", {\n /**\n * Reports the update strategy of the `AbstractControl` (meaning\n * the event on which the control updates itself).\n * Possible values: `'change'` | `'blur'` | `'submit'`\n * Default value: `'change'`\n */\n get: function () {\n return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the synchronous validators that are active on this control. Calling\n * this overwrites any existing sync validators.\n */\n AbstractControl.prototype.setValidators = function (newValidator) {\n this.validator = coerceToValidator(newValidator);\n };\n /**\n * Sets the async validators that are active on this control. Calling this\n * overwrites any existing async validators.\n */\n AbstractControl.prototype.setAsyncValidators = function (newValidator) {\n this.asyncValidator = coerceToAsyncValidator(newValidator);\n };\n /**\n * Empties out the sync validator list.\n */\n AbstractControl.prototype.clearValidators = function () { this.validator = null; };\n /**\n * Empties out the async validator list.\n */\n AbstractControl.prototype.clearAsyncValidators = function () { this.asyncValidator = null; };\n /**\n * Marks the control as `touched`. A control is touched by focus and\n * blur events that do not change the value.\n *\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n AbstractControl.prototype.markAsTouched = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.touched = true;\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsTouched(opts);\n }\n };\n /**\n * Marks the control as `untouched`.\n *\n * If the control has any children, also marks all children as `untouched`\n * and recalculates the `touched` status of all parent controls.\n *\n * @see `markAsTouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after the marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n AbstractControl.prototype.markAsUntouched = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.touched = false;\n this._pendingTouched = false;\n this._forEachChild(function (control) { control.markAsUntouched({ onlySelf: true }); });\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n };\n /**\n * Marks the control as `dirty`. A control becomes dirty when\n * the control's value is changed through the UI; compare `markAsTouched`.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n AbstractControl.prototype.markAsDirty = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.pristine = false;\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsDirty(opts);\n }\n };\n /**\n * Marks the control as `pristine`.\n *\n * If the control has any children, marks all children as `pristine`,\n * and recalculates the `pristine` status of all parent\n * controls.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n *\n * @param opts Configuration options that determine how the control emits events after\n * marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n */\n AbstractControl.prototype.markAsPristine = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.pristine = true;\n this._pendingDirty = false;\n this._forEachChild(function (control) { control.markAsPristine({ onlySelf: true }); });\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n };\n /**\n * Marks the control as `pending`.\n *\n * A control is pending while the control performs async validation.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates changes and\n * emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), the `statusChanges`\n * observable emits an event with the latest status the control is marked pending.\n * When false, no events are emitted.\n *\n */\n AbstractControl.prototype.markAsPending = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.status = PENDING;\n if (opts.emitEvent !== false) {\n this.statusChanges.emit(this.status);\n }\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsPending(opts);\n }\n };\n /**\n * Disables the control. This means the control is exempt from validation checks and\n * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n *\n * If the control has children, all children are also disabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates\n * changes and emits events after the control is disabled.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is disabled.\n * When false, no events are emitted.\n */\n AbstractControl.prototype.disable = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.status = DISABLED;\n this.errors = null;\n this._forEachChild(function (control) { control.disable(__assign({}, opts, { onlySelf: true })); });\n this._updateValue();\n if (opts.emitEvent !== false) {\n this.valueChanges.emit(this.value);\n this.statusChanges.emit(this.status);\n }\n this._updateAncestors(opts);\n this._onDisabledChange.forEach(function (changeFn) { return changeFn(true); });\n };\n /**\n * Enables the control. This means the control is included in validation checks and\n * the aggregate value of its parent. Its status recalculates based on its value and\n * its validators.\n *\n * By default, if the control has children, all children are enabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configure options that control how the control propagates changes and\n * emits events when marked as untouched\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is enabled.\n * When false, no events are emitted.\n */\n AbstractControl.prototype.enable = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.status = VALID;\n this._forEachChild(function (control) { control.enable(__assign({}, opts, { onlySelf: true })); });\n this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n this._updateAncestors(opts);\n this._onDisabledChange.forEach(function (changeFn) { return changeFn(false); });\n };\n AbstractControl.prototype._updateAncestors = function (opts) {\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n this._parent._updatePristine();\n this._parent._updateTouched();\n }\n };\n /**\n * @param parent Sets the parent of the control\n */\n AbstractControl.prototype.setParent = function (parent) { this._parent = parent; };\n /**\n * Recalculates the value and validation status of the control.\n *\n * By default, it also updates the value and validity of its ancestors.\n *\n * @param opts Configuration options determine how the control propagates changes and emits events\n * after updates and validity checks are applied.\n * * `onlySelf`: When true, only update this control. When false or not supplied,\n * update all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is updated.\n * When false, no events are emitted.\n */\n AbstractControl.prototype.updateValueAndValidity = function (opts) {\n if (opts === void 0) { opts = {}; }\n this._setInitialStatus();\n this._updateValue();\n if (this.enabled) {\n this._cancelExistingSubscription();\n this.errors = this._runValidator();\n this.status = this._calculateStatus();\n if (this.status === VALID || this.status === PENDING) {\n this._runAsyncValidator(opts.emitEvent);\n }\n }\n if (opts.emitEvent !== false) {\n this.valueChanges.emit(this.value);\n this.statusChanges.emit(this.status);\n }\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n }\n };\n /** @internal */\n AbstractControl.prototype._updateTreeValidity = function (opts) {\n if (opts === void 0) { opts = { emitEvent: true }; }\n this._forEachChild(function (ctrl) { return ctrl._updateTreeValidity(opts); });\n this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n };\n AbstractControl.prototype._setInitialStatus = function () {\n this.status = this._allControlsDisabled() ? DISABLED : VALID;\n };\n AbstractControl.prototype._runValidator = function () {\n return this.validator ? this.validator(this) : null;\n };\n AbstractControl.prototype._runAsyncValidator = function (emitEvent) {\n var _this = this;\n if (this.asyncValidator) {\n this.status = PENDING;\n var obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription =\n obs.subscribe(function (errors) { return _this.setErrors(errors, { emitEvent: emitEvent }); });\n }\n };\n AbstractControl.prototype._cancelExistingSubscription = function () {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n }\n };\n /**\n * Sets errors on a form control when running validations manually, rather than automatically.\n *\n * Calling `setErrors` also updates the validity of the parent control.\n *\n * @usageNotes\n * ### Manually set the errors for a control\n *\n * ```\n * const login = new FormControl('someLogin');\n * login.setErrors({\n * notUnique: true\n * });\n *\n * expect(login.valid).toEqual(false);\n * expect(login.errors).toEqual({ notUnique: true });\n *\n * login.setValue('someOtherLogin');\n *\n * expect(login.valid).toEqual(true);\n * ```\n */\n AbstractControl.prototype.setErrors = function (errors, opts) {\n if (opts === void 0) { opts = {}; }\n this.errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false);\n };\n /**\n * Retrieves a child control given the control's name or path.\n *\n * @param path A dot-delimited string or array of string/number values that define the path to the\n * control.\n *\n * @usageNotes\n * ### Retrieve a nested control\n *\n * For example, to get a `name` control nested within a `person` sub-group:\n *\n * * `this.form.get('person.name');`\n *\n * -OR-\n *\n * * `this.form.get(['person', 'name']);`\n */\n AbstractControl.prototype.get = function (path) { return _find(this, path, '.'); };\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n AbstractControl.prototype.getError = function (errorCode, path) {\n var control = path ? this.get(path) : this;\n return control && control.errors ? control.errors[errorCode] : null;\n };\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n AbstractControl.prototype.hasError = function (errorCode, path) {\n return !!this.getError(errorCode, path);\n };\n Object.defineProperty(AbstractControl.prototype, \"root\", {\n /**\n * Retrieves the top-level ancestor of this control.\n */\n get: function () {\n var x = this;\n while (x._parent) {\n x = x._parent;\n }\n return x;\n },\n enumerable: true,\n configurable: true\n });\n /** @internal */\n AbstractControl.prototype._updateControlsErrors = function (emitEvent) {\n this.status = this._calculateStatus();\n if (emitEvent) {\n this.statusChanges.emit(this.status);\n }\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent);\n }\n };\n /** @internal */\n AbstractControl.prototype._initObservables = function () {\n this.valueChanges = new core.EventEmitter();\n this.statusChanges = new core.EventEmitter();\n };\n AbstractControl.prototype._calculateStatus = function () {\n if (this._allControlsDisabled())\n return DISABLED;\n if (this.errors)\n return INVALID;\n if (this._anyControlsHaveStatus(PENDING))\n return PENDING;\n if (this._anyControlsHaveStatus(INVALID))\n return INVALID;\n return VALID;\n };\n /** @internal */\n AbstractControl.prototype._anyControlsHaveStatus = function (status) {\n return this._anyControls(function (control) { return control.status === status; });\n };\n /** @internal */\n AbstractControl.prototype._anyControlsDirty = function () {\n return this._anyControls(function (control) { return control.dirty; });\n };\n /** @internal */\n AbstractControl.prototype._anyControlsTouched = function () {\n return this._anyControls(function (control) { return control.touched; });\n };\n /** @internal */\n AbstractControl.prototype._updatePristine = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.pristine = !this._anyControlsDirty();\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n };\n /** @internal */\n AbstractControl.prototype._updateTouched = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.touched = this._anyControlsTouched();\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n };\n /** @internal */\n AbstractControl.prototype._isBoxedValue = function (formState) {\n return typeof formState === 'object' && formState !== null &&\n Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n };\n /** @internal */\n AbstractControl.prototype._registerOnCollectionChange = function (fn) { this._onCollectionChange = fn; };\n /** @internal */\n AbstractControl.prototype._setUpdateStrategy = function (opts) {\n if (isOptionsObj(opts) && opts.updateOn != null) {\n this._updateOn = opts.updateOn;\n }\n };\n return AbstractControl;\n }());\n /**\n * Tracks the value and validation status of an individual form control.\n *\n * This is one of the three fundamental building blocks of Angular forms, along with\n * `FormGroup` and `FormArray`. It extends the `AbstractControl` class that\n * implements most of the base functionality for accessing the value, validation status,\n * user interactions and events.\n *\n * @see `AbstractControl`\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see [Usage Notes](#usage-notes)\n *\n * @usageNotes\n *\n * ### Initializing Form Controls\n *\n * Instantiate a `FormControl`, with an initial value.\n *\n * ```ts\n * const control = new FormControl('some value');\n * console.log(control.value); // 'some value'\n *```\n *\n * The following example initializes the control with a form state object. The `value`\n * and `disabled` keys are required in this case.\n *\n * ```ts\n * const control = new FormControl({ value: 'n/a', disabled: true });\n * console.log(control.value); // 'n/a'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * The following example initializes the control with a sync validator.\n *\n * ```ts\n * const control = new FormControl('', Validators.required);\n * console.log(control.value); // ''\n * console.log(control.status); // 'INVALID'\n * ```\n *\n * The following example initializes the control using an options object.\n *\n * ```ts\n * const control = new FormControl('', {\n * validators: Validators.required,\n * asyncValidators: myAsyncValidator\n * });\n * ```\n *\n * ### Configure the control to update on a blur event\n *\n * Set the `updateOn` option to `'blur'` to update on the blur `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'blur' });\n * ```\n *\n * ### Configure the control to update on a submit event\n *\n * Set the `updateOn` option to `'submit'` to update on a submit `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'submit' });\n * ```\n *\n * ### Reset the control back to an initial value\n *\n * You reset to a specific form state by passing through a standalone\n * value or a form state object that contains both a value and a disabled state\n * (these are the only two properties that cannot be calculated).\n *\n * ```ts\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n *\n * control.reset('Drew');\n *\n * console.log(control.value); // 'Drew'\n * ```\n *\n * ### Reset the control back to an initial value and disabled\n *\n * ```\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n * console.log(control.status); // 'VALID'\n *\n * control.reset({ value: 'Drew', disabled: true });\n *\n * console.log(control.value); // 'Drew'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * @publicApi\n */\n var FormControl = /** @class */ (function (_super) {\n __extends(FormControl, _super);\n /**\n * Creates a new `FormControl` instance.\n *\n * @param formState Initializes the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n function FormControl(formState, validatorOrOpts, asyncValidator) {\n if (formState === void 0) { formState = null; }\n var _this = _super.call(this, coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts)) || this;\n /** @internal */\n _this._onChange = [];\n _this._applyFormState(formState);\n _this._setUpdateStrategy(validatorOrOpts);\n _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n _this._initObservables();\n return _this;\n }\n /**\n * Sets a new value for the form control.\n *\n * @param value The new value for the control.\n * @param options Configuration options that determine how the control proopagates changes\n * and emits events when the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * * `emitModelToViewChange`: When true or not supplied (the default), each change triggers an\n * `onChange` event to\n * update the view.\n * * `emitViewToModelChange`: When true or not supplied (the default), each change triggers an\n * `ngModelChange`\n * event to update the model.\n *\n */\n FormControl.prototype.setValue = function (value, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n this.value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach(function (changeFn) { return changeFn(_this.value, options.emitViewToModelChange !== false); });\n }\n this.updateValueAndValidity(options);\n };\n /**\n * Patches the value of a control.\n *\n * This function is functionally the same as {@link FormControl#setValue setValue} at this level.\n * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and\n * `FormArrays`, where it does behave differently.\n *\n * @see `setValue` for options\n */\n FormControl.prototype.patchValue = function (value, options) {\n if (options === void 0) { options = {}; }\n this.setValue(value, options);\n };\n /**\n * Resets the form control, marking it `pristine` and `untouched`, and setting\n * the value to null.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n *\n */\n FormControl.prototype.reset = function (formState, options) {\n if (formState === void 0) { formState = null; }\n if (options === void 0) { options = {}; }\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n this._pendingChange = false;\n };\n /**\n * @internal\n */\n FormControl.prototype._updateValue = function () { };\n /**\n * @internal\n */\n FormControl.prototype._anyControls = function (condition) { return false; };\n /**\n * @internal\n */\n FormControl.prototype._allControlsDisabled = function () { return this.disabled; };\n /**\n * Register a listener for change events.\n *\n * @param fn The method that is called when the value changes\n */\n FormControl.prototype.registerOnChange = function (fn) { this._onChange.push(fn); };\n /**\n * @internal\n */\n FormControl.prototype._clearChangeFns = function () {\n this._onChange = [];\n this._onDisabledChange = [];\n this._onCollectionChange = function () { };\n };\n /**\n * Register a listener for disabled events.\n *\n * @param fn The method that is called when the disabled status changes.\n */\n FormControl.prototype.registerOnDisabledChange = function (fn) {\n this._onDisabledChange.push(fn);\n };\n /**\n * @internal\n */\n FormControl.prototype._forEachChild = function (cb) { };\n /** @internal */\n FormControl.prototype._syncPendingControls = function () {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty)\n this.markAsDirty();\n if (this._pendingTouched)\n this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, { onlySelf: true, emitModelToViewChange: false });\n return true;\n }\n }\n return false;\n };\n FormControl.prototype._applyFormState = function (formState) {\n if (this._isBoxedValue(formState)) {\n this.value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({ onlySelf: true, emitEvent: false }) :\n this.enable({ onlySelf: true, emitEvent: false });\n }\n else {\n this.value = this._pendingValue = formState;\n }\n };\n return FormControl;\n }(AbstractControl));\n /**\n * Tracks the value and validity state of a group of `FormControl` instances.\n *\n * A `FormGroup` aggregates the values of each child `FormControl` into one object,\n * with each control name as the key. It calculates its status by reducing the status values\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormArray`.\n *\n * When instantiating a `FormGroup`, pass in a collection of child controls as the first\n * argument. The key for each child registers the name for the control.\n *\n * @usageNotes\n *\n * ### Create a form group with 2 controls\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('Nancy', Validators.minLength(2)),\n * last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value); // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status); // 'VALID'\n * ```\n *\n * ### Create a form group with a group-level validator\n *\n * You include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('', Validators.minLength(2)),\n * passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n * return g.get('password').value === g.get('passwordConfirm').value\n * ? null : {'mismatch': true};\n * }\n * ```\n *\n * Like `FormControl` instances, you choose to pass in\n * validators and async validators as part of an options object.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('')\n * passwordConfirm: new FormControl('')\n * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });\n * ```\n *\n * ### Set the updateOn property for all controls in a form group\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * group level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormGroup({\n * one: new FormControl()\n * }, { updateOn: 'blur' });\n * ```\n *\n * @publicApi\n */\n var FormGroup = /** @class */ (function (_super) {\n __extends(FormGroup, _super);\n /**\n * Creates a new `FormGroup` instance.\n *\n * @param controls A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n function FormGroup(controls, validatorOrOpts, asyncValidator) {\n var _this = _super.call(this, coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts)) || this;\n _this.controls = controls;\n _this._initObservables();\n _this._setUpdateStrategy(validatorOrOpts);\n _this._setUpControls();\n _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n return _this;\n }\n /**\n * Registers a control with the group's list of controls.\n *\n * This method does not update the value or validity of the control.\n * Use {@link FormGroup#addControl addControl} instead.\n *\n * @param name The control name to register in the collection\n * @param control Provides the control for the given name\n */\n FormGroup.prototype.registerControl = function (name, control) {\n if (this.controls[name])\n return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n };\n /**\n * Add a control to this group.\n *\n * This method also updates the value and validity of the control.\n *\n * @param name The control name to add to the collection\n * @param control Provides the control for the given name\n */\n FormGroup.prototype.addControl = function (name, control) {\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n };\n /**\n * Remove a control from this group.\n *\n * @param name The control name to remove from the collection\n */\n FormGroup.prototype.removeControl = function (name) {\n if (this.controls[name])\n this.controls[name]._registerOnCollectionChange(function () { });\n delete (this.controls[name]);\n this.updateValueAndValidity();\n this._onCollectionChange();\n };\n /**\n * Replace an existing control.\n *\n * @param name The control name to replace in the collection\n * @param control Provides the control for the given name\n */\n FormGroup.prototype.setControl = function (name, control) {\n if (this.controls[name])\n this.controls[name]._registerOnCollectionChange(function () { });\n delete (this.controls[name]);\n if (control)\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n };\n /**\n * Check whether there is an enabled control with the given name in the group.\n *\n * Reports false for disabled controls. If you'd like to check for existence in the group\n * only, use {@link AbstractControl#get get} instead.\n *\n * @param name The control name to check for existence in the collection\n *\n * @returns false for disabled controls, true otherwise.\n */\n FormGroup.prototype.contains = function (controlName) {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n };\n /**\n * Sets the value of the `FormGroup`. It accepts an object that matches\n * the structure of the group, with control names as keys.\n *\n * @usageNotes\n * ### Set the complete value for the form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n *\n * console.log(form.value); // {first: null, last: null}\n *\n * form.setValue({first: 'Nancy', last: 'Drew'});\n * console.log(form.value); // {first: 'Nancy', last: 'Drew'}\n * ```\n *\n * @throws When strict checks fail, such as setting the value of a control\n * that doesn't exist or if you excluding the value of a control.\n *\n * @param value The new value for the control that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n */\n FormGroup.prototype.setValue = function (value, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n this._checkAllValuesPresent(value);\n Object.keys(value).forEach(function (name) {\n _this._throwIfControlMissing(name);\n _this.controls[name].setValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n };\n /**\n * Patches the value of the `FormGroup`. It accepts an object with control\n * names as keys, and does its best to match the values to the correct controls\n * in the group.\n *\n * It accepts both super-sets and sub-sets of the group without throwing an error.\n *\n * @usageNotes\n * ### Patch the value for a form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n * console.log(form.value); // {first: null, last: null}\n *\n * form.patchValue({first: 'Nancy'});\n * console.log(form.value); // {first: 'Nancy', last: null}\n * ```\n *\n * @param value The object that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes and\n * emits events after the value is patched.\n * * `onlySelf`: When true, each change only affects this control and not its parent. Default is\n * true.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n FormGroup.prototype.patchValue = function (value, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n Object.keys(value).forEach(function (name) {\n if (_this.controls[name]) {\n _this.controls[name].patchValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n }\n });\n this.updateValueAndValidity(options);\n };\n /**\n * Resets the `FormGroup`, marks all descendants are marked `pristine` and `untouched`, and\n * the value of all descendants to null.\n *\n * You reset to a specific form state by passing in a map of states\n * that matches the structure of your form, with control names as keys. The state\n * is a standalone value or a form state object with both a value and a disabled\n * status.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events when the group is reset.\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * @usageNotes\n *\n * ### Reset the form group values\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * console.log(form.value); // {first: 'first name', last: 'last name'}\n *\n * form.reset({ first: 'name', last: 'last name' });\n *\n * console.log(form.value); // {first: 'name', last: 'last name'}\n * ```\n *\n * ### Reset the form group values and disabled status\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * form.reset({\n * first: {value: 'name', disabled: true},\n * last: 'last'\n * });\n *\n * console.log(this.form.value); // {first: 'name', last: 'last name'}\n * console.log(this.form.get('first').status); // 'DISABLED'\n * ```\n */\n FormGroup.prototype.reset = function (value, options) {\n if (value === void 0) { value = {}; }\n if (options === void 0) { options = {}; }\n this._forEachChild(function (control, name) {\n control.reset(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n };\n /**\n * The aggregate value of the `FormGroup`, including any disabled controls.\n *\n * Retrieves all values regardless of disabled status.\n * The `value` property is the best way to get the value of the group, because\n * it excludes disabled controls in the `FormGroup`.\n */\n FormGroup.prototype.getRawValue = function () {\n return this._reduceChildren({}, function (acc, control, name) {\n acc[name] = control instanceof FormControl ? control.value : control.getRawValue();\n return acc;\n });\n };\n /** @internal */\n FormGroup.prototype._syncPendingControls = function () {\n var subtreeUpdated = this._reduceChildren(false, function (updated, child) {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated)\n this.updateValueAndValidity({ onlySelf: true });\n return subtreeUpdated;\n };\n /** @internal */\n FormGroup.prototype._throwIfControlMissing = function (name) {\n if (!Object.keys(this.controls).length) {\n throw new Error(\"\\n There are no form controls registered with this group yet. If you're using ngModel,\\n you may want to check next tick (e.g. use setTimeout).\\n \");\n }\n if (!this.controls[name]) {\n throw new Error(\"Cannot find form control with name: \" + name + \".\");\n }\n };\n /** @internal */\n FormGroup.prototype._forEachChild = function (cb) {\n var _this = this;\n Object.keys(this.controls).forEach(function (k) { return cb(_this.controls[k], k); });\n };\n /** @internal */\n FormGroup.prototype._setUpControls = function () {\n var _this = this;\n this._forEachChild(function (control) {\n control.setParent(_this);\n control._registerOnCollectionChange(_this._onCollectionChange);\n });\n };\n /** @internal */\n FormGroup.prototype._updateValue = function () { this.value = this._reduceValue(); };\n /** @internal */\n FormGroup.prototype._anyControls = function (condition) {\n var _this = this;\n var res = false;\n this._forEachChild(function (control, name) {\n res = res || (_this.contains(name) && condition(control));\n });\n return res;\n };\n /** @internal */\n FormGroup.prototype._reduceValue = function () {\n var _this = this;\n return this._reduceChildren({}, function (acc, control, name) {\n if (control.enabled || _this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n };\n /** @internal */\n FormGroup.prototype._reduceChildren = function (initValue, fn) {\n var res = initValue;\n this._forEachChild(function (control, name) { res = fn(res, control, name); });\n return res;\n };\n /** @internal */\n FormGroup.prototype._allControlsDisabled = function () {\n var e_1, _a;\n try {\n for (var _b = __values(Object.keys(this.controls)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var controlName = _c.value;\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n };\n /** @internal */\n FormGroup.prototype._checkAllValuesPresent = function (value) {\n this._forEachChild(function (control, name) {\n if (value[name] === undefined) {\n throw new Error(\"Must supply a value for form control with name: '\" + name + \"'.\");\n }\n });\n };\n return FormGroup;\n }(AbstractControl));\n /**\n * Tracks the value and validity state of an array of `FormControl`,\n * `FormGroup` or `FormArray` instances.\n *\n * A `FormArray` aggregates the values of each child `FormControl` into an array.\n * It calculates its status by reducing the status values of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormGroup`.\n *\n * @usageNotes\n *\n * ### Create an array of form controls\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy', Validators.minLength(2)),\n * new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value); // ['Nancy', 'Drew']\n * console.log(arr.status); // 'VALID'\n * ```\n *\n * ### Create a form array with array-level validators\n *\n * You include array-level validators and async validators. These come in handy\n * when you want to perform validation that considers the value of more than one child\n * control.\n *\n * The two types of validators are passed in separately as the second and third arg\n * respectively, or together as part of an options object.\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy'),\n * new FormControl('Drew')\n * ], {validators: myValidator, asyncValidators: myAsyncValidator});\n * ```\n *\n * ### Set the updateOn property for all controls in a form array\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * array level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl()\n * ], {updateOn: 'blur'});\n * ```\n *\n * ### Adding or removing controls from a form array\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that result in strange and unexpected behavior such\n * as broken change detection.\n *\n * @publicApi\n */\n var FormArray = /** @class */ (function (_super) {\n __extends(FormArray, _super);\n /**\n * Creates a new `FormArray` instance.\n *\n * @param controls An array of child controls. Each child control is given an index\n * where it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n function FormArray(controls, validatorOrOpts, asyncValidator) {\n var _this = _super.call(this, coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts)) || this;\n _this.controls = controls;\n _this._initObservables();\n _this._setUpdateStrategy(validatorOrOpts);\n _this._setUpControls();\n _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n return _this;\n }\n /**\n * Get the `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to retrieve the control\n */\n FormArray.prototype.at = function (index) { return this.controls[index]; };\n /**\n * Insert a new `AbstractControl` at the end of the array.\n *\n * @param control Form control to be inserted\n */\n FormArray.prototype.push = function (control) {\n this.controls.push(control);\n this._registerControl(control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n };\n /**\n * Insert a new `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to insert the control\n * @param control Form control to be inserted\n */\n FormArray.prototype.insert = function (index, control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n this.updateValueAndValidity();\n };\n /**\n * Remove the control at the given `index` in the array.\n *\n * @param index Index in the array to remove the control\n */\n FormArray.prototype.removeAt = function (index) {\n if (this.controls[index])\n this.controls[index]._registerOnCollectionChange(function () { });\n this.controls.splice(index, 1);\n this.updateValueAndValidity();\n };\n /**\n * Replace an existing control.\n *\n * @param index Index in the array to replace the control\n * @param control The `AbstractControl` control to replace the existing control\n */\n FormArray.prototype.setControl = function (index, control) {\n if (this.controls[index])\n this.controls[index]._registerOnCollectionChange(function () { });\n this.controls.splice(index, 1);\n if (control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n }\n this.updateValueAndValidity();\n this._onCollectionChange();\n };\n Object.defineProperty(FormArray.prototype, \"length\", {\n /**\n * Length of the control array.\n */\n get: function () { return this.controls.length; },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the value of the `FormArray`. It accepts an array that matches\n * the structure of the control.\n *\n * This method performs strict checks, and throws an error if you try\n * to set the value of a control that doesn't exist or if you exclude the\n * value of a control.\n *\n * @usageNotes\n * ### Set the values for the controls in the form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.setValue(['Nancy', 'Drew']);\n * console.log(arr.value); // ['Nancy', 'Drew']\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n FormArray.prototype.setValue = function (value, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n this._checkAllValuesPresent(value);\n value.forEach(function (newValue, index) {\n _this._throwIfControlMissing(index);\n _this.at(index).setValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n };\n /**\n * Patches the value of the `FormArray`. It accepts an array that matches the\n * structure of the control, and does its best to match the values to the correct\n * controls in the group.\n *\n * It accepts both super-sets and sub-sets of the array without throwing an error.\n *\n * @usageNotes\n * ### Patch the values for controls in a form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.patchValue(['Nancy']);\n * console.log(arr.value); // ['Nancy', null]\n * ```\n *\n * @param value Array of latest values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n FormArray.prototype.patchValue = function (value, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n value.forEach(function (newValue, index) {\n if (_this.at(index)) {\n _this.at(index).patchValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });\n }\n });\n this.updateValueAndValidity(options);\n };\n /**\n * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the\n * value of all descendants to null or null maps.\n *\n * You reset to a specific form state by passing in an array of states\n * that matches the structure of the control. The state is a standalone value\n * or a form state object with both a value and a disabled status.\n *\n * @usageNotes\n * ### Reset the values in a form array\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * arr.reset(['name', 'last name']);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * ```\n *\n * ### Reset the values in a form array and the disabled status for the first control\n *\n * ```\n * this.arr.reset([\n * {value: 'name', disabled: true},\n * 'last'\n * ]);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * console.log(this.arr.get(0).status); // 'DISABLED'\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n FormArray.prototype.reset = function (value, options) {\n if (value === void 0) { value = []; }\n if (options === void 0) { options = {}; }\n this._forEachChild(function (control, index) {\n control.reset(value[index], { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n };\n /**\n * The aggregate value of the array, including any disabled controls.\n *\n * Reports all values regardless of disabled status.\n * For enabled controls only, the `value` property is the best way to get the value of the array.\n */\n FormArray.prototype.getRawValue = function () {\n return this.controls.map(function (control) {\n return control instanceof FormControl ? control.value : control.getRawValue();\n });\n };\n /** @internal */\n FormArray.prototype._syncPendingControls = function () {\n var subtreeUpdated = this.controls.reduce(function (updated, child) {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated)\n this.updateValueAndValidity({ onlySelf: true });\n return subtreeUpdated;\n };\n /** @internal */\n FormArray.prototype._throwIfControlMissing = function (index) {\n if (!this.controls.length) {\n throw new Error(\"\\n There are no form controls registered with this array yet. If you're using ngModel,\\n you may want to check next tick (e.g. use setTimeout).\\n \");\n }\n if (!this.at(index)) {\n throw new Error(\"Cannot find form control at index \" + index);\n }\n };\n /** @internal */\n FormArray.prototype._forEachChild = function (cb) {\n this.controls.forEach(function (control, index) { cb(control, index); });\n };\n /** @internal */\n FormArray.prototype._updateValue = function () {\n var _this = this;\n this.value =\n this.controls.filter(function (control) { return control.enabled || _this.disabled; })\n .map(function (control) { return control.value; });\n };\n /** @internal */\n FormArray.prototype._anyControls = function (condition) {\n return this.controls.some(function (control) { return control.enabled && condition(control); });\n };\n /** @internal */\n FormArray.prototype._setUpControls = function () {\n var _this = this;\n this._forEachChild(function (control) { return _this._registerControl(control); });\n };\n /** @internal */\n FormArray.prototype._checkAllValuesPresent = function (value) {\n this._forEachChild(function (control, i) {\n if (value[i] === undefined) {\n throw new Error(\"Must supply a value for form control at index: \" + i + \".\");\n }\n });\n };\n /** @internal */\n FormArray.prototype._allControlsDisabled = function () {\n var e_2, _a;\n try {\n for (var _b = __values(this.controls), _c = _b.next(); !_c.done; _c = _b.next()) {\n var control = _c.value;\n if (control.enabled)\n return false;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return this.controls.length > 0 || this.disabled;\n };\n FormArray.prototype._registerControl = function (control) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n };\n return FormArray;\n }(AbstractControl));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var formDirectiveProvider = {\n provide: ControlContainer,\n useExisting: core.forwardRef(function () { return NgForm; })\n };\n var resolvedPromise = Promise.resolve(null);\n /**\n * @description\n * Creates a top-level `FormGroup` instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags. You don't need to add a special selector.\n *\n * You optionally export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful. Many properties from the underlying\n * `FormGroup` instance are duplicated on the directive itself, so a reference to it\n * gives you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, use `NgModel` with a `name`\n * attribute. You may use `NgModelGroup` to create sub-groups within the form.\n *\n * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event emits the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * To import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * @usageNotes\n *\n * ### Migrating from deprecated ngForm selector\n *\n * Support for using `ngForm` element selector has been deprecated in Angular v6 and will be removed\n * in Angular v9.\n *\n * This has been deprecated to keep selectors consistent with other core Angular selectors,\n * as element selectors are typically written in kebab-case.\n *\n * Now deprecated:\n * ```html\n * <ngForm #myForm=\"ngForm\">\n * ```\n *\n * After:\n * ```html\n * <ng-form #myForm=\"ngForm\">\n * ```\n *\n * ### Listening for form submission\n *\n * The following example shows how to capture the form values from the \"ngSubmit\" event.\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Setting the update options\n *\n * The following example shows you how to change the \"updateOn\" option from its default using\n * ngFormOptions.\n *\n * ```html\n * <form [ngFormOptions]=\"{updateOn: 'blur'}\">\n * <input name=\"one\" ngModel> <!-- this ngModel will update on blur -->\n * </form>\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n var NgForm = /** @class */ (function (_super) {\n __extends(NgForm, _super);\n function NgForm(validators, asyncValidators) {\n var _this = _super.call(this) || this;\n /**\n * @description\n * Returns whether the form submission has been triggered.\n */\n _this.submitted = false;\n _this._directives = [];\n /**\n * @description\n * Event emitter for the \"ngSubmit\" event\n */\n _this.ngSubmit = new core.EventEmitter();\n _this.form =\n new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n return _this;\n }\n /**\n * @description\n * Lifecycle method called after the view is initialized. For internal use only.\n */\n NgForm.prototype.ngAfterViewInit = function () { this._setUpdateStrategy(); };\n Object.defineProperty(NgForm.prototype, \"formDirective\", {\n /**\n * @description\n * The directive instance.\n */\n get: function () { return this; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgForm.prototype, \"control\", {\n /**\n * @description\n * The internal `FormGroup` instance.\n */\n get: function () { return this.form; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgForm.prototype, \"path\", {\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it is always an empty array.\n */\n get: function () { return []; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgForm.prototype, \"controls\", {\n /**\n * @description\n * Returns a map of the controls in this group.\n */\n get: function () { return this.form.controls; },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `NgModel` directive instance.\n */\n NgForm.prototype.addControl = function (dir) {\n var _this = this;\n resolvedPromise.then(function () {\n var container = _this._findContainer(dir.path);\n dir.control =\n container.registerControl(dir.name, dir.control);\n setUpControl(dir.control, dir);\n dir.control.updateValueAndValidity({ emitEvent: false });\n _this._directives.push(dir);\n });\n };\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `NgModel` directive.\n *\n * @param dir The `NgModel` directive instance.\n */\n NgForm.prototype.getControl = function (dir) { return this.form.get(dir.path); };\n /**\n * @description\n * Removes the `NgModel` instance from the internal list of directives\n *\n * @param dir The `NgModel` directive instance.\n */\n NgForm.prototype.removeControl = function (dir) {\n var _this = this;\n resolvedPromise.then(function () {\n var container = _this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n removeDir(_this._directives, dir);\n });\n };\n /**\n * @description\n * Adds a new `NgModelGroup` directive instance to the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n NgForm.prototype.addFormGroup = function (dir) {\n var _this = this;\n resolvedPromise.then(function () {\n var container = _this._findContainer(dir.path);\n var group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({ emitEvent: false });\n });\n };\n /**\n * @description\n * Removes the `NgModelGroup` directive instance from the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n NgForm.prototype.removeFormGroup = function (dir) {\n var _this = this;\n resolvedPromise.then(function () {\n var container = _this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n });\n };\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n NgForm.prototype.getFormGroup = function (dir) { return this.form.get(dir.path); };\n /**\n * Sets the new value for the provided `NgControl` directive.\n *\n * @param dir The `NgControl` directive instance.\n * @param value The new value for the directive's control.\n */\n NgForm.prototype.updateModel = function (dir, value) {\n var _this = this;\n resolvedPromise.then(function () {\n var ctrl = _this.form.get(dir.path);\n ctrl.setValue(value);\n });\n };\n /**\n * @description\n * Sets the value for this `FormGroup`.\n *\n * @param value The new value\n */\n NgForm.prototype.setValue = function (value) { this.control.setValue(value); };\n /**\n * @description\n * Method called when the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n NgForm.prototype.onSubmit = function ($event) {\n this.submitted = true;\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n return false;\n };\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n NgForm.prototype.onReset = function () { this.resetForm(); };\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n NgForm.prototype.resetForm = function (value) {\n if (value === void 0) { value = undefined; }\n this.form.reset(value);\n this.submitted = false;\n };\n NgForm.prototype._setUpdateStrategy = function () {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n };\n /** @internal */\n NgForm.prototype._findContainer = function (path) {\n path.pop();\n return path.length ? this.form.get(path) : this.form;\n };\n __decorate([\n core.Input('ngFormOptions'),\n __metadata(\"design:type\", Object)\n ], NgForm.prototype, \"options\", void 0);\n NgForm = __decorate([\n core.Directive({\n selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,ng-form,[ngForm]',\n providers: [formDirectiveProvider],\n host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n outputs: ['ngSubmit'],\n exportAs: 'ngForm'\n }),\n __param(0, core.Optional()), __param(0, core.Self()), __param(0, core.Inject(NG_VALIDATORS)),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_ASYNC_VALIDATORS)),\n __metadata(\"design:paramtypes\", [Array, Array])\n ], NgForm);\n return NgForm;\n }(ControlContainer));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var TemplateDrivenErrors = /** @class */ (function () {\n function TemplateDrivenErrors() {\n }\n TemplateDrivenErrors.modelParentException = function () {\n throw new Error(\"\\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\\n formGroup's partner directive \\\"formControlName\\\" instead. Example:\\n\\n \" + FormErrorExamples.formControlName + \"\\n\\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\\n\\n Example:\\n\\n \" + FormErrorExamples.ngModelWithFormGroup);\n };\n TemplateDrivenErrors.formGroupNameException = function () {\n throw new Error(\"\\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\\n\\n Option 1: Use formControlName instead of ngModel (reactive strategy):\\n\\n \" + FormErrorExamples.formGroupName + \"\\n\\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\\n\\n \" + FormErrorExamples.ngModelGroup);\n };\n TemplateDrivenErrors.missingNameException = function () {\n throw new Error(\"If ngModel is used within a form tag, either the name attribute must be set or the form\\n control must be defined as 'standalone' in ngModelOptions.\\n\\n Example 1: <input [(ngModel)]=\\\"person.firstName\\\" name=\\\"first\\\">\\n Example 2: <input [(ngModel)]=\\\"person.firstName\\\" [ngModelOptions]=\\\"{standalone: true}\\\">\");\n };\n TemplateDrivenErrors.modelGroupParentException = function () {\n throw new Error(\"\\n ngModelGroup cannot be used with a parent formGroup directive.\\n\\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\\n\\n \" + FormErrorExamples.formGroupName + \"\\n\\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\\n\\n \" + FormErrorExamples.ngModelGroup);\n };\n TemplateDrivenErrors.ngFormWarning = function () {\n console.warn(\"\\n It looks like you're using 'ngForm'.\\n\\n Support for using the 'ngForm' element selector has been deprecated in Angular v6 and will be removed\\n in Angular v9.\\n\\n Use 'ng-form' instead.\\n\\n Before:\\n <ngForm #myForm=\\\"ngForm\\\">\\n\\n After:\\n <ng-form #myForm=\\\"ngForm\\\">\\n \");\n };\n return TemplateDrivenErrors;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n * `InjectionToken` to provide to turn off the warning when using 'ngForm' deprecated selector.\n */\n var NG_FORM_SELECTOR_WARNING = new core.InjectionToken('NgFormSelectorWarning');\n /**\n * This directive is solely used to display warnings when the deprecated `ngForm` selector is used.\n *\n * @deprecated in Angular v6 and will be removed in Angular v9.\n * @ngModule FormsModule\n * @publicApi\n */\n var NgFormSelectorWarning = /** @class */ (function () {\n function NgFormSelectorWarning(ngFormWarning) {\n if (((!ngFormWarning || ngFormWarning === 'once') && !NgFormSelectorWarning_1._ngFormWarning) ||\n ngFormWarning === 'always') {\n TemplateDrivenErrors.ngFormWarning();\n NgFormSelectorWarning_1._ngFormWarning = true;\n }\n }\n NgFormSelectorWarning_1 = NgFormSelectorWarning;\n var NgFormSelectorWarning_1;\n /**\n * Static property used to track whether the deprecation warning for this selector has been sent.\n * Used to support warning config of \"once\".\n *\n * @internal\n */\n NgFormSelectorWarning._ngFormWarning = false;\n NgFormSelectorWarning = NgFormSelectorWarning_1 = __decorate([\n core.Directive({ selector: 'ngForm' }),\n __param(0, core.Optional()), __param(0, core.Inject(NG_FORM_SELECTOR_WARNING)),\n __metadata(\"design:paramtypes\", [Object])\n ], NgFormSelectorWarning);\n return NgFormSelectorWarning;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var modelGroupProvider = {\n provide: ControlContainer,\n useExisting: core.forwardRef(function () { return NgModelGroup; })\n };\n /**\n * @description\n * Creates and binds a `FormGroup` instance to a DOM element.\n *\n * This directive can only be used as a child of `NgForm` (within `<form>` tags).\n *\n * Use this directive to validate a sub-group of your form separately from the\n * rest of your form, or if some values in your domain model make more sense\n * to consume together in a nested object.\n *\n * Provide a name for the sub-group and it will become the key\n * for the sub-group in the form's full value. If you need direct access, export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * @usageNotes\n *\n * ### Consuming controls in a grouping\n *\n * The following example shows you how to combine controls together in a sub-group\n * of the form.\n *\n * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * @ngModule FormsModule\n * @publicApi\n */\n var NgModelGroup = /** @class */ (function (_super) {\n __extends(NgModelGroup, _super);\n function NgModelGroup(parent, validators, asyncValidators) {\n var _this = _super.call(this) || this;\n _this._parent = parent;\n _this._validators = validators;\n _this._asyncValidators = asyncValidators;\n return _this;\n }\n NgModelGroup_1 = NgModelGroup;\n /** @internal */\n NgModelGroup.prototype._checkParentType = function () {\n if (!(this._parent instanceof NgModelGroup_1) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelGroupParentException();\n }\n };\n var NgModelGroup_1;\n __decorate([\n core.Input('ngModelGroup'),\n __metadata(\"design:type\", String)\n ], NgModelGroup.prototype, \"name\", void 0);\n NgModelGroup = NgModelGroup_1 = __decorate([\n core.Directive({ selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup' }),\n __param(0, core.Host()), __param(0, core.SkipSelf()),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_ASYNC_VALIDATORS)),\n __metadata(\"design:paramtypes\", [ControlContainer, Array, Array])\n ], NgModelGroup);\n return NgModelGroup;\n }(AbstractFormGroupDirective));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var formControlBinding = {\n provide: NgControl,\n useExisting: core.forwardRef(function () { return NgModel; })\n };\n /**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have and old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel` have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\n var resolvedPromise$1 = Promise.resolve(null);\n /**\n * @description\n * Creates a `FormControl` instance from a domain model and binds it\n * to a form control element.\n *\n * The `FormControl` instance tracks the value, user interaction, and\n * validation status of the control and keeps the view synced with the model. If used\n * within a parent form, the directive also registers itself with the form as a child\n * control.\n *\n * This directive is used by itself or as part of a larger form. Use the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional `Input`. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\n * class sets the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-box syntax'), the value in the UI always syncs back to\n * the domain model in your class.\n *\n * To inspect the properties of the associated `FormControl` (like validity state),\n * export the directive into a local template variable using `ngModel` as the key (ex: `#myVar=\"ngModel\"`).\n * You then access the control using the directive's `control` property,\n * but most properties used (like `valid` and `dirty`) fall through to the control anyway for direct access.\n * See a full list of properties directly available in `AbstractControlDirective`.\n *\n * @see `RadioControlValueAccessor`\n * @see `SelectControlValueAccessor`\n *\n * @usageNotes\n *\n * ### Using ngModel on a standalone control\n *\n * The following examples show a simple standalone control using `ngModel`:\n *\n * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * In the context of a parent form, it's often unnecessary to include one-way or two-way binding,\n * as the parent form syncs the value for you. You access its properties by exporting it into a\n * local template variable using `ngForm` such as (`#f=\"ngForm\"`). Use the variable where\n * needed on form submission.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n *\n * ### Using ngModel within a form\n *\n * The following example shows controls using `ngModel` within a form:\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Using a standalone ngModel within a group\n *\n * The following example shows you how to use a standalone ngModel control\n * within a form. This controls the display of the form, but doesn't contain form data.\n *\n * ```html\n * <form>\n * <input name=\"login\" ngModel placeholder=\"Login\">\n * <input type=\"checkbox\" ngModel [ngModelOptions]=\"{standalone: true}\"> Show more options?\n * </form>\n * <!-- form value: {login: ''} -->\n * ```\n *\n * ### Setting the ngModel name attribute through options\n *\n * The following example shows you an alternate way to set the name attribute. The name attribute is used\n * within a custom form component, and the name `@Input` property serves a different purpose.\n *\n * ```html\n * <form>\n * <my-person-control name=\"Nancy\" ngModel [ngModelOptions]=\"{name: 'user'}\">\n * </my-person-control>\n * </form>\n * <!-- form value: {user: ''} -->\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n var NgModel = /** @class */ (function (_super) {\n __extends(NgModel, _super);\n function NgModel(parent, validators, asyncValidators, valueAccessors) {\n var _this = _super.call(this) || this;\n _this.control = new FormControl();\n /** @internal */\n _this._registered = false;\n /**\n * @description\n * Event emitter for producing the `ngModelChange` event after\n * the view model updates.\n */\n _this.update = new core.EventEmitter();\n _this._parent = parent;\n _this._rawValidators = validators || [];\n _this._rawAsyncValidators = asyncValidators || [];\n _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n return _this;\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n NgModel.prototype.ngOnChanges = function (changes) {\n this._checkForErrors();\n if (!this._registered)\n this._setUpControl();\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n };\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal\n * use only.\n */\n NgModel.prototype.ngOnDestroy = function () { this.formDirective && this.formDirective.removeControl(this); };\n Object.defineProperty(NgModel.prototype, \"path\", {\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get: function () {\n return this._parent ? controlPath(this.name, this._parent) : [this.name];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgModel.prototype, \"formDirective\", {\n /**\n * @description\n * The top-level directive for this control if present, otherwise null.\n */\n get: function () { return this._parent ? this._parent.formDirective : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgModel.prototype, \"validator\", {\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get: function () { return composeValidators(this._rawValidators); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgModel.prototype, \"asyncValidator\", {\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get: function () {\n return composeAsyncValidators(this._rawAsyncValidators);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value emitted by `ngModelChange`.\n */\n NgModel.prototype.viewToModelUpdate = function (newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n };\n NgModel.prototype._setUpControl = function () {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() :\n this.formDirective.addControl(this);\n this._registered = true;\n };\n NgModel.prototype._setUpdateStrategy = function () {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n };\n NgModel.prototype._isStandalone = function () {\n return !this._parent || !!(this.options && this.options.standalone);\n };\n NgModel.prototype._setUpStandalone = function () {\n setUpControl(this.control, this);\n this.control.updateValueAndValidity({ emitEvent: false });\n };\n NgModel.prototype._checkForErrors = function () {\n if (!this._isStandalone()) {\n this._checkParentType();\n }\n this._checkName();\n };\n NgModel.prototype._checkParentType = function () {\n if (!(this._parent instanceof NgModelGroup) &&\n this._parent instanceof AbstractFormGroupDirective) {\n TemplateDrivenErrors.formGroupNameException();\n }\n else if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelParentException();\n }\n };\n NgModel.prototype._checkName = function () {\n if (this.options && this.options.name)\n this.name = this.options.name;\n if (!this._isStandalone() && !this.name) {\n TemplateDrivenErrors.missingNameException();\n }\n };\n NgModel.prototype._updateValue = function (value) {\n var _this = this;\n resolvedPromise$1.then(function () { _this.control.setValue(value, { emitViewToModelChange: false }); });\n };\n NgModel.prototype._updateDisabled = function (changes) {\n var _this = this;\n var disabledValue = changes['isDisabled'].currentValue;\n var isDisabled = disabledValue === '' || (disabledValue && disabledValue !== 'false');\n resolvedPromise$1.then(function () {\n if (isDisabled && !_this.control.disabled) {\n _this.control.disable();\n }\n else if (!isDisabled && _this.control.disabled) {\n _this.control.enable();\n }\n });\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", String)\n ], NgModel.prototype, \"name\", void 0);\n __decorate([\n core.Input('disabled'),\n __metadata(\"design:type\", Boolean)\n ], NgModel.prototype, \"isDisabled\", void 0);\n __decorate([\n core.Input('ngModel'),\n __metadata(\"design:type\", Object)\n ], NgModel.prototype, \"model\", void 0);\n __decorate([\n core.Input('ngModelOptions'),\n __metadata(\"design:type\", Object)\n ], NgModel.prototype, \"options\", void 0);\n __decorate([\n core.Output('ngModelChange'),\n __metadata(\"design:type\", Object)\n ], NgModel.prototype, \"update\", void 0);\n NgModel = __decorate([\n core.Directive({\n selector: '[ngModel]:not([formControlName]):not([formControl])',\n providers: [formControlBinding],\n exportAs: 'ngModel'\n }),\n __param(0, core.Optional()), __param(0, core.Host()),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_ASYNC_VALIDATORS)),\n __param(3, core.Optional()), __param(3, core.Self()), __param(3, core.Inject(NG_VALUE_ACCESSOR)),\n __metadata(\"design:paramtypes\", [ControlContainer,\n Array,\n Array, Array])\n ], NgModel);\n return NgModel;\n }(NgControl));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * Token to provide to turn off the ngModel warning on formControl and formControlName.\n */\n var NG_MODEL_WITH_FORM_CONTROL_WARNING = new core.InjectionToken('NgModelWithFormControlWarning');\n var formControlBinding$1 = {\n provide: NgControl,\n useExisting: core.forwardRef(function () { return FormControlDirective; })\n };\n /**\n * @description\n * * Syncs a standalone `FormControl` instance to a form control element.\n *\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Registering a single form control\n *\n * The following examples shows how to register a standalone control and set its value.\n *\n * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <input [formControl]=\"control\" [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <input [formControl]=\"control\">\n * ```\n *\n * ```ts\n * this.control.setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var FormControlDirective = /** @class */ (function (_super) {\n __extends(FormControlDirective, _super);\n function FormControlDirective(validators, asyncValidators, valueAccessors, _ngModelWarningConfig) {\n var _this = _super.call(this) || this;\n _this._ngModelWarningConfig = _ngModelWarningConfig;\n /** @deprecated as of v6 */\n _this.update = new core.EventEmitter();\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular `FormControlDirective` instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _this._ngModelWarningSent = false;\n _this._rawValidators = validators || [];\n _this._rawAsyncValidators = asyncValidators || [];\n _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n return _this;\n }\n FormControlDirective_1 = FormControlDirective;\n Object.defineProperty(FormControlDirective.prototype, \"isDisabled\", {\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n set: function (isDisabled) { ReactiveErrors.disabledAttrWarning(); },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n FormControlDirective.prototype.ngOnChanges = function (changes) {\n if (this._isControlChanged(changes)) {\n setUpControl(this.form, this);\n if (this.control.disabled && this.valueAccessor.setDisabledState) {\n this.valueAccessor.setDisabledState(true);\n }\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning('formControl', FormControlDirective_1, this, this._ngModelWarningConfig);\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n };\n Object.defineProperty(FormControlDirective.prototype, \"path\", {\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get: function () { return []; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlDirective.prototype, \"validator\", {\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get: function () { return composeValidators(this._rawValidators); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlDirective.prototype, \"asyncValidator\", {\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get: function () {\n return composeAsyncValidators(this._rawAsyncValidators);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlDirective.prototype, \"control\", {\n /**\n * @description\n * The `FormControl` bound to this directive.\n */\n get: function () { return this.form; },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n FormControlDirective.prototype.viewToModelUpdate = function (newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n };\n FormControlDirective.prototype._isControlChanged = function (changes) {\n return changes.hasOwnProperty('form');\n };\n var FormControlDirective_1;\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlDirective. Used to support warning config of \"once\".\n *\n * @internal\n */\n FormControlDirective._ngModelWarningSentOnce = false;\n __decorate([\n core.Input('formControl'),\n __metadata(\"design:type\", FormControl)\n ], FormControlDirective.prototype, \"form\", void 0);\n __decorate([\n core.Input('disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n ], FormControlDirective.prototype, \"isDisabled\", null);\n __decorate([\n core.Input('ngModel'),\n __metadata(\"design:type\", Object)\n ], FormControlDirective.prototype, \"model\", void 0);\n __decorate([\n core.Output('ngModelChange'),\n __metadata(\"design:type\", Object)\n ], FormControlDirective.prototype, \"update\", void 0);\n FormControlDirective = FormControlDirective_1 = __decorate([\n core.Directive({ selector: '[formControl]', providers: [formControlBinding$1], exportAs: 'ngForm' }),\n __param(0, core.Optional()), __param(0, core.Self()), __param(0, core.Inject(NG_VALIDATORS)),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_ASYNC_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_VALUE_ACCESSOR)),\n __param(3, core.Optional()), __param(3, core.Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING)),\n __metadata(\"design:paramtypes\", [Array,\n Array, Array, Object])\n ], FormControlDirective);\n return FormControlDirective;\n }(NgControl));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var formDirectiveProvider$1 = {\n provide: ControlContainer,\n useExisting: core.forwardRef(function () { return FormGroupDirective; })\n };\n /**\n * @description\n *\n * Binds an existing `FormGroup` to a DOM element.\n *\n * This directive accepts an existing `FormGroup` instance. It will then use this\n * `FormGroup` instance to match any child `FormControl`, `FormGroup`,\n * and `FormArray` instances to child `FormControlName`, `FormGroupName`,\n * and `FormArrayName` directives.\n *\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * ### Register Form Group\n *\n * The following example registers a `FormGroup` with first name and last name controls,\n * and listens for the *ngSubmit* event when the button is clicked.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var FormGroupDirective = /** @class */ (function (_super) {\n __extends(FormGroupDirective, _super);\n function FormGroupDirective(_validators, _asyncValidators) {\n var _this = _super.call(this) || this;\n _this._validators = _validators;\n _this._asyncValidators = _asyncValidators;\n /**\n * @description\n * Reports whether the form submission has been triggered.\n */\n _this.submitted = false;\n /**\n * @description\n * Tracks the list of added `FormControlName` instances\n */\n _this.directives = [];\n /**\n * @description\n * Tracks the `FormGroup` bound to this directive.\n */\n _this.form = null;\n /**\n * @description\n * Emits an event when the form submission has been triggered.\n */\n _this.ngSubmit = new core.EventEmitter();\n return _this;\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n FormGroupDirective.prototype.ngOnChanges = function (changes) {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n }\n };\n Object.defineProperty(FormGroupDirective.prototype, \"formDirective\", {\n /**\n * @description\n * Returns this directive's instance.\n */\n get: function () { return this; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormGroupDirective.prototype, \"control\", {\n /**\n * @description\n * Returns the `FormGroup` bound to this directive.\n */\n get: function () { return this.form; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormGroupDirective.prototype, \"path\", {\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it always an empty array.\n */\n get: function () { return []; },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `FormControlName` directive instance.\n */\n FormGroupDirective.prototype.addControl = function (dir) {\n var ctrl = this.form.get(dir.path);\n setUpControl(ctrl, dir);\n ctrl.updateValueAndValidity({ emitEvent: false });\n this.directives.push(dir);\n return ctrl;\n };\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `FormControlName` directive\n *\n * @param dir The `FormControlName` directive instance.\n */\n FormGroupDirective.prototype.getControl = function (dir) { return this.form.get(dir.path); };\n /**\n * @description\n * Removes the `FormControlName` instance from the internal list of directives\n *\n * @param dir The `FormControlName` directive instance.\n */\n FormGroupDirective.prototype.removeControl = function (dir) { removeDir(this.directives, dir); };\n /**\n * Adds a new `FormGroupName` directive instance to the form.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n FormGroupDirective.prototype.addFormGroup = function (dir) {\n var ctrl = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({ emitEvent: false });\n };\n /**\n * No-op method to remove the form group.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n FormGroupDirective.prototype.removeFormGroup = function (dir) { };\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance\n *\n * @param dir The `FormGroupName` directive instance.\n */\n FormGroupDirective.prototype.getFormGroup = function (dir) { return this.form.get(dir.path); };\n /**\n * Adds a new `FormArrayName` directive instance to the form.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n FormGroupDirective.prototype.addFormArray = function (dir) {\n var ctrl = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({ emitEvent: false });\n };\n /**\n * No-op method to remove the form array.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n FormGroupDirective.prototype.removeFormArray = function (dir) { };\n /**\n * @description\n * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n FormGroupDirective.prototype.getFormArray = function (dir) { return this.form.get(dir.path); };\n /**\n * Sets the new value for the provided `FormControlName` directive.\n *\n * @param dir The `FormControlName` directive instance.\n * @param value The new value for the directive's control.\n */\n FormGroupDirective.prototype.updateModel = function (dir, value) {\n var ctrl = this.form.get(dir.path);\n ctrl.setValue(value);\n };\n /**\n * @description\n * Method called with the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n FormGroupDirective.prototype.onSubmit = function ($event) {\n this.submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n return false;\n };\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n FormGroupDirective.prototype.onReset = function () { this.resetForm(); };\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n FormGroupDirective.prototype.resetForm = function (value) {\n if (value === void 0) { value = undefined; }\n this.form.reset(value);\n this.submitted = false;\n };\n /** @internal */\n FormGroupDirective.prototype._updateDomValue = function () {\n var _this = this;\n this.directives.forEach(function (dir) {\n var newCtrl = _this.form.get(dir.path);\n if (dir.control !== newCtrl) {\n cleanUpControl(dir.control, dir);\n if (newCtrl)\n setUpControl(newCtrl, dir);\n dir.control = newCtrl;\n }\n });\n this.form._updateTreeValidity({ emitEvent: false });\n };\n FormGroupDirective.prototype._updateRegistrations = function () {\n var _this = this;\n this.form._registerOnCollectionChange(function () { return _this._updateDomValue(); });\n if (this._oldForm)\n this._oldForm._registerOnCollectionChange(function () { });\n this._oldForm = this.form;\n };\n FormGroupDirective.prototype._updateValidators = function () {\n var sync = composeValidators(this._validators);\n this.form.validator = Validators.compose([this.form.validator, sync]);\n var async = composeAsyncValidators(this._asyncValidators);\n this.form.asyncValidator = Validators.composeAsync([this.form.asyncValidator, async]);\n };\n FormGroupDirective.prototype._checkFormPresent = function () {\n if (!this.form) {\n ReactiveErrors.missingFormException();\n }\n };\n __decorate([\n core.Input('formGroup'),\n __metadata(\"design:type\", FormGroup)\n ], FormGroupDirective.prototype, \"form\", void 0);\n __decorate([\n core.Output(),\n __metadata(\"design:type\", Object)\n ], FormGroupDirective.prototype, \"ngSubmit\", void 0);\n FormGroupDirective = __decorate([\n core.Directive({\n selector: '[formGroup]',\n providers: [formDirectiveProvider$1],\n host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n exportAs: 'ngForm'\n }),\n __param(0, core.Optional()), __param(0, core.Self()), __param(0, core.Inject(NG_VALIDATORS)),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_ASYNC_VALIDATORS)),\n __metadata(\"design:paramtypes\", [Array, Array])\n ], FormGroupDirective);\n return FormGroupDirective;\n }(ControlContainer));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var formGroupNameProvider = {\n provide: ControlContainer,\n useExisting: core.forwardRef(function () { return FormGroupName; })\n };\n /**\n * @description\n *\n * Syncs a nested `FormGroup` to a DOM element.\n *\n * This directive can only be used with a parent `FormGroupDirective`.\n *\n * It accepts the string name of the nested `FormGroup` to link, and\n * looks for a `FormGroup` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * Use nested form groups to validate a sub-group of a\n * form separately from the rest or to group the values of certain\n * controls into their own nested object.\n *\n * @see [Reactive Forms Guide](guide/reactive-forms)\n *\n * @usageNotes\n *\n * ### Access the group by name\n *\n * The following example uses the {@link AbstractControl#get get} method to access the\n * associated `FormGroup`\n *\n * ```ts\n * this.form.get('name');\n * ```\n *\n * ### Access individual controls in the group\n *\n * The following example uses the {@link AbstractControl#get get} method to access\n * individual controls within the group using dot syntax.\n *\n * ```ts\n * this.form.get('name.first');\n * ```\n *\n * ### Register a nested `FormGroup`.\n *\n * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,\n * and provides methods to retrieve the nested `FormGroup` and individual controls.\n *\n * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var FormGroupName = /** @class */ (function (_super) {\n __extends(FormGroupName, _super);\n function FormGroupName(parent, validators, asyncValidators) {\n var _this = _super.call(this) || this;\n _this._parent = parent;\n _this._validators = validators;\n _this._asyncValidators = asyncValidators;\n return _this;\n }\n /** @internal */\n FormGroupName.prototype._checkParentType = function () {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.groupParentException();\n }\n };\n __decorate([\n core.Input('formGroupName'),\n __metadata(\"design:type\", String)\n ], FormGroupName.prototype, \"name\", void 0);\n FormGroupName = __decorate([\n core.Directive({ selector: '[formGroupName]', providers: [formGroupNameProvider] }),\n __param(0, core.Optional()), __param(0, core.Host()), __param(0, core.SkipSelf()),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_ASYNC_VALIDATORS)),\n __metadata(\"design:paramtypes\", [ControlContainer, Array, Array])\n ], FormGroupName);\n return FormGroupName;\n }(AbstractFormGroupDirective));\n var formArrayNameProvider = {\n provide: ControlContainer,\n useExisting: core.forwardRef(function () { return FormArrayName; })\n };\n /**\n * @description\n *\n * Syncs a nested `FormArray` to a DOM element.\n *\n * This directive is designed to be used with a parent `FormGroupDirective` (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested `FormArray` you want to link, and\n * will look for a `FormArray` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var FormArrayName = /** @class */ (function (_super) {\n __extends(FormArrayName, _super);\n function FormArrayName(parent, validators, asyncValidators) {\n var _this = _super.call(this) || this;\n _this._parent = parent;\n _this._validators = validators;\n _this._asyncValidators = asyncValidators;\n return _this;\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs are initialized. For internal use only.\n *\n * @throws If the directive does not have a valid parent.\n */\n FormArrayName.prototype.ngOnInit = function () {\n this._checkParentType();\n this.formDirective.addFormArray(this);\n };\n /**\n * @description\n * A lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n FormArrayName.prototype.ngOnDestroy = function () {\n if (this.formDirective) {\n this.formDirective.removeFormArray(this);\n }\n };\n Object.defineProperty(FormArrayName.prototype, \"control\", {\n /**\n * @description\n * The `FormArray` bound to this directive.\n */\n get: function () { return this.formDirective.getFormArray(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormArrayName.prototype, \"formDirective\", {\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get: function () {\n return this._parent ? this._parent.formDirective : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormArrayName.prototype, \"path\", {\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get: function () { return controlPath(this.name, this._parent); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormArrayName.prototype, \"validator\", {\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators registered with this\n * directive.\n */\n get: function () { return composeValidators(this._validators); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormArrayName.prototype, \"asyncValidator\", {\n /**\n * @description\n * Async validator function composed of all the async validators registered with this directive.\n */\n get: function () {\n return composeAsyncValidators(this._asyncValidators);\n },\n enumerable: true,\n configurable: true\n });\n FormArrayName.prototype._checkParentType = function () {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.arrayParentException();\n }\n };\n __decorate([\n core.Input('formArrayName'),\n __metadata(\"design:type\", String)\n ], FormArrayName.prototype, \"name\", void 0);\n FormArrayName = __decorate([\n core.Directive({ selector: '[formArrayName]', providers: [formArrayNameProvider] }),\n __param(0, core.Optional()), __param(0, core.Host()), __param(0, core.SkipSelf()),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_ASYNC_VALIDATORS)),\n __metadata(\"design:paramtypes\", [ControlContainer, Array, Array])\n ], FormArrayName);\n return FormArrayName;\n }(ControlContainer));\n function _hasInvalidParent(parent) {\n return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n !(parent instanceof FormArrayName);\n }\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var controlNameBinding = {\n provide: NgControl,\n useExisting: core.forwardRef(function () { return FormControlName; })\n };\n /**\n * @description\n * Syncs a `FormControl` in an existing `FormGroup` to a form control\n * element by name.\n *\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Register `FormControl` within a group\n *\n * The following example shows how to register multiple form controls within a form group\n * and set their value.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: `RadioControlValueAccessor`\n * * Selects: `SelectControlValueAccessor`\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\" [(ngModel)]=\"value\">\n * </form>\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\">\n * </form>\n * ```\n *\n * ```ts\n * this.form.get('first').setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var FormControlName = /** @class */ (function (_super) {\n __extends(FormControlName, _super);\n function FormControlName(parent, validators, asyncValidators, valueAccessors, _ngModelWarningConfig) {\n var _this = _super.call(this) || this;\n _this._ngModelWarningConfig = _ngModelWarningConfig;\n _this._added = false;\n /** @deprecated as of v6 */\n _this.update = new core.EventEmitter();\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular FormControlName instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _this._ngModelWarningSent = false;\n _this._parent = parent;\n _this._rawValidators = validators || [];\n _this._rawAsyncValidators = asyncValidators || [];\n _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n return _this;\n }\n FormControlName_1 = FormControlName;\n Object.defineProperty(FormControlName.prototype, \"isDisabled\", {\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n set: function (isDisabled) { ReactiveErrors.disabledAttrWarning(); },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n FormControlName.prototype.ngOnChanges = function (changes) {\n if (!this._added)\n this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning('formControlName', FormControlName_1, this, this._ngModelWarningConfig);\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n };\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n FormControlName.prototype.ngOnDestroy = function () {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n };\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n FormControlName.prototype.viewToModelUpdate = function (newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n };\n Object.defineProperty(FormControlName.prototype, \"path\", {\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get: function () { return controlPath(this.name, this._parent); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlName.prototype, \"formDirective\", {\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get: function () { return this._parent ? this._parent.formDirective : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlName.prototype, \"validator\", {\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get: function () { return composeValidators(this._rawValidators); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlName.prototype, \"asyncValidator\", {\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get: function () {\n return composeAsyncValidators(this._rawAsyncValidators);\n },\n enumerable: true,\n configurable: true\n });\n FormControlName.prototype._checkParentType = function () {\n if (!(this._parent instanceof FormGroupName) &&\n this._parent instanceof AbstractFormGroupDirective) {\n ReactiveErrors.ngModelGroupException();\n }\n else if (!(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&\n !(this._parent instanceof FormArrayName)) {\n ReactiveErrors.controlParentException();\n }\n };\n FormControlName.prototype._setUpControl = function () {\n this._checkParentType();\n this.control = this.formDirective.addControl(this);\n if (this.control.disabled && this.valueAccessor.setDisabledState) {\n this.valueAccessor.setDisabledState(true);\n }\n this._added = true;\n };\n var FormControlName_1;\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlName. Used to support warning config of \"once\".\n *\n * @internal\n */\n FormControlName._ngModelWarningSentOnce = false;\n __decorate([\n core.Input('formControlName'),\n __metadata(\"design:type\", String)\n ], FormControlName.prototype, \"name\", void 0);\n __decorate([\n core.Input('disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n ], FormControlName.prototype, \"isDisabled\", null);\n __decorate([\n core.Input('ngModel'),\n __metadata(\"design:type\", Object)\n ], FormControlName.prototype, \"model\", void 0);\n __decorate([\n core.Output('ngModelChange'),\n __metadata(\"design:type\", Object)\n ], FormControlName.prototype, \"update\", void 0);\n FormControlName = FormControlName_1 = __decorate([\n core.Directive({ selector: '[formControlName]', providers: [controlNameBinding] }),\n __param(0, core.Optional()), __param(0, core.Host()), __param(0, core.SkipSelf()),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_ASYNC_VALIDATORS)),\n __param(3, core.Optional()), __param(3, core.Self()), __param(3, core.Inject(NG_VALUE_ACCESSOR)),\n __param(4, core.Optional()), __param(4, core.Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING)),\n __metadata(\"design:paramtypes\", [ControlContainer,\n Array,\n Array, Array, Object])\n ], FormControlName);\n return FormControlName;\n }(NgControl));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return RequiredValidator; }),\n multi: true\n };\n /**\n * @description\n * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var CHECKBOX_REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return CheckboxRequiredValidator; }),\n multi: true\n };\n /**\n * @description\n * A directive that adds the `required` validator to any controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a required validator using template-driven forms\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var RequiredValidator = /** @class */ (function () {\n function RequiredValidator() {\n }\n Object.defineProperty(RequiredValidator.prototype, \"required\", {\n /**\n * @description\n * Tracks changes to the required attribute bound to this directive.\n */\n get: function () { return this._required; },\n set: function (value) {\n this._required = value != null && value !== false && \"\" + value !== 'false';\n if (this._onChange)\n this._onChange();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Method that validates whether the control is empty.\n * Returns the validation result if enabled, otherwise null.\n */\n RequiredValidator.prototype.validate = function (control) {\n return this.required ? Validators.required(control) : null;\n };\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n RequiredValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], RequiredValidator.prototype, \"required\", null);\n RequiredValidator = __decorate([\n core.Directive({\n selector: ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n providers: [REQUIRED_VALIDATOR],\n host: { '[attr.required]': 'required ? \"\" : null' }\n })\n ], RequiredValidator);\n return RequiredValidator;\n }());\n /**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a required checkbox validator using template-driven forms\n *\n * The following example shows how to add a checkbox required validator to an input attached to an ngModel binding.\n *\n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n var CheckboxRequiredValidator = /** @class */ (function (_super) {\n __extends(CheckboxRequiredValidator, _super);\n function CheckboxRequiredValidator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @description\n * Method that validates whether or not the checkbox has been checked.\n * Returns the validation result if enabled, otherwise null.\n */\n CheckboxRequiredValidator.prototype.validate = function (control) {\n return this.required ? Validators.requiredTrue(control) : null;\n };\n CheckboxRequiredValidator = __decorate([\n core.Directive({\n selector: 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n providers: [CHECKBOX_REQUIRED_VALIDATOR],\n host: { '[attr.required]': 'required ? \"\" : null' }\n })\n ], CheckboxRequiredValidator);\n return CheckboxRequiredValidator;\n }(RequiredValidator));\n /**\n * @description\n * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var EMAIL_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return EmailValidator; }),\n multi: true\n };\n /**\n * A directive that adds the `email` validator to controls marked with the\n * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding an email validator\n *\n * The following example shows how to add an email validator to an input attached to an ngModel binding.\n *\n * ```\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n var EmailValidator = /** @class */ (function () {\n function EmailValidator() {\n }\n Object.defineProperty(EmailValidator.prototype, \"email\", {\n /**\n * @description\n * Tracks changes to the email attribute bound to this directive.\n */\n set: function (value) {\n this._enabled = value === '' || value === true || value === 'true';\n if (this._onChange)\n this._onChange();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Method that validates whether an email address is valid.\n * Returns the validation result if enabled, otherwise null.\n */\n EmailValidator.prototype.validate = function (control) {\n return this._enabled ? Validators.email(control) : null;\n };\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n EmailValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], EmailValidator.prototype, \"email\", null);\n EmailValidator = __decorate([\n core.Directive({\n selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n providers: [EMAIL_VALIDATOR]\n })\n ], EmailValidator);\n return EmailValidator;\n }());\n /**\n * @description\n * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var MIN_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return MinLengthValidator; }),\n multi: true\n };\n /**\n * A directive that adds minimum length validation to controls marked with the\n * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` mult-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a minimum length validator\n *\n * The following example shows how to add a minimum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel minlength=\"4\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var MinLengthValidator = /** @class */ (function () {\n function MinLengthValidator() {\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n MinLengthValidator.prototype.ngOnChanges = function (changes) {\n if ('minlength' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n };\n /**\n * @description\n * Method that validates whether the value meets a minimum length\n * requirement. Returns the validation result if enabled, otherwise null.\n */\n MinLengthValidator.prototype.validate = function (control) {\n return this.minlength == null ? null : this._validator(control);\n };\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n MinLengthValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n MinLengthValidator.prototype._createValidator = function () {\n this._validator = Validators.minLength(parseInt(this.minlength, 10));\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", String)\n ], MinLengthValidator.prototype, \"minlength\", void 0);\n MinLengthValidator = __decorate([\n core.Directive({\n selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n providers: [MIN_LENGTH_VALIDATOR],\n host: { '[attr.minlength]': 'minlength ? minlength : null' }\n })\n ], MinLengthValidator);\n return MinLengthValidator;\n }());\n /**\n * @description\n * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var MAX_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return MaxLengthValidator; }),\n multi: true\n };\n /**\n * A directive that adds max length validation to controls marked with the\n * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a maximum length validator\n *\n * The following example shows how to add a maximum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel maxlength=\"25\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var MaxLengthValidator = /** @class */ (function () {\n function MaxLengthValidator() {\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n MaxLengthValidator.prototype.ngOnChanges = function (changes) {\n if ('maxlength' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n };\n /**\n * @description\n * Method that validates whether the value exceeds\n * the maximum length requirement.\n */\n MaxLengthValidator.prototype.validate = function (control) {\n return this.maxlength != null ? this._validator(control) : null;\n };\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n MaxLengthValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n MaxLengthValidator.prototype._createValidator = function () {\n this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", String)\n ], MaxLengthValidator.prototype, \"maxlength\", void 0);\n MaxLengthValidator = __decorate([\n core.Directive({\n selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n providers: [MAX_LENGTH_VALIDATOR],\n host: { '[attr.maxlength]': 'maxlength ? maxlength : null' }\n })\n ], MaxLengthValidator);\n return MaxLengthValidator;\n }());\n /**\n * @description\n * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var PATTERN_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return PatternValidator; }),\n multi: true\n };\n /**\n * @description\n * A directive that adds regex pattern validation to controls marked with the\n * `pattern` attribute. The regex must match the entire control value.\n * The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a pattern validator\n *\n * The following example shows how to add a pattern validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var PatternValidator = /** @class */ (function () {\n function PatternValidator() {\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n PatternValidator.prototype.ngOnChanges = function (changes) {\n if ('pattern' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n };\n /**\n * @description\n * Method that validates whether the value matches the\n * the pattern requirement.\n */\n PatternValidator.prototype.validate = function (control) { return this._validator(control); };\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n PatternValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n PatternValidator.prototype._createValidator = function () { this._validator = Validators.pattern(this.pattern); };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Object)\n ], PatternValidator.prototype, \"pattern\", void 0);\n PatternValidator = __decorate([\n core.Directive({\n selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n providers: [PATTERN_VALIDATOR],\n host: { '[attr.pattern]': 'pattern ? pattern : null' }\n })\n ], PatternValidator);\n return PatternValidator;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function isAbstractControlOptions(options) {\n return options.asyncValidators !== undefined ||\n options.validators !== undefined ||\n options.updateOn !== undefined;\n }\n /**\n * @description\n * Creates an `AbstractControl` from a user-specified configuration.\n *\n * The `FormBuilder` provides syntactic sugar that shortens creating instances of a `FormControl`,\n * `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to build complex\n * forms.\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n var FormBuilder = /** @class */ (function () {\n function FormBuilder() {\n }\n /**\n * @description\n * Construct a new `FormGroup` instance.\n *\n * @param controlsConfig A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param options Configuration options object for the `FormGroup`. The object can\n * have two shapes:\n *\n * 1) `AbstractControlOptions` object (preferred), which consists of:\n * * `validators`: A synchronous validator function, or an array of validator functions\n * * `asyncValidators`: A single async validator or array of async validator functions\n * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur' |\n * submit')\n *\n * 2) Legacy configuration object, which consists of:\n * * `validator`: A synchronous validator function, or an array of validator functions\n * * `asyncValidator`: A single async validator or array of async validator functions\n *\n */\n FormBuilder.prototype.group = function (controlsConfig, options) {\n if (options === void 0) { options = null; }\n var controls = this._reduceControls(controlsConfig);\n var validators = null;\n var asyncValidators = null;\n var updateOn = undefined;\n if (options != null) {\n if (isAbstractControlOptions(options)) {\n // `options` are `AbstractControlOptions`\n validators = options.validators != null ? options.validators : null;\n asyncValidators = options.asyncValidators != null ? options.asyncValidators : null;\n updateOn = options.updateOn != null ? options.updateOn : undefined;\n }\n else {\n // `options` are legacy form group options\n validators = options.validator != null ? options.validator : null;\n asyncValidators = options.asyncValidator != null ? options.asyncValidator : null;\n }\n }\n return new FormGroup(controls, { asyncValidators: asyncValidators, updateOn: updateOn, validators: validators });\n };\n /**\n * @description\n * Construct a new `FormControl` with the given state, validators and options.\n *\n * @param formState Initializes the control with an initial state value, or\n * with an object that contains both a value and a disabled status.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n *\n * @usageNotes\n *\n * ### Initialize a control as disabled\n *\n * The following example returns a control with an initial value in a disabled state.\n *\n * <code-example path=\"forms/ts/formBuilder/form_builder_example.ts\"\n * linenums=\"false\" region=\"disabled-control\">\n * </code-example>\n */\n FormBuilder.prototype.control = function (formState, validatorOrOpts, asyncValidator) {\n return new FormControl(formState, validatorOrOpts, asyncValidator);\n };\n /**\n * Constructs a new `FormArray` from the given array of configurations,\n * validators and options.\n *\n * @param controlsConfig An array of child controls or control configs. Each\n * child control is given an index when it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n */\n FormBuilder.prototype.array = function (controlsConfig, validatorOrOpts, asyncValidator) {\n var _this = this;\n var controls = controlsConfig.map(function (c) { return _this._createControl(c); });\n return new FormArray(controls, validatorOrOpts, asyncValidator);\n };\n /** @internal */\n FormBuilder.prototype._reduceControls = function (controlsConfig) {\n var _this = this;\n var controls = {};\n Object.keys(controlsConfig).forEach(function (controlName) {\n controls[controlName] = _this._createControl(controlsConfig[controlName]);\n });\n return controls;\n };\n /** @internal */\n FormBuilder.prototype._createControl = function (controlConfig) {\n if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n controlConfig instanceof FormArray) {\n return controlConfig;\n }\n else if (Array.isArray(controlConfig)) {\n var value = controlConfig[0];\n var validator = controlConfig.length > 1 ? controlConfig[1] : null;\n var asyncValidator = controlConfig.length > 2 ? controlConfig[2] : null;\n return this.control(value, validator, asyncValidator);\n }\n else {\n return this.control(controlConfig);\n }\n };\n FormBuilder = __decorate([\n core.Injectable()\n ], FormBuilder);\n return FormBuilder;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @publicApi\n */\n var VERSION = new core.Version('7.2.7');\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n *\n * Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```\n * <form ngNativeValidate></form>\n * ```\n *\n * @publicApi\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n var NgNoValidate = /** @class */ (function () {\n function NgNoValidate() {\n }\n NgNoValidate = __decorate([\n core.Directive({\n selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n host: { 'novalidate': '' },\n })\n ], NgNoValidate);\n return NgNoValidate;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var SHARED_FORM_DIRECTIVES = [\n NgNoValidate,\n NgSelectOption,\n NgSelectMultipleOption,\n DefaultValueAccessor,\n NumberValueAccessor,\n RangeValueAccessor,\n CheckboxControlValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n NgControlStatus,\n NgControlStatusGroup,\n RequiredValidator,\n MinLengthValidator,\n MaxLengthValidator,\n PatternValidator,\n CheckboxRequiredValidator,\n EmailValidator,\n ];\n var TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm, NgFormSelectorWarning];\n var REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n /**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\n var InternalFormsSharedModule = /** @class */ (function () {\n function InternalFormsSharedModule() {\n }\n InternalFormsSharedModule = __decorate([\n core.NgModule({\n declarations: SHARED_FORM_DIRECTIVES,\n exports: SHARED_FORM_DIRECTIVES,\n })\n ], InternalFormsSharedModule);\n return InternalFormsSharedModule;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * Exports the required providers and directives for template-driven forms,\n * making them available for import by NgModules that import this module.\n *\n * @see [Forms Guide](/guide/forms)\n *\n * @publicApi\n */\n var FormsModule = /** @class */ (function () {\n function FormsModule() {\n }\n FormsModule_1 = FormsModule;\n /**\n * @description\n * Provides options for configuring the template-driven forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnDeprecatedNgFormSelector` Configures when to emit a warning when the deprecated\n * `ngForm` selector is used.\n */\n FormsModule.withConfig = function (opts) {\n return {\n ngModule: FormsModule_1,\n providers: [{ provide: NG_FORM_SELECTOR_WARNING, useValue: opts.warnOnDeprecatedNgFormSelector }]\n };\n };\n var FormsModule_1;\n FormsModule = FormsModule_1 = __decorate([\n core.NgModule({\n declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n providers: [RadioControlRegistry],\n exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n })\n ], FormsModule);\n return FormsModule;\n }());\n /**\n * Exports the required infrastructure and directives for reactive forms,\n * making them available for import by NgModules that import this module.\n * @see [Forms](guide/reactive-forms)\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n var ReactiveFormsModule = /** @class */ (function () {\n function ReactiveFormsModule() {\n }\n ReactiveFormsModule_1 = ReactiveFormsModule;\n /**\n * @description\n * Provides options for configuring the reactive forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`\n * binding is used with reactive form directives.\n */\n ReactiveFormsModule.withConfig = function (opts) {\n return {\n ngModule: ReactiveFormsModule_1,\n providers: [{\n provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,\n useValue: opts.warnOnNgModelWithFormControl\n }]\n };\n };\n var ReactiveFormsModule_1;\n ReactiveFormsModule = ReactiveFormsModule_1 = __decorate([\n core.NgModule({\n declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n providers: [FormBuilder, RadioControlRegistry],\n exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n })\n ], ReactiveFormsModule);\n return ReactiveFormsModule;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n // This file only reexports content of the `src` folder. Keep it that way.\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n /**\n * Generated bundle index. Do not edit.\n */\n\n exports.ɵangular_packages_forms_forms_bc = InternalFormsSharedModule;\n exports.ɵangular_packages_forms_forms_bb = REACTIVE_DRIVEN_DIRECTIVES;\n exports.ɵangular_packages_forms_forms_z = SHARED_FORM_DIRECTIVES;\n exports.ɵangular_packages_forms_forms_ba = TEMPLATE_DRIVEN_DIRECTIVES;\n exports.ɵangular_packages_forms_forms_a = CHECKBOX_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_b = DEFAULT_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_c = AbstractControlStatus;\n exports.ɵangular_packages_forms_forms_d = ngControlStatusHost;\n exports.ɵangular_packages_forms_forms_e = formDirectiveProvider;\n exports.ɵangular_packages_forms_forms_f = NG_FORM_SELECTOR_WARNING;\n exports.ɵangular_packages_forms_forms_g = formControlBinding;\n exports.ɵangular_packages_forms_forms_h = modelGroupProvider;\n exports.ɵangular_packages_forms_forms_bh = NgNoValidate;\n exports.ɵangular_packages_forms_forms_bd = NUMBER_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_be = NumberValueAccessor;\n exports.ɵangular_packages_forms_forms_i = RADIO_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_j = RadioControlRegistry;\n exports.ɵangular_packages_forms_forms_bf = RANGE_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_bg = RangeValueAccessor;\n exports.ɵangular_packages_forms_forms_k = NG_MODEL_WITH_FORM_CONTROL_WARNING;\n exports.ɵangular_packages_forms_forms_l = formControlBinding$1;\n exports.ɵangular_packages_forms_forms_m = controlNameBinding;\n exports.ɵangular_packages_forms_forms_n = formDirectiveProvider$1;\n exports.ɵangular_packages_forms_forms_p = formArrayNameProvider;\n exports.ɵangular_packages_forms_forms_o = formGroupNameProvider;\n exports.ɵangular_packages_forms_forms_q = SELECT_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_s = NgSelectMultipleOption;\n exports.ɵangular_packages_forms_forms_r = SELECT_MULTIPLE_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_u = CHECKBOX_REQUIRED_VALIDATOR;\n exports.ɵangular_packages_forms_forms_v = EMAIL_VALIDATOR;\n exports.ɵangular_packages_forms_forms_x = MAX_LENGTH_VALIDATOR;\n exports.ɵangular_packages_forms_forms_w = MIN_LENGTH_VALIDATOR;\n exports.ɵangular_packages_forms_forms_y = PATTERN_VALIDATOR;\n exports.ɵangular_packages_forms_forms_t = REQUIRED_VALIDATOR;\n exports.AbstractControlDirective = AbstractControlDirective;\n exports.AbstractFormGroupDirective = AbstractFormGroupDirective;\n exports.CheckboxControlValueAccessor = CheckboxControlValueAccessor;\n exports.ControlContainer = ControlContainer;\n exports.NG_VALUE_ACCESSOR = NG_VALUE_ACCESSOR;\n exports.COMPOSITION_BUFFER_MODE = COMPOSITION_BUFFER_MODE;\n exports.DefaultValueAccessor = DefaultValueAccessor;\n exports.NgControl = NgControl;\n exports.NgControlStatus = NgControlStatus;\n exports.NgControlStatusGroup = NgControlStatusGroup;\n exports.NgForm = NgForm;\n exports.NgFormSelectorWarning = NgFormSelectorWarning;\n exports.NgModel = NgModel;\n exports.NgModelGroup = NgModelGroup;\n exports.RadioControlValueAccessor = RadioControlValueAccessor;\n exports.FormControlDirective = FormControlDirective;\n exports.FormControlName = FormControlName;\n exports.FormGroupDirective = FormGroupDirective;\n exports.FormArrayName = FormArrayName;\n exports.FormGroupName = FormGroupName;\n exports.NgSelectOption = NgSelectOption;\n exports.SelectControlValueAccessor = SelectControlValueAccessor;\n exports.SelectMultipleControlValueAccessor = SelectMultipleControlValueAccessor;\n exports.CheckboxRequiredValidator = CheckboxRequiredValidator;\n exports.EmailValidator = EmailValidator;\n exports.MaxLengthValidator = MaxLengthValidator;\n exports.MinLengthValidator = MinLengthValidator;\n exports.PatternValidator = PatternValidator;\n exports.RequiredValidator = RequiredValidator;\n exports.FormBuilder = FormBuilder;\n exports.AbstractControl = AbstractControl;\n exports.FormArray = FormArray;\n exports.FormControl = FormControl;\n exports.FormGroup = FormGroup;\n exports.NG_ASYNC_VALIDATORS = NG_ASYNC_VALIDATORS;\n exports.NG_VALIDATORS = NG_VALIDATORS;\n exports.Validators = Validators;\n exports.VERSION = VERSION;\n exports.FormsModule = FormsModule;\n exports.ReactiveFormsModule = ReactiveFormsModule;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=forms.umd.js.map\n"]}
\ No newline at end of file
+{"version":3,"sources":["packages/forms/forms.umd.js"],"names":["global","factory","exports","module","require","define","amd","self","ng","forms","core","rxjs","operators","platformBrowser","this","AbstractControlDirective","Object","defineProperty","prototype","get","control","value","enumerable","configurable","valid","invalid","pending","disabled","enabled","errors","pristine","dirty","touched","status","untouched","statusChanges","valueChanges","reset","undefined","hasError","errorCode","path","getError","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","constructor","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__values","o","m","Symbol","iterator","next","done","__read","e","ar","push","error","ControlContainer","_super","isEmptyInputValue","NG_VALIDATORS","InjectionToken","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","Validators","min","parseFloat","isNaN","actual","max","required","requiredTrue","email","test","minLength","minlength","requiredLength","actualLength","maxLength","maxlength","pattern","regexStr","charAt","regex","RegExp","toString","requiredPattern","actualValue","nullValidator","compose","validators","presentValidators","filter","isPresent","_mergeErrors","_executeValidators","map","v","composeAsync","observables","_executeAsyncValidators","toObservable","forkJoin","pipe","obs","ɵisPromise","from","ɵisObservable","Error","arrayOfErrors","res","reduce","keys","NG_VALUE_ACCESSOR","CHECKBOX_VALUE_ACCESSOR","provide","useExisting","forwardRef","CheckboxControlValueAccessor","multi","_renderer","_elementRef","onChange","_","onTouched","writeValue","setProperty","nativeElement","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","Directive","selector","host","(change)","(blur)","providers","Renderer2","ElementRef","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","COMPOSITION_BUFFER_MODE","_compositionMode","_composing","_isAndroid","userAgent","ɵgetDOM","getUserAgent","toLowerCase","_handleInput","_compositionStart","_compositionEnd","(input)","(compositionstart)","(compositionend)","Optional","Inject","Boolean","normalizeValidator","validator","validate","normalizeAsyncValidator","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","unimplemented","NgControl","_this","_parent","name","valueAccessor","_rawValidators","_rawAsyncValidators","RADIO_VALUE_ACCESSOR","RadioControlValueAccessor","RadioControlRegistry","_accessors","add","accessor","remove","splice","select","forEach","_isSameGroup","fireUncheck","controlPair","_control","Injectable","_registry","_injector","ngOnInit","_checkName","ngOnDestroy","_state","_fn","formControlName","_throwNameError","Input","String","Injector","RANGE_VALUE_ACCESSOR","RangeValueAccessor","FormErrorExamples","ReactiveErrors","controlParentException","ngModelGroupException","missingFormException","groupParentException","arrayParentException","disabledAttrWarning","console","warn","ngModelWarning","directiveName","SELECT_VALUE_ACCESSOR","SelectControlValueAccessor","_buildValueString","id","slice","_optionMap","Map","_idCounter","_compareWith","ɵlooseIdentical","set","JSON","stringify","_getOptionId","valueString","_getOptionValue","_registerOption","e_1","_a","_b","_c","e_1_1","return","_extractId","split","has","Function","NgSelectOption","_element","_select","_setElementValue","delete","Host","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","_buildValueString$1","optionSelectedStateSetter","isArray","ids_1","opt","_setSelected","indexOf","selected","options","selectedOptions","item","val","_value","_extractId$1","NgSelectMultipleOption","controlPath","parent","__spread","concat","setUpControl","dir","_throwError","asyncValidator","setUpViewChangePipeline","newValue","_pendingValue","_pendingChange","_pendingDirty","updateOn","updateControl","setUpModelChangePipeline","emitModelEvent","viewToModelUpdate","setUpBlurPipeline","_pendingTouched","markAsTouched","registerOnDisabledChange","registerOnValidatorChange","updateValueAndValidity","markAsDirty","setValue","emitModelToViewChange","setUpFormContainer","_noControlError","message","messageEnd","join","composeValidators","composeAsyncValidators","isPropertyUpdated","changes","viewModel","change","isFirstChange","currentValue","BUILTIN_ACCESSORS","syncPendingControls","form","directives","_syncPendingControls","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","isBuiltInAccessor","some","a","removeDir","list","el","index","_ngModelWarning","type","instance","warningConfig","isDevMode","_ngModelWarningSentOnce","_ngModelWarningSent","AbstractFormGroupDirective","_checkParentType","formDirective","addFormGroup","removeFormGroup","getFormGroup","_validators","_asyncValidators","AbstractControlStatus","cd","_cd","ngControlStatusHost","[class.ng-untouched]","[class.ng-touched]","[class.ng-pristine]","[class.ng-dirty]","[class.ng-valid]","[class.ng-invalid]","[class.ng-pending]","NgControlStatus","Self","NgControlStatusGroup","coerceToValidator","validatorOrOpts","isOptionsObj","coerceToAsyncValidator","origAsyncValidator","asyncValidators","AbstractControl","_onCollectionChange","_onDisabledChange","_updateOn","setValidators","newValidator","setAsyncValidators","clearValidators","clearAsyncValidators","opts","onlySelf","markAsUntouched","_forEachChild","_updateTouched","markAsPristine","_updatePristine","markAsPending","emitEvent","emit","disable","_updateValue","_updateAncestors","changeFn","enable","setParent","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","_updateTreeValidity","ctrl","_allControlsDisabled","_asyncValidationSubscription","subscribe","setErrors","unsubscribe","_updateControlsErrors","_find","delimiter","FormGroup","controls","FormArray","at","x","_initObservables","EventEmitter","_anyControlsHaveStatus","_anyControls","_anyControlsDirty","_anyControlsTouched","_isBoxedValue","formState","_registerOnCollectionChange","_setUpdateStrategy","FormControl","_onChange","_applyFormState","emitViewToModelChange","patchValue","condition","_clearChangeFns","cb","_setUpControls","registerControl","addControl","removeControl","setControl","contains","controlName","_checkAllValuesPresent","_throwIfControlMissing","getRawValue","_reduceChildren","acc","subtreeUpdated","updated","child","k","_reduceValue","initValue","_registerControl","insert","removeAt","e_2","e_2_1","formDirectiveProvider","NgForm","resolvedPromise","Promise","resolve","submitted","_directives","ngSubmit","ngAfterViewInit","then","container","_findContainer","getControl","group","updateModel","onSubmit","$event","onReset","resetForm","pop","(submit)","(reset)","outputs","exportAs","TemplateDrivenErrors","modelParentException","formGroupNameException","missingNameException","modelGroupParentException","ngFormWarning","NG_FORM_SELECTOR_WARNING","NgFormSelectorWarning","NgFormSelectorWarning_1","_ngFormWarning","modelGroupProvider","NgModelGroup","NgModelGroup_1","SkipSelf","formControlBinding","NgModel","resolvedPromise$1","_registered","update","ngOnChanges","_checkForErrors","_setUpControl","_updateDisabled","model","_isStandalone","_setUpStandalone","standalone","disabledValue","Output","NG_MODEL_WITH_FORM_CONTROL_WARNING","formControlBinding$1","FormControlDirective","_ngModelWarningConfig","FormControlDirective_1","_isControlChanged","formDirectiveProvider$1","FormGroupDirective","_checkFormPresent","_updateValidators","_updateDomValue","_updateRegistrations","addFormArray","removeFormArray","getFormArray","newCtrl","cleanUpControl","_oldForm","sync","async","formGroupNameProvider","FormGroupName","_hasInvalidParent","formArrayNameProvider","FormArrayName","controlNameBinding","FormControlName","_added","FormControlName_1","REQUIRED_VALIDATOR","RequiredValidator","CHECKBOX_REQUIRED_VALIDATOR","CheckboxRequiredValidator","_required","[attr.required]","EMAIL_VALIDATOR","EmailValidator","_enabled","MIN_LENGTH_VALIDATOR","MinLengthValidator","_createValidator","_validator","parseInt","[attr.minlength]","MAX_LENGTH_VALIDATOR","MaxLengthValidator","[attr.maxlength]","PATTERN_VALIDATOR","PatternValidator","[attr.pattern]","FormBuilder","controlsConfig","_reduceControls","isAbstractControlOptions","array","_createControl","controlConfig","VERSION","Version","NgNoValidate","novalidate","SHARED_FORM_DIRECTIVES","TEMPLATE_DRIVEN_DIRECTIVES","REACTIVE_DRIVEN_DIRECTIVES","InternalFormsSharedModule","NgModule","declarations","FormsModule","FormsModule_1","withConfig","ngModule","useValue","warnOnDeprecatedNgFormSelector","ReactiveFormsModule","ReactiveFormsModule_1","warnOnNgModelWithFormControl","ɵangular_packages_forms_forms_bc","ɵangular_packages_forms_forms_bb","ɵangular_packages_forms_forms_z","ɵangular_packages_forms_forms_ba","ɵangular_packages_forms_forms_a","ɵangular_packages_forms_forms_b","ɵangular_packages_forms_forms_c","ɵangular_packages_forms_forms_d","ɵangular_packages_forms_forms_e","ɵangular_packages_forms_forms_f","ɵangular_packages_forms_forms_g","ɵangular_packages_forms_forms_h","ɵangular_packages_forms_forms_bh","ɵangular_packages_forms_forms_bd","ɵangular_packages_forms_forms_be","ɵangular_packages_forms_forms_i","ɵangular_packages_forms_forms_j","ɵangular_packages_forms_forms_bf","ɵangular_packages_forms_forms_bg","ɵangular_packages_forms_forms_k","ɵangular_packages_forms_forms_l","ɵangular_packages_forms_forms_m","ɵangular_packages_forms_forms_n","ɵangular_packages_forms_forms_p","ɵangular_packages_forms_forms_o","ɵangular_packages_forms_forms_q","ɵangular_packages_forms_forms_s","ɵangular_packages_forms_forms_r","ɵangular_packages_forms_forms_u","ɵangular_packages_forms_forms_v","ɵangular_packages_forms_forms_x","ɵangular_packages_forms_forms_w","ɵangular_packages_forms_forms_y","ɵangular_packages_forms_forms_t"],"mappings":"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","sourcesContent":["/**\n * @license Angular v7.2.8\n * (c) 2010-2019 Google LLC. https://angular.io/\n * License: MIT\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('rxjs/operators'), require('@angular/platform-browser')) :\n typeof define === 'function' && define.amd ? define('@angular/forms', ['exports', '@angular/core', 'rxjs', 'rxjs/operators', '@angular/platform-browser'], factory) :\n (global = global || self, factory((global.ng = global.ng || {}, global.ng.forms = {}), global.ng.core, global.rxjs, global.rxjs.operators, global.ng.platformBrowser));\n}(this, function (exports, core, rxjs, operators, platformBrowser) { 'use strict';\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n * Base class for control directives.\n *\n * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.\n *\n * @publicApi\n */\n var AbstractControlDirective = /** @class */ (function () {\n function AbstractControlDirective() {\n }\n Object.defineProperty(AbstractControlDirective.prototype, \"value\", {\n /**\n * @description\n * Reports the value of the control if it is present, otherwise null.\n */\n get: function () { return this.control ? this.control.value : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"valid\", {\n /**\n * @description\n * Reports whether the control is valid. A control is considered valid if no\n * validation errors exist with the current value.\n * If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.valid : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"invalid\", {\n /**\n * @description\n * Reports whether the control is invalid, meaning that an error exists in the input value.\n * If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.invalid : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"pending\", {\n /**\n * @description\n * Reports whether a control is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value. If the control is not present, null is\n * returned.\n */\n get: function () { return this.control ? this.control.pending : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"disabled\", {\n /**\n * @description\n * Reports whether the control is disabled, meaning that the control is disabled\n * in the UI and is exempt from validation checks and excluded from aggregate\n * values of ancestor controls. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.disabled : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"enabled\", {\n /**\n * @description\n * Reports whether the control is enabled, meaning that the control is included in ancestor\n * calculations of validity or value. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.enabled : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"errors\", {\n /**\n * @description\n * Reports the control's validation errors. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.errors : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"pristine\", {\n /**\n * @description\n * Reports whether the control is pristine, meaning that the user has not yet changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.pristine : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"dirty\", {\n /**\n * @description\n * Reports whether the control is dirty, meaning that the user has changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.dirty : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"touched\", {\n /**\n * @description\n * Reports whether the control is touched, meaning that the user has triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.touched : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"status\", {\n /**\n * @description\n * Reports the validation status of the control. Possible values include:\n * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.\n * If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.status : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"untouched\", {\n /**\n * @description\n * Reports whether the control is untouched, meaning that the user has not yet triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get: function () { return this.control ? this.control.untouched : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"statusChanges\", {\n /**\n * @description\n * Returns a multicasting observable that emits a validation status whenever it is\n * calculated for the control. If the control is not present, null is returned.\n */\n get: function () {\n return this.control ? this.control.statusChanges : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"valueChanges\", {\n /**\n * @description\n * Returns a multicasting observable of value changes for the control that emits every time the\n * value of the control changes in the UI or programmatically.\n * If the control is not present, null is returned.\n */\n get: function () {\n return this.control ? this.control.valueChanges : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlDirective.prototype, \"path\", {\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get: function () { return null; },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Resets the control with the provided value if the control is present.\n */\n AbstractControlDirective.prototype.reset = function (value) {\n if (value === void 0) { value = undefined; }\n if (this.control)\n this.control.reset(value);\n };\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n AbstractControlDirective.prototype.hasError = function (errorCode, path) {\n return this.control ? this.control.hasError(errorCode, path) : false;\n };\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n AbstractControlDirective.prototype.getError = function (errorCode, path) {\n return this.control ? this.control.getError(errorCode, path) : null;\n };\n return AbstractControlDirective;\n }());\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\r\n /* global Reflect, Promise */\r\n\r\n var extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n\r\n function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n }\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\r\n\r\n function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n }\r\n\r\n function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n }\r\n\r\n function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n }\r\n\r\n function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n }\r\n\r\n function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n }\r\n\r\n function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n }\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n * A base class for directives that contain multiple registered instances of `NgControl`.\n * Only used by the forms module.\n *\n * @publicApi\n */\n var ControlContainer = /** @class */ (function (_super) {\n __extends(ControlContainer, _super);\n function ControlContainer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ControlContainer.prototype, \"formDirective\", {\n /**\n * @description\n * The top-level form directive for the control.\n */\n get: function () { return null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ControlContainer.prototype, \"path\", {\n /**\n * @description\n * The path to this group.\n */\n get: function () { return null; },\n enumerable: true,\n configurable: true\n });\n return ControlContainer;\n }(AbstractControlDirective));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function isEmptyInputValue(value) {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n }\n /**\n * @description\n * An `InjectionToken` for registering additional synchronous validators used with `AbstractControl`s.\n *\n * @see `NG_ASYNC_VALIDATORS`\n *\n * @usageNotes\n *\n * ### Providing a custom validator\n *\n * The following example registers a custom validator directive. Adding the validator to the\n * existing collection of validators requires the `multi: true` option.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors | null {\n * return { 'custom': true };\n * }\n * }\n * ```\n *\n * @publicApi\n */\n var NG_VALIDATORS = new core.InjectionToken('NgValidators');\n /**\n * @description\n * An `InjectionToken` for registering additional asynchronous validators used with `AbstractControl`s.\n *\n * @see `NG_VALIDATORS`\n *\n * @publicApi\n */\n var NG_ASYNC_VALIDATORS = new core.InjectionToken('NgAsyncValidators');\n var EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n /**\n * @description\n * Provides a set of built-in validators that can be used by form controls.\n *\n * A validator is a function that processes a `FormControl` or collection of\n * controls and returns an error map or null. A null map means that validation has passed.\n *\n * @see [Form Validation](/guide/form-validation)\n *\n * @publicApi\n */\n var Validators = /** @class */ (function () {\n function Validators() {\n }\n /**\n * @description\n * Validator that requires the control's value to be greater than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a minimum of 3\n *\n * ```typescript\n * const control = new FormControl(2, Validators.min(3));\n *\n * console.log(control.errors); // {min: {min: 3, actual: 2}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `min` property if the validation check fails, otherwise `null`.\n *\n */\n Validators.min = function (min) {\n return function (control) {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n var value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value < min ? { 'min': { 'min': min, 'actual': control.value } } : null;\n };\n };\n /**\n * @description\n * Validator that requires the control's value to be less than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a maximum of 15\n *\n * ```typescript\n * const control = new FormControl(16, Validators.max(15));\n *\n * console.log(control.errors); // {max: {max: 15, actual: 16}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `max` property if the validation check fails, otherwise `null`.\n *\n */\n Validators.max = function (max) {\n return function (control) {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n return null; // don't validate empty values to allow optional controls\n }\n var value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n return !isNaN(value) && value > max ? { 'max': { 'max': max, 'actual': control.value } } : null;\n };\n };\n /**\n * @description\n * Validator that requires the control have a non-empty value.\n *\n * @usageNotes\n *\n * ### Validate that the field is non-empty\n *\n * ```typescript\n * const control = new FormControl('', Validators.required);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map with the `required` property\n * if the validation check fails, otherwise `null`.\n *\n */\n Validators.required = function (control) {\n return isEmptyInputValue(control.value) ? { 'required': true } : null;\n };\n /**\n * @description\n * Validator that requires the control's value be true. This validator is commonly\n * used for required checkboxes.\n *\n * @usageNotes\n *\n * ### Validate that the field value is true\n *\n * ```typescript\n * const control = new FormControl('', Validators.requiredTrue);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map that contains the `required` property\n * set to `true` if the validation check fails, otherwise `null`.\n */\n Validators.requiredTrue = function (control) {\n return control.value === true ? null : { 'required': true };\n };\n /**\n * @description\n * Validator that requires the control's value pass an email validation test.\n *\n * @usageNotes\n *\n * ### Validate that the field matches a valid email pattern\n *\n * ```typescript\n * const control = new FormControl('bad@', Validators.email);\n *\n * console.log(control.errors); // {email: true}\n * ```\n *\n * @returns An error map with the `email` property\n * if the validation check fails, otherwise `null`.\n *\n */\n Validators.email = function (control) {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n return EMAIL_REGEXP.test(control.value) ? null : { 'email': true };\n };\n /**\n * @description\n * Validator that requires the length of the control's value to be greater than or equal\n * to the provided minimum length. This validator is also provided by default if you use the\n * the HTML5 `minlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has a minimum of 3 characters\n *\n * ```typescript\n * const control = new FormControl('ng', Validators.minLength(3));\n *\n * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}\n * ```\n *\n * ```html\n * <input minlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `minlength` if the validation check fails, otherwise `null`.\n */\n Validators.minLength = function (minLength) {\n return function (control) {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n var length = control.value ? control.value.length : 0;\n return length < minLength ?\n { 'minlength': { 'requiredLength': minLength, 'actualLength': length } } :\n null;\n };\n };\n /**\n * @description\n * Validator that requires the length of the control's value to be less than or equal\n * to the provided maximum length. This validator is also provided by default if you use the\n * the HTML5 `maxlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has maximum of 5 characters\n *\n * ```typescript\n * const control = new FormControl('Angular', Validators.maxLength(5));\n *\n * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}\n * ```\n *\n * ```html\n * <input maxlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `maxlength` property if the validation check fails, otherwise `null`.\n */\n Validators.maxLength = function (maxLength) {\n return function (control) {\n var length = control.value ? control.value.length : 0;\n return length > maxLength ?\n { 'maxlength': { 'requiredLength': maxLength, 'actualLength': length } } :\n null;\n };\n };\n /**\n * @description\n * Validator that requires the control's value to match a regex pattern. This validator is also\n * provided by default if you use the HTML5 `pattern` attribute.\n *\n * Note that if a Regexp is provided, the Regexp is used as is to test the values. On the other\n * hand, if a string is passed, the `^` character is prepended and the `$` character is\n * appended to the provided string (if not already present), and the resulting regular\n * expression is used to test the values.\n *\n * @usageNotes\n *\n * ### Validate that the field only contains letters or spaces\n *\n * ```typescript\n * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));\n *\n * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}\n * ```\n *\n * ```html\n * <input pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `pattern` property if the validation check fails, otherwise `null`.\n */\n Validators.pattern = function (pattern) {\n if (!pattern)\n return Validators.nullValidator;\n var regex;\n var regexStr;\n if (typeof pattern === 'string') {\n regexStr = '';\n if (pattern.charAt(0) !== '^')\n regexStr += '^';\n regexStr += pattern;\n if (pattern.charAt(pattern.length - 1) !== '$')\n regexStr += '$';\n regex = new RegExp(regexStr);\n }\n else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return function (control) {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n var value = control.value;\n return regex.test(value) ? null :\n { 'pattern': { 'requiredPattern': regexStr, 'actualValue': value } };\n };\n };\n /**\n * @description\n * Validator that performs no operation.\n */\n Validators.nullValidator = function (control) { return null; };\n Validators.compose = function (validators) {\n if (!validators)\n return null;\n var presentValidators = validators.filter(isPresent);\n if (presentValidators.length == 0)\n return null;\n return function (control) {\n return _mergeErrors(_executeValidators(control, presentValidators));\n };\n };\n /**\n * @description\n * Compose multiple async validators into a single function that returns the union\n * of the individual error objects for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error objects of the async validators if the validation check fails, otherwise `null`.\n */\n Validators.composeAsync = function (validators) {\n if (!validators)\n return null;\n var presentValidators = validators.filter(isPresent);\n if (presentValidators.length == 0)\n return null;\n return function (control) {\n var observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n return rxjs.forkJoin(observables).pipe(operators.map(_mergeErrors));\n };\n };\n return Validators;\n }());\n function isPresent(o) {\n return o != null;\n }\n function toObservable(r) {\n var obs = core.ɵisPromise(r) ? rxjs.from(r) : r;\n if (!(core.ɵisObservable(obs))) {\n throw new Error(\"Expected validator to return Promise or Observable.\");\n }\n return obs;\n }\n function _executeValidators(control, validators) {\n return validators.map(function (v) { return v(control); });\n }\n function _executeAsyncValidators(control, validators) {\n return validators.map(function (v) { return v(control); });\n }\n function _mergeErrors(arrayOfErrors) {\n var res = arrayOfErrors.reduce(function (res, errors) {\n return errors != null ? __assign({}, res, errors) : res;\n }, {});\n return Object.keys(res).length === 0 ? null : res;\n }\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * Used to provide a `ControlValueAccessor` for form controls.\n *\n * See `DefaultValueAccessor` for how to implement one.\n *\n * @publicApi\n */\n var NG_VALUE_ACCESSOR = new core.InjectionToken('NgValueAccessor');\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return CheckboxControlValueAccessor; }),\n multi: true,\n };\n /**\n * @description\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\n * element.\n *\n * @usageNotes\n *\n * ### Using a checkbox with a reactive form.\n *\n * The following example shows how to use a checkbox with a reactive form.\n *\n * ```ts\n * const rememberLoginControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"checkbox\" [formControl]=\"rememberLoginControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var CheckboxControlValueAccessor = /** @class */ (function () {\n function CheckboxControlValueAccessor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n }\n /**\n * Sets the \"checked\" property on the input element.\n *\n * @param value The checked value\n */\n CheckboxControlValueAccessor.prototype.writeValue = function (value) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n CheckboxControlValueAccessor.prototype.registerOnChange = function (fn) { this.onChange = fn; };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n CheckboxControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n CheckboxControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n CheckboxControlValueAccessor = __decorate([\n core.Directive({\n selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: { '(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()' },\n providers: [CHECKBOX_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef])\n ], CheckboxControlValueAccessor);\n return CheckboxControlValueAccessor;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var DEFAULT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return DefaultValueAccessor; }),\n multi: true\n };\n /**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\n function _isAndroid() {\n var userAgent = platformBrowser.ɵgetDOM() ? platformBrowser.ɵgetDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n }\n /**\n * @description\n * Provide this token to control if form directives buffer IME input until\n * the \"compositionend\" event occurs.\n * @publicApi\n */\n var COMPOSITION_BUFFER_MODE = new core.InjectionToken('CompositionEventMode');\n /**\n * @description\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using the default value accessor\n *\n * The following example shows how to use an input element that activates the default value accessor\n * (in this case, a text field).\n *\n * ```ts\n * const firstNameControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"text\" [formControl]=\"firstNameControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var DefaultValueAccessor = /** @class */ (function () {\n function DefaultValueAccessor(_renderer, _elementRef, _compositionMode) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this._compositionMode = _compositionMode;\n /**\n * @description\n * The registered callback function called when an input event occurs on the input element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n /** Whether the user is creating a composition string (IME events). */\n this._composing = false;\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n DefaultValueAccessor.prototype.writeValue = function (value) {\n var normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n DefaultValueAccessor.prototype.registerOnChange = function (fn) { this.onChange = fn; };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n DefaultValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n DefaultValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n /** @internal */\n DefaultValueAccessor.prototype._handleInput = function (value) {\n if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n this.onChange(value);\n }\n };\n /** @internal */\n DefaultValueAccessor.prototype._compositionStart = function () { this._composing = true; };\n /** @internal */\n DefaultValueAccessor.prototype._compositionEnd = function (value) {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n };\n DefaultValueAccessor = __decorate([\n core.Directive({\n selector: 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n // TODO: vsavkin replace the above selector with the one below it once\n // https://github.com/angular/angular/issues/3011 is implemented\n // selector: '[ngModel],[formControl],[formControlName]',\n host: {\n '(input)': '$any(this)._handleInput($event.target.value)',\n '(blur)': 'onTouched()',\n '(compositionstart)': '$any(this)._compositionStart()',\n '(compositionend)': '$any(this)._compositionEnd($event.target.value)'\n },\n providers: [DEFAULT_VALUE_ACCESSOR]\n }),\n __param(2, core.Optional()), __param(2, core.Inject(COMPOSITION_BUFFER_MODE)),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef, Boolean])\n ], DefaultValueAccessor);\n return DefaultValueAccessor;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function normalizeValidator(validator) {\n if (validator.validate) {\n return function (c) { return validator.validate(c); };\n }\n else {\n return validator;\n }\n }\n function normalizeAsyncValidator(validator) {\n if (validator.validate) {\n return function (c) { return validator.validate(c); };\n }\n else {\n return validator;\n }\n }\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var NUMBER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return NumberValueAccessor; }),\n multi: true\n };\n /**\n * @description\n * The `ControlValueAccessor` for writing a number value and listening to number input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a number input with a reactive form.\n *\n * The following example shows how to use a number input with a reactive form.\n *\n * ```ts\n * const totalCountControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"number\" [formControl]=\"totalCountControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n var NumberValueAccessor = /** @class */ (function () {\n function NumberValueAccessor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n }\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n NumberValueAccessor.prototype.writeValue = function (value) {\n // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n var normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n NumberValueAccessor.prototype.registerOnChange = function (fn) {\n this.onChange = function (value) { fn(value == '' ? null : parseFloat(value)); };\n };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n NumberValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n NumberValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n NumberValueAccessor = __decorate([\n core.Directive({\n selector: 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [NUMBER_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef])\n ], NumberValueAccessor);\n return NumberValueAccessor;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function unimplemented() {\n throw new Error('unimplemented');\n }\n /**\n * @description\n * A base class that all control `FormControl`-based directives extend. It binds a `FormControl`\n * object to a DOM element.\n *\n * @publicApi\n */\n var NgControl = /** @class */ (function (_super) {\n __extends(NgControl, _super);\n function NgControl() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @description\n * The parent form for the control.\n *\n * @internal\n */\n _this._parent = null;\n /**\n * @description\n * The name for the control\n */\n _this.name = null;\n /**\n * @description\n * The value accessor for the control\n */\n _this.valueAccessor = null;\n /**\n * @description\n * The uncomposed array of synchronous validators for the control\n *\n * @internal\n */\n _this._rawValidators = [];\n /**\n * @description\n * The uncomposed array of async validators for the control\n *\n * @internal\n */\n _this._rawAsyncValidators = [];\n return _this;\n }\n Object.defineProperty(NgControl.prototype, \"validator\", {\n /**\n * @description\n * The registered synchronous validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get: function () { return unimplemented(); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgControl.prototype, \"asyncValidator\", {\n /**\n * @description\n * The registered async validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get: function () { return unimplemented(); },\n enumerable: true,\n configurable: true\n });\n return NgControl;\n }(AbstractControlDirective));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var RADIO_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return RadioControlValueAccessor; }),\n multi: true\n };\n /**\n * @description\n * Class used by Angular to track radio buttons. For internal use only.\n */\n var RadioControlRegistry = /** @class */ (function () {\n function RadioControlRegistry() {\n this._accessors = [];\n }\n /**\n * @description\n * Adds a control to the internal registry. For internal use only.\n */\n RadioControlRegistry.prototype.add = function (control, accessor) {\n this._accessors.push([control, accessor]);\n };\n /**\n * @description\n * Removes a control from the internal registry. For internal use only.\n */\n RadioControlRegistry.prototype.remove = function (accessor) {\n for (var i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n };\n /**\n * @description\n * Selects a radio button. For internal use only.\n */\n RadioControlRegistry.prototype.select = function (accessor) {\n var _this = this;\n this._accessors.forEach(function (c) {\n if (_this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n };\n RadioControlRegistry.prototype._isSameGroup = function (controlPair, accessor) {\n if (!controlPair[0].control)\n return false;\n return controlPair[0]._parent === accessor._control._parent &&\n controlPair[1].name === accessor.name;\n };\n RadioControlRegistry = __decorate([\n core.Injectable()\n ], RadioControlRegistry);\n return RadioControlRegistry;\n }());\n /**\n * @description\n * The `ControlValueAccessor` for writing radio control values and listening to radio control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using radio buttons with reactive form directives\n *\n * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in\n * a reactive form, radio buttons in the same group should have the same `formControlName`.\n * Providing a `name` attribute is optional.\n *\n * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var RadioControlValueAccessor = /** @class */ (function () {\n function RadioControlValueAccessor(_renderer, _elementRef, _registry, _injector) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this._registry = _registry;\n this._injector = _injector;\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n this.onChange = function () { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n }\n /**\n * @description\n * A lifecycle method called when the directive is initialized. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n RadioControlValueAccessor.prototype.ngOnInit = function () {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n };\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n RadioControlValueAccessor.prototype.ngOnDestroy = function () { this._registry.remove(this); };\n /**\n * @description\n * Sets the \"checked\" property value on the radio input element.\n *\n * @param value The checked value\n */\n RadioControlValueAccessor.prototype.writeValue = function (value) {\n this._state = value === this.value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n RadioControlValueAccessor.prototype.registerOnChange = function (fn) {\n var _this = this;\n this._fn = fn;\n this.onChange = function () {\n fn(_this.value);\n _this._registry.select(_this);\n };\n };\n /**\n * Sets the \"value\" on the radio input element and unchecks it.\n *\n * @param value\n */\n RadioControlValueAccessor.prototype.fireUncheck = function (value) { this.writeValue(value); };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n RadioControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n RadioControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n RadioControlValueAccessor.prototype._checkName = function () {\n if (this.name && this.formControlName && this.name !== this.formControlName) {\n this._throwNameError();\n }\n if (!this.name && this.formControlName)\n this.name = this.formControlName;\n };\n RadioControlValueAccessor.prototype._throwNameError = function () {\n throw new Error(\"\\n If you define both a name and a formControlName attribute on your radio button, their values\\n must match. Ex: <input type=\\\"radio\\\" formControlName=\\\"food\\\" name=\\\"food\\\">\\n \");\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", String)\n ], RadioControlValueAccessor.prototype, \"name\", void 0);\n __decorate([\n core.Input(),\n __metadata(\"design:type\", String)\n ], RadioControlValueAccessor.prototype, \"formControlName\", void 0);\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Object)\n ], RadioControlValueAccessor.prototype, \"value\", void 0);\n RadioControlValueAccessor = __decorate([\n core.Directive({\n selector: 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n host: { '(change)': 'onChange()', '(blur)': 'onTouched()' },\n providers: [RADIO_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef,\n RadioControlRegistry, core.Injector])\n ], RadioControlValueAccessor);\n return RadioControlValueAccessor;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var RANGE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return RangeValueAccessor; }),\n multi: true\n };\n /**\n * @description\n * The `ControlValueAccessor` for writing a range value and listening to range input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a range input with a reactive form\n *\n * The following example shows how to use a range input with a reactive form.\n *\n * ```ts\n * const ageControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"range\" [formControl]=\"ageControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n var RangeValueAccessor = /** @class */ (function () {\n function RangeValueAccessor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n }\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n RangeValueAccessor.prototype.writeValue = function (value) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n RangeValueAccessor.prototype.registerOnChange = function (fn) {\n this.onChange = function (value) { fn(value == '' ? null : parseFloat(value)); };\n };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n RangeValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the range input element.\n *\n * @param isDisabled The disabled value\n */\n RangeValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n RangeValueAccessor = __decorate([\n core.Directive({\n selector: 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [RANGE_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef])\n ], RangeValueAccessor);\n return RangeValueAccessor;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var FormErrorExamples = {\n formControlName: \"\\n <div [formGroup]=\\\"myGroup\\\">\\n <input formControlName=\\\"firstName\\\">\\n </div>\\n\\n In your class:\\n\\n this.myGroup = new FormGroup({\\n firstName: new FormControl()\\n });\",\n formGroupName: \"\\n <div [formGroup]=\\\"myGroup\\\">\\n <div formGroupName=\\\"person\\\">\\n <input formControlName=\\\"firstName\\\">\\n </div>\\n </div>\\n\\n In your class:\\n\\n this.myGroup = new FormGroup({\\n person: new FormGroup({ firstName: new FormControl() })\\n });\",\n formArrayName: \"\\n <div [formGroup]=\\\"myGroup\\\">\\n <div formArrayName=\\\"cities\\\">\\n <div *ngFor=\\\"let city of cityArray.controls; index as i\\\">\\n <input [formControlName]=\\\"i\\\">\\n </div>\\n </div>\\n </div>\\n\\n In your class:\\n\\n this.cityArray = new FormArray([new FormControl('SF')]);\\n this.myGroup = new FormGroup({\\n cities: this.cityArray\\n });\",\n ngModelGroup: \"\\n <form>\\n <div ngModelGroup=\\\"person\\\">\\n <input [(ngModel)]=\\\"person.name\\\" name=\\\"firstName\\\">\\n </div>\\n </form>\",\n ngModelWithFormGroup: \"\\n <div [formGroup]=\\\"myGroup\\\">\\n <input formControlName=\\\"firstName\\\">\\n <input [(ngModel)]=\\\"showMoreControls\\\" [ngModelOptions]=\\\"{standalone: true}\\\">\\n </div>\\n \"\n };\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var ReactiveErrors = /** @class */ (function () {\n function ReactiveErrors() {\n }\n ReactiveErrors.controlParentException = function () {\n throw new Error(\"formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\\n directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n Example:\\n\\n \" + FormErrorExamples.formControlName);\n };\n ReactiveErrors.ngModelGroupException = function () {\n throw new Error(\"formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\\n that also have a \\\"form\\\" prefix: formGroupName, formArrayName, or formGroup.\\n\\n Option 1: Update the parent to be formGroupName (reactive form strategy)\\n\\n \" + FormErrorExamples.formGroupName + \"\\n\\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\\n\\n \" + FormErrorExamples.ngModelGroup);\n };\n ReactiveErrors.missingFormException = function () {\n throw new Error(\"formGroup expects a FormGroup instance. Please pass one in.\\n\\n Example:\\n\\n \" + FormErrorExamples.formControlName);\n };\n ReactiveErrors.groupParentException = function () {\n throw new Error(\"formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\\n directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n Example:\\n\\n \" + FormErrorExamples.formGroupName);\n };\n ReactiveErrors.arrayParentException = function () {\n throw new Error(\"formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\\n directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n Example:\\n\\n \" + FormErrorExamples.formArrayName);\n };\n ReactiveErrors.disabledAttrWarning = function () {\n console.warn(\"\\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\\n you. We recommend using this approach to avoid 'changed after checked' errors.\\n \\n Example: \\n form = new FormGroup({\\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\\n last: new FormControl('Drew', Validators.required)\\n });\\n \");\n };\n ReactiveErrors.ngModelWarning = function (directiveName) {\n console.warn(\"\\n It looks like you're using ngModel on the same form field as \" + directiveName + \". \\n Support for using the ngModel input property and ngModelChange event with \\n reactive form directives has been deprecated in Angular v6 and will be removed \\n in Angular v7.\\n \\n For more information on this, see our API docs here:\\n https://angular.io/api/forms/\" + (directiveName === 'formControl' ? 'FormControlDirective'\n : 'FormControlName') + \"#use-with-ngmodel\\n \");\n };\n return ReactiveErrors;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var SELECT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return SelectControlValueAccessor; }),\n multi: true\n };\n function _buildValueString(id, value) {\n if (id == null)\n return \"\" + value;\n if (value && typeof value === 'object')\n value = 'Object';\n return (id + \": \" + value).slice(0, 50);\n }\n function _extractId(valueString) {\n return valueString.split(':')[0];\n }\n /**\n * @description\n * The `ControlValueAccessor` for writing select control values and listening to select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using select controls in a reactive form\n *\n * The following examples show how to use a select control in a reactive form.\n *\n * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Using select controls in a template-driven form\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * {@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * ### Customizing option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * ```ts\n * const selectedCountriesControl = new FormControl();\n * ```\n *\n * ```\n * <select [compareWith]=\"compareFn\" [formControl]=\"selectedCountriesControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{country.name}}\n * </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n * return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * **Note:** We listen to the 'change' event because 'input' events aren't fired\n * for selects in Firefox and IE:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var SelectControlValueAccessor = /** @class */ (function () {\n function SelectControlValueAccessor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /** @internal */\n this._optionMap = new Map();\n /** @internal */\n this._idCounter = 0;\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n this._compareWith = core.ɵlooseIdentical;\n }\n Object.defineProperty(SelectControlValueAccessor.prototype, \"compareWith\", {\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n set: function (fn) {\n if (typeof fn !== 'function') {\n throw new Error(\"compareWith must be a function, but received \" + JSON.stringify(fn));\n }\n this._compareWith = fn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the \"value\" property on the input element. The \"selectedIndex\"\n * property is also set if an ID is provided on the option element.\n *\n * @param value The checked value\n */\n SelectControlValueAccessor.prototype.writeValue = function (value) {\n this.value = value;\n var id = this._getOptionId(value);\n if (id == null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n }\n var valueString = _buildValueString(id, value);\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n };\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n SelectControlValueAccessor.prototype.registerOnChange = function (fn) {\n var _this = this;\n this.onChange = function (valueString) {\n _this.value = _this._getOptionValue(valueString);\n fn(_this.value);\n };\n };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n SelectControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n SelectControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n /** @internal */\n SelectControlValueAccessor.prototype._registerOption = function () { return (this._idCounter++).toString(); };\n /** @internal */\n SelectControlValueAccessor.prototype._getOptionId = function (value) {\n var e_1, _a;\n try {\n for (var _b = __values(Array.from(this._optionMap.keys())), _c = _b.next(); !_c.done; _c = _b.next()) {\n var id = _c.value;\n if (this._compareWith(this._optionMap.get(id), value))\n return id;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return null;\n };\n /** @internal */\n SelectControlValueAccessor.prototype._getOptionValue = function (valueString) {\n var id = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n ], SelectControlValueAccessor.prototype, \"compareWith\", null);\n SelectControlValueAccessor = __decorate([\n core.Directive({\n selector: 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n host: { '(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()' },\n providers: [SELECT_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef])\n ], SelectControlValueAccessor);\n return SelectControlValueAccessor;\n }());\n /**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var NgSelectOption = /** @class */ (function () {\n function NgSelectOption(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select)\n this.id = this._select._registerOption();\n }\n Object.defineProperty(NgSelectOption.prototype, \"ngValue\", {\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n set: function (value) {\n if (this._select == null)\n return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgSelectOption.prototype, \"value\", {\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n set: function (value) {\n this._setElementValue(value);\n if (this._select)\n this._select.writeValue(this._select.value);\n },\n enumerable: true,\n configurable: true\n });\n /** @internal */\n NgSelectOption.prototype._setElementValue = function (value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n };\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n NgSelectOption.prototype.ngOnDestroy = function () {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n };\n __decorate([\n core.Input('ngValue'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], NgSelectOption.prototype, \"ngValue\", null);\n __decorate([\n core.Input('value'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], NgSelectOption.prototype, \"value\", null);\n NgSelectOption = __decorate([\n core.Directive({ selector: 'option' }),\n __param(2, core.Optional()), __param(2, core.Host()),\n __metadata(\"design:paramtypes\", [core.ElementRef, core.Renderer2,\n SelectControlValueAccessor])\n ], NgSelectOption);\n return NgSelectOption;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var SELECT_MULTIPLE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: core.forwardRef(function () { return SelectMultipleControlValueAccessor; }),\n multi: true\n };\n function _buildValueString$1(id, value) {\n if (id == null)\n return \"\" + value;\n if (typeof value === 'string')\n value = \"'\" + value + \"'\";\n if (value && typeof value === 'object')\n value = 'Object';\n return (id + \": \" + value).slice(0, 50);\n }\n function _extractId$1(valueString) {\n return valueString.split(':')[0];\n }\n /**\n * @description\n * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @see `SelectControlValueAccessor`\n *\n * @usageNotes\n *\n * ### Using a multi-select control\n *\n * The follow example shows you how to use a multi-select control with a reactive form.\n *\n * ```ts\n * const countryControl = new FormControl();\n * ```\n *\n * ```\n * <select multiple name=\"countries\" [formControl]=\"countryControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{ country.name }}\n * </option>\n * </select>\n * ```\n *\n * ### Customizing option selection\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * See the `SelectControlValueAccessor` for usage.\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var SelectMultipleControlValueAccessor = /** @class */ (function () {\n function SelectMultipleControlValueAccessor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /** @internal */\n this._optionMap = new Map();\n /** @internal */\n this._idCounter = 0;\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n this.onChange = function (_) { };\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n this.onTouched = function () { };\n this._compareWith = core.ɵlooseIdentical;\n }\n Object.defineProperty(SelectMultipleControlValueAccessor.prototype, \"compareWith\", {\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n set: function (fn) {\n if (typeof fn !== 'function') {\n throw new Error(\"compareWith must be a function, but received \" + JSON.stringify(fn));\n }\n this._compareWith = fn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Sets the \"value\" property on one or of more\n * of the select's options.\n *\n * @param value The value\n */\n SelectMultipleControlValueAccessor.prototype.writeValue = function (value) {\n var _this = this;\n this.value = value;\n var optionSelectedStateSetter;\n if (Array.isArray(value)) {\n // convert values to ids\n var ids_1 = value.map(function (v) { return _this._getOptionId(v); });\n optionSelectedStateSetter = function (opt, o) { opt._setSelected(ids_1.indexOf(o.toString()) > -1); };\n }\n else {\n optionSelectedStateSetter = function (opt, o) { opt._setSelected(false); };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n };\n /**\n * @description\n * Registers a function called when the control value changes\n * and writes an array of the selected options.\n *\n * @param fn The callback function\n */\n SelectMultipleControlValueAccessor.prototype.registerOnChange = function (fn) {\n var _this = this;\n this.onChange = function (_) {\n var selected = [];\n if (_.hasOwnProperty('selectedOptions')) {\n var options = _.selectedOptions;\n for (var i = 0; i < options.length; i++) {\n var opt = options.item(i);\n var val = _this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n // Degrade on IE\n else {\n var options = _.options;\n for (var i = 0; i < options.length; i++) {\n var opt = options.item(i);\n if (opt.selected) {\n var val = _this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n _this.value = selected;\n fn(selected);\n };\n };\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n SelectMultipleControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n SelectMultipleControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n /** @internal */\n SelectMultipleControlValueAccessor.prototype._registerOption = function (value) {\n var id = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n };\n /** @internal */\n SelectMultipleControlValueAccessor.prototype._getOptionId = function (value) {\n var e_1, _a;\n try {\n for (var _b = __values(Array.from(this._optionMap.keys())), _c = _b.next(); !_c.done; _c = _b.next()) {\n var id = _c.value;\n if (this._compareWith(this._optionMap.get(id)._value, value))\n return id;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return null;\n };\n /** @internal */\n SelectMultipleControlValueAccessor.prototype._getOptionValue = function (valueString) {\n var id = _extractId$1(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id)._value : valueString;\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n ], SelectMultipleControlValueAccessor.prototype, \"compareWith\", null);\n SelectMultipleControlValueAccessor = __decorate([\n core.Directive({\n selector: 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n host: { '(change)': 'onChange($event.target)', '(blur)': 'onTouched()' },\n providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]\n }),\n __metadata(\"design:paramtypes\", [core.Renderer2, core.ElementRef])\n ], SelectMultipleControlValueAccessor);\n return SelectMultipleControlValueAccessor;\n }());\n /**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectMultipleControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var NgSelectMultipleOption = /** @class */ (function () {\n function NgSelectMultipleOption(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n Object.defineProperty(NgSelectMultipleOption.prototype, \"ngValue\", {\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n set: function (value) {\n if (this._select == null)\n return;\n this._value = value;\n this._setElementValue(_buildValueString$1(this.id, value));\n this._select.writeValue(this._select.value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgSelectMultipleOption.prototype, \"value\", {\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n set: function (value) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString$1(this.id, value));\n this._select.writeValue(this._select.value);\n }\n else {\n this._setElementValue(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n /** @internal */\n NgSelectMultipleOption.prototype._setElementValue = function (value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n };\n /** @internal */\n NgSelectMultipleOption.prototype._setSelected = function (selected) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n };\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n NgSelectMultipleOption.prototype.ngOnDestroy = function () {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n };\n __decorate([\n core.Input('ngValue'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], NgSelectMultipleOption.prototype, \"ngValue\", null);\n __decorate([\n core.Input('value'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], NgSelectMultipleOption.prototype, \"value\", null);\n NgSelectMultipleOption = __decorate([\n core.Directive({ selector: 'option' }),\n __param(2, core.Optional()), __param(2, core.Host()),\n __metadata(\"design:paramtypes\", [core.ElementRef, core.Renderer2,\n SelectMultipleControlValueAccessor])\n ], NgSelectMultipleOption);\n return NgSelectMultipleOption;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function controlPath(name, parent) {\n return __spread(parent.path, [name]);\n }\n function setUpControl(control, dir) {\n if (!control)\n _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor)\n _throwError(dir, 'No value accessor for form control with');\n control.validator = Validators.compose([control.validator, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n dir.valueAccessor.writeValue(control.value);\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n setUpBlurPipeline(control, dir);\n if (dir.valueAccessor.setDisabledState) {\n control.registerOnDisabledChange(function (isDisabled) { dir.valueAccessor.setDisabledState(isDisabled); });\n }\n // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n dir._rawValidators.forEach(function (validator) {\n if (validator.registerOnValidatorChange)\n validator.registerOnValidatorChange(function () { return control.updateValueAndValidity(); });\n });\n dir._rawAsyncValidators.forEach(function (validator) {\n if (validator.registerOnValidatorChange)\n validator.registerOnValidatorChange(function () { return control.updateValueAndValidity(); });\n });\n }\n function cleanUpControl(control, dir) {\n dir.valueAccessor.registerOnChange(function () { return _noControlError(dir); });\n dir.valueAccessor.registerOnTouched(function () { return _noControlError(dir); });\n dir._rawValidators.forEach(function (validator) {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n dir._rawAsyncValidators.forEach(function (validator) {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n if (control)\n control._clearChangeFns();\n }\n function setUpViewChangePipeline(control, dir) {\n dir.valueAccessor.registerOnChange(function (newValue) {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n if (control.updateOn === 'change')\n updateControl(control, dir);\n });\n }\n function setUpBlurPipeline(control, dir) {\n dir.valueAccessor.registerOnTouched(function () {\n control._pendingTouched = true;\n if (control.updateOn === 'blur' && control._pendingChange)\n updateControl(control, dir);\n if (control.updateOn !== 'submit')\n control.markAsTouched();\n });\n }\n function updateControl(control, dir) {\n if (control._pendingDirty)\n control.markAsDirty();\n control.setValue(control._pendingValue, { emitModelToViewChange: false });\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n function setUpModelChangePipeline(control, dir) {\n control.registerOnChange(function (newValue, emitModelEvent) {\n // control -> view\n dir.valueAccessor.writeValue(newValue);\n // control -> ngModel\n if (emitModelEvent)\n dir.viewToModelUpdate(newValue);\n });\n }\n function setUpFormContainer(control, dir) {\n if (control == null)\n _throwError(dir, 'Cannot find control with');\n control.validator = Validators.compose([control.validator, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n }\n function _noControlError(dir) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n }\n function _throwError(dir, message) {\n var messageEnd;\n if (dir.path.length > 1) {\n messageEnd = \"path: '\" + dir.path.join(' -> ') + \"'\";\n }\n else if (dir.path[0]) {\n messageEnd = \"name: '\" + dir.path + \"'\";\n }\n else {\n messageEnd = 'unspecified name attribute';\n }\n throw new Error(message + \" \" + messageEnd);\n }\n function composeValidators(validators) {\n return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n }\n function composeAsyncValidators(validators) {\n return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n null;\n }\n function isPropertyUpdated(changes, viewModel) {\n if (!changes.hasOwnProperty('model'))\n return false;\n var change = changes['model'];\n if (change.isFirstChange())\n return true;\n return !core.ɵlooseIdentical(viewModel, change.currentValue);\n }\n var BUILTIN_ACCESSORS = [\n CheckboxControlValueAccessor,\n RangeValueAccessor,\n NumberValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n ];\n function isBuiltInAccessor(valueAccessor) {\n return BUILTIN_ACCESSORS.some(function (a) { return valueAccessor.constructor === a; });\n }\n function syncPendingControls(form, directives) {\n form._syncPendingControls();\n directives.forEach(function (dir) {\n var control = dir.control;\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n }\n // TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented\n function selectValueAccessor(dir, valueAccessors) {\n if (!valueAccessors)\n return null;\n if (!Array.isArray(valueAccessors))\n _throwError(dir, 'Value accessor was not provided as an array for form control with');\n var defaultAccessor = undefined;\n var builtinAccessor = undefined;\n var customAccessor = undefined;\n valueAccessors.forEach(function (v) {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n }\n else if (isBuiltInAccessor(v)) {\n if (builtinAccessor)\n _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n }\n else {\n if (customAccessor)\n _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n if (customAccessor)\n return customAccessor;\n if (builtinAccessor)\n return builtinAccessor;\n if (defaultAccessor)\n return defaultAccessor;\n _throwError(dir, 'No valid value accessor for form control with');\n return null;\n }\n function removeDir(list, el) {\n var index = list.indexOf(el);\n if (index > -1)\n list.splice(index, 1);\n }\n // TODO(kara): remove after deprecation period\n function _ngModelWarning(name, type, instance, warningConfig) {\n if (!core.isDevMode() || warningConfig === 'never')\n return;\n if (((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce) ||\n (warningConfig === 'always' && !instance._ngModelWarningSent)) {\n ReactiveErrors.ngModelWarning(name);\n type._ngModelWarningSentOnce = true;\n instance._ngModelWarningSent = true;\n }\n }\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.\n *\n * @publicApi\n */\n var AbstractFormGroupDirective = /** @class */ (function (_super) {\n __extends(AbstractFormGroupDirective, _super);\n function AbstractFormGroupDirective() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @description\n * An internal callback method triggered on the instance after the inputs are set.\n * Registers the group with its parent group.\n */\n AbstractFormGroupDirective.prototype.ngOnInit = function () {\n this._checkParentType();\n this.formDirective.addFormGroup(this);\n };\n /**\n * @description\n * An internal callback method triggered before the instance is destroyed.\n * Removes the group from its parent group.\n */\n AbstractFormGroupDirective.prototype.ngOnDestroy = function () {\n if (this.formDirective) {\n this.formDirective.removeFormGroup(this);\n }\n };\n Object.defineProperty(AbstractFormGroupDirective.prototype, \"control\", {\n /**\n * @description\n * The `FormGroup` bound to this directive.\n */\n get: function () { return this.formDirective.getFormGroup(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractFormGroupDirective.prototype, \"path\", {\n /**\n * @description\n * The path to this group from the top-level directive.\n */\n get: function () { return controlPath(this.name, this._parent); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractFormGroupDirective.prototype, \"formDirective\", {\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get: function () { return this._parent ? this._parent.formDirective : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractFormGroupDirective.prototype, \"validator\", {\n /**\n * @description\n * The synchronous validators registered with this group.\n */\n get: function () { return composeValidators(this._validators); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractFormGroupDirective.prototype, \"asyncValidator\", {\n /**\n * @description\n * The async validators registered with this group.\n */\n get: function () {\n return composeAsyncValidators(this._asyncValidators);\n },\n enumerable: true,\n configurable: true\n });\n /** @internal */\n AbstractFormGroupDirective.prototype._checkParentType = function () { };\n return AbstractFormGroupDirective;\n }(ControlContainer));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var AbstractControlStatus = /** @class */ (function () {\n function AbstractControlStatus(cd) {\n this._cd = cd;\n }\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassUntouched\", {\n get: function () { return this._cd.control ? this._cd.control.untouched : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassTouched\", {\n get: function () { return this._cd.control ? this._cd.control.touched : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassPristine\", {\n get: function () { return this._cd.control ? this._cd.control.pristine : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassDirty\", {\n get: function () { return this._cd.control ? this._cd.control.dirty : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassValid\", {\n get: function () { return this._cd.control ? this._cd.control.valid : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassInvalid\", {\n get: function () { return this._cd.control ? this._cd.control.invalid : false; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControlStatus.prototype, \"ngClassPending\", {\n get: function () { return this._cd.control ? this._cd.control.pending : false; },\n enumerable: true,\n configurable: true\n });\n return AbstractControlStatus;\n }());\n var ngControlStatusHost = {\n '[class.ng-untouched]': 'ngClassUntouched',\n '[class.ng-touched]': 'ngClassTouched',\n '[class.ng-pristine]': 'ngClassPristine',\n '[class.ng-dirty]': 'ngClassDirty',\n '[class.ng-valid]': 'ngClassValid',\n '[class.ng-invalid]': 'ngClassInvalid',\n '[class.ng-pending]': 'ngClassPending',\n };\n /**\n * @description\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status.\n *\n * @usageNotes\n *\n * ### CSS classes applied\n *\n * The following classes are applied as the properties become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var NgControlStatus = /** @class */ (function (_super) {\n __extends(NgControlStatus, _super);\n function NgControlStatus(cd) {\n return _super.call(this, cd) || this;\n }\n NgControlStatus = __decorate([\n core.Directive({ selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost }),\n __param(0, core.Self()),\n __metadata(\"design:paramtypes\", [NgControl])\n ], NgControlStatus);\n return NgControlStatus;\n }(AbstractControlStatus));\n /**\n * @description\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n *\n * @see `NgControlStatus`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var NgControlStatusGroup = /** @class */ (function (_super) {\n __extends(NgControlStatusGroup, _super);\n function NgControlStatusGroup(cd) {\n return _super.call(this, cd) || this;\n }\n NgControlStatusGroup = __decorate([\n core.Directive({\n selector: '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n host: ngControlStatusHost\n }),\n __param(0, core.Self()),\n __metadata(\"design:paramtypes\", [ControlContainer])\n ], NgControlStatusGroup);\n return NgControlStatusGroup;\n }(AbstractControlStatus));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * Reports that a FormControl is valid, meaning that no errors exist in the input value.\n *\n * @see `status`\n */\n var VALID = 'VALID';\n /**\n * Reports that a FormControl is invalid, meaning that an error exists in the input value.\n *\n * @see `status`\n */\n var INVALID = 'INVALID';\n /**\n * Reports that a FormControl is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value.\n *\n * @see `markAsPending`\n * @see `status`\n */\n var PENDING = 'PENDING';\n /**\n * Reports that a FormControl is disabled, meaning that the control is exempt from ancestor\n * calculations of validity or value.\n *\n * @see `markAsDisabled`\n * @see `status`\n */\n var DISABLED = 'DISABLED';\n function _find(control, path, delimiter) {\n if (path == null)\n return null;\n if (!(path instanceof Array)) {\n path = path.split(delimiter);\n }\n if (path instanceof Array && (path.length === 0))\n return null;\n return path.reduce(function (v, name) {\n if (v instanceof FormGroup) {\n return v.controls.hasOwnProperty(name) ? v.controls[name] : null;\n }\n if (v instanceof FormArray) {\n return v.at(name) || null;\n }\n return null;\n }, control);\n }\n function coerceToValidator(validatorOrOpts) {\n var validator = (isOptionsObj(validatorOrOpts) ? validatorOrOpts.validators :\n validatorOrOpts);\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n }\n function coerceToAsyncValidator(asyncValidator, validatorOrOpts) {\n var origAsyncValidator = (isOptionsObj(validatorOrOpts) ? validatorOrOpts.asyncValidators :\n asyncValidator);\n return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :\n origAsyncValidator || null;\n }\n function isOptionsObj(validatorOrOpts) {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&\n typeof validatorOrOpts === 'object';\n }\n /**\n * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * @see [Forms Guide](/guide/forms)\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n * @see [Dynamic Forms Guide](/guide/dynamic-form)\n *\n * @publicApi\n */\n var AbstractControl = /** @class */ (function () {\n /**\n * Initialize the AbstractControl instance.\n *\n * @param validator The function that determines the synchronous validity of this control.\n * @param asyncValidator The function that determines the asynchronous validity of this\n * control.\n */\n function AbstractControl(validator, asyncValidator) {\n this.validator = validator;\n this.asyncValidator = asyncValidator;\n /** @internal */\n this._onCollectionChange = function () { };\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * @returns True if the user has not yet changed the value in the UI; compare `dirty`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n this.pristine = true;\n /**\n * True if the control is marked as `touched`.\n *\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n */\n this.touched = false;\n /** @internal */\n this._onDisabledChange = [];\n }\n Object.defineProperty(AbstractControl.prototype, \"parent\", {\n /**\n * The parent control.\n */\n get: function () { return this._parent; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"valid\", {\n /**\n * A control is `valid` when its `status` is `VALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control has passed all of its validation tests,\n * false otherwise.\n */\n get: function () { return this.status === VALID; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"invalid\", {\n /**\n * A control is `invalid` when its `status` is `INVALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control has failed one or more of its validation checks,\n * false otherwise.\n */\n get: function () { return this.status === INVALID; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"pending\", {\n /**\n * A control is `pending` when its `status` is `PENDING`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control is in the process of conducting a validation check,\n * false otherwise.\n */\n get: function () { return this.status == PENDING; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"disabled\", {\n /**\n * A control is `disabled` when its `status` is `DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control is disabled, false otherwise.\n */\n get: function () { return this.status === DISABLED; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"enabled\", {\n /**\n * A control is `enabled` as long as its `status` is not `DISABLED`.\n *\n * @returns True if the control has any status other than 'DISABLED',\n * false if the status is 'DISABLED'.\n *\n * @see {@link AbstractControl.status}\n *\n */\n get: function () { return this.status !== DISABLED; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"dirty\", {\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * @returns True if the user has changed the value of this control in the UI; compare `pristine`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n get: function () { return !this.pristine; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"untouched\", {\n /**\n * True if the control has not been marked as touched\n *\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n */\n get: function () { return !this.touched; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AbstractControl.prototype, \"updateOn\", {\n /**\n * Reports the update strategy of the `AbstractControl` (meaning\n * the event on which the control updates itself).\n * Possible values: `'change'` | `'blur'` | `'submit'`\n * Default value: `'change'`\n */\n get: function () {\n return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the synchronous validators that are active on this control. Calling\n * this overwrites any existing sync validators.\n */\n AbstractControl.prototype.setValidators = function (newValidator) {\n this.validator = coerceToValidator(newValidator);\n };\n /**\n * Sets the async validators that are active on this control. Calling this\n * overwrites any existing async validators.\n */\n AbstractControl.prototype.setAsyncValidators = function (newValidator) {\n this.asyncValidator = coerceToAsyncValidator(newValidator);\n };\n /**\n * Empties out the sync validator list.\n */\n AbstractControl.prototype.clearValidators = function () { this.validator = null; };\n /**\n * Empties out the async validator list.\n */\n AbstractControl.prototype.clearAsyncValidators = function () { this.asyncValidator = null; };\n /**\n * Marks the control as `touched`. A control is touched by focus and\n * blur events that do not change the value.\n *\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n AbstractControl.prototype.markAsTouched = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.touched = true;\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsTouched(opts);\n }\n };\n /**\n * Marks the control as `untouched`.\n *\n * If the control has any children, also marks all children as `untouched`\n * and recalculates the `touched` status of all parent controls.\n *\n * @see `markAsTouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after the marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n AbstractControl.prototype.markAsUntouched = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.touched = false;\n this._pendingTouched = false;\n this._forEachChild(function (control) { control.markAsUntouched({ onlySelf: true }); });\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n };\n /**\n * Marks the control as `dirty`. A control becomes dirty when\n * the control's value is changed through the UI; compare `markAsTouched`.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n AbstractControl.prototype.markAsDirty = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.pristine = false;\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsDirty(opts);\n }\n };\n /**\n * Marks the control as `pristine`.\n *\n * If the control has any children, marks all children as `pristine`,\n * and recalculates the `pristine` status of all parent\n * controls.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n *\n * @param opts Configuration options that determine how the control emits events after\n * marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n */\n AbstractControl.prototype.markAsPristine = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.pristine = true;\n this._pendingDirty = false;\n this._forEachChild(function (control) { control.markAsPristine({ onlySelf: true }); });\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n };\n /**\n * Marks the control as `pending`.\n *\n * A control is pending while the control performs async validation.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates changes and\n * emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), the `statusChanges`\n * observable emits an event with the latest status the control is marked pending.\n * When false, no events are emitted.\n *\n */\n AbstractControl.prototype.markAsPending = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.status = PENDING;\n if (opts.emitEvent !== false) {\n this.statusChanges.emit(this.status);\n }\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsPending(opts);\n }\n };\n /**\n * Disables the control. This means the control is exempt from validation checks and\n * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n *\n * If the control has children, all children are also disabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates\n * changes and emits events after the control is disabled.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is disabled.\n * When false, no events are emitted.\n */\n AbstractControl.prototype.disable = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.status = DISABLED;\n this.errors = null;\n this._forEachChild(function (control) { control.disable(__assign({}, opts, { onlySelf: true })); });\n this._updateValue();\n if (opts.emitEvent !== false) {\n this.valueChanges.emit(this.value);\n this.statusChanges.emit(this.status);\n }\n this._updateAncestors(opts);\n this._onDisabledChange.forEach(function (changeFn) { return changeFn(true); });\n };\n /**\n * Enables the control. This means the control is included in validation checks and\n * the aggregate value of its parent. Its status recalculates based on its value and\n * its validators.\n *\n * By default, if the control has children, all children are enabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configure options that control how the control propagates changes and\n * emits events when marked as untouched\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is enabled.\n * When false, no events are emitted.\n */\n AbstractControl.prototype.enable = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.status = VALID;\n this._forEachChild(function (control) { control.enable(__assign({}, opts, { onlySelf: true })); });\n this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n this._updateAncestors(opts);\n this._onDisabledChange.forEach(function (changeFn) { return changeFn(false); });\n };\n AbstractControl.prototype._updateAncestors = function (opts) {\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n this._parent._updatePristine();\n this._parent._updateTouched();\n }\n };\n /**\n * @param parent Sets the parent of the control\n */\n AbstractControl.prototype.setParent = function (parent) { this._parent = parent; };\n /**\n * Recalculates the value and validation status of the control.\n *\n * By default, it also updates the value and validity of its ancestors.\n *\n * @param opts Configuration options determine how the control propagates changes and emits events\n * after updates and validity checks are applied.\n * * `onlySelf`: When true, only update this control. When false or not supplied,\n * update all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is updated.\n * When false, no events are emitted.\n */\n AbstractControl.prototype.updateValueAndValidity = function (opts) {\n if (opts === void 0) { opts = {}; }\n this._setInitialStatus();\n this._updateValue();\n if (this.enabled) {\n this._cancelExistingSubscription();\n this.errors = this._runValidator();\n this.status = this._calculateStatus();\n if (this.status === VALID || this.status === PENDING) {\n this._runAsyncValidator(opts.emitEvent);\n }\n }\n if (opts.emitEvent !== false) {\n this.valueChanges.emit(this.value);\n this.statusChanges.emit(this.status);\n }\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n }\n };\n /** @internal */\n AbstractControl.prototype._updateTreeValidity = function (opts) {\n if (opts === void 0) { opts = { emitEvent: true }; }\n this._forEachChild(function (ctrl) { return ctrl._updateTreeValidity(opts); });\n this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n };\n AbstractControl.prototype._setInitialStatus = function () {\n this.status = this._allControlsDisabled() ? DISABLED : VALID;\n };\n AbstractControl.prototype._runValidator = function () {\n return this.validator ? this.validator(this) : null;\n };\n AbstractControl.prototype._runAsyncValidator = function (emitEvent) {\n var _this = this;\n if (this.asyncValidator) {\n this.status = PENDING;\n var obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription =\n obs.subscribe(function (errors) { return _this.setErrors(errors, { emitEvent: emitEvent }); });\n }\n };\n AbstractControl.prototype._cancelExistingSubscription = function () {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n }\n };\n /**\n * Sets errors on a form control when running validations manually, rather than automatically.\n *\n * Calling `setErrors` also updates the validity of the parent control.\n *\n * @usageNotes\n * ### Manually set the errors for a control\n *\n * ```\n * const login = new FormControl('someLogin');\n * login.setErrors({\n * notUnique: true\n * });\n *\n * expect(login.valid).toEqual(false);\n * expect(login.errors).toEqual({ notUnique: true });\n *\n * login.setValue('someOtherLogin');\n *\n * expect(login.valid).toEqual(true);\n * ```\n */\n AbstractControl.prototype.setErrors = function (errors, opts) {\n if (opts === void 0) { opts = {}; }\n this.errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false);\n };\n /**\n * Retrieves a child control given the control's name or path.\n *\n * @param path A dot-delimited string or array of string/number values that define the path to the\n * control.\n *\n * @usageNotes\n * ### Retrieve a nested control\n *\n * For example, to get a `name` control nested within a `person` sub-group:\n *\n * * `this.form.get('person.name');`\n *\n * -OR-\n *\n * * `this.form.get(['person', 'name']);`\n */\n AbstractControl.prototype.get = function (path) { return _find(this, path, '.'); };\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n AbstractControl.prototype.getError = function (errorCode, path) {\n var control = path ? this.get(path) : this;\n return control && control.errors ? control.errors[errorCode] : null;\n };\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n AbstractControl.prototype.hasError = function (errorCode, path) {\n return !!this.getError(errorCode, path);\n };\n Object.defineProperty(AbstractControl.prototype, \"root\", {\n /**\n * Retrieves the top-level ancestor of this control.\n */\n get: function () {\n var x = this;\n while (x._parent) {\n x = x._parent;\n }\n return x;\n },\n enumerable: true,\n configurable: true\n });\n /** @internal */\n AbstractControl.prototype._updateControlsErrors = function (emitEvent) {\n this.status = this._calculateStatus();\n if (emitEvent) {\n this.statusChanges.emit(this.status);\n }\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent);\n }\n };\n /** @internal */\n AbstractControl.prototype._initObservables = function () {\n this.valueChanges = new core.EventEmitter();\n this.statusChanges = new core.EventEmitter();\n };\n AbstractControl.prototype._calculateStatus = function () {\n if (this._allControlsDisabled())\n return DISABLED;\n if (this.errors)\n return INVALID;\n if (this._anyControlsHaveStatus(PENDING))\n return PENDING;\n if (this._anyControlsHaveStatus(INVALID))\n return INVALID;\n return VALID;\n };\n /** @internal */\n AbstractControl.prototype._anyControlsHaveStatus = function (status) {\n return this._anyControls(function (control) { return control.status === status; });\n };\n /** @internal */\n AbstractControl.prototype._anyControlsDirty = function () {\n return this._anyControls(function (control) { return control.dirty; });\n };\n /** @internal */\n AbstractControl.prototype._anyControlsTouched = function () {\n return this._anyControls(function (control) { return control.touched; });\n };\n /** @internal */\n AbstractControl.prototype._updatePristine = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.pristine = !this._anyControlsDirty();\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n };\n /** @internal */\n AbstractControl.prototype._updateTouched = function (opts) {\n if (opts === void 0) { opts = {}; }\n this.touched = this._anyControlsTouched();\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n };\n /** @internal */\n AbstractControl.prototype._isBoxedValue = function (formState) {\n return typeof formState === 'object' && formState !== null &&\n Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n };\n /** @internal */\n AbstractControl.prototype._registerOnCollectionChange = function (fn) { this._onCollectionChange = fn; };\n /** @internal */\n AbstractControl.prototype._setUpdateStrategy = function (opts) {\n if (isOptionsObj(opts) && opts.updateOn != null) {\n this._updateOn = opts.updateOn;\n }\n };\n return AbstractControl;\n }());\n /**\n * Tracks the value and validation status of an individual form control.\n *\n * This is one of the three fundamental building blocks of Angular forms, along with\n * `FormGroup` and `FormArray`. It extends the `AbstractControl` class that\n * implements most of the base functionality for accessing the value, validation status,\n * user interactions and events.\n *\n * @see `AbstractControl`\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see [Usage Notes](#usage-notes)\n *\n * @usageNotes\n *\n * ### Initializing Form Controls\n *\n * Instantiate a `FormControl`, with an initial value.\n *\n * ```ts\n * const control = new FormControl('some value');\n * console.log(control.value); // 'some value'\n *```\n *\n * The following example initializes the control with a form state object. The `value`\n * and `disabled` keys are required in this case.\n *\n * ```ts\n * const control = new FormControl({ value: 'n/a', disabled: true });\n * console.log(control.value); // 'n/a'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * The following example initializes the control with a sync validator.\n *\n * ```ts\n * const control = new FormControl('', Validators.required);\n * console.log(control.value); // ''\n * console.log(control.status); // 'INVALID'\n * ```\n *\n * The following example initializes the control using an options object.\n *\n * ```ts\n * const control = new FormControl('', {\n * validators: Validators.required,\n * asyncValidators: myAsyncValidator\n * });\n * ```\n *\n * ### Configure the control to update on a blur event\n *\n * Set the `updateOn` option to `'blur'` to update on the blur `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'blur' });\n * ```\n *\n * ### Configure the control to update on a submit event\n *\n * Set the `updateOn` option to `'submit'` to update on a submit `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'submit' });\n * ```\n *\n * ### Reset the control back to an initial value\n *\n * You reset to a specific form state by passing through a standalone\n * value or a form state object that contains both a value and a disabled state\n * (these are the only two properties that cannot be calculated).\n *\n * ```ts\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n *\n * control.reset('Drew');\n *\n * console.log(control.value); // 'Drew'\n * ```\n *\n * ### Reset the control back to an initial value and disabled\n *\n * ```\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n * console.log(control.status); // 'VALID'\n *\n * control.reset({ value: 'Drew', disabled: true });\n *\n * console.log(control.value); // 'Drew'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * @publicApi\n */\n var FormControl = /** @class */ (function (_super) {\n __extends(FormControl, _super);\n /**\n * Creates a new `FormControl` instance.\n *\n * @param formState Initializes the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n function FormControl(formState, validatorOrOpts, asyncValidator) {\n if (formState === void 0) { formState = null; }\n var _this = _super.call(this, coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts)) || this;\n /** @internal */\n _this._onChange = [];\n _this._applyFormState(formState);\n _this._setUpdateStrategy(validatorOrOpts);\n _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n _this._initObservables();\n return _this;\n }\n /**\n * Sets a new value for the form control.\n *\n * @param value The new value for the control.\n * @param options Configuration options that determine how the control proopagates changes\n * and emits events when the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * * `emitModelToViewChange`: When true or not supplied (the default), each change triggers an\n * `onChange` event to\n * update the view.\n * * `emitViewToModelChange`: When true or not supplied (the default), each change triggers an\n * `ngModelChange`\n * event to update the model.\n *\n */\n FormControl.prototype.setValue = function (value, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n this.value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach(function (changeFn) { return changeFn(_this.value, options.emitViewToModelChange !== false); });\n }\n this.updateValueAndValidity(options);\n };\n /**\n * Patches the value of a control.\n *\n * This function is functionally the same as {@link FormControl#setValue setValue} at this level.\n * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and\n * `FormArrays`, where it does behave differently.\n *\n * @see `setValue` for options\n */\n FormControl.prototype.patchValue = function (value, options) {\n if (options === void 0) { options = {}; }\n this.setValue(value, options);\n };\n /**\n * Resets the form control, marking it `pristine` and `untouched`, and setting\n * the value to null.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n *\n */\n FormControl.prototype.reset = function (formState, options) {\n if (formState === void 0) { formState = null; }\n if (options === void 0) { options = {}; }\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n this._pendingChange = false;\n };\n /**\n * @internal\n */\n FormControl.prototype._updateValue = function () { };\n /**\n * @internal\n */\n FormControl.prototype._anyControls = function (condition) { return false; };\n /**\n * @internal\n */\n FormControl.prototype._allControlsDisabled = function () { return this.disabled; };\n /**\n * Register a listener for change events.\n *\n * @param fn The method that is called when the value changes\n */\n FormControl.prototype.registerOnChange = function (fn) { this._onChange.push(fn); };\n /**\n * @internal\n */\n FormControl.prototype._clearChangeFns = function () {\n this._onChange = [];\n this._onDisabledChange = [];\n this._onCollectionChange = function () { };\n };\n /**\n * Register a listener for disabled events.\n *\n * @param fn The method that is called when the disabled status changes.\n */\n FormControl.prototype.registerOnDisabledChange = function (fn) {\n this._onDisabledChange.push(fn);\n };\n /**\n * @internal\n */\n FormControl.prototype._forEachChild = function (cb) { };\n /** @internal */\n FormControl.prototype._syncPendingControls = function () {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty)\n this.markAsDirty();\n if (this._pendingTouched)\n this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, { onlySelf: true, emitModelToViewChange: false });\n return true;\n }\n }\n return false;\n };\n FormControl.prototype._applyFormState = function (formState) {\n if (this._isBoxedValue(formState)) {\n this.value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({ onlySelf: true, emitEvent: false }) :\n this.enable({ onlySelf: true, emitEvent: false });\n }\n else {\n this.value = this._pendingValue = formState;\n }\n };\n return FormControl;\n }(AbstractControl));\n /**\n * Tracks the value and validity state of a group of `FormControl` instances.\n *\n * A `FormGroup` aggregates the values of each child `FormControl` into one object,\n * with each control name as the key. It calculates its status by reducing the status values\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormArray`.\n *\n * When instantiating a `FormGroup`, pass in a collection of child controls as the first\n * argument. The key for each child registers the name for the control.\n *\n * @usageNotes\n *\n * ### Create a form group with 2 controls\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('Nancy', Validators.minLength(2)),\n * last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value); // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status); // 'VALID'\n * ```\n *\n * ### Create a form group with a group-level validator\n *\n * You include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('', Validators.minLength(2)),\n * passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n * return g.get('password').value === g.get('passwordConfirm').value\n * ? null : {'mismatch': true};\n * }\n * ```\n *\n * Like `FormControl` instances, you choose to pass in\n * validators and async validators as part of an options object.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('')\n * passwordConfirm: new FormControl('')\n * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });\n * ```\n *\n * ### Set the updateOn property for all controls in a form group\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * group level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormGroup({\n * one: new FormControl()\n * }, { updateOn: 'blur' });\n * ```\n *\n * @publicApi\n */\n var FormGroup = /** @class */ (function (_super) {\n __extends(FormGroup, _super);\n /**\n * Creates a new `FormGroup` instance.\n *\n * @param controls A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n function FormGroup(controls, validatorOrOpts, asyncValidator) {\n var _this = _super.call(this, coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts)) || this;\n _this.controls = controls;\n _this._initObservables();\n _this._setUpdateStrategy(validatorOrOpts);\n _this._setUpControls();\n _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n return _this;\n }\n /**\n * Registers a control with the group's list of controls.\n *\n * This method does not update the value or validity of the control.\n * Use {@link FormGroup#addControl addControl} instead.\n *\n * @param name The control name to register in the collection\n * @param control Provides the control for the given name\n */\n FormGroup.prototype.registerControl = function (name, control) {\n if (this.controls[name])\n return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n };\n /**\n * Add a control to this group.\n *\n * This method also updates the value and validity of the control.\n *\n * @param name The control name to add to the collection\n * @param control Provides the control for the given name\n */\n FormGroup.prototype.addControl = function (name, control) {\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n };\n /**\n * Remove a control from this group.\n *\n * @param name The control name to remove from the collection\n */\n FormGroup.prototype.removeControl = function (name) {\n if (this.controls[name])\n this.controls[name]._registerOnCollectionChange(function () { });\n delete (this.controls[name]);\n this.updateValueAndValidity();\n this._onCollectionChange();\n };\n /**\n * Replace an existing control.\n *\n * @param name The control name to replace in the collection\n * @param control Provides the control for the given name\n */\n FormGroup.prototype.setControl = function (name, control) {\n if (this.controls[name])\n this.controls[name]._registerOnCollectionChange(function () { });\n delete (this.controls[name]);\n if (control)\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n };\n /**\n * Check whether there is an enabled control with the given name in the group.\n *\n * Reports false for disabled controls. If you'd like to check for existence in the group\n * only, use {@link AbstractControl#get get} instead.\n *\n * @param name The control name to check for existence in the collection\n *\n * @returns false for disabled controls, true otherwise.\n */\n FormGroup.prototype.contains = function (controlName) {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n };\n /**\n * Sets the value of the `FormGroup`. It accepts an object that matches\n * the structure of the group, with control names as keys.\n *\n * @usageNotes\n * ### Set the complete value for the form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n *\n * console.log(form.value); // {first: null, last: null}\n *\n * form.setValue({first: 'Nancy', last: 'Drew'});\n * console.log(form.value); // {first: 'Nancy', last: 'Drew'}\n * ```\n *\n * @throws When strict checks fail, such as setting the value of a control\n * that doesn't exist or if you excluding the value of a control.\n *\n * @param value The new value for the control that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n */\n FormGroup.prototype.setValue = function (value, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n this._checkAllValuesPresent(value);\n Object.keys(value).forEach(function (name) {\n _this._throwIfControlMissing(name);\n _this.controls[name].setValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n };\n /**\n * Patches the value of the `FormGroup`. It accepts an object with control\n * names as keys, and does its best to match the values to the correct controls\n * in the group.\n *\n * It accepts both super-sets and sub-sets of the group without throwing an error.\n *\n * @usageNotes\n * ### Patch the value for a form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n * console.log(form.value); // {first: null, last: null}\n *\n * form.patchValue({first: 'Nancy'});\n * console.log(form.value); // {first: 'Nancy', last: null}\n * ```\n *\n * @param value The object that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes and\n * emits events after the value is patched.\n * * `onlySelf`: When true, each change only affects this control and not its parent. Default is\n * true.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n FormGroup.prototype.patchValue = function (value, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n Object.keys(value).forEach(function (name) {\n if (_this.controls[name]) {\n _this.controls[name].patchValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n }\n });\n this.updateValueAndValidity(options);\n };\n /**\n * Resets the `FormGroup`, marks all descendants are marked `pristine` and `untouched`, and\n * the value of all descendants to null.\n *\n * You reset to a specific form state by passing in a map of states\n * that matches the structure of your form, with control names as keys. The state\n * is a standalone value or a form state object with both a value and a disabled\n * status.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events when the group is reset.\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * @usageNotes\n *\n * ### Reset the form group values\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * console.log(form.value); // {first: 'first name', last: 'last name'}\n *\n * form.reset({ first: 'name', last: 'last name' });\n *\n * console.log(form.value); // {first: 'name', last: 'last name'}\n * ```\n *\n * ### Reset the form group values and disabled status\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * form.reset({\n * first: {value: 'name', disabled: true},\n * last: 'last'\n * });\n *\n * console.log(this.form.value); // {first: 'name', last: 'last name'}\n * console.log(this.form.get('first').status); // 'DISABLED'\n * ```\n */\n FormGroup.prototype.reset = function (value, options) {\n if (value === void 0) { value = {}; }\n if (options === void 0) { options = {}; }\n this._forEachChild(function (control, name) {\n control.reset(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n };\n /**\n * The aggregate value of the `FormGroup`, including any disabled controls.\n *\n * Retrieves all values regardless of disabled status.\n * The `value` property is the best way to get the value of the group, because\n * it excludes disabled controls in the `FormGroup`.\n */\n FormGroup.prototype.getRawValue = function () {\n return this._reduceChildren({}, function (acc, control, name) {\n acc[name] = control instanceof FormControl ? control.value : control.getRawValue();\n return acc;\n });\n };\n /** @internal */\n FormGroup.prototype._syncPendingControls = function () {\n var subtreeUpdated = this._reduceChildren(false, function (updated, child) {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated)\n this.updateValueAndValidity({ onlySelf: true });\n return subtreeUpdated;\n };\n /** @internal */\n FormGroup.prototype._throwIfControlMissing = function (name) {\n if (!Object.keys(this.controls).length) {\n throw new Error(\"\\n There are no form controls registered with this group yet. If you're using ngModel,\\n you may want to check next tick (e.g. use setTimeout).\\n \");\n }\n if (!this.controls[name]) {\n throw new Error(\"Cannot find form control with name: \" + name + \".\");\n }\n };\n /** @internal */\n FormGroup.prototype._forEachChild = function (cb) {\n var _this = this;\n Object.keys(this.controls).forEach(function (k) { return cb(_this.controls[k], k); });\n };\n /** @internal */\n FormGroup.prototype._setUpControls = function () {\n var _this = this;\n this._forEachChild(function (control) {\n control.setParent(_this);\n control._registerOnCollectionChange(_this._onCollectionChange);\n });\n };\n /** @internal */\n FormGroup.prototype._updateValue = function () { this.value = this._reduceValue(); };\n /** @internal */\n FormGroup.prototype._anyControls = function (condition) {\n var _this = this;\n var res = false;\n this._forEachChild(function (control, name) {\n res = res || (_this.contains(name) && condition(control));\n });\n return res;\n };\n /** @internal */\n FormGroup.prototype._reduceValue = function () {\n var _this = this;\n return this._reduceChildren({}, function (acc, control, name) {\n if (control.enabled || _this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n };\n /** @internal */\n FormGroup.prototype._reduceChildren = function (initValue, fn) {\n var res = initValue;\n this._forEachChild(function (control, name) { res = fn(res, control, name); });\n return res;\n };\n /** @internal */\n FormGroup.prototype._allControlsDisabled = function () {\n var e_1, _a;\n try {\n for (var _b = __values(Object.keys(this.controls)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var controlName = _c.value;\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n };\n /** @internal */\n FormGroup.prototype._checkAllValuesPresent = function (value) {\n this._forEachChild(function (control, name) {\n if (value[name] === undefined) {\n throw new Error(\"Must supply a value for form control with name: '\" + name + \"'.\");\n }\n });\n };\n return FormGroup;\n }(AbstractControl));\n /**\n * Tracks the value and validity state of an array of `FormControl`,\n * `FormGroup` or `FormArray` instances.\n *\n * A `FormArray` aggregates the values of each child `FormControl` into an array.\n * It calculates its status by reducing the status values of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormGroup`.\n *\n * @usageNotes\n *\n * ### Create an array of form controls\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy', Validators.minLength(2)),\n * new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value); // ['Nancy', 'Drew']\n * console.log(arr.status); // 'VALID'\n * ```\n *\n * ### Create a form array with array-level validators\n *\n * You include array-level validators and async validators. These come in handy\n * when you want to perform validation that considers the value of more than one child\n * control.\n *\n * The two types of validators are passed in separately as the second and third arg\n * respectively, or together as part of an options object.\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy'),\n * new FormControl('Drew')\n * ], {validators: myValidator, asyncValidators: myAsyncValidator});\n * ```\n *\n * ### Set the updateOn property for all controls in a form array\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * array level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl()\n * ], {updateOn: 'blur'});\n * ```\n *\n * ### Adding or removing controls from a form array\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that result in strange and unexpected behavior such\n * as broken change detection.\n *\n * @publicApi\n */\n var FormArray = /** @class */ (function (_super) {\n __extends(FormArray, _super);\n /**\n * Creates a new `FormArray` instance.\n *\n * @param controls An array of child controls. Each child control is given an index\n * where it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n function FormArray(controls, validatorOrOpts, asyncValidator) {\n var _this = _super.call(this, coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts)) || this;\n _this.controls = controls;\n _this._initObservables();\n _this._setUpdateStrategy(validatorOrOpts);\n _this._setUpControls();\n _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n return _this;\n }\n /**\n * Get the `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to retrieve the control\n */\n FormArray.prototype.at = function (index) { return this.controls[index]; };\n /**\n * Insert a new `AbstractControl` at the end of the array.\n *\n * @param control Form control to be inserted\n */\n FormArray.prototype.push = function (control) {\n this.controls.push(control);\n this._registerControl(control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n };\n /**\n * Insert a new `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to insert the control\n * @param control Form control to be inserted\n */\n FormArray.prototype.insert = function (index, control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n this.updateValueAndValidity();\n };\n /**\n * Remove the control at the given `index` in the array.\n *\n * @param index Index in the array to remove the control\n */\n FormArray.prototype.removeAt = function (index) {\n if (this.controls[index])\n this.controls[index]._registerOnCollectionChange(function () { });\n this.controls.splice(index, 1);\n this.updateValueAndValidity();\n };\n /**\n * Replace an existing control.\n *\n * @param index Index in the array to replace the control\n * @param control The `AbstractControl` control to replace the existing control\n */\n FormArray.prototype.setControl = function (index, control) {\n if (this.controls[index])\n this.controls[index]._registerOnCollectionChange(function () { });\n this.controls.splice(index, 1);\n if (control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n }\n this.updateValueAndValidity();\n this._onCollectionChange();\n };\n Object.defineProperty(FormArray.prototype, \"length\", {\n /**\n * Length of the control array.\n */\n get: function () { return this.controls.length; },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the value of the `FormArray`. It accepts an array that matches\n * the structure of the control.\n *\n * This method performs strict checks, and throws an error if you try\n * to set the value of a control that doesn't exist or if you exclude the\n * value of a control.\n *\n * @usageNotes\n * ### Set the values for the controls in the form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.setValue(['Nancy', 'Drew']);\n * console.log(arr.value); // ['Nancy', 'Drew']\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n FormArray.prototype.setValue = function (value, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n this._checkAllValuesPresent(value);\n value.forEach(function (newValue, index) {\n _this._throwIfControlMissing(index);\n _this.at(index).setValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n };\n /**\n * Patches the value of the `FormArray`. It accepts an array that matches the\n * structure of the control, and does its best to match the values to the correct\n * controls in the group.\n *\n * It accepts both super-sets and sub-sets of the array without throwing an error.\n *\n * @usageNotes\n * ### Patch the values for controls in a form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.patchValue(['Nancy']);\n * console.log(arr.value); // ['Nancy', null]\n * ```\n *\n * @param value Array of latest values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n FormArray.prototype.patchValue = function (value, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n value.forEach(function (newValue, index) {\n if (_this.at(index)) {\n _this.at(index).patchValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });\n }\n });\n this.updateValueAndValidity(options);\n };\n /**\n * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the\n * value of all descendants to null or null maps.\n *\n * You reset to a specific form state by passing in an array of states\n * that matches the structure of the control. The state is a standalone value\n * or a form state object with both a value and a disabled status.\n *\n * @usageNotes\n * ### Reset the values in a form array\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * arr.reset(['name', 'last name']);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * ```\n *\n * ### Reset the values in a form array and the disabled status for the first control\n *\n * ```\n * this.arr.reset([\n * {value: 'name', disabled: true},\n * 'last'\n * ]);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * console.log(this.arr.get(0).status); // 'DISABLED'\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n FormArray.prototype.reset = function (value, options) {\n if (value === void 0) { value = []; }\n if (options === void 0) { options = {}; }\n this._forEachChild(function (control, index) {\n control.reset(value[index], { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n };\n /**\n * The aggregate value of the array, including any disabled controls.\n *\n * Reports all values regardless of disabled status.\n * For enabled controls only, the `value` property is the best way to get the value of the array.\n */\n FormArray.prototype.getRawValue = function () {\n return this.controls.map(function (control) {\n return control instanceof FormControl ? control.value : control.getRawValue();\n });\n };\n /** @internal */\n FormArray.prototype._syncPendingControls = function () {\n var subtreeUpdated = this.controls.reduce(function (updated, child) {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated)\n this.updateValueAndValidity({ onlySelf: true });\n return subtreeUpdated;\n };\n /** @internal */\n FormArray.prototype._throwIfControlMissing = function (index) {\n if (!this.controls.length) {\n throw new Error(\"\\n There are no form controls registered with this array yet. If you're using ngModel,\\n you may want to check next tick (e.g. use setTimeout).\\n \");\n }\n if (!this.at(index)) {\n throw new Error(\"Cannot find form control at index \" + index);\n }\n };\n /** @internal */\n FormArray.prototype._forEachChild = function (cb) {\n this.controls.forEach(function (control, index) { cb(control, index); });\n };\n /** @internal */\n FormArray.prototype._updateValue = function () {\n var _this = this;\n this.value =\n this.controls.filter(function (control) { return control.enabled || _this.disabled; })\n .map(function (control) { return control.value; });\n };\n /** @internal */\n FormArray.prototype._anyControls = function (condition) {\n return this.controls.some(function (control) { return control.enabled && condition(control); });\n };\n /** @internal */\n FormArray.prototype._setUpControls = function () {\n var _this = this;\n this._forEachChild(function (control) { return _this._registerControl(control); });\n };\n /** @internal */\n FormArray.prototype._checkAllValuesPresent = function (value) {\n this._forEachChild(function (control, i) {\n if (value[i] === undefined) {\n throw new Error(\"Must supply a value for form control at index: \" + i + \".\");\n }\n });\n };\n /** @internal */\n FormArray.prototype._allControlsDisabled = function () {\n var e_2, _a;\n try {\n for (var _b = __values(this.controls), _c = _b.next(); !_c.done; _c = _b.next()) {\n var control = _c.value;\n if (control.enabled)\n return false;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return this.controls.length > 0 || this.disabled;\n };\n FormArray.prototype._registerControl = function (control) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n };\n return FormArray;\n }(AbstractControl));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var formDirectiveProvider = {\n provide: ControlContainer,\n useExisting: core.forwardRef(function () { return NgForm; })\n };\n var resolvedPromise = Promise.resolve(null);\n /**\n * @description\n * Creates a top-level `FormGroup` instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags. You don't need to add a special selector.\n *\n * You optionally export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful. Many properties from the underlying\n * `FormGroup` instance are duplicated on the directive itself, so a reference to it\n * gives you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, use `NgModel` with a `name`\n * attribute. You may use `NgModelGroup` to create sub-groups within the form.\n *\n * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event emits the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * To import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * @usageNotes\n *\n * ### Migrating from deprecated ngForm selector\n *\n * Support for using `ngForm` element selector has been deprecated in Angular v6 and will be removed\n * in Angular v9.\n *\n * This has been deprecated to keep selectors consistent with other core Angular selectors,\n * as element selectors are typically written in kebab-case.\n *\n * Now deprecated:\n * ```html\n * <ngForm #myForm=\"ngForm\">\n * ```\n *\n * After:\n * ```html\n * <ng-form #myForm=\"ngForm\">\n * ```\n *\n * ### Listening for form submission\n *\n * The following example shows how to capture the form values from the \"ngSubmit\" event.\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Setting the update options\n *\n * The following example shows you how to change the \"updateOn\" option from its default using\n * ngFormOptions.\n *\n * ```html\n * <form [ngFormOptions]=\"{updateOn: 'blur'}\">\n * <input name=\"one\" ngModel> <!-- this ngModel will update on blur -->\n * </form>\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n var NgForm = /** @class */ (function (_super) {\n __extends(NgForm, _super);\n function NgForm(validators, asyncValidators) {\n var _this = _super.call(this) || this;\n /**\n * @description\n * Returns whether the form submission has been triggered.\n */\n _this.submitted = false;\n _this._directives = [];\n /**\n * @description\n * Event emitter for the \"ngSubmit\" event\n */\n _this.ngSubmit = new core.EventEmitter();\n _this.form =\n new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n return _this;\n }\n /**\n * @description\n * Lifecycle method called after the view is initialized. For internal use only.\n */\n NgForm.prototype.ngAfterViewInit = function () { this._setUpdateStrategy(); };\n Object.defineProperty(NgForm.prototype, \"formDirective\", {\n /**\n * @description\n * The directive instance.\n */\n get: function () { return this; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgForm.prototype, \"control\", {\n /**\n * @description\n * The internal `FormGroup` instance.\n */\n get: function () { return this.form; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgForm.prototype, \"path\", {\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it is always an empty array.\n */\n get: function () { return []; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgForm.prototype, \"controls\", {\n /**\n * @description\n * Returns a map of the controls in this group.\n */\n get: function () { return this.form.controls; },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `NgModel` directive instance.\n */\n NgForm.prototype.addControl = function (dir) {\n var _this = this;\n resolvedPromise.then(function () {\n var container = _this._findContainer(dir.path);\n dir.control =\n container.registerControl(dir.name, dir.control);\n setUpControl(dir.control, dir);\n dir.control.updateValueAndValidity({ emitEvent: false });\n _this._directives.push(dir);\n });\n };\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `NgModel` directive.\n *\n * @param dir The `NgModel` directive instance.\n */\n NgForm.prototype.getControl = function (dir) { return this.form.get(dir.path); };\n /**\n * @description\n * Removes the `NgModel` instance from the internal list of directives\n *\n * @param dir The `NgModel` directive instance.\n */\n NgForm.prototype.removeControl = function (dir) {\n var _this = this;\n resolvedPromise.then(function () {\n var container = _this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n removeDir(_this._directives, dir);\n });\n };\n /**\n * @description\n * Adds a new `NgModelGroup` directive instance to the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n NgForm.prototype.addFormGroup = function (dir) {\n var _this = this;\n resolvedPromise.then(function () {\n var container = _this._findContainer(dir.path);\n var group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({ emitEvent: false });\n });\n };\n /**\n * @description\n * Removes the `NgModelGroup` directive instance from the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n NgForm.prototype.removeFormGroup = function (dir) {\n var _this = this;\n resolvedPromise.then(function () {\n var container = _this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n });\n };\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n NgForm.prototype.getFormGroup = function (dir) { return this.form.get(dir.path); };\n /**\n * Sets the new value for the provided `NgControl` directive.\n *\n * @param dir The `NgControl` directive instance.\n * @param value The new value for the directive's control.\n */\n NgForm.prototype.updateModel = function (dir, value) {\n var _this = this;\n resolvedPromise.then(function () {\n var ctrl = _this.form.get(dir.path);\n ctrl.setValue(value);\n });\n };\n /**\n * @description\n * Sets the value for this `FormGroup`.\n *\n * @param value The new value\n */\n NgForm.prototype.setValue = function (value) { this.control.setValue(value); };\n /**\n * @description\n * Method called when the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n NgForm.prototype.onSubmit = function ($event) {\n this.submitted = true;\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n return false;\n };\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n NgForm.prototype.onReset = function () { this.resetForm(); };\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n NgForm.prototype.resetForm = function (value) {\n if (value === void 0) { value = undefined; }\n this.form.reset(value);\n this.submitted = false;\n };\n NgForm.prototype._setUpdateStrategy = function () {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n };\n /** @internal */\n NgForm.prototype._findContainer = function (path) {\n path.pop();\n return path.length ? this.form.get(path) : this.form;\n };\n __decorate([\n core.Input('ngFormOptions'),\n __metadata(\"design:type\", Object)\n ], NgForm.prototype, \"options\", void 0);\n NgForm = __decorate([\n core.Directive({\n selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,ng-form,[ngForm]',\n providers: [formDirectiveProvider],\n host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n outputs: ['ngSubmit'],\n exportAs: 'ngForm'\n }),\n __param(0, core.Optional()), __param(0, core.Self()), __param(0, core.Inject(NG_VALIDATORS)),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_ASYNC_VALIDATORS)),\n __metadata(\"design:paramtypes\", [Array, Array])\n ], NgForm);\n return NgForm;\n }(ControlContainer));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var TemplateDrivenErrors = /** @class */ (function () {\n function TemplateDrivenErrors() {\n }\n TemplateDrivenErrors.modelParentException = function () {\n throw new Error(\"\\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\\n formGroup's partner directive \\\"formControlName\\\" instead. Example:\\n\\n \" + FormErrorExamples.formControlName + \"\\n\\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\\n\\n Example:\\n\\n \" + FormErrorExamples.ngModelWithFormGroup);\n };\n TemplateDrivenErrors.formGroupNameException = function () {\n throw new Error(\"\\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\\n\\n Option 1: Use formControlName instead of ngModel (reactive strategy):\\n\\n \" + FormErrorExamples.formGroupName + \"\\n\\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\\n\\n \" + FormErrorExamples.ngModelGroup);\n };\n TemplateDrivenErrors.missingNameException = function () {\n throw new Error(\"If ngModel is used within a form tag, either the name attribute must be set or the form\\n control must be defined as 'standalone' in ngModelOptions.\\n\\n Example 1: <input [(ngModel)]=\\\"person.firstName\\\" name=\\\"first\\\">\\n Example 2: <input [(ngModel)]=\\\"person.firstName\\\" [ngModelOptions]=\\\"{standalone: true}\\\">\");\n };\n TemplateDrivenErrors.modelGroupParentException = function () {\n throw new Error(\"\\n ngModelGroup cannot be used with a parent formGroup directive.\\n\\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\\n\\n \" + FormErrorExamples.formGroupName + \"\\n\\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\\n\\n \" + FormErrorExamples.ngModelGroup);\n };\n TemplateDrivenErrors.ngFormWarning = function () {\n console.warn(\"\\n It looks like you're using 'ngForm'.\\n\\n Support for using the 'ngForm' element selector has been deprecated in Angular v6 and will be removed\\n in Angular v9.\\n\\n Use 'ng-form' instead.\\n\\n Before:\\n <ngForm #myForm=\\\"ngForm\\\">\\n\\n After:\\n <ng-form #myForm=\\\"ngForm\\\">\\n \");\n };\n return TemplateDrivenErrors;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n * `InjectionToken` to provide to turn off the warning when using 'ngForm' deprecated selector.\n */\n var NG_FORM_SELECTOR_WARNING = new core.InjectionToken('NgFormSelectorWarning');\n /**\n * This directive is solely used to display warnings when the deprecated `ngForm` selector is used.\n *\n * @deprecated in Angular v6 and will be removed in Angular v9.\n * @ngModule FormsModule\n * @publicApi\n */\n var NgFormSelectorWarning = /** @class */ (function () {\n function NgFormSelectorWarning(ngFormWarning) {\n if (((!ngFormWarning || ngFormWarning === 'once') && !NgFormSelectorWarning_1._ngFormWarning) ||\n ngFormWarning === 'always') {\n TemplateDrivenErrors.ngFormWarning();\n NgFormSelectorWarning_1._ngFormWarning = true;\n }\n }\n NgFormSelectorWarning_1 = NgFormSelectorWarning;\n var NgFormSelectorWarning_1;\n /**\n * Static property used to track whether the deprecation warning for this selector has been sent.\n * Used to support warning config of \"once\".\n *\n * @internal\n */\n NgFormSelectorWarning._ngFormWarning = false;\n NgFormSelectorWarning = NgFormSelectorWarning_1 = __decorate([\n core.Directive({ selector: 'ngForm' }),\n __param(0, core.Optional()), __param(0, core.Inject(NG_FORM_SELECTOR_WARNING)),\n __metadata(\"design:paramtypes\", [Object])\n ], NgFormSelectorWarning);\n return NgFormSelectorWarning;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var modelGroupProvider = {\n provide: ControlContainer,\n useExisting: core.forwardRef(function () { return NgModelGroup; })\n };\n /**\n * @description\n * Creates and binds a `FormGroup` instance to a DOM element.\n *\n * This directive can only be used as a child of `NgForm` (within `<form>` tags).\n *\n * Use this directive to validate a sub-group of your form separately from the\n * rest of your form, or if some values in your domain model make more sense\n * to consume together in a nested object.\n *\n * Provide a name for the sub-group and it will become the key\n * for the sub-group in the form's full value. If you need direct access, export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * @usageNotes\n *\n * ### Consuming controls in a grouping\n *\n * The following example shows you how to combine controls together in a sub-group\n * of the form.\n *\n * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * @ngModule FormsModule\n * @publicApi\n */\n var NgModelGroup = /** @class */ (function (_super) {\n __extends(NgModelGroup, _super);\n function NgModelGroup(parent, validators, asyncValidators) {\n var _this = _super.call(this) || this;\n _this._parent = parent;\n _this._validators = validators;\n _this._asyncValidators = asyncValidators;\n return _this;\n }\n NgModelGroup_1 = NgModelGroup;\n /** @internal */\n NgModelGroup.prototype._checkParentType = function () {\n if (!(this._parent instanceof NgModelGroup_1) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelGroupParentException();\n }\n };\n var NgModelGroup_1;\n __decorate([\n core.Input('ngModelGroup'),\n __metadata(\"design:type\", String)\n ], NgModelGroup.prototype, \"name\", void 0);\n NgModelGroup = NgModelGroup_1 = __decorate([\n core.Directive({ selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup' }),\n __param(0, core.Host()), __param(0, core.SkipSelf()),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_ASYNC_VALIDATORS)),\n __metadata(\"design:paramtypes\", [ControlContainer, Array, Array])\n ], NgModelGroup);\n return NgModelGroup;\n }(AbstractFormGroupDirective));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var formControlBinding = {\n provide: NgControl,\n useExisting: core.forwardRef(function () { return NgModel; })\n };\n /**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have and old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel` have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\n var resolvedPromise$1 = Promise.resolve(null);\n /**\n * @description\n * Creates a `FormControl` instance from a domain model and binds it\n * to a form control element.\n *\n * The `FormControl` instance tracks the value, user interaction, and\n * validation status of the control and keeps the view synced with the model. If used\n * within a parent form, the directive also registers itself with the form as a child\n * control.\n *\n * This directive is used by itself or as part of a larger form. Use the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional `Input`. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\n * class sets the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-box syntax'), the value in the UI always syncs back to\n * the domain model in your class.\n *\n * To inspect the properties of the associated `FormControl` (like validity state),\n * export the directive into a local template variable using `ngModel` as the key (ex: `#myVar=\"ngModel\"`).\n * You then access the control using the directive's `control` property,\n * but most properties used (like `valid` and `dirty`) fall through to the control anyway for direct access.\n * See a full list of properties directly available in `AbstractControlDirective`.\n *\n * @see `RadioControlValueAccessor`\n * @see `SelectControlValueAccessor`\n *\n * @usageNotes\n *\n * ### Using ngModel on a standalone control\n *\n * The following examples show a simple standalone control using `ngModel`:\n *\n * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * In the context of a parent form, it's often unnecessary to include one-way or two-way binding,\n * as the parent form syncs the value for you. You access its properties by exporting it into a\n * local template variable using `ngForm` such as (`#f=\"ngForm\"`). Use the variable where\n * needed on form submission.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n *\n * ### Using ngModel within a form\n *\n * The following example shows controls using `ngModel` within a form:\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Using a standalone ngModel within a group\n *\n * The following example shows you how to use a standalone ngModel control\n * within a form. This controls the display of the form, but doesn't contain form data.\n *\n * ```html\n * <form>\n * <input name=\"login\" ngModel placeholder=\"Login\">\n * <input type=\"checkbox\" ngModel [ngModelOptions]=\"{standalone: true}\"> Show more options?\n * </form>\n * <!-- form value: {login: ''} -->\n * ```\n *\n * ### Setting the ngModel name attribute through options\n *\n * The following example shows you an alternate way to set the name attribute. The name attribute is used\n * within a custom form component, and the name `@Input` property serves a different purpose.\n *\n * ```html\n * <form>\n * <my-person-control name=\"Nancy\" ngModel [ngModelOptions]=\"{name: 'user'}\">\n * </my-person-control>\n * </form>\n * <!-- form value: {user: ''} -->\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n var NgModel = /** @class */ (function (_super) {\n __extends(NgModel, _super);\n function NgModel(parent, validators, asyncValidators, valueAccessors) {\n var _this = _super.call(this) || this;\n _this.control = new FormControl();\n /** @internal */\n _this._registered = false;\n /**\n * @description\n * Event emitter for producing the `ngModelChange` event after\n * the view model updates.\n */\n _this.update = new core.EventEmitter();\n _this._parent = parent;\n _this._rawValidators = validators || [];\n _this._rawAsyncValidators = asyncValidators || [];\n _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n return _this;\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n NgModel.prototype.ngOnChanges = function (changes) {\n this._checkForErrors();\n if (!this._registered)\n this._setUpControl();\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n };\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal\n * use only.\n */\n NgModel.prototype.ngOnDestroy = function () { this.formDirective && this.formDirective.removeControl(this); };\n Object.defineProperty(NgModel.prototype, \"path\", {\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get: function () {\n return this._parent ? controlPath(this.name, this._parent) : [this.name];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgModel.prototype, \"formDirective\", {\n /**\n * @description\n * The top-level directive for this control if present, otherwise null.\n */\n get: function () { return this._parent ? this._parent.formDirective : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgModel.prototype, \"validator\", {\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get: function () { return composeValidators(this._rawValidators); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgModel.prototype, \"asyncValidator\", {\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get: function () {\n return composeAsyncValidators(this._rawAsyncValidators);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value emitted by `ngModelChange`.\n */\n NgModel.prototype.viewToModelUpdate = function (newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n };\n NgModel.prototype._setUpControl = function () {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() :\n this.formDirective.addControl(this);\n this._registered = true;\n };\n NgModel.prototype._setUpdateStrategy = function () {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n };\n NgModel.prototype._isStandalone = function () {\n return !this._parent || !!(this.options && this.options.standalone);\n };\n NgModel.prototype._setUpStandalone = function () {\n setUpControl(this.control, this);\n this.control.updateValueAndValidity({ emitEvent: false });\n };\n NgModel.prototype._checkForErrors = function () {\n if (!this._isStandalone()) {\n this._checkParentType();\n }\n this._checkName();\n };\n NgModel.prototype._checkParentType = function () {\n if (!(this._parent instanceof NgModelGroup) &&\n this._parent instanceof AbstractFormGroupDirective) {\n TemplateDrivenErrors.formGroupNameException();\n }\n else if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelParentException();\n }\n };\n NgModel.prototype._checkName = function () {\n if (this.options && this.options.name)\n this.name = this.options.name;\n if (!this._isStandalone() && !this.name) {\n TemplateDrivenErrors.missingNameException();\n }\n };\n NgModel.prototype._updateValue = function (value) {\n var _this = this;\n resolvedPromise$1.then(function () { _this.control.setValue(value, { emitViewToModelChange: false }); });\n };\n NgModel.prototype._updateDisabled = function (changes) {\n var _this = this;\n var disabledValue = changes['isDisabled'].currentValue;\n var isDisabled = disabledValue === '' || (disabledValue && disabledValue !== 'false');\n resolvedPromise$1.then(function () {\n if (isDisabled && !_this.control.disabled) {\n _this.control.disable();\n }\n else if (!isDisabled && _this.control.disabled) {\n _this.control.enable();\n }\n });\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", String)\n ], NgModel.prototype, \"name\", void 0);\n __decorate([\n core.Input('disabled'),\n __metadata(\"design:type\", Boolean)\n ], NgModel.prototype, \"isDisabled\", void 0);\n __decorate([\n core.Input('ngModel'),\n __metadata(\"design:type\", Object)\n ], NgModel.prototype, \"model\", void 0);\n __decorate([\n core.Input('ngModelOptions'),\n __metadata(\"design:type\", Object)\n ], NgModel.prototype, \"options\", void 0);\n __decorate([\n core.Output('ngModelChange'),\n __metadata(\"design:type\", Object)\n ], NgModel.prototype, \"update\", void 0);\n NgModel = __decorate([\n core.Directive({\n selector: '[ngModel]:not([formControlName]):not([formControl])',\n providers: [formControlBinding],\n exportAs: 'ngModel'\n }),\n __param(0, core.Optional()), __param(0, core.Host()),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_ASYNC_VALIDATORS)),\n __param(3, core.Optional()), __param(3, core.Self()), __param(3, core.Inject(NG_VALUE_ACCESSOR)),\n __metadata(\"design:paramtypes\", [ControlContainer,\n Array,\n Array, Array])\n ], NgModel);\n return NgModel;\n }(NgControl));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * Token to provide to turn off the ngModel warning on formControl and formControlName.\n */\n var NG_MODEL_WITH_FORM_CONTROL_WARNING = new core.InjectionToken('NgModelWithFormControlWarning');\n var formControlBinding$1 = {\n provide: NgControl,\n useExisting: core.forwardRef(function () { return FormControlDirective; })\n };\n /**\n * @description\n * * Syncs a standalone `FormControl` instance to a form control element.\n *\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Registering a single form control\n *\n * The following examples shows how to register a standalone control and set its value.\n *\n * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <input [formControl]=\"control\" [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <input [formControl]=\"control\">\n * ```\n *\n * ```ts\n * this.control.setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var FormControlDirective = /** @class */ (function (_super) {\n __extends(FormControlDirective, _super);\n function FormControlDirective(validators, asyncValidators, valueAccessors, _ngModelWarningConfig) {\n var _this = _super.call(this) || this;\n _this._ngModelWarningConfig = _ngModelWarningConfig;\n /** @deprecated as of v6 */\n _this.update = new core.EventEmitter();\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular `FormControlDirective` instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _this._ngModelWarningSent = false;\n _this._rawValidators = validators || [];\n _this._rawAsyncValidators = asyncValidators || [];\n _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n return _this;\n }\n FormControlDirective_1 = FormControlDirective;\n Object.defineProperty(FormControlDirective.prototype, \"isDisabled\", {\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n set: function (isDisabled) { ReactiveErrors.disabledAttrWarning(); },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n FormControlDirective.prototype.ngOnChanges = function (changes) {\n if (this._isControlChanged(changes)) {\n setUpControl(this.form, this);\n if (this.control.disabled && this.valueAccessor.setDisabledState) {\n this.valueAccessor.setDisabledState(true);\n }\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning('formControl', FormControlDirective_1, this, this._ngModelWarningConfig);\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n };\n Object.defineProperty(FormControlDirective.prototype, \"path\", {\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get: function () { return []; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlDirective.prototype, \"validator\", {\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get: function () { return composeValidators(this._rawValidators); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlDirective.prototype, \"asyncValidator\", {\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get: function () {\n return composeAsyncValidators(this._rawAsyncValidators);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlDirective.prototype, \"control\", {\n /**\n * @description\n * The `FormControl` bound to this directive.\n */\n get: function () { return this.form; },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n FormControlDirective.prototype.viewToModelUpdate = function (newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n };\n FormControlDirective.prototype._isControlChanged = function (changes) {\n return changes.hasOwnProperty('form');\n };\n var FormControlDirective_1;\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlDirective. Used to support warning config of \"once\".\n *\n * @internal\n */\n FormControlDirective._ngModelWarningSentOnce = false;\n __decorate([\n core.Input('formControl'),\n __metadata(\"design:type\", FormControl)\n ], FormControlDirective.prototype, \"form\", void 0);\n __decorate([\n core.Input('disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n ], FormControlDirective.prototype, \"isDisabled\", null);\n __decorate([\n core.Input('ngModel'),\n __metadata(\"design:type\", Object)\n ], FormControlDirective.prototype, \"model\", void 0);\n __decorate([\n core.Output('ngModelChange'),\n __metadata(\"design:type\", Object)\n ], FormControlDirective.prototype, \"update\", void 0);\n FormControlDirective = FormControlDirective_1 = __decorate([\n core.Directive({ selector: '[formControl]', providers: [formControlBinding$1], exportAs: 'ngForm' }),\n __param(0, core.Optional()), __param(0, core.Self()), __param(0, core.Inject(NG_VALIDATORS)),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_ASYNC_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_VALUE_ACCESSOR)),\n __param(3, core.Optional()), __param(3, core.Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING)),\n __metadata(\"design:paramtypes\", [Array,\n Array, Array, Object])\n ], FormControlDirective);\n return FormControlDirective;\n }(NgControl));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var formDirectiveProvider$1 = {\n provide: ControlContainer,\n useExisting: core.forwardRef(function () { return FormGroupDirective; })\n };\n /**\n * @description\n *\n * Binds an existing `FormGroup` to a DOM element.\n *\n * This directive accepts an existing `FormGroup` instance. It will then use this\n * `FormGroup` instance to match any child `FormControl`, `FormGroup`,\n * and `FormArray` instances to child `FormControlName`, `FormGroupName`,\n * and `FormArrayName` directives.\n *\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * ### Register Form Group\n *\n * The following example registers a `FormGroup` with first name and last name controls,\n * and listens for the *ngSubmit* event when the button is clicked.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var FormGroupDirective = /** @class */ (function (_super) {\n __extends(FormGroupDirective, _super);\n function FormGroupDirective(_validators, _asyncValidators) {\n var _this = _super.call(this) || this;\n _this._validators = _validators;\n _this._asyncValidators = _asyncValidators;\n /**\n * @description\n * Reports whether the form submission has been triggered.\n */\n _this.submitted = false;\n /**\n * @description\n * Tracks the list of added `FormControlName` instances\n */\n _this.directives = [];\n /**\n * @description\n * Tracks the `FormGroup` bound to this directive.\n */\n _this.form = null;\n /**\n * @description\n * Emits an event when the form submission has been triggered.\n */\n _this.ngSubmit = new core.EventEmitter();\n return _this;\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n FormGroupDirective.prototype.ngOnChanges = function (changes) {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n }\n };\n Object.defineProperty(FormGroupDirective.prototype, \"formDirective\", {\n /**\n * @description\n * Returns this directive's instance.\n */\n get: function () { return this; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormGroupDirective.prototype, \"control\", {\n /**\n * @description\n * Returns the `FormGroup` bound to this directive.\n */\n get: function () { return this.form; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormGroupDirective.prototype, \"path\", {\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it always an empty array.\n */\n get: function () { return []; },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `FormControlName` directive instance.\n */\n FormGroupDirective.prototype.addControl = function (dir) {\n var ctrl = this.form.get(dir.path);\n setUpControl(ctrl, dir);\n ctrl.updateValueAndValidity({ emitEvent: false });\n this.directives.push(dir);\n return ctrl;\n };\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `FormControlName` directive\n *\n * @param dir The `FormControlName` directive instance.\n */\n FormGroupDirective.prototype.getControl = function (dir) { return this.form.get(dir.path); };\n /**\n * @description\n * Removes the `FormControlName` instance from the internal list of directives\n *\n * @param dir The `FormControlName` directive instance.\n */\n FormGroupDirective.prototype.removeControl = function (dir) { removeDir(this.directives, dir); };\n /**\n * Adds a new `FormGroupName` directive instance to the form.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n FormGroupDirective.prototype.addFormGroup = function (dir) {\n var ctrl = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({ emitEvent: false });\n };\n /**\n * No-op method to remove the form group.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n FormGroupDirective.prototype.removeFormGroup = function (dir) { };\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance\n *\n * @param dir The `FormGroupName` directive instance.\n */\n FormGroupDirective.prototype.getFormGroup = function (dir) { return this.form.get(dir.path); };\n /**\n * Adds a new `FormArrayName` directive instance to the form.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n FormGroupDirective.prototype.addFormArray = function (dir) {\n var ctrl = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({ emitEvent: false });\n };\n /**\n * No-op method to remove the form array.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n FormGroupDirective.prototype.removeFormArray = function (dir) { };\n /**\n * @description\n * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n FormGroupDirective.prototype.getFormArray = function (dir) { return this.form.get(dir.path); };\n /**\n * Sets the new value for the provided `FormControlName` directive.\n *\n * @param dir The `FormControlName` directive instance.\n * @param value The new value for the directive's control.\n */\n FormGroupDirective.prototype.updateModel = function (dir, value) {\n var ctrl = this.form.get(dir.path);\n ctrl.setValue(value);\n };\n /**\n * @description\n * Method called with the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n FormGroupDirective.prototype.onSubmit = function ($event) {\n this.submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n return false;\n };\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n FormGroupDirective.prototype.onReset = function () { this.resetForm(); };\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n FormGroupDirective.prototype.resetForm = function (value) {\n if (value === void 0) { value = undefined; }\n this.form.reset(value);\n this.submitted = false;\n };\n /** @internal */\n FormGroupDirective.prototype._updateDomValue = function () {\n var _this = this;\n this.directives.forEach(function (dir) {\n var newCtrl = _this.form.get(dir.path);\n if (dir.control !== newCtrl) {\n cleanUpControl(dir.control, dir);\n if (newCtrl)\n setUpControl(newCtrl, dir);\n dir.control = newCtrl;\n }\n });\n this.form._updateTreeValidity({ emitEvent: false });\n };\n FormGroupDirective.prototype._updateRegistrations = function () {\n var _this = this;\n this.form._registerOnCollectionChange(function () { return _this._updateDomValue(); });\n if (this._oldForm)\n this._oldForm._registerOnCollectionChange(function () { });\n this._oldForm = this.form;\n };\n FormGroupDirective.prototype._updateValidators = function () {\n var sync = composeValidators(this._validators);\n this.form.validator = Validators.compose([this.form.validator, sync]);\n var async = composeAsyncValidators(this._asyncValidators);\n this.form.asyncValidator = Validators.composeAsync([this.form.asyncValidator, async]);\n };\n FormGroupDirective.prototype._checkFormPresent = function () {\n if (!this.form) {\n ReactiveErrors.missingFormException();\n }\n };\n __decorate([\n core.Input('formGroup'),\n __metadata(\"design:type\", FormGroup)\n ], FormGroupDirective.prototype, \"form\", void 0);\n __decorate([\n core.Output(),\n __metadata(\"design:type\", Object)\n ], FormGroupDirective.prototype, \"ngSubmit\", void 0);\n FormGroupDirective = __decorate([\n core.Directive({\n selector: '[formGroup]',\n providers: [formDirectiveProvider$1],\n host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n exportAs: 'ngForm'\n }),\n __param(0, core.Optional()), __param(0, core.Self()), __param(0, core.Inject(NG_VALIDATORS)),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_ASYNC_VALIDATORS)),\n __metadata(\"design:paramtypes\", [Array, Array])\n ], FormGroupDirective);\n return FormGroupDirective;\n }(ControlContainer));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var formGroupNameProvider = {\n provide: ControlContainer,\n useExisting: core.forwardRef(function () { return FormGroupName; })\n };\n /**\n * @description\n *\n * Syncs a nested `FormGroup` to a DOM element.\n *\n * This directive can only be used with a parent `FormGroupDirective`.\n *\n * It accepts the string name of the nested `FormGroup` to link, and\n * looks for a `FormGroup` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * Use nested form groups to validate a sub-group of a\n * form separately from the rest or to group the values of certain\n * controls into their own nested object.\n *\n * @see [Reactive Forms Guide](guide/reactive-forms)\n *\n * @usageNotes\n *\n * ### Access the group by name\n *\n * The following example uses the {@link AbstractControl#get get} method to access the\n * associated `FormGroup`\n *\n * ```ts\n * this.form.get('name');\n * ```\n *\n * ### Access individual controls in the group\n *\n * The following example uses the {@link AbstractControl#get get} method to access\n * individual controls within the group using dot syntax.\n *\n * ```ts\n * this.form.get('name.first');\n * ```\n *\n * ### Register a nested `FormGroup`.\n *\n * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,\n * and provides methods to retrieve the nested `FormGroup` and individual controls.\n *\n * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var FormGroupName = /** @class */ (function (_super) {\n __extends(FormGroupName, _super);\n function FormGroupName(parent, validators, asyncValidators) {\n var _this = _super.call(this) || this;\n _this._parent = parent;\n _this._validators = validators;\n _this._asyncValidators = asyncValidators;\n return _this;\n }\n /** @internal */\n FormGroupName.prototype._checkParentType = function () {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.groupParentException();\n }\n };\n __decorate([\n core.Input('formGroupName'),\n __metadata(\"design:type\", String)\n ], FormGroupName.prototype, \"name\", void 0);\n FormGroupName = __decorate([\n core.Directive({ selector: '[formGroupName]', providers: [formGroupNameProvider] }),\n __param(0, core.Optional()), __param(0, core.Host()), __param(0, core.SkipSelf()),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_ASYNC_VALIDATORS)),\n __metadata(\"design:paramtypes\", [ControlContainer, Array, Array])\n ], FormGroupName);\n return FormGroupName;\n }(AbstractFormGroupDirective));\n var formArrayNameProvider = {\n provide: ControlContainer,\n useExisting: core.forwardRef(function () { return FormArrayName; })\n };\n /**\n * @description\n *\n * Syncs a nested `FormArray` to a DOM element.\n *\n * This directive is designed to be used with a parent `FormGroupDirective` (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested `FormArray` you want to link, and\n * will look for a `FormArray` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var FormArrayName = /** @class */ (function (_super) {\n __extends(FormArrayName, _super);\n function FormArrayName(parent, validators, asyncValidators) {\n var _this = _super.call(this) || this;\n _this._parent = parent;\n _this._validators = validators;\n _this._asyncValidators = asyncValidators;\n return _this;\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs are initialized. For internal use only.\n *\n * @throws If the directive does not have a valid parent.\n */\n FormArrayName.prototype.ngOnInit = function () {\n this._checkParentType();\n this.formDirective.addFormArray(this);\n };\n /**\n * @description\n * A lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n FormArrayName.prototype.ngOnDestroy = function () {\n if (this.formDirective) {\n this.formDirective.removeFormArray(this);\n }\n };\n Object.defineProperty(FormArrayName.prototype, \"control\", {\n /**\n * @description\n * The `FormArray` bound to this directive.\n */\n get: function () { return this.formDirective.getFormArray(this); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormArrayName.prototype, \"formDirective\", {\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get: function () {\n return this._parent ? this._parent.formDirective : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormArrayName.prototype, \"path\", {\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get: function () { return controlPath(this.name, this._parent); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormArrayName.prototype, \"validator\", {\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators registered with this\n * directive.\n */\n get: function () { return composeValidators(this._validators); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormArrayName.prototype, \"asyncValidator\", {\n /**\n * @description\n * Async validator function composed of all the async validators registered with this directive.\n */\n get: function () {\n return composeAsyncValidators(this._asyncValidators);\n },\n enumerable: true,\n configurable: true\n });\n FormArrayName.prototype._checkParentType = function () {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.arrayParentException();\n }\n };\n __decorate([\n core.Input('formArrayName'),\n __metadata(\"design:type\", String)\n ], FormArrayName.prototype, \"name\", void 0);\n FormArrayName = __decorate([\n core.Directive({ selector: '[formArrayName]', providers: [formArrayNameProvider] }),\n __param(0, core.Optional()), __param(0, core.Host()), __param(0, core.SkipSelf()),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_ASYNC_VALIDATORS)),\n __metadata(\"design:paramtypes\", [ControlContainer, Array, Array])\n ], FormArrayName);\n return FormArrayName;\n }(ControlContainer));\n function _hasInvalidParent(parent) {\n return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n !(parent instanceof FormArrayName);\n }\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var controlNameBinding = {\n provide: NgControl,\n useExisting: core.forwardRef(function () { return FormControlName; })\n };\n /**\n * @description\n * Syncs a `FormControl` in an existing `FormGroup` to a form control\n * element by name.\n *\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Register `FormControl` within a group\n *\n * The following example shows how to register multiple form controls within a form group\n * and set their value.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: `RadioControlValueAccessor`\n * * Selects: `SelectControlValueAccessor`\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\" [(ngModel)]=\"value\">\n * </form>\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\">\n * </form>\n * ```\n *\n * ```ts\n * this.form.get('first').setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var FormControlName = /** @class */ (function (_super) {\n __extends(FormControlName, _super);\n function FormControlName(parent, validators, asyncValidators, valueAccessors, _ngModelWarningConfig) {\n var _this = _super.call(this) || this;\n _this._ngModelWarningConfig = _ngModelWarningConfig;\n _this._added = false;\n /** @deprecated as of v6 */\n _this.update = new core.EventEmitter();\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular FormControlName instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _this._ngModelWarningSent = false;\n _this._parent = parent;\n _this._rawValidators = validators || [];\n _this._rawAsyncValidators = asyncValidators || [];\n _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n return _this;\n }\n FormControlName_1 = FormControlName;\n Object.defineProperty(FormControlName.prototype, \"isDisabled\", {\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n set: function (isDisabled) { ReactiveErrors.disabledAttrWarning(); },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n FormControlName.prototype.ngOnChanges = function (changes) {\n if (!this._added)\n this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning('formControlName', FormControlName_1, this, this._ngModelWarningConfig);\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n };\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n FormControlName.prototype.ngOnDestroy = function () {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n };\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n FormControlName.prototype.viewToModelUpdate = function (newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n };\n Object.defineProperty(FormControlName.prototype, \"path\", {\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get: function () { return controlPath(this.name, this._parent); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlName.prototype, \"formDirective\", {\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get: function () { return this._parent ? this._parent.formDirective : null; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlName.prototype, \"validator\", {\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get: function () { return composeValidators(this._rawValidators); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FormControlName.prototype, \"asyncValidator\", {\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get: function () {\n return composeAsyncValidators(this._rawAsyncValidators);\n },\n enumerable: true,\n configurable: true\n });\n FormControlName.prototype._checkParentType = function () {\n if (!(this._parent instanceof FormGroupName) &&\n this._parent instanceof AbstractFormGroupDirective) {\n ReactiveErrors.ngModelGroupException();\n }\n else if (!(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&\n !(this._parent instanceof FormArrayName)) {\n ReactiveErrors.controlParentException();\n }\n };\n FormControlName.prototype._setUpControl = function () {\n this._checkParentType();\n this.control = this.formDirective.addControl(this);\n if (this.control.disabled && this.valueAccessor.setDisabledState) {\n this.valueAccessor.setDisabledState(true);\n }\n this._added = true;\n };\n var FormControlName_1;\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlName. Used to support warning config of \"once\".\n *\n * @internal\n */\n FormControlName._ngModelWarningSentOnce = false;\n __decorate([\n core.Input('formControlName'),\n __metadata(\"design:type\", String)\n ], FormControlName.prototype, \"name\", void 0);\n __decorate([\n core.Input('disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n ], FormControlName.prototype, \"isDisabled\", null);\n __decorate([\n core.Input('ngModel'),\n __metadata(\"design:type\", Object)\n ], FormControlName.prototype, \"model\", void 0);\n __decorate([\n core.Output('ngModelChange'),\n __metadata(\"design:type\", Object)\n ], FormControlName.prototype, \"update\", void 0);\n FormControlName = FormControlName_1 = __decorate([\n core.Directive({ selector: '[formControlName]', providers: [controlNameBinding] }),\n __param(0, core.Optional()), __param(0, core.Host()), __param(0, core.SkipSelf()),\n __param(1, core.Optional()), __param(1, core.Self()), __param(1, core.Inject(NG_VALIDATORS)),\n __param(2, core.Optional()), __param(2, core.Self()), __param(2, core.Inject(NG_ASYNC_VALIDATORS)),\n __param(3, core.Optional()), __param(3, core.Self()), __param(3, core.Inject(NG_VALUE_ACCESSOR)),\n __param(4, core.Optional()), __param(4, core.Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING)),\n __metadata(\"design:paramtypes\", [ControlContainer,\n Array,\n Array, Array, Object])\n ], FormControlName);\n return FormControlName;\n }(NgControl));\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return RequiredValidator; }),\n multi: true\n };\n /**\n * @description\n * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var CHECKBOX_REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return CheckboxRequiredValidator; }),\n multi: true\n };\n /**\n * @description\n * A directive that adds the `required` validator to any controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a required validator using template-driven forms\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n var RequiredValidator = /** @class */ (function () {\n function RequiredValidator() {\n }\n Object.defineProperty(RequiredValidator.prototype, \"required\", {\n /**\n * @description\n * Tracks changes to the required attribute bound to this directive.\n */\n get: function () { return this._required; },\n set: function (value) {\n this._required = value != null && value !== false && \"\" + value !== 'false';\n if (this._onChange)\n this._onChange();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Method that validates whether the control is empty.\n * Returns the validation result if enabled, otherwise null.\n */\n RequiredValidator.prototype.validate = function (control) {\n return this.required ? Validators.required(control) : null;\n };\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n RequiredValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], RequiredValidator.prototype, \"required\", null);\n RequiredValidator = __decorate([\n core.Directive({\n selector: ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n providers: [REQUIRED_VALIDATOR],\n host: { '[attr.required]': 'required ? \"\" : null' }\n })\n ], RequiredValidator);\n return RequiredValidator;\n }());\n /**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a required checkbox validator using template-driven forms\n *\n * The following example shows how to add a checkbox required validator to an input attached to an ngModel binding.\n *\n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n var CheckboxRequiredValidator = /** @class */ (function (_super) {\n __extends(CheckboxRequiredValidator, _super);\n function CheckboxRequiredValidator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @description\n * Method that validates whether or not the checkbox has been checked.\n * Returns the validation result if enabled, otherwise null.\n */\n CheckboxRequiredValidator.prototype.validate = function (control) {\n return this.required ? Validators.requiredTrue(control) : null;\n };\n CheckboxRequiredValidator = __decorate([\n core.Directive({\n selector: 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n providers: [CHECKBOX_REQUIRED_VALIDATOR],\n host: { '[attr.required]': 'required ? \"\" : null' }\n })\n ], CheckboxRequiredValidator);\n return CheckboxRequiredValidator;\n }(RequiredValidator));\n /**\n * @description\n * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var EMAIL_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return EmailValidator; }),\n multi: true\n };\n /**\n * A directive that adds the `email` validator to controls marked with the\n * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding an email validator\n *\n * The following example shows how to add an email validator to an input attached to an ngModel binding.\n *\n * ```\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n var EmailValidator = /** @class */ (function () {\n function EmailValidator() {\n }\n Object.defineProperty(EmailValidator.prototype, \"email\", {\n /**\n * @description\n * Tracks changes to the email attribute bound to this directive.\n */\n set: function (value) {\n this._enabled = value === '' || value === true || value === 'true';\n if (this._onChange)\n this._onChange();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @description\n * Method that validates whether an email address is valid.\n * Returns the validation result if enabled, otherwise null.\n */\n EmailValidator.prototype.validate = function (control) {\n return this._enabled ? Validators.email(control) : null;\n };\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n EmailValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], EmailValidator.prototype, \"email\", null);\n EmailValidator = __decorate([\n core.Directive({\n selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n providers: [EMAIL_VALIDATOR]\n })\n ], EmailValidator);\n return EmailValidator;\n }());\n /**\n * @description\n * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var MIN_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return MinLengthValidator; }),\n multi: true\n };\n /**\n * A directive that adds minimum length validation to controls marked with the\n * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` mult-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a minimum length validator\n *\n * The following example shows how to add a minimum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel minlength=\"4\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var MinLengthValidator = /** @class */ (function () {\n function MinLengthValidator() {\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n MinLengthValidator.prototype.ngOnChanges = function (changes) {\n if ('minlength' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n };\n /**\n * @description\n * Method that validates whether the value meets a minimum length\n * requirement. Returns the validation result if enabled, otherwise null.\n */\n MinLengthValidator.prototype.validate = function (control) {\n return this.minlength == null ? null : this._validator(control);\n };\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n MinLengthValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n MinLengthValidator.prototype._createValidator = function () {\n this._validator = Validators.minLength(parseInt(this.minlength, 10));\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", String)\n ], MinLengthValidator.prototype, \"minlength\", void 0);\n MinLengthValidator = __decorate([\n core.Directive({\n selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n providers: [MIN_LENGTH_VALIDATOR],\n host: { '[attr.minlength]': 'minlength ? minlength : null' }\n })\n ], MinLengthValidator);\n return MinLengthValidator;\n }());\n /**\n * @description\n * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var MAX_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return MaxLengthValidator; }),\n multi: true\n };\n /**\n * A directive that adds max length validation to controls marked with the\n * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a maximum length validator\n *\n * The following example shows how to add a maximum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel maxlength=\"25\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var MaxLengthValidator = /** @class */ (function () {\n function MaxLengthValidator() {\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n MaxLengthValidator.prototype.ngOnChanges = function (changes) {\n if ('maxlength' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n };\n /**\n * @description\n * Method that validates whether the value exceeds\n * the maximum length requirement.\n */\n MaxLengthValidator.prototype.validate = function (control) {\n return this.maxlength != null ? this._validator(control) : null;\n };\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n MaxLengthValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n MaxLengthValidator.prototype._createValidator = function () {\n this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", String)\n ], MaxLengthValidator.prototype, \"maxlength\", void 0);\n MaxLengthValidator = __decorate([\n core.Directive({\n selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n providers: [MAX_LENGTH_VALIDATOR],\n host: { '[attr.maxlength]': 'maxlength ? maxlength : null' }\n })\n ], MaxLengthValidator);\n return MaxLengthValidator;\n }());\n /**\n * @description\n * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.\n */\n var PATTERN_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: core.forwardRef(function () { return PatternValidator; }),\n multi: true\n };\n /**\n * @description\n * A directive that adds regex pattern validation to controls marked with the\n * `pattern` attribute. The regex must match the entire control value.\n * The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a pattern validator\n *\n * The following example shows how to add a pattern validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n var PatternValidator = /** @class */ (function () {\n function PatternValidator() {\n }\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n PatternValidator.prototype.ngOnChanges = function (changes) {\n if ('pattern' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n };\n /**\n * @description\n * Method that validates whether the value matches the\n * the pattern requirement.\n */\n PatternValidator.prototype.validate = function (control) { return this._validator(control); };\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n PatternValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n PatternValidator.prototype._createValidator = function () { this._validator = Validators.pattern(this.pattern); };\n __decorate([\n core.Input(),\n __metadata(\"design:type\", Object)\n ], PatternValidator.prototype, \"pattern\", void 0);\n PatternValidator = __decorate([\n core.Directive({\n selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n providers: [PATTERN_VALIDATOR],\n host: { '[attr.pattern]': 'pattern ? pattern : null' }\n })\n ], PatternValidator);\n return PatternValidator;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function isAbstractControlOptions(options) {\n return options.asyncValidators !== undefined ||\n options.validators !== undefined ||\n options.updateOn !== undefined;\n }\n /**\n * @description\n * Creates an `AbstractControl` from a user-specified configuration.\n *\n * The `FormBuilder` provides syntactic sugar that shortens creating instances of a `FormControl`,\n * `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to build complex\n * forms.\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n var FormBuilder = /** @class */ (function () {\n function FormBuilder() {\n }\n /**\n * @description\n * Construct a new `FormGroup` instance.\n *\n * @param controlsConfig A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param options Configuration options object for the `FormGroup`. The object can\n * have two shapes:\n *\n * 1) `AbstractControlOptions` object (preferred), which consists of:\n * * `validators`: A synchronous validator function, or an array of validator functions\n * * `asyncValidators`: A single async validator or array of async validator functions\n * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur' |\n * submit')\n *\n * 2) Legacy configuration object, which consists of:\n * * `validator`: A synchronous validator function, or an array of validator functions\n * * `asyncValidator`: A single async validator or array of async validator functions\n *\n */\n FormBuilder.prototype.group = function (controlsConfig, options) {\n if (options === void 0) { options = null; }\n var controls = this._reduceControls(controlsConfig);\n var validators = null;\n var asyncValidators = null;\n var updateOn = undefined;\n if (options != null) {\n if (isAbstractControlOptions(options)) {\n // `options` are `AbstractControlOptions`\n validators = options.validators != null ? options.validators : null;\n asyncValidators = options.asyncValidators != null ? options.asyncValidators : null;\n updateOn = options.updateOn != null ? options.updateOn : undefined;\n }\n else {\n // `options` are legacy form group options\n validators = options['validator'] != null ? options['validator'] : null;\n asyncValidators = options['asyncValidator'] != null ? options['asyncValidator'] : null;\n }\n }\n return new FormGroup(controls, { asyncValidators: asyncValidators, updateOn: updateOn, validators: validators });\n };\n /**\n * @description\n * Construct a new `FormControl` with the given state, validators and options.\n *\n * @param formState Initializes the control with an initial state value, or\n * with an object that contains both a value and a disabled status.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n *\n * @usageNotes\n *\n * ### Initialize a control as disabled\n *\n * The following example returns a control with an initial value in a disabled state.\n *\n * <code-example path=\"forms/ts/formBuilder/form_builder_example.ts\"\n * linenums=\"false\" region=\"disabled-control\">\n * </code-example>\n */\n FormBuilder.prototype.control = function (formState, validatorOrOpts, asyncValidator) {\n return new FormControl(formState, validatorOrOpts, asyncValidator);\n };\n /**\n * Constructs a new `FormArray` from the given array of configurations,\n * validators and options.\n *\n * @param controlsConfig An array of child controls or control configs. Each\n * child control is given an index when it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n */\n FormBuilder.prototype.array = function (controlsConfig, validatorOrOpts, asyncValidator) {\n var _this = this;\n var controls = controlsConfig.map(function (c) { return _this._createControl(c); });\n return new FormArray(controls, validatorOrOpts, asyncValidator);\n };\n /** @internal */\n FormBuilder.prototype._reduceControls = function (controlsConfig) {\n var _this = this;\n var controls = {};\n Object.keys(controlsConfig).forEach(function (controlName) {\n controls[controlName] = _this._createControl(controlsConfig[controlName]);\n });\n return controls;\n };\n /** @internal */\n FormBuilder.prototype._createControl = function (controlConfig) {\n if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n controlConfig instanceof FormArray) {\n return controlConfig;\n }\n else if (Array.isArray(controlConfig)) {\n var value = controlConfig[0];\n var validator = controlConfig.length > 1 ? controlConfig[1] : null;\n var asyncValidator = controlConfig.length > 2 ? controlConfig[2] : null;\n return this.control(value, validator, asyncValidator);\n }\n else {\n return this.control(controlConfig);\n }\n };\n FormBuilder = __decorate([\n core.Injectable()\n ], FormBuilder);\n return FormBuilder;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @publicApi\n */\n var VERSION = new core.Version('7.2.8');\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * @description\n *\n * Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```\n * <form ngNativeValidate></form>\n * ```\n *\n * @publicApi\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n var NgNoValidate = /** @class */ (function () {\n function NgNoValidate() {\n }\n NgNoValidate = __decorate([\n core.Directive({\n selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n host: { 'novalidate': '' },\n })\n ], NgNoValidate);\n return NgNoValidate;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var SHARED_FORM_DIRECTIVES = [\n NgNoValidate,\n NgSelectOption,\n NgSelectMultipleOption,\n DefaultValueAccessor,\n NumberValueAccessor,\n RangeValueAccessor,\n CheckboxControlValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n NgControlStatus,\n NgControlStatusGroup,\n RequiredValidator,\n MinLengthValidator,\n MaxLengthValidator,\n PatternValidator,\n CheckboxRequiredValidator,\n EmailValidator,\n ];\n var TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm, NgFormSelectorWarning];\n var REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n /**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\n var InternalFormsSharedModule = /** @class */ (function () {\n function InternalFormsSharedModule() {\n }\n InternalFormsSharedModule = __decorate([\n core.NgModule({\n declarations: SHARED_FORM_DIRECTIVES,\n exports: SHARED_FORM_DIRECTIVES,\n })\n ], InternalFormsSharedModule);\n return InternalFormsSharedModule;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * Exports the required providers and directives for template-driven forms,\n * making them available for import by NgModules that import this module.\n *\n * @see [Forms Guide](/guide/forms)\n *\n * @publicApi\n */\n var FormsModule = /** @class */ (function () {\n function FormsModule() {\n }\n FormsModule_1 = FormsModule;\n /**\n * @description\n * Provides options for configuring the template-driven forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnDeprecatedNgFormSelector` Configures when to emit a warning when the deprecated\n * `ngForm` selector is used.\n */\n FormsModule.withConfig = function (opts) {\n return {\n ngModule: FormsModule_1,\n providers: [{ provide: NG_FORM_SELECTOR_WARNING, useValue: opts.warnOnDeprecatedNgFormSelector }]\n };\n };\n var FormsModule_1;\n FormsModule = FormsModule_1 = __decorate([\n core.NgModule({\n declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n providers: [RadioControlRegistry],\n exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n })\n ], FormsModule);\n return FormsModule;\n }());\n /**\n * Exports the required infrastructure and directives for reactive forms,\n * making them available for import by NgModules that import this module.\n * @see [Forms](guide/reactive-forms)\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n var ReactiveFormsModule = /** @class */ (function () {\n function ReactiveFormsModule() {\n }\n ReactiveFormsModule_1 = ReactiveFormsModule;\n /**\n * @description\n * Provides options for configuring the reactive forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`\n * binding is used with reactive form directives.\n */\n ReactiveFormsModule.withConfig = function (opts) {\n return {\n ngModule: ReactiveFormsModule_1,\n providers: [{\n provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,\n useValue: opts.warnOnNgModelWithFormControl\n }]\n };\n };\n var ReactiveFormsModule_1;\n ReactiveFormsModule = ReactiveFormsModule_1 = __decorate([\n core.NgModule({\n declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n providers: [FormBuilder, RadioControlRegistry],\n exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n })\n ], ReactiveFormsModule);\n return ReactiveFormsModule;\n }());\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n // This file only reexports content of the `src` folder. Keep it that way.\n\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n /**\n * Generated bundle index. Do not edit.\n */\n\n exports.ɵangular_packages_forms_forms_bc = InternalFormsSharedModule;\n exports.ɵangular_packages_forms_forms_bb = REACTIVE_DRIVEN_DIRECTIVES;\n exports.ɵangular_packages_forms_forms_z = SHARED_FORM_DIRECTIVES;\n exports.ɵangular_packages_forms_forms_ba = TEMPLATE_DRIVEN_DIRECTIVES;\n exports.ɵangular_packages_forms_forms_a = CHECKBOX_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_b = DEFAULT_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_c = AbstractControlStatus;\n exports.ɵangular_packages_forms_forms_d = ngControlStatusHost;\n exports.ɵangular_packages_forms_forms_e = formDirectiveProvider;\n exports.ɵangular_packages_forms_forms_f = NG_FORM_SELECTOR_WARNING;\n exports.ɵangular_packages_forms_forms_g = formControlBinding;\n exports.ɵangular_packages_forms_forms_h = modelGroupProvider;\n exports.ɵangular_packages_forms_forms_bh = NgNoValidate;\n exports.ɵangular_packages_forms_forms_bd = NUMBER_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_be = NumberValueAccessor;\n exports.ɵangular_packages_forms_forms_i = RADIO_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_j = RadioControlRegistry;\n exports.ɵangular_packages_forms_forms_bf = RANGE_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_bg = RangeValueAccessor;\n exports.ɵangular_packages_forms_forms_k = NG_MODEL_WITH_FORM_CONTROL_WARNING;\n exports.ɵangular_packages_forms_forms_l = formControlBinding$1;\n exports.ɵangular_packages_forms_forms_m = controlNameBinding;\n exports.ɵangular_packages_forms_forms_n = formDirectiveProvider$1;\n exports.ɵangular_packages_forms_forms_p = formArrayNameProvider;\n exports.ɵangular_packages_forms_forms_o = formGroupNameProvider;\n exports.ɵangular_packages_forms_forms_q = SELECT_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_s = NgSelectMultipleOption;\n exports.ɵangular_packages_forms_forms_r = SELECT_MULTIPLE_VALUE_ACCESSOR;\n exports.ɵangular_packages_forms_forms_u = CHECKBOX_REQUIRED_VALIDATOR;\n exports.ɵangular_packages_forms_forms_v = EMAIL_VALIDATOR;\n exports.ɵangular_packages_forms_forms_x = MAX_LENGTH_VALIDATOR;\n exports.ɵangular_packages_forms_forms_w = MIN_LENGTH_VALIDATOR;\n exports.ɵangular_packages_forms_forms_y = PATTERN_VALIDATOR;\n exports.ɵangular_packages_forms_forms_t = REQUIRED_VALIDATOR;\n exports.AbstractControlDirective = AbstractControlDirective;\n exports.AbstractFormGroupDirective = AbstractFormGroupDirective;\n exports.CheckboxControlValueAccessor = CheckboxControlValueAccessor;\n exports.ControlContainer = ControlContainer;\n exports.NG_VALUE_ACCESSOR = NG_VALUE_ACCESSOR;\n exports.COMPOSITION_BUFFER_MODE = COMPOSITION_BUFFER_MODE;\n exports.DefaultValueAccessor = DefaultValueAccessor;\n exports.NgControl = NgControl;\n exports.NgControlStatus = NgControlStatus;\n exports.NgControlStatusGroup = NgControlStatusGroup;\n exports.NgForm = NgForm;\n exports.NgFormSelectorWarning = NgFormSelectorWarning;\n exports.NgModel = NgModel;\n exports.NgModelGroup = NgModelGroup;\n exports.RadioControlValueAccessor = RadioControlValueAccessor;\n exports.FormControlDirective = FormControlDirective;\n exports.FormControlName = FormControlName;\n exports.FormGroupDirective = FormGroupDirective;\n exports.FormArrayName = FormArrayName;\n exports.FormGroupName = FormGroupName;\n exports.NgSelectOption = NgSelectOption;\n exports.SelectControlValueAccessor = SelectControlValueAccessor;\n exports.SelectMultipleControlValueAccessor = SelectMultipleControlValueAccessor;\n exports.CheckboxRequiredValidator = CheckboxRequiredValidator;\n exports.EmailValidator = EmailValidator;\n exports.MaxLengthValidator = MaxLengthValidator;\n exports.MinLengthValidator = MinLengthValidator;\n exports.PatternValidator = PatternValidator;\n exports.RequiredValidator = RequiredValidator;\n exports.FormBuilder = FormBuilder;\n exports.AbstractControl = AbstractControl;\n exports.FormArray = FormArray;\n exports.FormControl = FormControl;\n exports.FormGroup = FormGroup;\n exports.NG_ASYNC_VALIDATORS = NG_ASYNC_VALIDATORS;\n exports.NG_VALIDATORS = NG_VALIDATORS;\n exports.Validators = Validators;\n exports.VERSION = VERSION;\n exports.FormsModule = FormsModule;\n exports.ReactiveFormsModule = ReactiveFormsModule;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=forms.umd.js.map\n"]}
\ No newline at end of file

esm2015/src/form_builder.js

@@ -73,8 +73,8 @@
}
else {
// `options` are legacy form group options
- validators = options.validator != null ? options.validator : null;
- asyncValidators = options.asyncValidator != null ? options.asyncValidator : null;
+ validators = options['validator'] != null ? options['validator'] : null;
+ asyncValidators = options['asyncValidator'] != null ? options['asyncValidator'] : null;
}
}
return new FormGroup(controls, { asyncValidators, updateOn, validators });
@@ -167,4 +167,4 @@
FormBuilder.decorators = [
{ type: Injectable }
];
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybV9idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybXMvc3JjL2Zvcm1fYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHekMsT0FBTyxFQUEwQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBWSxNQUFNLFNBQVMsQ0FBQzs7Ozs7QUFFOUcsU0FBUyx3QkFBd0IsQ0FBQyxPQUFzRDtJQUV0RixPQUFPLENBQUMsbUJBQXdCLE9BQU8sRUFBQSxDQUFDLENBQUMsZUFBZSxLQUFLLFNBQVM7UUFDbEUsQ0FBQyxtQkFBd0IsT0FBTyxFQUFBLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUztRQUMxRCxDQUFDLG1CQUF3QixPQUFPLEVBQUEsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUM7QUFDL0QsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWVELE1BQU0sT0FBTyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXNCdEIsS0FBSyxDQUNELGNBQW9DLEVBQ3BDLFVBQTRELElBQUk7O2NBQzVELFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQzs7WUFFakQsVUFBVSxHQUFtQyxJQUFJOztZQUNqRCxlQUFlLEdBQTZDLElBQUk7O1lBQ2hFLFFBQVEsR0FBd0IsU0FBUztRQUU3QyxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDbkIsSUFBSSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDckMseUNBQXlDO2dCQUN6QyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDcEUsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ25GLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQ3BFO2lCQUFNO2dCQUNMLDBDQUEwQztnQkFDMUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xFLGVBQWUsR0FBRyxPQUFPLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ2xGO1NBQ0Y7UUFFRCxPQUFPLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTBCRCxPQUFPLENBQ0gsU0FBYyxFQUFFLGVBQXVFLEVBQ3ZGLGNBQXlEO1FBQzNELE9BQU8sSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNyRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0lBZ0JELEtBQUssQ0FDRCxjQUFxQixFQUNyQixlQUF1RSxFQUN2RSxjQUF5RDs7Y0FDckQsUUFBUSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNsRSxDQUFDOzs7Ozs7SUFHRCxlQUFlLENBQUMsY0FBa0M7O2NBQzFDLFFBQVEsR0FBcUMsRUFBRTtRQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoRCxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Ozs7OztJQUdELGNBQWMsQ0FBQyxhQUFrQjtRQUMvQixJQUFJLGFBQWEsWUFBWSxXQUFXLElBQUksYUFBYSxZQUFZLFNBQVM7WUFDMUUsYUFBYSxZQUFZLFNBQVMsRUFBRTtZQUN0QyxPQUFPLGFBQWEsQ0FBQztTQUV0QjthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTs7a0JBQ2pDLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDOztrQkFDeEIsU0FBUyxHQUFnQixhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJOztrQkFDM0UsY0FBYyxHQUFxQixhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQzNGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBRXZEO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDOzs7WUE1SEYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbn0gZnJvbSAnLi9kaXJlY3RpdmVzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEFic3RyYWN0Q29udHJvbE9wdGlvbnMsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUhvb2tzfSBmcm9tICcuL21vZGVsJztcblxuZnVuY3Rpb24gaXNBYnN0cmFjdENvbnRyb2xPcHRpb25zKG9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgfCB7W2tleTogc3RyaW5nXTogYW55fSk6XG4gICAgb3B0aW9ucyBpcyBBYnN0cmFjdENvbnRyb2xPcHRpb25zIHtcbiAgcmV0dXJuICg8QWJzdHJhY3RDb250cm9sT3B0aW9ucz5vcHRpb25zKS5hc3luY1ZhbGlkYXRvcnMgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgKDxBYnN0cmFjdENvbnRyb2xPcHRpb25zPm9wdGlvbnMpLnZhbGlkYXRvcnMgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgKDxBYnN0cmFjdENvbnRyb2xPcHRpb25zPm9wdGlvbnMpLnVwZGF0ZU9uICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGVzIGFuIGBBYnN0cmFjdENvbnRyb2xgIGZyb20gYSB1c2VyLXNwZWNpZmllZCBjb25maWd1cmF0aW9uLlxuICpcbiAqIFRoZSBgRm9ybUJ1aWxkZXJgIHByb3ZpZGVzIHN5bnRhY3RpYyBzdWdhciB0aGF0IHNob3J0ZW5zIGNyZWF0aW5nIGluc3RhbmNlcyBvZiBhIGBGb3JtQ29udHJvbGAsXG4gKiBgRm9ybUdyb3VwYCwgb3IgYEZvcm1BcnJheWAuIEl0IHJlZHVjZXMgdGhlIGFtb3VudCBvZiBib2lsZXJwbGF0ZSBuZWVkZWQgdG8gYnVpbGQgY29tcGxleFxuICogZm9ybXMuXG4gKlxuICogQHNlZSBbUmVhY3RpdmUgRm9ybXMgR3VpZGVdKC9ndWlkZS9yZWFjdGl2ZS1mb3JtcylcbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGb3JtQnVpbGRlciB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQ29uc3RydWN0IGEgbmV3IGBGb3JtR3JvdXBgIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbHNDb25maWcgQSBjb2xsZWN0aW9uIG9mIGNoaWxkIGNvbnRyb2xzLiBUaGUga2V5IGZvciBlYWNoIGNoaWxkIGlzIHRoZSBuYW1lXG4gICAqIHVuZGVyIHdoaWNoIGl0IGlzIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBvYmplY3QgZm9yIHRoZSBgRm9ybUdyb3VwYC4gVGhlIG9iamVjdCBjYW5cbiAgICogaGF2ZSB0d28gc2hhcGVzOlxuICAgKlxuICAgKiAxKSBgQWJzdHJhY3RDb250cm9sT3B0aW9uc2Agb2JqZWN0IChwcmVmZXJyZWQpLCB3aGljaCBjb25zaXN0cyBvZjpcbiAgICogKiBgdmFsaWRhdG9yc2A6IEEgc3luY2hyb25vdXMgdmFsaWRhdG9yIGZ1bmN0aW9uLCBvciBhbiBhcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zXG4gICAqICogYGFzeW5jVmFsaWRhdG9yc2A6IEEgc2luZ2xlIGFzeW5jIHZhbGlkYXRvciBvciBhcnJheSBvZiBhc3luYyB2YWxpZGF0b3IgZnVuY3Rpb25zXG4gICAqICogYHVwZGF0ZU9uYDogVGhlIGV2ZW50IHVwb24gd2hpY2ggdGhlIGNvbnRyb2wgc2hvdWxkIGJlIHVwZGF0ZWQgKG9wdGlvbnM6ICdjaGFuZ2UnIHwgJ2JsdXInIHxcbiAgICogc3VibWl0JylcbiAgICpcbiAgICogMikgTGVnYWN5IGNvbmZpZ3VyYXRpb24gb2JqZWN0LCB3aGljaCBjb25zaXN0cyBvZjpcbiAgICogKiBgdmFsaWRhdG9yYDogQSBzeW5jaHJvbm91cyB2YWxpZGF0b3IgZnVuY3Rpb24sIG9yIGFuIGFycmF5IG9mIHZhbGlkYXRvciBmdW5jdGlvbnNcbiAgICogKiBgYXN5bmNWYWxpZGF0b3JgOiBBIHNpbmdsZSBhc3luYyB2YWxpZGF0b3Igb3IgYXJyYXkgb2YgYXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uc1xuICAgKlxuICAgKi9cbiAgZ3JvdXAoXG4gICAgICBjb250cm9sc0NvbmZpZzoge1trZXk6IHN0cmluZ106IGFueX0sXG4gICAgICBvcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zfHtba2V5OiBzdHJpbmddOiBhbnl9fG51bGwgPSBudWxsKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBjb250cm9scyA9IHRoaXMuX3JlZHVjZUNvbnRyb2xzKGNvbnRyb2xzQ29uZmlnKTtcblxuICAgIGxldCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbnxWYWxpZGF0b3JGbltdfG51bGwgPSBudWxsO1xuICAgIGxldCBhc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm58QXN5bmNWYWxpZGF0b3JGbltdfG51bGwgPSBudWxsO1xuICAgIGxldCB1cGRhdGVPbjogRm9ybUhvb2tzfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICAgIGlmIChpc0Fic3RyYWN0Q29udHJvbE9wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgLy8gYG9wdGlvbnNgIGFyZSBgQWJzdHJhY3RDb250cm9sT3B0aW9uc2BcbiAgICAgICAgdmFsaWRhdG9ycyA9IG9wdGlvbnMudmFsaWRhdG9ycyAhPSBudWxsID8gb3B0aW9ucy52YWxpZGF0b3JzIDogbnVsbDtcbiAgICAgICAgYXN5bmNWYWxpZGF0b3JzID0gb3B0aW9ucy5hc3luY1ZhbGlkYXRvcnMgIT0gbnVsbCA/IG9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzIDogbnVsbDtcbiAgICAgICAgdXBkYXRlT24gPSBvcHRpb25zLnVwZGF0ZU9uICE9IG51bGwgPyBvcHRpb25zLnVwZGF0ZU9uIDogdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYG9wdGlvbnNgIGFyZSBsZWdhY3kgZm9ybSBncm91cCBvcHRpb25zXG4gICAgICAgIHZhbGlkYXRvcnMgPSBvcHRpb25zLnZhbGlkYXRvciAhPSBudWxsID8gb3B0aW9ucy52YWxpZGF0b3IgOiBudWxsO1xuICAgICAgICBhc3luY1ZhbGlkYXRvcnMgPSBvcHRpb25zLmFzeW5jVmFsaWRhdG9yICE9IG51bGwgPyBvcHRpb25zLmFzeW5jVmFsaWRhdG9yIDogbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEZvcm1Hcm91cChjb250cm9scywge2FzeW5jVmFsaWRhdG9ycywgdXBkYXRlT24sIHZhbGlkYXRvcnN9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQ29uc3RydWN0IGEgbmV3IGBGb3JtQ29udHJvbGAgd2l0aCB0aGUgZ2l2ZW4gc3RhdGUsIHZhbGlkYXRvcnMgYW5kIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBmb3JtU3RhdGUgSW5pdGlhbGl6ZXMgdGhlIGNvbnRyb2wgd2l0aCBhbiBpbml0aWFsIHN0YXRlIHZhbHVlLCBvclxuICAgKiB3aXRoIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGJvdGggYSB2YWx1ZSBhbmQgYSBkaXNhYmxlZCBzdGF0dXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWxpZGF0b3JPck9wdHMgQSBzeW5jaHJvbm91cyB2YWxpZGF0b3IgZnVuY3Rpb24sIG9yIGFuIGFycmF5IG9mXG4gICAqIHN1Y2ggZnVuY3Rpb25zLCBvciBhbiBgQWJzdHJhY3RDb250cm9sT3B0aW9uc2Agb2JqZWN0IHRoYXQgY29udGFpbnNcbiAgICogdmFsaWRhdGlvbiBmdW5jdGlvbnMgYW5kIGEgdmFsaWRhdGlvbiB0cmlnZ2VyLlxuICAgKlxuICAgKiBAcGFyYW0gYXN5bmNWYWxpZGF0b3IgQSBzaW5nbGUgYXN5bmMgdmFsaWRhdG9yIG9yIGFycmF5IG9mIGFzeW5jIHZhbGlkYXRvclxuICAgKiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEB1c2FnZU5vdGVzXG4gICAqXG4gICAqICMjIyBJbml0aWFsaXplIGEgY29udHJvbCBhcyBkaXNhYmxlZFxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgcmV0dXJucyBhIGNvbnRyb2wgd2l0aCBhbiBpbml0aWFsIHZhbHVlIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqXG4gICAqIDxjb2RlLWV4YW1wbGUgcGF0aD1cImZvcm1zL3RzL2Zvcm1CdWlsZGVyL2Zvcm1fYnVpbGRlcl9leGFtcGxlLnRzXCJcbiAgICogICBsaW5lbnVtcz1cImZhbHNlXCIgcmVnaW9uPVwiZGlzYWJsZWQtY29udHJvbFwiPlxuICAgKiA8L2NvZGUtZXhhbXBsZT5cbiAgICovXG4gIGNvbnRyb2woXG4gICAgICBmb3JtU3RhdGU6IGFueSwgdmFsaWRhdG9yT3JPcHRzPzogVmFsaWRhdG9yRm58VmFsaWRhdG9yRm5bXXxBYnN0cmFjdENvbnRyb2xPcHRpb25zfG51bGwsXG4gICAgICBhc3luY1ZhbGlkYXRvcj86IEFzeW5jVmFsaWRhdG9yRm58QXN5bmNWYWxpZGF0b3JGbltdfG51bGwpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbChmb3JtU3RhdGUsIHZhbGlkYXRvck9yT3B0cywgYXN5bmNWYWxpZGF0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgYEZvcm1BcnJheWAgZnJvbSB0aGUgZ2l2ZW4gYXJyYXkgb2YgY29uZmlndXJhdGlvbnMsXG4gICAqIHZhbGlkYXRvcnMgYW5kIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250cm9sc0NvbmZpZyBBbiBhcnJheSBvZiBjaGlsZCBjb250cm9scyBvciBjb250cm9sIGNvbmZpZ3MuIEVhY2hcbiAgICogY2hpbGQgY29udHJvbCBpcyBnaXZlbiBhbiBpbmRleCB3aGVuIGl0IGlzIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWxpZGF0b3JPck9wdHMgQSBzeW5jaHJvbm91cyB2YWxpZGF0b3IgZnVuY3Rpb24sIG9yIGFuIGFycmF5IG9mXG4gICAqIHN1Y2ggZnVuY3Rpb25zLCBvciBhbiBgQWJzdHJhY3RDb250cm9sT3B0aW9uc2Agb2JqZWN0IHRoYXQgY29udGFpbnNcbiAgICogdmFsaWRhdGlvbiBmdW5jdGlvbnMgYW5kIGEgdmFsaWRhdGlvbiB0cmlnZ2VyLlxuICAgKlxuICAgKiBAcGFyYW0gYXN5bmNWYWxpZGF0b3IgQSBzaW5nbGUgYXN5bmMgdmFsaWRhdG9yIG9yIGFycmF5IG9mIGFzeW5jIHZhbGlkYXRvclxuICAgKiBmdW5jdGlvbnMuXG4gICAqL1xuICBhcnJheShcbiAgICAgIGNvbnRyb2xzQ29uZmlnOiBhbnlbXSxcbiAgICAgIHZhbGlkYXRvck9yT3B0cz86IFZhbGlkYXRvckZufFZhbGlkYXRvckZuW118QWJzdHJhY3RDb250cm9sT3B0aW9uc3xudWxsLFxuICAgICAgYXN5bmNWYWxpZGF0b3I/OiBBc3luY1ZhbGlkYXRvckZufEFzeW5jVmFsaWRhdG9yRm5bXXxudWxsKTogRm9ybUFycmF5IHtcbiAgICBjb25zdCBjb250cm9scyA9IGNvbnRyb2xzQ29uZmlnLm1hcChjID0+IHRoaXMuX2NyZWF0ZUNvbnRyb2woYykpO1xuICAgIHJldHVybiBuZXcgRm9ybUFycmF5KGNvbnRyb2xzLCB2YWxpZGF0b3JPck9wdHMsIGFzeW5jVmFsaWRhdG9yKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3JlZHVjZUNvbnRyb2xzKGNvbnRyb2xzQ29uZmlnOiB7W2s6IHN0cmluZ106IGFueX0pOiB7W2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sfSB7XG4gICAgY29uc3QgY29udHJvbHM6IHtba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2x9ID0ge307XG4gICAgT2JqZWN0LmtleXMoY29udHJvbHNDb25maWcpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xuICAgICAgY29udHJvbHNbY29udHJvbE5hbWVdID0gdGhpcy5fY3JlYXRlQ29udHJvbChjb250cm9sc0NvbmZpZ1tjb250cm9sTmFtZV0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb250cm9scztcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2NyZWF0ZUNvbnRyb2woY29udHJvbENvbmZpZzogYW55KTogQWJzdHJhY3RDb250cm9sIHtcbiAgICBpZiAoY29udHJvbENvbmZpZyBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IGNvbnRyb2xDb25maWcgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHxcbiAgICAgICAgY29udHJvbENvbmZpZyBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgcmV0dXJuIGNvbnRyb2xDb25maWc7XG5cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbENvbmZpZykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbENvbmZpZ1swXTtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSBjb250cm9sQ29uZmlnLmxlbmd0aCA+IDEgPyBjb250cm9sQ29uZmlnWzFdIDogbnVsbDtcbiAgICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9yOiBBc3luY1ZhbGlkYXRvckZuID0gY29udHJvbENvbmZpZy5sZW5ndGggPiAyID8gY29udHJvbENvbmZpZ1syXSA6IG51bGw7XG4gICAgICByZXR1cm4gdGhpcy5jb250cm9sKHZhbHVlLCB2YWxpZGF0b3IsIGFzeW5jVmFsaWRhdG9yKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250cm9sKGNvbnRyb2xDb25maWcpO1xuICAgIH1cbiAgfVxufVxuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybV9idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybXMvc3JjL2Zvcm1fYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHekMsT0FBTyxFQUEwQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBWSxNQUFNLFNBQVMsQ0FBQzs7Ozs7QUFFOUcsU0FBUyx3QkFBd0IsQ0FBQyxPQUFzRDtJQUV0RixPQUFPLENBQUMsbUJBQXdCLE9BQU8sRUFBQSxDQUFDLENBQUMsZUFBZSxLQUFLLFNBQVM7UUFDbEUsQ0FBQyxtQkFBd0IsT0FBTyxFQUFBLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUztRQUMxRCxDQUFDLG1CQUF3QixPQUFPLEVBQUEsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUM7QUFDL0QsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWVELE1BQU0sT0FBTyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXNCdEIsS0FBSyxDQUNELGNBQW9DLEVBQ3BDLFVBQTRELElBQUk7O2NBQzVELFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQzs7WUFFakQsVUFBVSxHQUFtQyxJQUFJOztZQUNqRCxlQUFlLEdBQTZDLElBQUk7O1lBQ2hFLFFBQVEsR0FBd0IsU0FBUztRQUU3QyxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDbkIsSUFBSSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDckMseUNBQXlDO2dCQUN6QyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDcEUsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ25GLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQ3BFO2lCQUFNO2dCQUNMLDBDQUEwQztnQkFDMUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN4RSxlQUFlLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3hGO1NBQ0Y7UUFFRCxPQUFPLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTBCRCxPQUFPLENBQ0gsU0FBYyxFQUFFLGVBQXVFLEVBQ3ZGLGNBQXlEO1FBQzNELE9BQU8sSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNyRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0lBZ0JELEtBQUssQ0FDRCxjQUFxQixFQUNyQixlQUF1RSxFQUN2RSxjQUF5RDs7Y0FDckQsUUFBUSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNsRSxDQUFDOzs7Ozs7SUFHRCxlQUFlLENBQUMsY0FBa0M7O2NBQzFDLFFBQVEsR0FBcUMsRUFBRTtRQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoRCxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Ozs7OztJQUdELGNBQWMsQ0FBQyxhQUFrQjtRQUMvQixJQUFJLGFBQWEsWUFBWSxXQUFXLElBQUksYUFBYSxZQUFZLFNBQVM7WUFDMUUsYUFBYSxZQUFZLFNBQVMsRUFBRTtZQUN0QyxPQUFPLGFBQWEsQ0FBQztTQUV0QjthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTs7a0JBQ2pDLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDOztrQkFDeEIsU0FBUyxHQUFnQixhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJOztrQkFDM0UsY0FBYyxHQUFxQixhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQzNGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBRXZEO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDOzs7WUE1SEYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbn0gZnJvbSAnLi9kaXJlY3RpdmVzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEFic3RyYWN0Q29udHJvbE9wdGlvbnMsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUhvb2tzfSBmcm9tICcuL21vZGVsJztcblxuZnVuY3Rpb24gaXNBYnN0cmFjdENvbnRyb2xPcHRpb25zKG9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgfCB7W2tleTogc3RyaW5nXTogYW55fSk6XG4gICAgb3B0aW9ucyBpcyBBYnN0cmFjdENvbnRyb2xPcHRpb25zIHtcbiAgcmV0dXJuICg8QWJzdHJhY3RDb250cm9sT3B0aW9ucz5vcHRpb25zKS5hc3luY1ZhbGlkYXRvcnMgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgKDxBYnN0cmFjdENvbnRyb2xPcHRpb25zPm9wdGlvbnMpLnZhbGlkYXRvcnMgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgKDxBYnN0cmFjdENvbnRyb2xPcHRpb25zPm9wdGlvbnMpLnVwZGF0ZU9uICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGVzIGFuIGBBYnN0cmFjdENvbnRyb2xgIGZyb20gYSB1c2VyLXNwZWNpZmllZCBjb25maWd1cmF0aW9uLlxuICpcbiAqIFRoZSBgRm9ybUJ1aWxkZXJgIHByb3ZpZGVzIHN5bnRhY3RpYyBzdWdhciB0aGF0IHNob3J0ZW5zIGNyZWF0aW5nIGluc3RhbmNlcyBvZiBhIGBGb3JtQ29udHJvbGAsXG4gKiBgRm9ybUdyb3VwYCwgb3IgYEZvcm1BcnJheWAuIEl0IHJlZHVjZXMgdGhlIGFtb3VudCBvZiBib2lsZXJwbGF0ZSBuZWVkZWQgdG8gYnVpbGQgY29tcGxleFxuICogZm9ybXMuXG4gKlxuICogQHNlZSBbUmVhY3RpdmUgRm9ybXMgR3VpZGVdKC9ndWlkZS9yZWFjdGl2ZS1mb3JtcylcbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGb3JtQnVpbGRlciB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQ29uc3RydWN0IGEgbmV3IGBGb3JtR3JvdXBgIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbHNDb25maWcgQSBjb2xsZWN0aW9uIG9mIGNoaWxkIGNvbnRyb2xzLiBUaGUga2V5IGZvciBlYWNoIGNoaWxkIGlzIHRoZSBuYW1lXG4gICAqIHVuZGVyIHdoaWNoIGl0IGlzIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBvYmplY3QgZm9yIHRoZSBgRm9ybUdyb3VwYC4gVGhlIG9iamVjdCBjYW5cbiAgICogaGF2ZSB0d28gc2hhcGVzOlxuICAgKlxuICAgKiAxKSBgQWJzdHJhY3RDb250cm9sT3B0aW9uc2Agb2JqZWN0IChwcmVmZXJyZWQpLCB3aGljaCBjb25zaXN0cyBvZjpcbiAgICogKiBgdmFsaWRhdG9yc2A6IEEgc3luY2hyb25vdXMgdmFsaWRhdG9yIGZ1bmN0aW9uLCBvciBhbiBhcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zXG4gICAqICogYGFzeW5jVmFsaWRhdG9yc2A6IEEgc2luZ2xlIGFzeW5jIHZhbGlkYXRvciBvciBhcnJheSBvZiBhc3luYyB2YWxpZGF0b3IgZnVuY3Rpb25zXG4gICAqICogYHVwZGF0ZU9uYDogVGhlIGV2ZW50IHVwb24gd2hpY2ggdGhlIGNvbnRyb2wgc2hvdWxkIGJlIHVwZGF0ZWQgKG9wdGlvbnM6ICdjaGFuZ2UnIHwgJ2JsdXInIHxcbiAgICogc3VibWl0JylcbiAgICpcbiAgICogMikgTGVnYWN5IGNvbmZpZ3VyYXRpb24gb2JqZWN0LCB3aGljaCBjb25zaXN0cyBvZjpcbiAgICogKiBgdmFsaWRhdG9yYDogQSBzeW5jaHJvbm91cyB2YWxpZGF0b3IgZnVuY3Rpb24sIG9yIGFuIGFycmF5IG9mIHZhbGlkYXRvciBmdW5jdGlvbnNcbiAgICogKiBgYXN5bmNWYWxpZGF0b3JgOiBBIHNpbmdsZSBhc3luYyB2YWxpZGF0b3Igb3IgYXJyYXkgb2YgYXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uc1xuICAgKlxuICAgKi9cbiAgZ3JvdXAoXG4gICAgICBjb250cm9sc0NvbmZpZzoge1trZXk6IHN0cmluZ106IGFueX0sXG4gICAgICBvcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zfHtba2V5OiBzdHJpbmddOiBhbnl9fG51bGwgPSBudWxsKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBjb250cm9scyA9IHRoaXMuX3JlZHVjZUNvbnRyb2xzKGNvbnRyb2xzQ29uZmlnKTtcblxuICAgIGxldCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbnxWYWxpZGF0b3JGbltdfG51bGwgPSBudWxsO1xuICAgIGxldCBhc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm58QXN5bmNWYWxpZGF0b3JGbltdfG51bGwgPSBudWxsO1xuICAgIGxldCB1cGRhdGVPbjogRm9ybUhvb2tzfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICAgIGlmIChpc0Fic3RyYWN0Q29udHJvbE9wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgLy8gYG9wdGlvbnNgIGFyZSBgQWJzdHJhY3RDb250cm9sT3B0aW9uc2BcbiAgICAgICAgdmFsaWRhdG9ycyA9IG9wdGlvbnMudmFsaWRhdG9ycyAhPSBudWxsID8gb3B0aW9ucy52YWxpZGF0b3JzIDogbnVsbDtcbiAgICAgICAgYXN5bmNWYWxpZGF0b3JzID0gb3B0aW9ucy5hc3luY1ZhbGlkYXRvcnMgIT0gbnVsbCA/IG9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzIDogbnVsbDtcbiAgICAgICAgdXBkYXRlT24gPSBvcHRpb25zLnVwZGF0ZU9uICE9IG51bGwgPyBvcHRpb25zLnVwZGF0ZU9uIDogdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYG9wdGlvbnNgIGFyZSBsZWdhY3kgZm9ybSBncm91cCBvcHRpb25zXG4gICAgICAgIHZhbGlkYXRvcnMgPSBvcHRpb25zWyd2YWxpZGF0b3InXSAhPSBudWxsID8gb3B0aW9uc1sndmFsaWRhdG9yJ10gOiBudWxsO1xuICAgICAgICBhc3luY1ZhbGlkYXRvcnMgPSBvcHRpb25zWydhc3luY1ZhbGlkYXRvciddICE9IG51bGwgPyBvcHRpb25zWydhc3luY1ZhbGlkYXRvciddIDogbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEZvcm1Hcm91cChjb250cm9scywge2FzeW5jVmFsaWRhdG9ycywgdXBkYXRlT24sIHZhbGlkYXRvcnN9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQ29uc3RydWN0IGEgbmV3IGBGb3JtQ29udHJvbGAgd2l0aCB0aGUgZ2l2ZW4gc3RhdGUsIHZhbGlkYXRvcnMgYW5kIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBmb3JtU3RhdGUgSW5pdGlhbGl6ZXMgdGhlIGNvbnRyb2wgd2l0aCBhbiBpbml0aWFsIHN0YXRlIHZhbHVlLCBvclxuICAgKiB3aXRoIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGJvdGggYSB2YWx1ZSBhbmQgYSBkaXNhYmxlZCBzdGF0dXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWxpZGF0b3JPck9wdHMgQSBzeW5jaHJvbm91cyB2YWxpZGF0b3IgZnVuY3Rpb24sIG9yIGFuIGFycmF5IG9mXG4gICAqIHN1Y2ggZnVuY3Rpb25zLCBvciBhbiBgQWJzdHJhY3RDb250cm9sT3B0aW9uc2Agb2JqZWN0IHRoYXQgY29udGFpbnNcbiAgICogdmFsaWRhdGlvbiBmdW5jdGlvbnMgYW5kIGEgdmFsaWRhdGlvbiB0cmlnZ2VyLlxuICAgKlxuICAgKiBAcGFyYW0gYXN5bmNWYWxpZGF0b3IgQSBzaW5nbGUgYXN5bmMgdmFsaWRhdG9yIG9yIGFycmF5IG9mIGFzeW5jIHZhbGlkYXRvclxuICAgKiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEB1c2FnZU5vdGVzXG4gICAqXG4gICAqICMjIyBJbml0aWFsaXplIGEgY29udHJvbCBhcyBkaXNhYmxlZFxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgcmV0dXJucyBhIGNvbnRyb2wgd2l0aCBhbiBpbml0aWFsIHZhbHVlIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqXG4gICAqIDxjb2RlLWV4YW1wbGUgcGF0aD1cImZvcm1zL3RzL2Zvcm1CdWlsZGVyL2Zvcm1fYnVpbGRlcl9leGFtcGxlLnRzXCJcbiAgICogICBsaW5lbnVtcz1cImZhbHNlXCIgcmVnaW9uPVwiZGlzYWJsZWQtY29udHJvbFwiPlxuICAgKiA8L2NvZGUtZXhhbXBsZT5cbiAgICovXG4gIGNvbnRyb2woXG4gICAgICBmb3JtU3RhdGU6IGFueSwgdmFsaWRhdG9yT3JPcHRzPzogVmFsaWRhdG9yRm58VmFsaWRhdG9yRm5bXXxBYnN0cmFjdENvbnRyb2xPcHRpb25zfG51bGwsXG4gICAgICBhc3luY1ZhbGlkYXRvcj86IEFzeW5jVmFsaWRhdG9yRm58QXN5bmNWYWxpZGF0b3JGbltdfG51bGwpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbChmb3JtU3RhdGUsIHZhbGlkYXRvck9yT3B0cywgYXN5bmNWYWxpZGF0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgYEZvcm1BcnJheWAgZnJvbSB0aGUgZ2l2ZW4gYXJyYXkgb2YgY29uZmlndXJhdGlvbnMsXG4gICAqIHZhbGlkYXRvcnMgYW5kIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250cm9sc0NvbmZpZyBBbiBhcnJheSBvZiBjaGlsZCBjb250cm9scyBvciBjb250cm9sIGNvbmZpZ3MuIEVhY2hcbiAgICogY2hpbGQgY29udHJvbCBpcyBnaXZlbiBhbiBpbmRleCB3aGVuIGl0IGlzIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWxpZGF0b3JPck9wdHMgQSBzeW5jaHJvbm91cyB2YWxpZGF0b3IgZnVuY3Rpb24sIG9yIGFuIGFycmF5IG9mXG4gICAqIHN1Y2ggZnVuY3Rpb25zLCBvciBhbiBgQWJzdHJhY3RDb250cm9sT3B0aW9uc2Agb2JqZWN0IHRoYXQgY29udGFpbnNcbiAgICogdmFsaWRhdGlvbiBmdW5jdGlvbnMgYW5kIGEgdmFsaWRhdGlvbiB0cmlnZ2VyLlxuICAgKlxuICAgKiBAcGFyYW0gYXN5bmNWYWxpZGF0b3IgQSBzaW5nbGUgYXN5bmMgdmFsaWRhdG9yIG9yIGFycmF5IG9mIGFzeW5jIHZhbGlkYXRvclxuICAgKiBmdW5jdGlvbnMuXG4gICAqL1xuICBhcnJheShcbiAgICAgIGNvbnRyb2xzQ29uZmlnOiBhbnlbXSxcbiAgICAgIHZhbGlkYXRvck9yT3B0cz86IFZhbGlkYXRvckZufFZhbGlkYXRvckZuW118QWJzdHJhY3RDb250cm9sT3B0aW9uc3xudWxsLFxuICAgICAgYXN5bmNWYWxpZGF0b3I/OiBBc3luY1ZhbGlkYXRvckZufEFzeW5jVmFsaWRhdG9yRm5bXXxudWxsKTogRm9ybUFycmF5IHtcbiAgICBjb25zdCBjb250cm9scyA9IGNvbnRyb2xzQ29uZmlnLm1hcChjID0+IHRoaXMuX2NyZWF0ZUNvbnRyb2woYykpO1xuICAgIHJldHVybiBuZXcgRm9ybUFycmF5KGNvbnRyb2xzLCB2YWxpZGF0b3JPck9wdHMsIGFzeW5jVmFsaWRhdG9yKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3JlZHVjZUNvbnRyb2xzKGNvbnRyb2xzQ29uZmlnOiB7W2s6IHN0cmluZ106IGFueX0pOiB7W2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sfSB7XG4gICAgY29uc3QgY29udHJvbHM6IHtba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2x9ID0ge307XG4gICAgT2JqZWN0LmtleXMoY29udHJvbHNDb25maWcpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xuICAgICAgY29udHJvbHNbY29udHJvbE5hbWVdID0gdGhpcy5fY3JlYXRlQ29udHJvbChjb250cm9sc0NvbmZpZ1tjb250cm9sTmFtZV0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb250cm9scztcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2NyZWF0ZUNvbnRyb2woY29udHJvbENvbmZpZzogYW55KTogQWJzdHJhY3RDb250cm9sIHtcbiAgICBpZiAoY29udHJvbENvbmZpZyBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IGNvbnRyb2xDb25maWcgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHxcbiAgICAgICAgY29udHJvbENvbmZpZyBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgcmV0dXJuIGNvbnRyb2xDb25maWc7XG5cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbENvbmZpZykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbENvbmZpZ1swXTtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSBjb250cm9sQ29uZmlnLmxlbmd0aCA+IDEgPyBjb250cm9sQ29uZmlnWzFdIDogbnVsbDtcbiAgICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9yOiBBc3luY1ZhbGlkYXRvckZuID0gY29udHJvbENvbmZpZy5sZW5ndGggPiAyID8gY29udHJvbENvbmZpZ1syXSA6IG51bGw7XG4gICAgICByZXR1cm4gdGhpcy5jb250cm9sKHZhbHVlLCB2YWxpZGF0b3IsIGFzeW5jVmFsaWRhdG9yKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250cm9sKGNvbnRyb2xDb25maWcpO1xuICAgIH1cbiAgfVxufVxuIl19
\ No newline at end of file

esm2015/src/version.js

@@ -19,5 +19,5 @@
* \@publicApi
* @type {?}
*/
-export const VERSION = new Version('7.2.7');
+export const VERSION = new Version('7.2.8');
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm1zL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7OztBQUt0QyxNQUFNLE9BQU8sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIEBtb2R1bGVcbiAqIEBkZXNjcmlwdGlvblxuICogRW50cnkgcG9pbnQgZm9yIGFsbCBwdWJsaWMgQVBJcyBvZiB0aGUgY29tbW9uIHBhY2thZ2UuXG4gKi9cblxuaW1wb3J0IHtWZXJzaW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gbmV3IFZlcnNpb24oJzAuMC4wLVBMQUNFSE9MREVSJyk7XG4iXX0=
\ No newline at end of file

esm5/src/form_builder.js

@@ -64,8 +64,8 @@
}
else {
// `options` are legacy form group options
- validators = options.validator != null ? options.validator : null;
- asyncValidators = options.asyncValidator != null ? options.asyncValidator : null;
+ validators = options['validator'] != null ? options['validator'] : null;
+ asyncValidators = options['asyncValidator'] != null ? options['asyncValidator'] : null;
}
}
return new FormGroup(controls, { asyncValidators: asyncValidators, updateOn: updateOn, validators: validators });
@@ -147,4 +147,4 @@
return FormBuilder;
}());
export { FormBuilder };
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybV9idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybXMvc3JjL2Zvcm1fYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7O0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd6QyxPQUFPLEVBQTBDLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFZLE1BQU0sU0FBUyxDQUFDO0FBRTlHLFNBQVMsd0JBQXdCLENBQUMsT0FBc0Q7SUFFdEYsT0FBZ0MsT0FBUSxDQUFDLGVBQWUsS0FBSyxTQUFTO1FBQ3pDLE9BQVEsQ0FBQyxVQUFVLEtBQUssU0FBUztRQUNqQyxPQUFRLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFFSDtJQUFBO0lBNEhBLENBQUM7SUEzSEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bb0JHO0lBQ0gsMkJBQUssR0FBTCxVQUNJLGNBQW9DLEVBQ3BDLE9BQWdFO1FBQWhFLHdCQUFBLEVBQUEsY0FBZ0U7UUFDbEUsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV0RCxJQUFJLFVBQVUsR0FBbUMsSUFBSSxDQUFDO1FBQ3RELElBQUksZUFBZSxHQUE2QyxJQUFJLENBQUM7UUFDckUsSUFBSSxRQUFRLEdBQXdCLFNBQVMsQ0FBQztRQUU5QyxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDbkIsSUFBSSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDckMseUNBQXlDO2dCQUN6QyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDcEUsZUFBZSxHQUFHLE9B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LFdBQVc7UUFEdkIsVUFBVSxFQUFFO09BQ0EsV0FBVyxDQTRIdkI7SUFBRCxrQkFBQztDQUFBLEFBNUhELElBNEhDO1NBNUhZLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7QXN5bmNWYWxpZGF0b3JGbiwgVmFsaWRhdG9yRm59IGZyb20gJy4vZGlyZWN0aXZlcy92YWxpZGF0b3JzJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBBYnN0cmFjdENvbnRyb2xPcHRpb25zLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1Ib29rc30gZnJvbSAnLi9tb2RlbCc7XG5cbmZ1bmN0aW9uIGlzQWJzdHJhY3RDb250cm9sT3B0aW9ucyhvcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zIHwge1trZXk6IHN0cmluZ106IGFueX0pOlxuICAgIG9wdGlvbnMgaXMgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB7XG4gIHJldHVybiAoPEFic3RyYWN0Q29udHJvbE9wdGlvbnM+b3B0aW9ucykuYXN5bmNWYWxpZGF0b3JzICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICg8QWJzdHJhY3RDb250cm9sT3B0aW9ucz5vcHRpb25zKS52YWxpZGF0b3JzICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICg8QWJzdHJhY3RDb250cm9sT3B0aW9ucz5vcHRpb25zKS51cGRhdGVPbiAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogQ3JlYXRlcyBhbiBgQWJzdHJhY3RDb250cm9sYCBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBUaGUgYEZvcm1CdWlsZGVyYCBwcm92aWRlcyBzeW50YWN0aWMgc3VnYXIgdGhhdCBzaG9ydGVucyBjcmVhdGluZyBpbnN0YW5jZXMgb2YgYSBgRm9ybUNvbnRyb2xgLFxuICogYEZvcm1Hcm91cGAsIG9yIGBGb3JtQXJyYXlgLiBJdCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgYm9pbGVycGxhdGUgbmVlZGVkIHRvIGJ1aWxkIGNvbXBsZXhcbiAqIGZvcm1zLlxuICpcbiAqIEBzZWUgW1JlYWN0aXZlIEZvcm1zIEd1aWRlXSgvZ3VpZGUvcmVhY3RpdmUtZm9ybXMpXG4gKlxuICogQHB1YmxpY0FwaVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRm9ybUJ1aWxkZXIge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENvbnN0cnVjdCBhIG5ldyBgRm9ybUdyb3VwYCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xzQ29uZmlnIEEgY29sbGVjdGlvbiBvZiBjaGlsZCBjb250cm9scy4gVGhlIGtleSBmb3IgZWFjaCBjaGlsZCBpcyB0aGUgbmFtZVxuICAgKiB1bmRlciB3aGljaCBpdCBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgb2JqZWN0IGZvciB0aGUgYEZvcm1Hcm91cGAuIFRoZSBvYmplY3QgY2FuXG4gICAqIGhhdmUgdHdvIHNoYXBlczpcbiAgICpcbiAgICogMSkgYEFic3RyYWN0Q29udHJvbE9wdGlvbnNgIG9iamVjdCAocHJlZmVycmVkKSwgd2hpY2ggY29uc2lzdHMgb2Y6XG4gICAqICogYHZhbGlkYXRvcnNgOiBBIHN5bmNocm9ub3VzIHZhbGlkYXRvciBmdW5jdGlvbiwgb3IgYW4gYXJyYXkgb2YgdmFsaWRhdG9yIGZ1bmN0aW9uc1xuICAgKiAqIGBhc3luY1ZhbGlkYXRvcnNgOiBBIHNpbmdsZSBhc3luYyB2YWxpZGF0b3Igb3IgYXJyYXkgb2YgYXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uc1xuICAgKiAqIGB1cGRhdGVPbmA6IFRoZSBldmVudCB1cG9uIHdoaWNoIHRoZSBjb250cm9sIHNob3VsZCBiZSB1cGRhdGVkIChvcHRpb25zOiAnY2hhbmdlJyB8ICdibHVyJyB8XG4gICAqIHN1Ym1pdCcpXG4gICAqXG4gICAqIDIpIExlZ2FjeSBjb25maWd1cmF0aW9uIG9iamVjdCwgd2hpY2ggY29uc2lzdHMgb2Y6XG4gICAqICogYHZhbGlkYXRvcmA6IEEgc3luY2hyb25vdXMgdmFsaWRhdG9yIGZ1bmN0aW9uLCBvciBhbiBhcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zXG4gICAqICogYGFzeW5jVmFsaWRhdG9yYDogQSBzaW5nbGUgYXN5bmMgdmFsaWRhdG9yIG9yIGFycmF5IG9mIGFzeW5jIHZhbGlkYXRvciBmdW5jdGlvbnNcbiAgICpcbiAgICovXG4gIGdyb3VwKFxuICAgICAgY29udHJvbHNDb25maWc6IHtba2V5OiBzdHJpbmddOiBhbnl9LFxuICAgICAgb3B0aW9uczogQWJzdHJhY3RDb250cm9sT3B0aW9uc3x7W2tleTogc3RyaW5nXTogYW55fXxudWxsID0gbnVsbCk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgY29udHJvbHMgPSB0aGlzLl9yZWR1Y2VDb250cm9scyhjb250cm9sc0NvbmZpZyk7XG5cbiAgICBsZXQgdmFsaWRhdG9yczogVmFsaWRhdG9yRm58VmFsaWRhdG9yRm5bXXxudWxsID0gbnVsbDtcbiAgICBsZXQgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZufEFzeW5jVmFsaWRhdG9yRm5bXXxudWxsID0gbnVsbDtcbiAgICBsZXQgdXBkYXRlT246IEZvcm1Ib29rc3x1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNBYnN0cmFjdENvbnRyb2xPcHRpb25zKG9wdGlvbnMpKSB7XG4gICAgICAgIC8vIGBvcHRpb25zYCBhcmUgYEFic3RyYWN0Q29udHJvbE9wdGlvbnNgXG4gICAgICAgIHZhbGlkYXRvcnMgPSBvcHRpb25zLnZhbGlkYXRvcnMgIT0gbnVsbCA/IG9wdGlvbnMudmFsaWRhdG9ycyA6IG51bGw7XG4gICAgICAgIGFzeW5jVmFsaWRhdG9ycyA9IG9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzICE9IG51bGwgPyBvcHRpb25zLmFzeW5jVmFsaWRhdG9ycyA6IG51bGw7XG4gICAgICAgIHVwZGF0ZU9uID0gb3B0aW9ucy51cGRhdGVPbiAhPSBudWxsID8gb3B0aW9ucy51cGRhdGVPbiA6IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGBvcHRpb25zYCBhcmUgbGVnYWN5IGZvcm0gZ3JvdXAgb3B0aW9uc1xuICAgICAgICB2YWxpZGF0b3JzID0gb3B0aW9ucy52YWxpZGF0b3IgIT0gbnVsbCA/IG9wdGlvbnMudmFsaWRhdG9yIDogbnVsbDtcbiAgICAgICAgYXN5bmNWYWxpZGF0b3JzID0gb3B0aW9ucy5hc3luY1ZhbGlkYXRvciAhPSBudWxsID8gb3B0aW9ucy5hc3luY1ZhbGlkYXRvciA6IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoY29udHJvbHMsIHthc3luY1ZhbGlkYXRvcnMsIHVwZGF0ZU9uLCB2YWxpZGF0b3JzfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENvbnN0cnVjdCBhIG5ldyBgRm9ybUNvbnRyb2xgIHdpdGggdGhlIGdpdmVuIHN0YXRlLCB2YWxpZGF0b3JzIGFuZCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybVN0YXRlIEluaXRpYWxpemVzIHRoZSBjb250cm9sIHdpdGggYW4gaW5pdGlhbCBzdGF0ZSB2YWx1ZSwgb3JcbiAgICogd2l0aCBhbiBvYmplY3QgdGhhdCBjb250YWlucyBib3RoIGEgdmFsdWUgYW5kIGEgZGlzYWJsZWQgc3RhdHVzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsaWRhdG9yT3JPcHRzIEEgc3luY2hyb25vdXMgdmFsaWRhdG9yIGZ1bmN0aW9uLCBvciBhbiBhcnJheSBvZlxuICAgKiBzdWNoIGZ1bmN0aW9ucywgb3IgYW4gYEFic3RyYWN0Q29udHJvbE9wdGlvbnNgIG9iamVjdCB0aGF0IGNvbnRhaW5zXG4gICAqIHZhbGlkYXRpb24gZnVuY3Rpb25zIGFuZCBhIHZhbGlkYXRpb24gdHJpZ2dlci5cbiAgICpcbiAgICogQHBhcmFtIGFzeW5jVmFsaWRhdG9yIEEgc2luZ2xlIGFzeW5jIHZhbGlkYXRvciBvciBhcnJheSBvZiBhc3luYyB2YWxpZGF0b3JcbiAgICogZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAdXNhZ2VOb3Rlc1xuICAgKlxuICAgKiAjIyMgSW5pdGlhbGl6ZSBhIGNvbnRyb2wgYXMgZGlzYWJsZWRcbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHJldHVybnMgYSBjb250cm9sIHdpdGggYW4gaW5pdGlhbCB2YWx1ZSBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKlxuICAgKiA8Y29kZS1leGFtcGxlIHBhdGg9XCJmb3Jtcy90cy9mb3JtQnVpbGRlci9mb3JtX2J1aWxkZXJfZXhhbXBsZS50c1wiXG4gICAqICAgbGluZW51bXM9XCJmYWxzZVwiIHJlZ2lvbj1cImRpc2FibGVkLWNvbnRyb2xcIj5cbiAgICogPC9jb2RlLWV4YW1wbGU+XG4gICAqL1xuICBjb250cm9sKFxuICAgICAgZm9ybVN0YXRlOiBhbnksIHZhbGlkYXRvck9yT3B0cz86IFZhbGlkYXRvckZufFZhbGlkYXRvckZuW118QWJzdHJhY3RDb250cm9sT3B0aW9uc3xudWxsLFxuICAgICAgYXN5bmNWYWxpZGF0b3I/OiBBc3luY1ZhbGlkYXRvckZufEFzeW5jVmFsaWRhdG9yRm5bXXxudWxsKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2woZm9ybVN0YXRlLCB2YWxpZGF0b3JPck9wdHMsIGFzeW5jVmFsaWRhdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGBGb3JtQXJyYXlgIGZyb20gdGhlIGdpdmVuIGFycmF5IG9mIGNvbmZpZ3VyYXRpb25zLFxuICAgKiB2YWxpZGF0b3JzIGFuZCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbHNDb25maWcgQW4gYXJyYXkgb2YgY2hpbGQgY29udHJvbHMgb3IgY29udHJvbCBjb25maWdzLiBFYWNoXG4gICAqIGNoaWxkIGNvbnRyb2wgaXMgZ2l2ZW4gYW4gaW5kZXggd2hlbiBpdCBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsaWRhdG9yT3JPcHRzIEEgc3luY2hyb25vdXMgdmFsaWRhdG9yIGZ1bmN0aW9uLCBvciBhbiBhcnJheSBvZlxuICAgKiBzdWNoIGZ1bmN0aW9ucywgb3IgYW4gYEFic3RyYWN0Q29udHJvbE9wdGlvbnNgIG9iamVjdCB0aGF0IGNvbnRhaW5zXG4gICAqIHZhbGlkYXRpb24gZnVuY3Rpb25zIGFuZCBhIHZhbGlkYXRpb24gdHJpZ2dlci5cbiAgICpcbiAgICogQHBhcmFtIGFzeW5jVmFsaWRhdG9yIEEgc2luZ2xlIGFzeW5jIHZhbGlkYXRvciBvciBhcnJheSBvZiBhc3luYyB2YWxpZGF0b3JcbiAgICogZnVuY3Rpb25zLlxuICAgKi9cbiAgYXJyYXkoXG4gICAgICBjb250cm9sc0NvbmZpZzogYW55W10sXG4gICAgICB2YWxpZGF0b3JPck9wdHM/OiBWYWxpZGF0b3JGbnxWYWxpZGF0b3JGbltdfEFic3RyYWN0Q29udHJvbE9wdGlvbnN8bnVsbCxcbiAgICAgIGFzeW5jVmFsaWRhdG9yPzogQXN5bmNWYWxpZGF0b3JGbnxBc3luY1ZhbGlkYXRvckZuW118bnVsbCk6IEZvcm1BcnJheSB7XG4gICAgY29uc3QgY29udHJvbHMgPSBjb250cm9sc0NvbmZpZy5tYXAoYyA9PiB0aGlzLl9jcmVhdGVDb250cm9sKGMpKTtcbiAgICByZXR1cm4gbmV3IEZvcm1BcnJheShjb250cm9scywgdmFsaWRhdG9yT3JPcHRzLCBhc3luY1ZhbGlkYXRvcik7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIF9yZWR1Y2VDb250cm9scyhjb250cm9sc0NvbmZpZzoge1trOiBzdHJpbmddOiBhbnl9KToge1trZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbH0ge1xuICAgIGNvbnN0IGNvbnRyb2xzOiB7W2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sfSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzQ29uZmlnKS5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IHtcbiAgICAgIGNvbnRyb2xzW2NvbnRyb2xOYW1lXSA9IHRoaXMuX2NyZWF0ZUNvbnRyb2woY29udHJvbHNDb25maWdbY29udHJvbE5hbWVdKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29udHJvbHM7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIF9jcmVhdGVDb250cm9sKGNvbnRyb2xDb25maWc6IGFueSk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgaWYgKGNvbnRyb2xDb25maWcgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCB8fCBjb250cm9sQ29uZmlnIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8XG4gICAgICAgIGNvbnRyb2xDb25maWcgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgIHJldHVybiBjb250cm9sQ29uZmlnO1xuXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xDb25maWcpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2xDb25maWdbMF07XG4gICAgICBjb25zdCB2YWxpZGF0b3I6IFZhbGlkYXRvckZuID0gY29udHJvbENvbmZpZy5sZW5ndGggPiAxID8gY29udHJvbENvbmZpZ1sxXSA6IG51bGw7XG4gICAgICBjb25zdCBhc3luY1ZhbGlkYXRvcjogQXN5bmNWYWxpZGF0b3JGbiA9IGNvbnRyb2xDb25maWcubGVuZ3RoID4gMiA/IGNvbnRyb2xDb25maWdbMl0gOiBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbCh2YWx1ZSwgdmFsaWRhdG9yLCBhc3luY1ZhbGlkYXRvcik7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbChjb250cm9sQ29uZmlnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybV9idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybXMvc3JjL2Zvcm1fYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7O0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd6QyxPQUFPLEVBQTBDLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFZLE1BQU0sU0FBUyxDQUFDO0FBRTlHLFNBQVMsd0JBQXdCLENBQUMsT0FBc0Q7SUFFdEYsT0FBZ0MsT0FBUSxDQUFDLGVBQWUsS0FBSyxTQUFTO1FBQ3pDLE9BQVEsQ0FBQyxVQUFVLEtBQUssU0FBUztRQUNqQyxPQUFRLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFFSDtJQUFBO0lBNEhBLENBQUM7SUEzSEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bb0JHO0lBQ0gsMkJBQUssR0FBTCxVQUNJLGNBQW9DLEVBQ3BDLE9BQWdFO1FBQWhFLHdCQUFBLEVBQUEsY0FBZ0U7UUFDbEUsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV0RCxJQUFJLFVBQVUsR0FBbUMsSUFBSSxDQUFDO1FBQ3RELElBQUksZUFBZSxHQUE2QyxJQUFJLENBQUM7UUFDckUsSUFBSSxRQUFRLEdBQXdCLFNBQVMsQ0FBQztRQUU5QyxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDbkIsSUFBSSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDckMseUNBQXlDO2dCQUN6QyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDcEUsZUFBZSxHQUFHLE9B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QUM7U0FDcEM7SUFDSCxDQUFDO0lBM0hVLFdBQVc7UUFEdkIsVUFBVSxFQUFFO09BQ0EsV0FBVyxDQTRIdkI7SUFBRCxrQkFBQztDQUFBLEFBNUhELElBNEhDO1NBNUhZLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7QXN5bmNWYWxpZGF0b3JGbiwgVmFsaWRhdG9yRm59IGZyb20gJy4vZGlyZWN0aXZlcy92YWxpZGF0b3JzJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBBYnN0cmFjdENvbnRyb2xPcHRpb25zLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1Ib29rc30gZnJvbSAnLi9tb2RlbCc7XG5cbmZ1bmN0aW9uIGlzQWJzdHJhY3RDb250cm9sT3B0aW9ucyhvcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zIHwge1trZXk6IHN0cmluZ106IGFueX0pOlxuICAgIG9wdGlvbnMgaXMgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB7XG4gIHJldHVybiAoPEFic3RyYWN0Q29udHJvbE9wdGlvbnM+b3B0aW9ucykuYXN5bmNWYWxpZGF0b3JzICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICg8QWJzdHJhY3RDb250cm9sT3B0aW9ucz5vcHRpb25zKS52YWxpZGF0b3JzICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICg8QWJzdHJhY3RDb250cm9sT3B0aW9ucz5vcHRpb25zKS51cGRhdGVPbiAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogQ3JlYXRlcyBhbiBgQWJzdHJhY3RDb250cm9sYCBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBUaGUgYEZvcm1CdWlsZGVyYCBwcm92aWRlcyBzeW50YWN0aWMgc3VnYXIgdGhhdCBzaG9ydGVucyBjcmVhdGluZyBpbnN0YW5jZXMgb2YgYSBgRm9ybUNvbnRyb2xgLFxuICogYEZvcm1Hcm91cGAsIG9yIGBGb3JtQXJyYXlgLiBJdCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgYm9pbGVycGxhdGUgbmVlZGVkIHRvIGJ1aWxkIGNvbXBsZXhcbiAqIGZvcm1zLlxuICpcbiAqIEBzZWUgW1JlYWN0aXZlIEZvcm1zIEd1aWRlXSgvZ3VpZGUvcmVhY3RpdmUtZm9ybXMpXG4gKlxuICogQHB1YmxpY0FwaVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRm9ybUJ1aWxkZXIge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENvbnN0cnVjdCBhIG5ldyBgRm9ybUdyb3VwYCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xzQ29uZmlnIEEgY29sbGVjdGlvbiBvZiBjaGlsZCBjb250cm9scy4gVGhlIGtleSBmb3IgZWFjaCBjaGlsZCBpcyB0aGUgbmFtZVxuICAgKiB1bmRlciB3aGljaCBpdCBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgb2JqZWN0IGZvciB0aGUgYEZvcm1Hcm91cGAuIFRoZSBvYmplY3QgY2FuXG4gICAqIGhhdmUgdHdvIHNoYXBlczpcbiAgICpcbiAgICogMSkgYEFic3RyYWN0Q29udHJvbE9wdGlvbnNgIG9iamVjdCAocHJlZmVycmVkKSwgd2hpY2ggY29uc2lzdHMgb2Y6XG4gICAqICogYHZhbGlkYXRvcnNgOiBBIHN5bmNocm9ub3VzIHZhbGlkYXRvciBmdW5jdGlvbiwgb3IgYW4gYXJyYXkgb2YgdmFsaWRhdG9yIGZ1bmN0aW9uc1xuICAgKiAqIGBhc3luY1ZhbGlkYXRvcnNgOiBBIHNpbmdsZSBhc3luYyB2YWxpZGF0b3Igb3IgYXJyYXkgb2YgYXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uc1xuICAgKiAqIGB1cGRhdGVPbmA6IFRoZSBldmVudCB1cG9uIHdoaWNoIHRoZSBjb250cm9sIHNob3VsZCBiZSB1cGRhdGVkIChvcHRpb25zOiAnY2hhbmdlJyB8ICdibHVyJyB8XG4gICAqIHN1Ym1pdCcpXG4gICAqXG4gICAqIDIpIExlZ2FjeSBjb25maWd1cmF0aW9uIG9iamVjdCwgd2hpY2ggY29uc2lzdHMgb2Y6XG4gICAqICogYHZhbGlkYXRvcmA6IEEgc3luY2hyb25vdXMgdmFsaWRhdG9yIGZ1bmN0aW9uLCBvciBhbiBhcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zXG4gICAqICogYGFzeW5jVmFsaWRhdG9yYDogQSBzaW5nbGUgYXN5bmMgdmFsaWRhdG9yIG9yIGFycmF5IG9mIGFzeW5jIHZhbGlkYXRvciBmdW5jdGlvbnNcbiAgICpcbiAgICovXG4gIGdyb3VwKFxuICAgICAgY29udHJvbHNDb25maWc6IHtba2V5OiBzdHJpbmddOiBhbnl9LFxuICAgICAgb3B0aW9uczogQWJzdHJhY3RDb250cm9sT3B0aW9uc3x7W2tleTogc3RyaW5nXTogYW55fXxudWxsID0gbnVsbCk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgY29udHJvbHMgPSB0aGlzLl9yZWR1Y2VDb250cm9scyhjb250cm9sc0NvbmZpZyk7XG5cbiAgICBsZXQgdmFsaWRhdG9yczogVmFsaWRhdG9yRm58VmFsaWRhdG9yRm5bXXxudWxsID0gbnVsbDtcbiAgICBsZXQgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZufEFzeW5jVmFsaWRhdG9yRm5bXXxudWxsID0gbnVsbDtcbiAgICBsZXQgdXBkYXRlT246IEZvcm1Ib29rc3x1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNBYnN0cmFjdENvbnRyb2xPcHRpb25zKG9wdGlvbnMpKSB7XG4gICAgICAgIC8vIGBvcHRpb25zYCBhcmUgYEFic3RyYWN0Q29udHJvbE9wdGlvbnNgXG4gICAgICAgIHZhbGlkYXRvcnMgPSBvcHRpb25zLnZhbGlkYXRvcnMgIT0gbnVsbCA/IG9wdGlvbnMudmFsaWRhdG9ycyA6IG51bGw7XG4gICAgICAgIGFzeW5jVmFsaWRhdG9ycyA9IG9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzICE9IG51bGwgPyBvcHRpb25zLmFzeW5jVmFsaWRhdG9ycyA6IG51bGw7XG4gICAgICAgIHVwZGF0ZU9uID0gb3B0aW9ucy51cGRhdGVPbiAhPSBudWxsID8gb3B0aW9ucy51cGRhdGVPbiA6IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGBvcHRpb25zYCBhcmUgbGVnYWN5IGZvcm0gZ3JvdXAgb3B0aW9uc1xuICAgICAgICB2YWxpZGF0b3JzID0gb3B0aW9uc1sndmFsaWRhdG9yJ10gIT0gbnVsbCA/IG9wdGlvbnNbJ3ZhbGlkYXRvciddIDogbnVsbDtcbiAgICAgICAgYXN5bmNWYWxpZGF0b3JzID0gb3B0aW9uc1snYXN5bmNWYWxpZGF0b3InXSAhPSBudWxsID8gb3B0aW9uc1snYXN5bmNWYWxpZGF0b3InXSA6IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoY29udHJvbHMsIHthc3luY1ZhbGlkYXRvcnMsIHVwZGF0ZU9uLCB2YWxpZGF0b3JzfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENvbnN0cnVjdCBhIG5ldyBgRm9ybUNvbnRyb2xgIHdpdGggdGhlIGdpdmVuIHN0YXRlLCB2YWxpZGF0b3JzIGFuZCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybVN0YXRlIEluaXRpYWxpemVzIHRoZSBjb250cm9sIHdpdGggYW4gaW5pdGlhbCBzdGF0ZSB2YWx1ZSwgb3JcbiAgICogd2l0aCBhbiBvYmplY3QgdGhhdCBjb250YWlucyBib3RoIGEgdmFsdWUgYW5kIGEgZGlzYWJsZWQgc3RhdHVzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsaWRhdG9yT3JPcHRzIEEgc3luY2hyb25vdXMgdmFsaWRhdG9yIGZ1bmN0aW9uLCBvciBhbiBhcnJheSBvZlxuICAgKiBzdWNoIGZ1bmN0aW9ucywgb3IgYW4gYEFic3RyYWN0Q29udHJvbE9wdGlvbnNgIG9iamVjdCB0aGF0IGNvbnRhaW5zXG4gICAqIHZhbGlkYXRpb24gZnVuY3Rpb25zIGFuZCBhIHZhbGlkYXRpb24gdHJpZ2dlci5cbiAgICpcbiAgICogQHBhcmFtIGFzeW5jVmFsaWRhdG9yIEEgc2luZ2xlIGFzeW5jIHZhbGlkYXRvciBvciBhcnJheSBvZiBhc3luYyB2YWxpZGF0b3JcbiAgICogZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAdXNhZ2VOb3Rlc1xuICAgKlxuICAgKiAjIyMgSW5pdGlhbGl6ZSBhIGNvbnRyb2wgYXMgZGlzYWJsZWRcbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHJldHVybnMgYSBjb250cm9sIHdpdGggYW4gaW5pdGlhbCB2YWx1ZSBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKlxuICAgKiA8Y29kZS1leGFtcGxlIHBhdGg9XCJmb3Jtcy90cy9mb3JtQnVpbGRlci9mb3JtX2J1aWxkZXJfZXhhbXBsZS50c1wiXG4gICAqICAgbGluZW51bXM9XCJmYWxzZVwiIHJlZ2lvbj1cImRpc2FibGVkLWNvbnRyb2xcIj5cbiAgICogPC9jb2RlLWV4YW1wbGU+XG4gICAqL1xuICBjb250cm9sKFxuICAgICAgZm9ybVN0YXRlOiBhbnksIHZhbGlkYXRvck9yT3B0cz86IFZhbGlkYXRvckZufFZhbGlkYXRvckZuW118QWJzdHJhY3RDb250cm9sT3B0aW9uc3xudWxsLFxuICAgICAgYXN5bmNWYWxpZGF0b3I/OiBBc3luY1ZhbGlkYXRvckZufEFzeW5jVmFsaWRhdG9yRm5bXXxudWxsKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2woZm9ybVN0YXRlLCB2YWxpZGF0b3JPck9wdHMsIGFzeW5jVmFsaWRhdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGBGb3JtQXJyYXlgIGZyb20gdGhlIGdpdmVuIGFycmF5IG9mIGNvbmZpZ3VyYXRpb25zLFxuICAgKiB2YWxpZGF0b3JzIGFuZCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbHNDb25maWcgQW4gYXJyYXkgb2YgY2hpbGQgY29udHJvbHMgb3IgY29udHJvbCBjb25maWdzLiBFYWNoXG4gICAqIGNoaWxkIGNvbnRyb2wgaXMgZ2l2ZW4gYW4gaW5kZXggd2hlbiBpdCBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsaWRhdG9yT3JPcHRzIEEgc3luY2hyb25vdXMgdmFsaWRhdG9yIGZ1bmN0aW9uLCBvciBhbiBhcnJheSBvZlxuICAgKiBzdWNoIGZ1bmN0aW9ucywgb3IgYW4gYEFic3RyYWN0Q29udHJvbE9wdGlvbnNgIG9iamVjdCB0aGF0IGNvbnRhaW5zXG4gICAqIHZhbGlkYXRpb24gZnVuY3Rpb25zIGFuZCBhIHZhbGlkYXRpb24gdHJpZ2dlci5cbiAgICpcbiAgICogQHBhcmFtIGFzeW5jVmFsaWRhdG9yIEEgc2luZ2xlIGFzeW5jIHZhbGlkYXRvciBvciBhcnJheSBvZiBhc3luYyB2YWxpZGF0b3JcbiAgICogZnVuY3Rpb25zLlxuICAgKi9cbiAgYXJyYXkoXG4gICAgICBjb250cm9sc0NvbmZpZzogYW55W10sXG4gICAgICB2YWxpZGF0b3JPck9wdHM/OiBWYWxpZGF0b3JGbnxWYWxpZGF0b3JGbltdfEFic3RyYWN0Q29udHJvbE9wdGlvbnN8bnVsbCxcbiAgICAgIGFzeW5jVmFsaWRhdG9yPzogQXN5bmNWYWxpZGF0b3JGbnxBc3luY1ZhbGlkYXRvckZuW118bnVsbCk6IEZvcm1BcnJheSB7XG4gICAgY29uc3QgY29udHJvbHMgPSBjb250cm9sc0NvbmZpZy5tYXAoYyA9PiB0aGlzLl9jcmVhdGVDb250cm9sKGMpKTtcbiAgICByZXR1cm4gbmV3IEZvcm1BcnJheShjb250cm9scywgdmFsaWRhdG9yT3JPcHRzLCBhc3luY1ZhbGlkYXRvcik7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIF9yZWR1Y2VDb250cm9scyhjb250cm9sc0NvbmZpZzoge1trOiBzdHJpbmddOiBhbnl9KToge1trZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbH0ge1xuICAgIGNvbnN0IGNvbnRyb2xzOiB7W2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sfSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzQ29uZmlnKS5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IHtcbiAgICAgIGNvbnRyb2xzW2NvbnRyb2xOYW1lXSA9IHRoaXMuX2NyZWF0ZUNvbnRyb2woY29udHJvbHNDb25maWdbY29udHJvbE5hbWVdKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29udHJvbHM7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIF9jcmVhdGVDb250cm9sKGNvbnRyb2xDb25maWc6IGFueSk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgaWYgKGNvbnRyb2xDb25maWcgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCB8fCBjb250cm9sQ29uZmlnIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8XG4gICAgICAgIGNvbnRyb2xDb25maWcgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgIHJldHVybiBjb250cm9sQ29uZmlnO1xuXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xDb25maWcpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2xDb25maWdbMF07XG4gICAgICBjb25zdCB2YWxpZGF0b3I6IFZhbGlkYXRvckZuID0gY29udHJvbENvbmZpZy5sZW5ndGggPiAxID8gY29udHJvbENvbmZpZ1sxXSA6IG51bGw7XG4gICAgICBjb25zdCBhc3luY1ZhbGlkYXRvcjogQXN5bmNWYWxpZGF0b3JGbiA9IGNvbnRyb2xDb25maWcubGVuZ3RoID4gMiA/IGNvbnRyb2xDb25maWdbMl0gOiBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbCh2YWx1ZSwgdmFsaWRhdG9yLCBhc3luY1ZhbGlkYXRvcik7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbChjb250cm9sQ29uZmlnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
\ No newline at end of file

esm5/src/version.js

@@ -14,5 +14,5 @@
/**
* @publicApi
*/
-export var VERSION = new Version('7.2.7');
+export var VERSION = new Version('7.2.8');
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm1zL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLElBQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQG1vZHVsZVxuICogQGRlc2NyaXB0aW9uXG4gKiBFbnRyeSBwb2ludCBmb3IgYWxsIHB1YmxpYyBBUElzIG9mIHRoZSBjb21tb24gcGFja2FnZS5cbiAqL1xuXG5pbXBvcnQge1ZlcnNpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBwdWJsaWNBcGlcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBuZXcgVmVyc2lvbignMC4wLjAtUExBQ0VIT0xERVInKTtcbiJdfQ==
\ No newline at end of file

fesm2015/forms.js

@@ -1,5 +1,5 @@
/**
- * @license Angular v7.2.7
+ * @license Angular v7.2.8
* (c) 2010-2019 Google LLC. https://angular.io/
* License: MIT
*/
@@ -6951,8 +6951,8 @@
}
else {
// `options` are legacy form group options
- validators = options.validator != null ? options.validator : null;
- asyncValidators = options.asyncValidator != null ? options.asyncValidator : null;
+ validators = options['validator'] != null ? options['validator'] : null;
+ asyncValidators = options['asyncValidator'] != null ? options['asyncValidator'] : null;
}
}
return new FormGroup(controls, { asyncValidators, updateOn, validators });
@@ -7054,7 +7054,7 @@
* \@publicApi
* @type {?}
*/
-const VERSION = new Version('7.2.7');
+const VERSION = new Version('7.2.8');
/**
* @fileoverview added by tsickle

fesm2015/forms.js.map

@@ -1 +1 @@
-{"version":3,"file":"forms.js","sources":["../src/directives/abstract_control_directive.ts","../src/directives/control_container.ts","../src/validators.ts","../src/directives/control_value_accessor.ts","../src/directives/checkbox_value_accessor.ts","../src/directives/default_value_accessor.ts","../src/directives/normalize_validator.ts","../src/directives/number_value_accessor.ts","../src/directives/ng_control.ts","../src/directives/radio_control_value_accessor.ts","../src/directives/range_value_accessor.ts","../src/directives/error_examples.ts","../src/directives/reactive_errors.ts","../src/directives/select_control_value_accessor.ts","../src/directives/select_multiple_control_value_accessor.ts","../src/directives/shared.ts","../src/directives/abstract_form_group_directive.ts","../src/directives/ng_control_status.ts","../src/model.ts","../src/directives/ng_form.ts","../src/directives/template_driven_errors.ts","../src/directives/ng_form_selector_warning.ts","../src/directives/ng_model_group.ts","../src/directives/ng_model.ts","../src/directives/reactive_directives/form_control_directive.ts","../src/directives/reactive_directives/form_group_directive.ts","../src/directives/reactive_directives/form_group_name.ts","../src/directives/reactive_directives/form_control_name.ts","../src/directives/validators.ts","../src/form_builder.ts","../src/version.ts","../src/directives/ng_no_validate_directive.ts","../src/directives.ts","../src/form_providers.ts","../forms.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable} from 'rxjs';\nimport {AbstractControl} from '../model';\nimport {ValidationErrors} from './validators';\n\n/**\n * @description\n * Base class for control directives.\n *\n * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.\n *\n * @publicApi\n */\nexport abstract class AbstractControlDirective {\n /**\n * @description\n * A reference to the underlying control.\n *\n * @returns the control that backs this directive. Most properties fall through to that instance.\n */\n abstract get control(): AbstractControl|null;\n\n /**\n * @description\n * Reports the value of the control if it is present, otherwise null.\n */\n get value(): any { return this.control ? this.control.value : null; }\n\n /**\n * @description\n * Reports whether the control is valid. A control is considered valid if no\n * validation errors exist with the current value.\n * If the control is not present, null is returned.\n */\n get valid(): boolean|null { return this.control ? this.control.valid : null; }\n\n /**\n * @description\n * Reports whether the control is invalid, meaning that an error exists in the input value.\n * If the control is not present, null is returned.\n */\n get invalid(): boolean|null { return this.control ? this.control.invalid : null; }\n\n /**\n * @description\n * Reports whether a control is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value. If the control is not present, null is\n * returned.\n */\n get pending(): boolean|null { return this.control ? this.control.pending : null; }\n\n /**\n * @description\n * Reports whether the control is disabled, meaning that the control is disabled\n * in the UI and is exempt from validation checks and excluded from aggregate\n * values of ancestor controls. If the control is not present, null is returned.\n */\n get disabled(): boolean|null { return this.control ? this.control.disabled : null; }\n\n /**\n * @description\n * Reports whether the control is enabled, meaning that the control is included in ancestor\n * calculations of validity or value. If the control is not present, null is returned.\n */\n get enabled(): boolean|null { return this.control ? this.control.enabled : null; }\n\n /**\n * @description\n * Reports the control's validation errors. If the control is not present, null is returned.\n */\n get errors(): ValidationErrors|null { return this.control ? this.control.errors : null; }\n\n /**\n * @description\n * Reports whether the control is pristine, meaning that the user has not yet changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get pristine(): boolean|null { return this.control ? this.control.pristine : null; }\n\n /**\n * @description\n * Reports whether the control is dirty, meaning that the user has changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get dirty(): boolean|null { return this.control ? this.control.dirty : null; }\n\n /**\n * @description\n * Reports whether the control is touched, meaning that the user has triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get touched(): boolean|null { return this.control ? this.control.touched : null; }\n\n /**\n * @description\n * Reports the validation status of the control. Possible values include:\n * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.\n * If the control is not present, null is returned.\n */\n get status(): string|null { return this.control ? this.control.status : null; }\n\n /**\n * @description\n * Reports whether the control is untouched, meaning that the user has not yet triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get untouched(): boolean|null { return this.control ? this.control.untouched : null; }\n\n /**\n * @description\n * Returns a multicasting observable that emits a validation status whenever it is\n * calculated for the control. If the control is not present, null is returned.\n */\n get statusChanges(): Observable<any>|null {\n return this.control ? this.control.statusChanges : null;\n }\n\n /**\n * @description\n * Returns a multicasting observable of value changes for the control that emits every time the\n * value of the control changes in the UI or programmatically.\n * If the control is not present, null is returned.\n */\n get valueChanges(): Observable<any>|null {\n return this.control ? this.control.valueChanges : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[]|null { return null; }\n\n /**\n * @description\n * Resets the control with the provided value if the control is present.\n */\n reset(value: any = undefined): void {\n if (this.control) this.control.reset(value);\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return this.control ? this.control.hasError(errorCode, path) : false;\n }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n return this.control ? this.control.getError(errorCode, path) : null;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {Form} from './form_interface';\n\n\n/**\n * @description\n * A base class for directives that contain multiple registered instances of `NgControl`.\n * Only used by the forms module.\n *\n * @publicApi\n */\nexport abstract class ControlContainer extends AbstractControlDirective {\n /**\n * @description\n * The name for the control\n */\n // TODO(issue/24571): remove '!'.\n name !: string;\n\n /**\n * @description\n * The top-level form directive for the control.\n */\n get formDirective(): Form|null { return null; }\n\n /**\n * @description\n * The path to this group.\n */\n get path(): string[]|null { return null; }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken, ɵisObservable as isObservable, ɵisPromise as isPromise} from '@angular/core';\nimport {Observable, forkJoin, from} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {AsyncValidatorFn, ValidationErrors, Validator, ValidatorFn} from './directives/validators';\nimport {AbstractControl, FormControl} from './model';\n\nfunction isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n}\n\n/**\n * @description\n * An `InjectionToken` for registering additional synchronous validators used with `AbstractControl`s.\n *\n * @see `NG_ASYNC_VALIDATORS`\n *\n * @usageNotes\n *\n * ### Providing a custom validator\n *\n * The following example registers a custom validator directive. Adding the validator to the\n * existing collection of validators requires the `multi: true` option.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors | null {\n * return { 'custom': true };\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport const NG_VALIDATORS = new InjectionToken<Array<Validator|Function>>('NgValidators');\n\n/**\n * @description\n * An `InjectionToken` for registering additional asynchronous validators used with `AbstractControl`s.\n *\n * @see `NG_VALIDATORS`\n *\n * @publicApi\n */\nexport const NG_ASYNC_VALIDATORS =\n new InjectionToken<Array<Validator|Function>>('NgAsyncValidators');\n\nconst EMAIL_REGEXP =\n /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n\n/**\n * @description\n * Provides a set of built-in validators that can be used by form controls.\n *\n * A validator is a function that processes a `FormControl` or collection of\n * controls and returns an error map or null. A null map means that validation has passed.\n *\n * @see [Form Validation](/guide/form-validation)\n *\n * @publicApi\n */\nexport class Validators {\n /**\n * @description\n * Validator that requires the control's value to be greater than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a minimum of 3\n *\n * ```typescript\n * const control = new FormControl(2, Validators.min(3));\n *\n * console.log(control.errors); // {min: {min: 3, actual: 2}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `min` property if the validation check fails, otherwise `null`.\n *\n */\n static min(min: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value < min ? {'min': {'min': min, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to be less than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a maximum of 15\n *\n * ```typescript\n * const control = new FormControl(16, Validators.max(15));\n *\n * console.log(control.errors); // {max: {max: 15, actual: 16}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `max` property if the validation check fails, otherwise `null`.\n *\n */\n static max(max: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n return !isNaN(value) && value > max ? {'max': {'max': max, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control have a non-empty value.\n *\n * @usageNotes\n *\n * ### Validate that the field is non-empty\n *\n * ```typescript\n * const control = new FormControl('', Validators.required);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map with the `required` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static required(control: AbstractControl): ValidationErrors|null {\n return isEmptyInputValue(control.value) ? {'required': true} : null;\n }\n\n /**\n * @description\n * Validator that requires the control's value be true. This validator is commonly\n * used for required checkboxes.\n *\n * @usageNotes\n *\n * ### Validate that the field value is true\n *\n * ```typescript\n * const control = new FormControl('', Validators.requiredTrue);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map that contains the `required` property\n * set to `true` if the validation check fails, otherwise `null`.\n */\n static requiredTrue(control: AbstractControl): ValidationErrors|null {\n return control.value === true ? null : {'required': true};\n }\n\n /**\n * @description\n * Validator that requires the control's value pass an email validation test.\n *\n * @usageNotes\n *\n * ### Validate that the field matches a valid email pattern\n *\n * ```typescript\n * const control = new FormControl('bad@', Validators.email);\n *\n * console.log(control.errors); // {email: true}\n * ```\n *\n * @returns An error map with the `email` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static email(control: AbstractControl): ValidationErrors|null {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n return EMAIL_REGEXP.test(control.value) ? null : {'email': true};\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be greater than or equal\n * to the provided minimum length. This validator is also provided by default if you use the\n * the HTML5 `minlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has a minimum of 3 characters\n *\n * ```typescript\n * const control = new FormControl('ng', Validators.minLength(3));\n *\n * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}\n * ```\n *\n * ```html\n * <input minlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `minlength` if the validation check fails, otherwise `null`.\n */\n static minLength(minLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const length: number = control.value ? control.value.length : 0;\n return length < minLength ?\n {'minlength': {'requiredLength': minLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be less than or equal\n * to the provided maximum length. This validator is also provided by default if you use the\n * the HTML5 `maxlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has maximum of 5 characters\n *\n * ```typescript\n * const control = new FormControl('Angular', Validators.maxLength(5));\n *\n * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}\n * ```\n *\n * ```html\n * <input maxlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `maxlength` property if the validation check fails, otherwise `null`.\n */\n static maxLength(maxLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const length: number = control.value ? control.value.length : 0;\n return length > maxLength ?\n {'maxlength': {'requiredLength': maxLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to match a regex pattern. This validator is also\n * provided by default if you use the HTML5 `pattern` attribute.\n *\n * Note that if a Regexp is provided, the Regexp is used as is to test the values. On the other\n * hand, if a string is passed, the `^` character is prepended and the `$` character is\n * appended to the provided string (if not already present), and the resulting regular\n * expression is used to test the values.\n *\n * @usageNotes\n *\n * ### Validate that the field only contains letters or spaces\n *\n * ```typescript\n * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));\n *\n * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}\n * ```\n *\n * ```html\n * <input pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `pattern` property if the validation check fails, otherwise `null`.\n */\n static pattern(pattern: string|RegExp): ValidatorFn {\n if (!pattern) return Validators.nullValidator;\n let regex: RegExp;\n let regexStr: string;\n if (typeof pattern === 'string') {\n regexStr = '';\n\n if (pattern.charAt(0) !== '^') regexStr += '^';\n\n regexStr += pattern;\n\n if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$';\n\n regex = new RegExp(regexStr);\n } else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value: string = control.value;\n return regex.test(value) ? null :\n {'pattern': {'requiredPattern': regexStr, 'actualValue': value}};\n };\n }\n\n /**\n * @description\n * Validator that performs no operation.\n */\n static nullValidator(control: AbstractControl): ValidationErrors|null { return null; }\n\n /**\n * @description\n * Compose multiple validators into a single function that returns the union\n * of the individual error maps for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error maps of the validators if the validation check fails, otherwise `null`.\n */\n static compose(validators: null): null;\n static compose(validators: (ValidatorFn|null|undefined)[]): ValidatorFn|null;\n static compose(validators: (ValidatorFn|null|undefined)[]|null): ValidatorFn|null {\n if (!validators) return null;\n const presentValidators: ValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n return _mergeErrors(_executeValidators(control, presentValidators));\n };\n }\n\n /**\n * @description\n * Compose multiple async validators into a single function that returns the union\n * of the individual error objects for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error objects of the async validators if the validation check fails, otherwise `null`.\n */\n static composeAsync(validators: (AsyncValidatorFn|null)[]): AsyncValidatorFn|null {\n if (!validators) return null;\n const presentValidators: AsyncValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n const observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n return forkJoin(observables).pipe(map(_mergeErrors));\n };\n }\n}\n\nfunction isPresent(o: any): boolean {\n return o != null;\n}\n\nexport function toObservable(r: any): Observable<any> {\n const obs = isPromise(r) ? from(r) : r;\n if (!(isObservable(obs))) {\n throw new Error(`Expected validator to return Promise or Observable.`);\n }\n return obs;\n}\n\nfunction _executeValidators(control: AbstractControl, validators: ValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _executeAsyncValidators(control: AbstractControl, validators: AsyncValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _mergeErrors(arrayOfErrors: ValidationErrors[]): ValidationErrors|null {\n const res: {[key: string]: any} =\n arrayOfErrors.reduce((res: ValidationErrors | null, errors: ValidationErrors | null) => {\n return errors != null ? {...res !, ...errors} : res !;\n }, {});\n return Object.keys(res).length === 0 ? null : res;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * @description\n * Defines an interface that acts as a bridge between the Angular forms API and a\n * native element in the DOM.\n *\n * Implement this interface to create a custom form control directive\n * that integrates with Angular forms.\n *\n * @see DefaultValueAccessor\n *\n * @publicApi\n */\nexport interface ControlValueAccessor {\n /**\n * @description\n * Writes a new value to the element.\n *\n * This method is called by the forms API to write to the view when programmatic\n * changes from model to view are requested.\n *\n * @usageNotes\n * ### Write a value to the element\n *\n * The following example writes a value to the native DOM element.\n *\n * ```ts\n * writeValue(value: any): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'value', value);\n * }\n * ```\n *\n * @param obj The new value for the element\n */\n writeValue(obj: any): void;\n\n /**\n * @description\n * Registers a callback function that is called when the control's value\n * changes in the UI.\n *\n * This method is called by the forms API on initialization to update the form\n * model when values propagate from the view to the model.\n *\n * When implementing the `registerOnChange` method in your own value accessor,\n * save the given function so your class calls it at the appropriate time.\n *\n * @usageNotes\n * ### Store the change function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnChange(fn: (_: any) => void): void {\n * this._onChange = fn;\n * }\n * ```\n *\n * When the value changes in the UI, call the registered\n * function to allow the forms API to update itself:\n *\n * ```ts\n * host: {\n * (change): '_onChange($event.target.value)'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnChange(fn: any): void;\n\n /**\n * @description\n * Registers a callback function is called by the forms API on initialization\n * to update the form model on blur.\n *\n * When implementing `registerOnTouched` in your own value accessor, save the given\n * function so your class calls it when the control should be considered\n * blurred or \"touched\".\n *\n * @usageNotes\n * ### Store the callback function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnTouched(fn: any): void {\n * this._onTouched = fn;\n * }\n * ```\n *\n * On blur (or equivalent), your class should call the registered function to allow\n * the forms API to update itself:\n *\n * ```ts\n * host: {\n * '(blur)': '_onTouched()'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnTouched(fn: any): void;\n\n /**\n * @description\n * Function that is called by the forms API when the control status changes to\n * or from 'DISABLED'. Depending on the status, it enables or disables the\n * appropriate DOM element.\n *\n * @usageNotes\n * The following is an example of writing the disabled property to a native DOM element:\n *\n * ```ts\n * setDisabledState(isDisabled: boolean): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n * }\n * ```\n *\n * @param isDisabled The disabled status to set on the element\n */\n setDisabledState?(isDisabled: boolean): void;\n}\n\n/**\n * Used to provide a `ControlValueAccessor` for form controls.\n *\n * See `DefaultValueAccessor` for how to implement one.\n *\n * @publicApi\n */\nexport const NG_VALUE_ACCESSOR = new InjectionToken<ControlValueAccessor>('NgValueAccessor');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const CHECKBOX_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlValueAccessor),\n multi: true,\n};\n\n/**\n * @description\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\n * element.\n *\n * @usageNotes\n *\n * ### Using a checkbox with a reactive form.\n *\n * The following example shows how to use a checkbox with a reactive form.\n *\n * ```ts\n * const rememberLoginControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"checkbox\" [formControl]=\"rememberLoginControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: {'(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()'},\n providers: [CHECKBOX_VALUE_ACCESSOR]\n})\nexport class CheckboxControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"checked\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Inject, InjectionToken, Optional, Renderer2, forwardRef} from '@angular/core';\nimport {ɵgetDOM as getDOM} from '@angular/platform-browser';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const DEFAULT_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DefaultValueAccessor),\n multi: true\n};\n\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\nfunction _isAndroid(): boolean {\n const userAgent = getDOM() ? getDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n\n/**\n * @description\n * Provide this token to control if form directives buffer IME input until\n * the \"compositionend\" event occurs.\n * @publicApi\n */\nexport const COMPOSITION_BUFFER_MODE = new InjectionToken<boolean>('CompositionEventMode');\n\n/**\n * @description\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using the default value accessor\n *\n * The following example shows how to use an input element that activates the default value accessor\n * (in this case, a text field).\n *\n * ```ts\n * const firstNameControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"text\" [formControl]=\"firstNameControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n // TODO: vsavkin replace the above selector with the one below it once\n // https://github.com/angular/angular/issues/3011 is implemented\n // selector: '[ngModel],[formControl],[formControlName]',\n host: {\n '(input)': '$any(this)._handleInput($event.target.value)',\n '(blur)': 'onTouched()',\n '(compositionstart)': '$any(this)._compositionStart()',\n '(compositionend)': '$any(this)._compositionEnd($event.target.value)'\n },\n providers: [DEFAULT_VALUE_ACCESSOR]\n})\nexport class DefaultValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when an input event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /** Whether the user is creating a composition string (IME events). */\n private _composing = false;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n @Optional() @Inject(COMPOSITION_BUFFER_MODE) private _compositionMode: boolean) {\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _handleInput(value: any): void {\n if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n this.onChange(value);\n }\n }\n\n /** @internal */\n _compositionStart(): void { this._composing = true; }\n\n /** @internal */\n _compositionEnd(value: any): void {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControl} from '../model';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport function normalizeValidator(validator: ValidatorFn | Validator): ValidatorFn {\n if ((<Validator>validator).validate) {\n return (c: AbstractControl) => (<Validator>validator).validate(c);\n } else {\n return <ValidatorFn>validator;\n }\n}\n\nexport function normalizeAsyncValidator(validator: AsyncValidatorFn | AsyncValidator):\n AsyncValidatorFn {\n if ((<AsyncValidator>validator).validate) {\n return (c: AbstractControl) => (<AsyncValidator>validator).validate(c);\n } else {\n return <AsyncValidatorFn>validator;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const NUMBER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a number value and listening to number input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a number input with a reactive form.\n *\n * The following example shows how to use a number input with a reactive form.\n *\n * ```ts\n * const totalCountControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"number\" [formControl]=\"totalCountControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [NUMBER_VALUE_ACCESSOR]\n})\nexport class NumberValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: number): void {\n // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nfunction unimplemented(): any {\n throw new Error('unimplemented');\n}\n\n/**\n * @description\n * A base class that all control `FormControl`-based directives extend. It binds a `FormControl`\n * object to a DOM element.\n *\n * @publicApi\n */\nexport abstract class NgControl extends AbstractControlDirective {\n /**\n * @description\n * The parent form for the control.\n *\n * @internal\n */\n _parent: ControlContainer|null = null;\n\n /**\n * @description\n * The name for the control\n */\n name: string|null = null;\n\n /**\n * @description\n * The value accessor for the control\n */\n valueAccessor: ControlValueAccessor|null = null;\n\n /**\n * @description\n * The uncomposed array of synchronous validators for the control\n *\n * @internal\n */\n _rawValidators: Array<Validator|ValidatorFn> = [];\n\n /**\n * @description\n * The uncomposed array of async validators for the control\n *\n * @internal\n */\n _rawAsyncValidators: Array<AsyncValidator|AsyncValidatorFn> = [];\n\n /**\n * @description\n * The registered synchronous validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get validator(): ValidatorFn|null { return <ValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The registered async validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get asyncValidator(): AsyncValidatorFn|null { return <AsyncValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The callback method to update the model from the view when requested\n *\n * @param newValue The new value for the view\n */\n abstract viewToModelUpdate(newValue: any): void;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Injectable, Injector, Input, OnDestroy, OnInit, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\n\nexport const RADIO_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioControlValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * Class used by Angular to track radio buttons. For internal use only.\n */\n@Injectable()\nexport class RadioControlRegistry {\n private _accessors: any[] = [];\n\n /**\n * @description\n * Adds a control to the internal registry. For internal use only.\n */\n add(control: NgControl, accessor: RadioControlValueAccessor) {\n this._accessors.push([control, accessor]);\n }\n\n /**\n * @description\n * Removes a control from the internal registry. For internal use only.\n */\n remove(accessor: RadioControlValueAccessor) {\n for (let i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n }\n\n /**\n * @description\n * Selects a radio button. For internal use only.\n */\n select(accessor: RadioControlValueAccessor) {\n this._accessors.forEach((c) => {\n if (this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n }\n\n private _isSameGroup(\n controlPair: [NgControl, RadioControlValueAccessor],\n accessor: RadioControlValueAccessor): boolean {\n if (!controlPair[0].control) return false;\n return controlPair[0]._parent === accessor._control._parent &&\n controlPair[1].name === accessor.name;\n }\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing radio control values and listening to radio control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using radio buttons with reactive form directives\n *\n * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in\n * a reactive form, radio buttons in the same group should have the same `formControlName`.\n * Providing a `name` attribute is optional.\n *\n * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n host: {'(change)': 'onChange()', '(blur)': 'onTouched()'},\n providers: [RADIO_VALUE_ACCESSOR]\n})\nexport class RadioControlValueAccessor implements ControlValueAccessor,\n OnDestroy, OnInit {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _state !: boolean;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _control !: NgControl;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _fn !: Function;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = () => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the name of the radio input element.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input() formControlName !: string;\n\n /**\n * @description\n * Tracks the value of the radio input element\n */\n @Input() value: any;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n private _registry: RadioControlRegistry, private _injector: Injector) {}\n\n /**\n * @description\n * A lifecycle method called when the directive is initialized. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnInit(): void {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnDestroy(): void { this._registry.remove(this); }\n\n /**\n * @description\n * Sets the \"checked\" property value on the radio input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._state = value === this.value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void {\n this._fn = fn;\n this.onChange = () => {\n fn(this.value);\n this._registry.select(this);\n };\n }\n\n /**\n * Sets the \"value\" on the radio input element and unchecks it.\n *\n * @param value\n */\n fireUncheck(value: any): void { this.writeValue(value); }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n private _checkName(): void {\n if (this.name && this.formControlName && this.name !== this.formControlName) {\n this._throwNameError();\n }\n if (!this.name && this.formControlName) this.name = this.formControlName;\n }\n\n private _throwNameError(): void {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, StaticProvider, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const RANGE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a range value and listening to range input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a range input with a reactive form\n *\n * The following example shows how to use a range input with a reactive form.\n *\n * ```ts\n * const ageControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"range\" [formControl]=\"ageControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [RANGE_VALUE_ACCESSOR]\n})\nexport class RangeValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the range input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const FormErrorExamples = {\n formControlName: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });`,\n\n formGroupName: `\n <div [formGroup]=\"myGroup\">\n <div formGroupName=\"person\">\n <input formControlName=\"firstName\">\n </div>\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });`,\n\n formArrayName: `\n <div [formGroup]=\"myGroup\">\n <div formArrayName=\"cities\">\n <div *ngFor=\"let city of cityArray.controls; index as i\">\n <input [formControlName]=\"i\">\n </div>\n </div>\n </div>\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl('SF')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });`,\n\n ngModelGroup: `\n <form>\n <div ngModelGroup=\"person\">\n <input [(ngModel)]=\"person.name\" name=\"firstName\">\n </div>\n </form>`,\n\n ngModelWithFormGroup: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n `\n};\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class ReactiveErrors {\n static controlParentException(): void {\n throw new Error(\n `formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static ngModelGroupException(): void {\n throw new Error(\n `formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n ${Examples.formGroupName}\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n ${Examples.ngModelGroup}`);\n }\n static missingFormException(): void {\n throw new Error(`formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static groupParentException(): void {\n throw new Error(\n `formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formGroupName}`);\n }\n\n static arrayParentException(): void {\n throw new Error(\n `formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formArrayName}`);\n }\n\n static disabledAttrWarning(): void {\n console.warn(`\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n \n Example: \n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n `);\n }\n\n static ngModelWarning(directiveName: string): void {\n console.warn(`\n It looks like you're using ngModel on the same form field as ${directiveName}. \n Support for using the ngModel input property and ngModelChange event with \n reactive form directives has been deprecated in Angular v6 and will be removed \n in Angular v7.\n \n For more information on this, see our API docs here:\n https://angular.io/api/forms/${directiveName === 'formControl' ? 'FormControlDirective' \n : 'FormControlName'}#use-with-ngmodel\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string | null, value: any): string {\n if (id == null) return `${value}`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing select control values and listening to select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using select controls in a reactive form\n *\n * The following examples show how to use a select control in a reactive form.\n *\n * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Using select controls in a template-driven form\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * {@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * ### Customizing option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * ```ts\n * const selectedCountriesControl = new FormControl();\n * ```\n *\n * ```\n * <select [compareWith]=\"compareFn\" [formControl]=\"selectedCountriesControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{country.name}}\n * </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n * return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * **Note:** We listen to the 'change' event because 'input' events aren't fired\n * for selects in Firefox and IE:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n host: {'(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()'},\n providers: [SELECT_VALUE_ACCESSOR]\n})\nexport class SelectControlValueAccessor implements ControlValueAccessor {\n value: any;\n /** @internal */\n _optionMap: Map<string, any> = new Map<string, any>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element. The \"selectedIndex\"\n * property is also set if an ID is provided on the option element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this.value = value;\n const id: string|null = this._getOptionId(value);\n if (id == null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n }\n const valueString = _buildValueString(id, value);\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (valueString: string) => {\n this.value = this._getOptionValue(valueString);\n fn(this.value);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(): string { return (this._idCounter++).toString(); }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id), value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectOption implements OnDestroy {\n /**\n * @description\n * ID of the option element\n */\n // TODO(issue/24571): remove '!'.\n id !: string;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectControlValueAccessor) {\n if (this._select) this.id = this._select._registerOption();\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n this._setElementValue(value);\n if (this._select) this._select.writeValue(this._select.value);\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_MULTIPLE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectMultipleControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string, value: any): string {\n if (id == null) return `${value}`;\n if (typeof value === 'string') value = `'${value}'`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/** Mock interface for HTML Options */\ninterface HTMLOption {\n value: string;\n selected: boolean;\n}\n\n/** Mock interface for HTMLCollection */\nabstract class HTMLCollection {\n // TODO(issue/24571): remove '!'.\n length !: number;\n abstract item(_: number): HTMLOption;\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n * \n * @see `SelectControlValueAccessor`\n *\n * @usageNotes\n * \n * ### Using a multi-select control\n * \n * The follow example shows you how to use a multi-select control with a reactive form.\n * \n * ```ts\n * const countryControl = new FormControl();\n * ```\n *\n * ```\n * <select multiple name=\"countries\" [formControl]=\"countryControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{ country.name }}\n * </option>\n * </select>\n * ```\n * \n * ### Customizing option selection\n * \n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * See the `SelectControlValueAccessor` for usage.\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n host: {'(change)': 'onChange($event.target)', '(blur)': 'onTouched()'},\n providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]\n})\nexport class SelectMultipleControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The current value\n */\n value: any;\n\n /** @internal */\n _optionMap: Map<string, NgSelectMultipleOption> = new Map<string, NgSelectMultipleOption>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * @description\n * Sets the \"value\" property on one or of more\n * of the select's options.\n *\n * @param value The value\n */\n writeValue(value: any): void {\n this.value = value;\n let optionSelectedStateSetter: (opt: NgSelectMultipleOption, o: any) => void;\n if (Array.isArray(value)) {\n // convert values to ids\n const ids = value.map((v) => this._getOptionId(v));\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(ids.indexOf(o.toString()) > -1); };\n } else {\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(false); };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes\n * and writes an array of the selected options.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (_: any) => {\n const selected: Array<any> = [];\n if (_.hasOwnProperty('selectedOptions')) {\n const options: HTMLCollection = _.selectedOptions;\n for (let i = 0; i < options.length; i++) {\n const opt: any = options.item(i);\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n // Degrade on IE\n else {\n const options: HTMLCollection = <HTMLCollection>_.options;\n for (let i = 0; i < options.length; i++) {\n const opt: HTMLOption = options.item(i);\n if (opt.selected) {\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n this.value = selected;\n fn(selected);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(value: NgSelectMultipleOption): string {\n const id: string = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id) !._value, value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) !._value : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectMultipleControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectMultipleOption implements OnDestroy {\n // TODO(issue/24571): remove '!'.\n id !: string;\n /** @internal */\n _value: any;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectMultipleControlValueAccessor) {\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n } else {\n this._setElementValue(value);\n }\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /** @internal */\n _setSelected(selected: boolean) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {isDevMode, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {FormArray, FormControl, FormGroup} from '../model';\nimport {Validators} from '../validators';\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {CheckboxControlValueAccessor} from './checkbox_value_accessor';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {DefaultValueAccessor} from './default_value_accessor';\nimport {NgControl} from './ng_control';\nimport {normalizeAsyncValidator, normalizeValidator} from './normalize_validator';\nimport {NumberValueAccessor} from './number_value_accessor';\nimport {RadioControlValueAccessor} from './radio_control_value_accessor';\nimport {RangeValueAccessor} from './range_value_accessor';\nimport {FormArrayName} from './reactive_directives/form_group_name';\nimport {ReactiveErrors} from './reactive_errors';\nimport {SelectControlValueAccessor} from './select_control_value_accessor';\nimport {SelectMultipleControlValueAccessor} from './select_multiple_control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\n\nexport function controlPath(name: string, parent: ControlContainer): string[] {\n return [...parent.path !, name];\n}\n\nexport function setUpControl(control: FormControl, dir: NgControl): void {\n if (!control) _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor) _throwError(dir, 'No value accessor for form control with');\n\n control.validator = Validators.compose([control.validator !, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator !, dir.asyncValidator]);\n dir.valueAccessor !.writeValue(control.value);\n\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n\n setUpBlurPipeline(control, dir);\n\n if (dir.valueAccessor !.setDisabledState) {\n control.registerOnDisabledChange(\n (isDisabled: boolean) => { dir.valueAccessor !.setDisabledState !(isDisabled); });\n }\n\n // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n dir._rawValidators.forEach((validator: Validator | ValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n\n dir._rawAsyncValidators.forEach((validator: AsyncValidator | AsyncValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n}\n\nexport function cleanUpControl(control: FormControl, dir: NgControl) {\n dir.valueAccessor !.registerOnChange(() => _noControlError(dir));\n dir.valueAccessor !.registerOnTouched(() => _noControlError(dir));\n\n dir._rawValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n dir._rawAsyncValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n if (control) control._clearChangeFns();\n}\n\nfunction setUpViewChangePipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnChange((newValue: any) => {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n\n if (control.updateOn === 'change') updateControl(control, dir);\n });\n}\n\nfunction setUpBlurPipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnTouched(() => {\n control._pendingTouched = true;\n\n if (control.updateOn === 'blur' && control._pendingChange) updateControl(control, dir);\n if (control.updateOn !== 'submit') control.markAsTouched();\n });\n}\n\nfunction updateControl(control: FormControl, dir: NgControl): void {\n if (control._pendingDirty) control.markAsDirty();\n control.setValue(control._pendingValue, {emitModelToViewChange: false});\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n}\n\nfunction setUpModelChangePipeline(control: FormControl, dir: NgControl): void {\n control.registerOnChange((newValue: any, emitModelEvent: boolean) => {\n // control -> view\n dir.valueAccessor !.writeValue(newValue);\n\n // control -> ngModel\n if (emitModelEvent) dir.viewToModelUpdate(newValue);\n });\n}\n\nexport function setUpFormContainer(\n control: FormGroup | FormArray, dir: AbstractFormGroupDirective | FormArrayName) {\n if (control == null) _throwError(dir, 'Cannot find control with');\n control.validator = Validators.compose([control.validator, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n}\n\nfunction _noControlError(dir: NgControl) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\n\nfunction _throwError(dir: AbstractControlDirective, message: string): void {\n let messageEnd: string;\n if (dir.path !.length > 1) {\n messageEnd = `path: '${dir.path!.join(' -> ')}'`;\n } else if (dir.path ![0]) {\n messageEnd = `name: '${dir.path}'`;\n } else {\n messageEnd = 'unspecified name attribute';\n }\n throw new Error(`${message} ${messageEnd}`);\n}\n\nexport function composeValidators(validators: Array<Validator|Function>): ValidatorFn|null {\n return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n}\n\nexport function composeAsyncValidators(validators: Array<Validator|Function>): AsyncValidatorFn|\n null {\n return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n null;\n}\n\nexport function isPropertyUpdated(changes: {[key: string]: any}, viewModel: any): boolean {\n if (!changes.hasOwnProperty('model')) return false;\n const change = changes['model'];\n\n if (change.isFirstChange()) return true;\n return !looseIdentical(viewModel, change.currentValue);\n}\n\nconst BUILTIN_ACCESSORS = [\n CheckboxControlValueAccessor,\n RangeValueAccessor,\n NumberValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n];\n\nexport function isBuiltInAccessor(valueAccessor: ControlValueAccessor): boolean {\n return BUILTIN_ACCESSORS.some(a => valueAccessor.constructor === a);\n}\n\nexport function syncPendingControls(form: FormGroup, directives: NgControl[]): void {\n form._syncPendingControls();\n directives.forEach(dir => {\n const control = dir.control as FormControl;\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n}\n\n// TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented\nexport function selectValueAccessor(\n dir: NgControl, valueAccessors: ControlValueAccessor[]): ControlValueAccessor|null {\n if (!valueAccessors) return null;\n\n if (!Array.isArray(valueAccessors))\n _throwError(dir, 'Value accessor was not provided as an array for form control with');\n\n let defaultAccessor: ControlValueAccessor|undefined = undefined;\n let builtinAccessor: ControlValueAccessor|undefined = undefined;\n let customAccessor: ControlValueAccessor|undefined = undefined;\n\n valueAccessors.forEach((v: ControlValueAccessor) => {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n\n } else if (isBuiltInAccessor(v)) {\n if (builtinAccessor)\n _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n\n } else {\n if (customAccessor)\n _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n\n if (customAccessor) return customAccessor;\n if (builtinAccessor) return builtinAccessor;\n if (defaultAccessor) return defaultAccessor;\n\n _throwError(dir, 'No valid value accessor for form control with');\n return null;\n}\n\nexport function removeDir<T>(list: T[], el: T): void {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\n\n// TODO(kara): remove after deprecation period\nexport function _ngModelWarning(\n name: string, type: {_ngModelWarningSentOnce: boolean},\n instance: {_ngModelWarningSent: boolean}, warningConfig: string | null) {\n if (!isDevMode() || warningConfig === 'never') return;\n\n if (((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce) ||\n (warningConfig === 'always' && !instance._ngModelWarningSent)) {\n ReactiveErrors.ngModelWarning(name);\n type._ngModelWarningSentOnce = true;\n instance._ngModelWarningSent = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {OnDestroy, OnInit} from '@angular/core';\n\nimport {FormGroup} from '../model';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {composeAsyncValidators, composeValidators, controlPath} from './shared';\nimport {AsyncValidatorFn, ValidatorFn} from './validators';\n\n\n\n/**\n * @description\n * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.\n *\n * @publicApi\n */\nexport class AbstractFormGroupDirective extends ControlContainer implements OnInit, OnDestroy {\n /**\n * @description\n * The parent control for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _parent !: ControlContainer;\n\n /**\n * @description\n * An array of synchronous validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _validators !: any[];\n\n /**\n * @description\n * An array of async validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _asyncValidators !: any[];\n\n /**\n * @description\n * An internal callback method triggered on the instance after the inputs are set.\n * Registers the group with its parent group.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormGroup(this);\n }\n\n /**\n * @description\n * An internal callback method triggered before the instance is destroyed.\n * Removes the group from its parent group.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormGroup(this);\n }\n }\n\n /**\n * @description\n * The `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.formDirective !.getFormGroup(this); }\n\n /**\n * @description\n * The path to this group from the top-level directive.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): Form|null { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * The synchronous validators registered with this group.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * The async validators registered with this group.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n /** @internal */\n _checkParentType(): void {}\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Self} from '@angular/core';\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {NgControl} from './ng_control';\n\nexport class AbstractControlStatus {\n private _cd: AbstractControlDirective;\n\n constructor(cd: AbstractControlDirective) { this._cd = cd; }\n\n get ngClassUntouched(): boolean { return this._cd.control ? this._cd.control.untouched : false; }\n get ngClassTouched(): boolean { return this._cd.control ? this._cd.control.touched : false; }\n get ngClassPristine(): boolean { return this._cd.control ? this._cd.control.pristine : false; }\n get ngClassDirty(): boolean { return this._cd.control ? this._cd.control.dirty : false; }\n get ngClassValid(): boolean { return this._cd.control ? this._cd.control.valid : false; }\n get ngClassInvalid(): boolean { return this._cd.control ? this._cd.control.invalid : false; }\n get ngClassPending(): boolean { return this._cd.control ? this._cd.control.pending : false; }\n}\n\nexport const ngControlStatusHost = {\n '[class.ng-untouched]': 'ngClassUntouched',\n '[class.ng-touched]': 'ngClassTouched',\n '[class.ng-pristine]': 'ngClassPristine',\n '[class.ng-dirty]': 'ngClassDirty',\n '[class.ng-valid]': 'ngClassValid',\n '[class.ng-invalid]': 'ngClassInvalid',\n '[class.ng-pending]': 'ngClassPending',\n};\n\n/**\n * @description\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status.\n *\n * @usageNotes\n *\n * ### CSS classes applied\n *\n * The following classes are applied as the properties become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost})\nexport class NgControlStatus extends AbstractControlStatus {\n constructor(@Self() cd: NgControl) { super(cd); }\n}\n\n/**\n * @description\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n * \n * @see `NgControlStatus`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n host: ngControlStatusHost\n})\nexport class NgControlStatusGroup extends AbstractControlStatus {\n constructor(@Self() cd: ControlContainer) { super(cd); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {EventEmitter} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {composeAsyncValidators, composeValidators} from './directives/shared';\nimport {AsyncValidatorFn, ValidationErrors, ValidatorFn} from './directives/validators';\nimport {toObservable} from './validators';\n\n/**\n * Reports that a FormControl is valid, meaning that no errors exist in the input value.\n *\n * @see `status`\n */\nexport const VALID = 'VALID';\n\n/**\n * Reports that a FormControl is invalid, meaning that an error exists in the input value.\n *\n * @see `status`\n */\nexport const INVALID = 'INVALID';\n\n/**\n * Reports that a FormControl is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value.\n *\n * @see `markAsPending`\n * @see `status`\n */\nexport const PENDING = 'PENDING';\n\n/**\n * Reports that a FormControl is disabled, meaning that the control is exempt from ancestor\n * calculations of validity or value.\n *\n * @see `markAsDisabled`\n * @see `status`\n */\nexport const DISABLED = 'DISABLED';\n\nfunction _find(control: AbstractControl, path: Array<string|number>| string, delimiter: string) {\n if (path == null) return null;\n\n if (!(path instanceof Array)) {\n path = (<string>path).split(delimiter);\n }\n if (path instanceof Array && (path.length === 0)) return null;\n\n return (<Array<string|number>>path).reduce((v: AbstractControl, name) => {\n if (v instanceof FormGroup) {\n return v.controls.hasOwnProperty(name as string) ? v.controls[name] : null;\n }\n\n if (v instanceof FormArray) {\n return v.at(<number>name) || null;\n }\n\n return null;\n }, control);\n}\n\nfunction coerceToValidator(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): ValidatorFn|\n null {\n const validator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).validators :\n validatorOrOpts) as ValidatorFn |\n ValidatorFn[] | null;\n\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\n\nfunction coerceToAsyncValidator(\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null, validatorOrOpts?: ValidatorFn |\n ValidatorFn[] | AbstractControlOptions | null): AsyncValidatorFn|null {\n const origAsyncValidator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).asyncValidators :\n asyncValidator) as AsyncValidatorFn |\n AsyncValidatorFn | null;\n\n return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :\n origAsyncValidator || null;\n}\n\nexport type FormHooks = 'change' | 'blur' | 'submit';\n\n/**\n * Interface for options provided to an `AbstractControl`.\n *\n * @publicApi\n */\nexport interface AbstractControlOptions {\n /**\n * @description\n * The list of validators applied to a control.\n */\n validators?: ValidatorFn|ValidatorFn[]|null;\n /**\n * @description\n * The list of async validators applied to control.\n */\n asyncValidators?: AsyncValidatorFn|AsyncValidatorFn[]|null;\n /**\n * @description\n * The event name for control to update upon.\n */\n updateOn?: 'change'|'blur'|'submit';\n}\n\n\nfunction isOptionsObj(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): boolean {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&\n typeof validatorOrOpts === 'object';\n}\n\n\n/**\n * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * @see [Forms Guide](/guide/forms)\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n * @see [Dynamic Forms Guide](/guide/dynamic-form)\n *\n * @publicApi\n */\nexport abstract class AbstractControl {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingDirty !: boolean;\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingTouched !: boolean;\n\n /** @internal */\n _onCollectionChange = () => {};\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _updateOn !: FormHooks;\n\n // TODO(issue/24571): remove '!'.\n private _parent !: FormGroup | FormArray;\n private _asyncValidationSubscription: any;\n\n /**\n * The current value of the control.\n *\n * * For a `FormControl`, the current value.\n * * For a `FormGroup`, the values of enabled controls as an object\n * with a key-value pair for each member of the group.\n * * For a `FormArray`, the values of enabled controls as an array.\n *\n */\n public readonly value: any;\n\n /**\n * Initialize the AbstractControl instance.\n *\n * @param validator The function that determines the synchronous validity of this control.\n * @param asyncValidator The function that determines the asynchronous validity of this\n * control.\n */\n constructor(public validator: ValidatorFn|null, public asyncValidator: AsyncValidatorFn|null) {}\n\n /**\n * The parent control.\n */\n get parent(): FormGroup|FormArray { return this._parent; }\n\n /**\n * The validation status of the control. There are four possible\n * validation status values:\n *\n * * **VALID**: This control has passed all validation checks.\n * * **INVALID**: This control has failed at least one validation check.\n * * **PENDING**: This control is in the midst of conducting a validation check.\n * * **DISABLED**: This control is exempt from validation checks.\n *\n * These status values are mutually exclusive, so a control cannot be\n * both valid AND invalid or invalid AND disabled.\n */\n // TODO(issue/24571): remove '!'.\n public readonly status !: string;\n\n /**\n * A control is `valid` when its `status` is `VALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control has passed all of its validation tests,\n * false otherwise.\n */\n get valid(): boolean { return this.status === VALID; }\n\n /**\n * A control is `invalid` when its `status` is `INVALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control has failed one or more of its validation checks,\n * false otherwise.\n */\n get invalid(): boolean { return this.status === INVALID; }\n\n /**\n * A control is `pending` when its `status` is `PENDING`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control is in the process of conducting a validation check,\n * false otherwise.\n */\n get pending(): boolean { return this.status == PENDING; }\n\n /**\n * A control is `disabled` when its `status` is `DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control is disabled, false otherwise.\n */\n get disabled(): boolean { return this.status === DISABLED; }\n\n /**\n * A control is `enabled` as long as its `status` is not `DISABLED`.\n *\n * @returns True if the control has any status other than 'DISABLED',\n * false if the status is 'DISABLED'.\n *\n * @see {@link AbstractControl.status}\n *\n */\n get enabled(): boolean { return this.status !== DISABLED; }\n\n /**\n * An object containing any errors generated by failing validation,\n * or null if there are no errors.\n */\n // TODO(issue/24571): remove '!'.\n public readonly errors !: ValidationErrors | null;\n\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * @returns True if the user has not yet changed the value in the UI; compare `dirty`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n public readonly pristine: boolean = true;\n\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * @returns True if the user has changed the value of this control in the UI; compare `pristine`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n get dirty(): boolean { return !this.pristine; }\n\n /**\n * True if the control is marked as `touched`.\n *\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n */\n public readonly touched: boolean = false;\n\n /**\n * True if the control has not been marked as touched\n *\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n */\n get untouched(): boolean { return !this.touched; }\n\n /**\n * A multicasting observable that emits an event every time the value of the control changes, in\n * the UI or programmatically.\n */\n // TODO(issue/24571): remove '!'.\n public readonly valueChanges !: Observable<any>;\n\n /**\n * A multicasting observable that emits an event every time the validation `status` of the control\n * recalculates.\n *\n * @see {@link AbstractControl.status}\n *\n */\n // TODO(issue/24571): remove '!'.\n public readonly statusChanges !: Observable<any>;\n\n /**\n * Reports the update strategy of the `AbstractControl` (meaning\n * the event on which the control updates itself).\n * Possible values: `'change'` | `'blur'` | `'submit'`\n * Default value: `'change'`\n */\n get updateOn(): FormHooks {\n return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');\n }\n\n /**\n * Sets the synchronous validators that are active on this control. Calling\n * this overwrites any existing sync validators.\n */\n setValidators(newValidator: ValidatorFn|ValidatorFn[]|null): void {\n this.validator = coerceToValidator(newValidator);\n }\n\n /**\n * Sets the async validators that are active on this control. Calling this\n * overwrites any existing async validators.\n */\n setAsyncValidators(newValidator: AsyncValidatorFn|AsyncValidatorFn[]|null): void {\n this.asyncValidator = coerceToAsyncValidator(newValidator);\n }\n\n /**\n * Empties out the sync validator list.\n */\n clearValidators(): void { this.validator = null; }\n\n /**\n * Empties out the async validator list.\n */\n clearAsyncValidators(): void { this.asyncValidator = null; }\n\n /**\n * Marks the control as `touched`. A control is touched by focus and\n * blur events that do not change the value.\n *\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = true;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsTouched(opts);\n }\n }\n\n /**\n * Marks the control as `untouched`.\n *\n * If the control has any children, also marks all children as `untouched`\n * and recalculates the `touched` status of all parent controls.\n *\n * @see `markAsTouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after the marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsUntouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = false;\n this._pendingTouched = false;\n\n this._forEachChild(\n (control: AbstractControl) => { control.markAsUntouched({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /**\n * Marks the control as `dirty`. A control becomes dirty when\n * the control's value is changed through the UI; compare `markAsTouched`.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsDirty(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = false;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsDirty(opts);\n }\n }\n\n /**\n * Marks the control as `pristine`.\n *\n * If the control has any children, marks all children as `pristine`,\n * and recalculates the `pristine` status of all parent\n * controls.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n *\n * @param opts Configuration options that determine how the control emits events after\n * marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n */\n markAsPristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = true;\n this._pendingDirty = false;\n\n this._forEachChild((control: AbstractControl) => { control.markAsPristine({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /**\n * Marks the control as `pending`.\n *\n * A control is pending while the control performs async validation.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates changes and\n * emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), the `statusChanges`\n * observable emits an event with the latest status the control is marked pending.\n * When false, no events are emitted.\n *\n */\n markAsPending(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = PENDING;\n\n if (opts.emitEvent !== false) {\n (this.statusChanges as EventEmitter<any>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsPending(opts);\n }\n }\n\n /**\n * Disables the control. This means the control is exempt from validation checks and\n * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n *\n * If the control has children, all children are also disabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates\n * changes and emits events after the control is disabled.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is disabled.\n * When false, no events are emitted.\n */\n disable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = DISABLED;\n (this as{errors: ValidationErrors | null}).errors = null;\n this._forEachChild(\n (control: AbstractControl) => { control.disable({...opts, onlySelf: true}); });\n this._updateValue();\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(true));\n }\n\n /**\n * Enables the control. This means the control is included in validation checks and\n * the aggregate value of its parent. Its status recalculates based on its value and\n * its validators.\n *\n * By default, if the control has children, all children are enabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configure options that control how the control propagates changes and\n * emits events when marked as untouched\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is enabled.\n * When false, no events are emitted.\n */\n enable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = VALID;\n this._forEachChild(\n (control: AbstractControl) => { control.enable({...opts, onlySelf: true}); });\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(false));\n }\n\n private _updateAncestors(opts: {onlySelf?: boolean, emitEvent?: boolean}) {\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n this._parent._updatePristine();\n this._parent._updateTouched();\n }\n }\n\n /**\n * @param parent Sets the parent of the control\n */\n setParent(parent: FormGroup|FormArray): void { this._parent = parent; }\n\n /**\n * Sets the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract setValue(value: any, options?: Object): void;\n\n /**\n * Patches the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract patchValue(value: any, options?: Object): void;\n\n /**\n * Resets the control. Abstract method (implemented in sub-classes).\n */\n abstract reset(value?: any, options?: Object): void;\n\n /**\n * Recalculates the value and validation status of the control.\n *\n * By default, it also updates the value and validity of its ancestors.\n *\n * @param opts Configuration options determine how the control propagates changes and emits events\n * after updates and validity checks are applied.\n * * `onlySelf`: When true, only update this control. When false or not supplied,\n * update all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is updated.\n * When false, no events are emitted.\n */\n updateValueAndValidity(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._setInitialStatus();\n this._updateValue();\n\n if (this.enabled) {\n this._cancelExistingSubscription();\n (this as{errors: ValidationErrors | null}).errors = this._runValidator();\n (this as{status: string}).status = this._calculateStatus();\n\n if (this.status === VALID || this.status === PENDING) {\n this._runAsyncValidator(opts.emitEvent);\n }\n }\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n }\n }\n\n /** @internal */\n _updateTreeValidity(opts: {emitEvent?: boolean} = {emitEvent: true}) {\n this._forEachChild((ctrl: AbstractControl) => ctrl._updateTreeValidity(opts));\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n }\n\n private _setInitialStatus() {\n (this as{status: string}).status = this._allControlsDisabled() ? DISABLED : VALID;\n }\n\n private _runValidator(): ValidationErrors|null {\n return this.validator ? this.validator(this) : null;\n }\n\n private _runAsyncValidator(emitEvent?: boolean): void {\n if (this.asyncValidator) {\n (this as{status: string}).status = PENDING;\n const obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription =\n obs.subscribe((errors: ValidationErrors | null) => this.setErrors(errors, {emitEvent}));\n }\n }\n\n private _cancelExistingSubscription(): void {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n }\n }\n\n /**\n * Sets errors on a form control when running validations manually, rather than automatically.\n *\n * Calling `setErrors` also updates the validity of the parent control.\n *\n * @usageNotes\n * ### Manually set the errors for a control\n *\n * ```\n * const login = new FormControl('someLogin');\n * login.setErrors({\n * notUnique: true\n * });\n *\n * expect(login.valid).toEqual(false);\n * expect(login.errors).toEqual({ notUnique: true });\n *\n * login.setValue('someOtherLogin');\n *\n * expect(login.valid).toEqual(true);\n * ```\n */\n setErrors(errors: ValidationErrors|null, opts: {emitEvent?: boolean} = {}): void {\n (this as{errors: ValidationErrors | null}).errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false);\n }\n\n /**\n * Retrieves a child control given the control's name or path.\n *\n * @param path A dot-delimited string or array of string/number values that define the path to the\n * control.\n *\n * @usageNotes\n * ### Retrieve a nested control\n *\n * For example, to get a `name` control nested within a `person` sub-group:\n *\n * * `this.form.get('person.name');`\n *\n * -OR-\n *\n * * `this.form.get(['person', 'name']);`\n */\n get(path: Array<string|number>|string): AbstractControl|null { return _find(this, path, '.'); }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n const control = path ? this.get(path) : this;\n return control && control.errors ? control.errors[errorCode] : null;\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return !!this.getError(errorCode, path);\n }\n\n /**\n * Retrieves the top-level ancestor of this control.\n */\n get root(): AbstractControl {\n let x: AbstractControl = this;\n\n while (x._parent) {\n x = x._parent;\n }\n\n return x;\n }\n\n /** @internal */\n _updateControlsErrors(emitEvent: boolean): void {\n (this as{status: string}).status = this._calculateStatus();\n\n if (emitEvent) {\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent);\n }\n }\n\n /** @internal */\n _initObservables() {\n (this as{valueChanges: Observable<any>}).valueChanges = new EventEmitter();\n (this as{statusChanges: Observable<any>}).statusChanges = new EventEmitter();\n }\n\n\n private _calculateStatus(): string {\n if (this._allControlsDisabled()) return DISABLED;\n if (this.errors) return INVALID;\n if (this._anyControlsHaveStatus(PENDING)) return PENDING;\n if (this._anyControlsHaveStatus(INVALID)) return INVALID;\n return VALID;\n }\n\n /** @internal */\n abstract _updateValue(): void;\n\n /** @internal */\n abstract _forEachChild(cb: Function): void;\n\n /** @internal */\n abstract _anyControls(condition: Function): boolean;\n\n /** @internal */\n abstract _allControlsDisabled(): boolean;\n\n /** @internal */\n abstract _syncPendingControls(): boolean;\n\n /** @internal */\n _anyControlsHaveStatus(status: string): boolean {\n return this._anyControls((control: AbstractControl) => control.status === status);\n }\n\n /** @internal */\n _anyControlsDirty(): boolean {\n return this._anyControls((control: AbstractControl) => control.dirty);\n }\n\n /** @internal */\n _anyControlsTouched(): boolean {\n return this._anyControls((control: AbstractControl) => control.touched);\n }\n\n /** @internal */\n _updatePristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = !this._anyControlsDirty();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /** @internal */\n _updateTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = this._anyControlsTouched();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /** @internal */\n _onDisabledChange: Function[] = [];\n\n /** @internal */\n _isBoxedValue(formState: any): boolean {\n return typeof formState === 'object' && formState !== null &&\n Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n }\n\n /** @internal */\n _registerOnCollectionChange(fn: () => void): void { this._onCollectionChange = fn; }\n\n /** @internal */\n _setUpdateStrategy(opts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null): void {\n if (isOptionsObj(opts) && (opts as AbstractControlOptions).updateOn != null) {\n this._updateOn = (opts as AbstractControlOptions).updateOn !;\n }\n }\n}\n\n/**\n * Tracks the value and validation status of an individual form control.\n *\n * This is one of the three fundamental building blocks of Angular forms, along with\n * `FormGroup` and `FormArray`. It extends the `AbstractControl` class that\n * implements most of the base functionality for accessing the value, validation status,\n * user interactions and events.\n *\n * @see `AbstractControl`\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see [Usage Notes](#usage-notes)\n *\n * @usageNotes\n *\n * ### Initializing Form Controls\n *\n * Instantiate a `FormControl`, with an initial value.\n *\n * ```ts\n * const control = new FormControl('some value');\n * console.log(control.value); // 'some value'\n *```\n *\n * The following example initializes the control with a form state object. The `value`\n * and `disabled` keys are required in this case.\n *\n * ```ts\n * const control = new FormControl({ value: 'n/a', disabled: true });\n * console.log(control.value); // 'n/a'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * The following example initializes the control with a sync validator.\n *\n * ```ts\n * const control = new FormControl('', Validators.required);\n * console.log(control.value); // ''\n * console.log(control.status); // 'INVALID'\n * ```\n *\n * The following example initializes the control using an options object.\n *\n * ```ts\n * const control = new FormControl('', {\n * validators: Validators.required,\n * asyncValidators: myAsyncValidator\n * });\n * ```\n *\n * ### Configure the control to update on a blur event\n *\n * Set the `updateOn` option to `'blur'` to update on the blur `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'blur' });\n * ```\n *\n * ### Configure the control to update on a submit event\n *\n * Set the `updateOn` option to `'submit'` to update on a submit `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'submit' });\n * ```\n *\n * ### Reset the control back to an initial value\n *\n * You reset to a specific form state by passing through a standalone\n * value or a form state object that contains both a value and a disabled state\n * (these are the only two properties that cannot be calculated).\n *\n * ```ts\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n *\n * control.reset('Drew');\n *\n * console.log(control.value); // 'Drew'\n * ```\n *\n * ### Reset the control back to an initial value and disabled\n *\n * ```\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n * console.log(control.status); // 'VALID'\n *\n * control.reset({ value: 'Drew', disabled: true });\n *\n * console.log(control.value); // 'Drew'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * @publicApi\n */\nexport class FormControl extends AbstractControl {\n /** @internal */\n _onChange: Function[] = [];\n\n /** @internal */\n _pendingValue: any;\n\n /** @internal */\n _pendingChange: any;\n\n /**\n * Creates a new `FormControl` instance.\n *\n * @param formState Initializes the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n formState: any = null,\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._applyFormState(formState);\n this._setUpdateStrategy(validatorOrOpts);\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n this._initObservables();\n }\n\n /**\n * Sets a new value for the form control.\n *\n * @param value The new value for the control.\n * @param options Configuration options that determine how the control proopagates changes\n * and emits events when the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * * `emitModelToViewChange`: When true or not supplied (the default), each change triggers an\n * `onChange` event to\n * update the view.\n * * `emitViewToModelChange`: When true or not supplied (the default), each change triggers an\n * `ngModelChange`\n * event to update the model.\n *\n */\n setValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n (this as{value: any}).value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach(\n (changeFn) => changeFn(this.value, options.emitViewToModelChange !== false));\n }\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of a control.\n *\n * This function is functionally the same as {@link FormControl#setValue setValue} at this level.\n * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and\n * `FormArrays`, where it does behave differently.\n *\n * @see `setValue` for options\n */\n patchValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n this.setValue(value, options);\n }\n\n /**\n * Resets the form control, marking it `pristine` and `untouched`, and setting\n * the value to null.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n *\n */\n reset(formState: any = null, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n this._pendingChange = false;\n }\n\n /**\n * @internal\n */\n _updateValue() {}\n\n /**\n * @internal\n */\n _anyControls(condition: Function): boolean { return false; }\n\n /**\n * @internal\n */\n _allControlsDisabled(): boolean { return this.disabled; }\n\n /**\n * Register a listener for change events.\n *\n * @param fn The method that is called when the value changes\n */\n registerOnChange(fn: Function): void { this._onChange.push(fn); }\n\n /**\n * @internal\n */\n _clearChangeFns(): void {\n this._onChange = [];\n this._onDisabledChange = [];\n this._onCollectionChange = () => {};\n }\n\n /**\n * Register a listener for disabled events.\n *\n * @param fn The method that is called when the disabled status changes.\n */\n registerOnDisabledChange(fn: (isDisabled: boolean) => void): void {\n this._onDisabledChange.push(fn);\n }\n\n /**\n * @internal\n */\n _forEachChild(cb: Function): void {}\n\n /** @internal */\n _syncPendingControls(): boolean {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty) this.markAsDirty();\n if (this._pendingTouched) this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, {onlySelf: true, emitModelToViewChange: false});\n return true;\n }\n }\n return false;\n }\n\n private _applyFormState(formState: any) {\n if (this._isBoxedValue(formState)) {\n (this as{value: any}).value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({onlySelf: true, emitEvent: false}) :\n this.enable({onlySelf: true, emitEvent: false});\n } else {\n (this as{value: any}).value = this._pendingValue = formState;\n }\n }\n}\n\n/**\n * Tracks the value and validity state of a group of `FormControl` instances.\n *\n * A `FormGroup` aggregates the values of each child `FormControl` into one object,\n * with each control name as the key. It calculates its status by reducing the status values\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormArray`.\n *\n * When instantiating a `FormGroup`, pass in a collection of child controls as the first\n * argument. The key for each child registers the name for the control.\n *\n * @usageNotes\n *\n * ### Create a form group with 2 controls\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('Nancy', Validators.minLength(2)),\n * last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value); // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status); // 'VALID'\n * ```\n *\n * ### Create a form group with a group-level validator\n *\n * You include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('', Validators.minLength(2)),\n * passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n * return g.get('password').value === g.get('passwordConfirm').value\n * ? null : {'mismatch': true};\n * }\n * ```\n *\n * Like `FormControl` instances, you choose to pass in\n * validators and async validators as part of an options object.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('')\n * passwordConfirm: new FormControl('')\n * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });\n * ```\n *\n * ### Set the updateOn property for all controls in a form group\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * group level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormGroup({\n * one: new FormControl()\n * }, { updateOn: 'blur' });\n * ```\n *\n * @publicApi\n */\nexport class FormGroup extends AbstractControl {\n /**\n * Creates a new `FormGroup` instance.\n *\n * @param controls A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: {[key: string]: AbstractControl},\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Registers a control with the group's list of controls.\n *\n * This method does not update the value or validity of the control.\n * Use {@link FormGroup#addControl addControl} instead.\n *\n * @param name The control name to register in the collection\n * @param control Provides the control for the given name\n */\n registerControl(name: string, control: AbstractControl): AbstractControl {\n if (this.controls[name]) return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n }\n\n /**\n * Add a control to this group.\n *\n * This method also updates the value and validity of the control.\n *\n * @param name The control name to add to the collection\n * @param control Provides the control for the given name\n */\n addControl(name: string, control: AbstractControl): void {\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Remove a control from this group.\n *\n * @param name The control name to remove from the collection\n */\n removeControl(name: string): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Replace an existing control.\n *\n * @param name The control name to replace in the collection\n * @param control Provides the control for the given name\n */\n setControl(name: string, control: AbstractControl): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n if (control) this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Check whether there is an enabled control with the given name in the group.\n *\n * Reports false for disabled controls. If you'd like to check for existence in the group\n * only, use {@link AbstractControl#get get} instead.\n *\n * @param name The control name to check for existence in the collection\n *\n * @returns false for disabled controls, true otherwise.\n */\n contains(controlName: string): boolean {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n }\n\n /**\n * Sets the value of the `FormGroup`. It accepts an object that matches\n * the structure of the group, with control names as keys.\n *\n * @usageNotes\n * ### Set the complete value for the form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n *\n * console.log(form.value); // {first: null, last: null}\n *\n * form.setValue({first: 'Nancy', last: 'Drew'});\n * console.log(form.value); // {first: 'Nancy', last: 'Drew'}\n * ```\n *\n * @throws When strict checks fail, such as setting the value of a control\n * that doesn't exist or if you excluding the value of a control.\n *\n * @param value The new value for the control that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n */\n setValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n this._checkAllValuesPresent(value);\n Object.keys(value).forEach(name => {\n this._throwIfControlMissing(name);\n this.controls[name].setValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormGroup`. It accepts an object with control\n * names as keys, and does its best to match the values to the correct controls\n * in the group.\n *\n * It accepts both super-sets and sub-sets of the group without throwing an error.\n *\n * @usageNotes\n * ### Patch the value for a form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n * console.log(form.value); // {first: null, last: null}\n *\n * form.patchValue({first: 'Nancy'});\n * console.log(form.value); // {first: 'Nancy', last: null}\n * ```\n *\n * @param value The object that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes and\n * emits events after the value is patched.\n * * `onlySelf`: When true, each change only affects this control and not its parent. Default is\n * true.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n Object.keys(value).forEach(name => {\n if (this.controls[name]) {\n this.controls[name].patchValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormGroup`, marks all descendants are marked `pristine` and `untouched`, and\n * the value of all descendants to null.\n *\n * You reset to a specific form state by passing in a map of states\n * that matches the structure of your form, with control names as keys. The state\n * is a standalone value or a form state object with both a value and a disabled\n * status.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events when the group is reset.\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * @usageNotes\n *\n * ### Reset the form group values\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * console.log(form.value); // {first: 'first name', last: 'last name'}\n *\n * form.reset({ first: 'name', last: 'last name' });\n *\n * console.log(form.value); // {first: 'name', last: 'last name'}\n * ```\n *\n * ### Reset the form group values and disabled status\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * form.reset({\n * first: {value: 'name', disabled: true},\n * last: 'last'\n * });\n *\n * console.log(this.form.value); // {first: 'name', last: 'last name'}\n * console.log(this.form.get('first').status); // 'DISABLED'\n * ```\n */\n reset(value: any = {}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n control.reset(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the `FormGroup`, including any disabled controls.\n *\n * Retrieves all values regardless of disabled status.\n * The `value` property is the best way to get the value of the group, because\n * it excludes disabled controls in the `FormGroup`.\n */\n getRawValue(): any {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n acc[name] = control instanceof FormControl ? control.value : (<any>control).getRawValue();\n return acc;\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this._reduceChildren(false, (updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(name: string): void {\n if (!Object.keys(this.controls).length) {\n throw new Error(`\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.controls[name]) {\n throw new Error(`Cannot find form control with name: ${name}.`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: (v: any, k: string) => void): void {\n Object.keys(this.controls).forEach(k => cb(this.controls[k], k));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n });\n }\n\n /** @internal */\n _updateValue(): void { (this as{value: any}).value = this._reduceValue(); }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n let res = false;\n this._forEachChild((control: AbstractControl, name: string) => {\n res = res || (this.contains(name) && condition(control));\n });\n return res;\n }\n\n /** @internal */\n _reduceValue() {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n if (control.enabled || this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n }\n\n /** @internal */\n _reduceChildren(initValue: any, fn: Function) {\n let res = initValue;\n this._forEachChild(\n (control: AbstractControl, name: string) => { res = fn(res, control, name); });\n return res;\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const controlName of Object.keys(this.controls)) {\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n if (value[name] === undefined) {\n throw new Error(`Must supply a value for form control with name: '${name}'.`);\n }\n });\n }\n}\n\n/**\n * Tracks the value and validity state of an array of `FormControl`,\n * `FormGroup` or `FormArray` instances.\n *\n * A `FormArray` aggregates the values of each child `FormControl` into an array.\n * It calculates its status by reducing the status values of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormGroup`.\n *\n * @usageNotes\n *\n * ### Create an array of form controls\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy', Validators.minLength(2)),\n * new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value); // ['Nancy', 'Drew']\n * console.log(arr.status); // 'VALID'\n * ```\n *\n * ### Create a form array with array-level validators\n *\n * You include array-level validators and async validators. These come in handy\n * when you want to perform validation that considers the value of more than one child\n * control.\n *\n * The two types of validators are passed in separately as the second and third arg\n * respectively, or together as part of an options object.\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy'),\n * new FormControl('Drew')\n * ], {validators: myValidator, asyncValidators: myAsyncValidator});\n * ```\n *\n * ### Set the updateOn property for all controls in a form array\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * array level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl()\n * ], {updateOn: 'blur'});\n * ```\n *\n * ### Adding or removing controls from a form array\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that result in strange and unexpected behavior such\n * as broken change detection.\n *\n * @publicApi\n */\nexport class FormArray extends AbstractControl {\n /**\n * Creates a new `FormArray` instance.\n *\n * @param controls An array of child controls. Each child control is given an index\n * where it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: AbstractControl[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Get the `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to retrieve the control\n */\n at(index: number): AbstractControl { return this.controls[index]; }\n\n /**\n * Insert a new `AbstractControl` at the end of the array.\n *\n * @param control Form control to be inserted\n */\n push(control: AbstractControl): void {\n this.controls.push(control);\n this._registerControl(control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Insert a new `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to insert the control\n * @param control Form control to be inserted\n */\n insert(index: number, control: AbstractControl): void {\n this.controls.splice(index, 0, control);\n\n this._registerControl(control);\n this.updateValueAndValidity();\n }\n\n /**\n * Remove the control at the given `index` in the array.\n *\n * @param index Index in the array to remove the control\n */\n removeAt(index: number): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n this.updateValueAndValidity();\n }\n\n /**\n * Replace an existing control.\n *\n * @param index Index in the array to replace the control\n * @param control The `AbstractControl` control to replace the existing control\n */\n setControl(index: number, control: AbstractControl): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n\n if (control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n }\n\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Length of the control array.\n */\n get length(): number { return this.controls.length; }\n\n /**\n * Sets the value of the `FormArray`. It accepts an array that matches\n * the structure of the control.\n *\n * This method performs strict checks, and throws an error if you try\n * to set the value of a control that doesn't exist or if you exclude the\n * value of a control.\n *\n * @usageNotes\n * ### Set the values for the controls in the form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.setValue(['Nancy', 'Drew']);\n * console.log(arr.value); // ['Nancy', 'Drew']\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n setValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._checkAllValuesPresent(value);\n value.forEach((newValue: any, index: number) => {\n this._throwIfControlMissing(index);\n this.at(index).setValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormArray`. It accepts an array that matches the\n * structure of the control, and does its best to match the values to the correct\n * controls in the group.\n *\n * It accepts both super-sets and sub-sets of the array without throwing an error.\n *\n * @usageNotes\n * ### Patch the values for controls in a form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.patchValue(['Nancy']);\n * console.log(arr.value); // ['Nancy', null]\n * ```\n *\n * @param value Array of latest values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n value.forEach((newValue: any, index: number) => {\n if (this.at(index)) {\n this.at(index).patchValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the\n * value of all descendants to null or null maps.\n *\n * You reset to a specific form state by passing in an array of states\n * that matches the structure of the control. The state is a standalone value\n * or a form state object with both a value and a disabled status.\n *\n * @usageNotes\n * ### Reset the values in a form array\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * arr.reset(['name', 'last name']);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * ```\n *\n * ### Reset the values in a form array and the disabled status for the first control\n *\n * ```\n * this.arr.reset([\n * {value: 'name', disabled: true},\n * 'last'\n * ]);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * console.log(this.arr.get(0).status); // 'DISABLED'\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n reset(value: any = [], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, index: number) => {\n control.reset(value[index], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the array, including any disabled controls.\n *\n * Reports all values regardless of disabled status.\n * For enabled controls only, the `value` property is the best way to get the value of the array.\n */\n getRawValue(): any[] {\n return this.controls.map((control: AbstractControl) => {\n return control instanceof FormControl ? control.value : (<any>control).getRawValue();\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this.controls.reduce((updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(index: number): void {\n if (!this.controls.length) {\n throw new Error(`\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.at(index)) {\n throw new Error(`Cannot find form control at index ${index}`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: Function): void {\n this.controls.forEach((control: AbstractControl, index: number) => { cb(control, index); });\n }\n\n /** @internal */\n _updateValue(): void {\n (this as{value: any}).value =\n this.controls.filter((control) => control.enabled || this.disabled)\n .map((control) => control.value);\n }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n return this.controls.some((control: AbstractControl) => control.enabled && condition(control));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => this._registerControl(control));\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, i: number) => {\n if (value[i] === undefined) {\n throw new Error(`Must supply a value for form control at index: ${i}.`);\n }\n });\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const control of this.controls) {\n if (control.enabled) return false;\n }\n return this.controls.length > 0 || this.disabled;\n }\n\n private _registerControl(control: AbstractControl) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AfterViewInit, Directive, EventEmitter, Inject, Input, Optional, Self, forwardRef} from '@angular/core';\n\nimport {AbstractControl, FormControl, FormGroup, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {NgControl} from './ng_control';\nimport {NgModel} from './ng_model';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from './shared';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgForm)\n};\n\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a top-level `FormGroup` instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags. You don't need to add a special selector.\n *\n * You optionally export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful. Many properties from the underlying\n * `FormGroup` instance are duplicated on the directive itself, so a reference to it\n * gives you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, use `NgModel` with a `name`\n * attribute. You may use `NgModelGroup` to create sub-groups within the form.\n *\n * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event emits the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * To import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * @usageNotes\n *\n * ### Migrating from deprecated ngForm selector\n *\n * Support for using `ngForm` element selector has been deprecated in Angular v6 and will be removed\n * in Angular v9.\n *\n * This has been deprecated to keep selectors consistent with other core Angular selectors,\n * as element selectors are typically written in kebab-case.\n *\n * Now deprecated:\n * ```html\n * <ngForm #myForm=\"ngForm\">\n * ```\n *\n * After:\n * ```html\n * <ng-form #myForm=\"ngForm\">\n * ```\n *\n * ### Listening for form submission\n *\n * The following example shows how to capture the form values from the \"ngSubmit\" event.\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Setting the update options\n *\n * The following example shows you how to change the \"updateOn\" option from its default using\n * ngFormOptions.\n *\n * ```html\n * <form [ngFormOptions]=\"{updateOn: 'blur'}\">\n * <input name=\"one\" ngModel> <!-- this ngModel will update on blur -->\n * </form>\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,ng-form,[ngForm]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n outputs: ['ngSubmit'],\n exportAs: 'ngForm'\n})\nexport class NgForm extends ControlContainer implements Form,\n AfterViewInit {\n /**\n * @description\n * Returns whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n private _directives: NgModel[] = [];\n\n /**\n * @description\n * The `FormGroup` instance created for this form.\n */\n form: FormGroup;\n\n /**\n * @description\n * Event emitter for the \"ngSubmit\" event\n */\n ngSubmit = new EventEmitter();\n\n /**\n * @description\n * Tracks options for the `NgForm` instance.\n *\n * **updateOn**: Sets the default `updateOn` value for all child `NgModels` below it\n * unless explicitly set by a child `NgModel` using `ngModelOptions`). Defaults to 'change'.\n * Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngFormOptions') options !: {updateOn?: FormHooks};\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this.form =\n new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n }\n\n /**\n * @description\n * Lifecycle method called after the view is initialized. For internal use only.\n */\n ngAfterViewInit() { this._setUpdateStrategy(); }\n\n /**\n * @description\n * The directive instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * The internal `FormGroup` instance.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it is always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Returns a map of the controls in this group.\n */\n get controls(): {[key: string]: AbstractControl} { return this.form.controls; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `NgModel` directive instance.\n */\n addControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n (dir as{control: FormControl}).control =\n <FormControl>container.registerControl(dir.name, dir.control);\n setUpControl(dir.control, dir);\n dir.control.updateValueAndValidity({emitEvent: false});\n this._directives.push(dir);\n });\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `NgModel` directive.\n *\n * @param dir The `NgModel` directive instance.\n */\n getControl(dir: NgModel): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `NgModel` instance from the internal list of directives\n *\n * @param dir The `NgModel` directive instance.\n */\n removeControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n removeDir<NgModel>(this._directives, dir);\n });\n }\n\n /**\n * @description\n * Adds a new `NgModelGroup` directive instance to the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n addFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n const group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({emitEvent: false});\n });\n }\n\n /**\n * @description\n * Removes the `NgModelGroup` directive instance from the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n removeFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n });\n }\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n getFormGroup(dir: NgModelGroup): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `NgControl` directive.\n *\n * @param dir The `NgControl` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: NgControl, value: any): void {\n resolvedPromise.then(() => {\n const ctrl = <FormControl>this.form.get(dir.path !);\n ctrl.setValue(value);\n });\n }\n\n /**\n * @description\n * Sets the value for this `FormGroup`.\n *\n * @param value The new value\n */\n setValue(value: {[key: string]: any}): void { this.control.setValue(value); }\n\n /**\n * @description\n * Method called when the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n private _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n }\n\n /** @internal */\n _findContainer(path: string[]): FormGroup {\n path.pop();\n return path.length ? <FormGroup>this.form.get(path) : this.form;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class TemplateDrivenErrors {\n static modelParentException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup's partner directive \"formControlName\" instead. Example:\n\n ${Examples.formControlName}\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n ${Examples.ngModelWithFormGroup}`);\n }\n\n static formGroupNameException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static missingNameException() {\n throw new Error(\n `If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as 'standalone' in ngModelOptions.\n\n Example 1: <input [(ngModel)]=\"person.firstName\" name=\"first\">\n Example 2: <input [(ngModel)]=\"person.firstName\" [ngModelOptions]=\"{standalone: true}\">`);\n }\n\n static modelGroupParentException() {\n throw new Error(`\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static ngFormWarning() {\n console.warn(`\n It looks like you're using 'ngForm'.\n\n Support for using the 'ngForm' element selector has been deprecated in Angular v6 and will be removed\n in Angular v9.\n\n Use 'ng-form' instead.\n\n Before:\n <ngForm #myForm=\"ngForm\">\n\n After:\n <ng-form #myForm=\"ngForm\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Inject, InjectionToken, Optional} from '@angular/core';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\n/**\n * @description\n * `InjectionToken` to provide to turn off the warning when using 'ngForm' deprecated selector.\n */\nexport const NG_FORM_SELECTOR_WARNING = new InjectionToken('NgFormSelectorWarning');\n\n/**\n * This directive is solely used to display warnings when the deprecated `ngForm` selector is used.\n *\n * @deprecated in Angular v6 and will be removed in Angular v9.\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'ngForm'})\nexport class NgFormSelectorWarning {\n /**\n * Static property used to track whether the deprecation warning for this selector has been sent.\n * Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngFormWarning = false;\n\n constructor(@Optional() @Inject(NG_FORM_SELECTOR_WARNING) ngFormWarning: string|null) {\n if (((!ngFormWarning || ngFormWarning === 'once') && !NgFormSelectorWarning._ngFormWarning) ||\n ngFormWarning === 'always') {\n TemplateDrivenErrors.ngFormWarning();\n NgFormSelectorWarning._ngFormWarning = true;\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {NgForm} from './ng_form';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\nexport const modelGroupProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgModelGroup)\n};\n\n/**\n * @description\n * Creates and binds a `FormGroup` instance to a DOM element.\n *\n * This directive can only be used as a child of `NgForm` (within `<form>` tags).\n *\n * Use this directive to validate a sub-group of your form separately from the\n * rest of your form, or if some values in your domain model make more sense\n * to consume together in a nested object.\n *\n * Provide a name for the sub-group and it will become the key\n * for the sub-group in the form's full value. If you need direct access, export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * @usageNotes\n *\n * ### Consuming controls in a grouping\n *\n * The following example shows you how to combine controls together in a sub-group\n * of the form.\n *\n * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup'})\nexport class NgModelGroup extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `NgModelGroup` bound to the directive. The name corresponds\n * to a key in the parent `NgForm`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelGroup') name !: string;\n\n constructor(\n @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelGroupParentException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\nimport {NgForm} from './ng_form';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor, setUpControl} from './shared';\nimport {TemplateDrivenErrors} from './template_driven_errors';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => NgModel)\n};\n\n/**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have and old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel` have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a `FormControl` instance from a domain model and binds it\n * to a form control element.\n *\n * The `FormControl` instance tracks the value, user interaction, and\n * validation status of the control and keeps the view synced with the model. If used\n * within a parent form, the directive also registers itself with the form as a child\n * control.\n *\n * This directive is used by itself or as part of a larger form. Use the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional `Input`. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\n * class sets the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-box syntax'), the value in the UI always syncs back to\n * the domain model in your class.\n *\n * To inspect the properties of the associated `FormControl` (like validity state), \n * export the directive into a local template variable using `ngModel` as the key (ex: `#myVar=\"ngModel\"`).\n * You then access the control using the directive's `control` property, \n * but most properties used (like `valid` and `dirty`) fall through to the control anyway for direct access. \n * See a full list of properties directly available in `AbstractControlDirective`.\n *\n * @see `RadioControlValueAccessor` \n * @see `SelectControlValueAccessor`\n * \n * @usageNotes\n * \n * ### Using ngModel on a standalone control\n *\n * The following examples show a simple standalone control using `ngModel`:\n *\n * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * In the context of a parent form, it's often unnecessary to include one-way or two-way binding, \n * as the parent form syncs the value for you. You access its properties by exporting it into a \n * local template variable using `ngForm` such as (`#f=\"ngForm\"`). Use the variable where \n * needed on form submission.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n * \n * ### Using ngModel within a form\n *\n * The following example shows controls using `ngModel` within a form:\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n * \n * ### Using a standalone ngModel within a group\n * \n * The following example shows you how to use a standalone ngModel control\n * within a form. This controls the display of the form, but doesn't contain form data.\n *\n * ```html\n * <form>\n * <input name=\"login\" ngModel placeholder=\"Login\">\n * <input type=\"checkbox\" ngModel [ngModelOptions]=\"{standalone: true}\"> Show more options?\n * </form>\n * <!-- form value: {login: ''} -->\n * ```\n * \n * ### Setting the ngModel name attribute through options\n * \n * The following example shows you an alternate way to set the name attribute. The name attribute is used\n * within a custom form component, and the name `@Input` property serves a different purpose.\n *\n * ```html\n * <form>\n * <my-person-control name=\"Nancy\" ngModel [ngModelOptions]=\"{name: 'user'}\">\n * </my-person-control>\n * </form>\n * <!-- form value: {user: ''} -->\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[ngModel]:not([formControlName]):not([formControl])',\n providers: [formControlBinding],\n exportAs: 'ngModel'\n})\nexport class NgModel extends NgControl implements OnChanges,\n OnDestroy {\n public readonly control: FormControl = new FormControl();\n /** @internal */\n _registered = false;\n\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the name bound to the directive. The parent form\n * uses this name as a key to retrieve this control's value.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks whether the control is disabled.\n */\n // TODO(issue/24571): remove '!'.\n @Input('disabled') isDisabled !: boolean;\n\n /**\n * @description\n * Tracks the value bound to this directive.\n */\n @Input('ngModel') model: any;\n\n /**\n * @description\n * Tracks the configuration options for this `ngModel` instance.\n *\n * **name**: An alternative to setting the name attribute on the form control element. See\n * the [example](api/forms/NgModel#using-ngmodel-on-a-standalone-control) for using `NgModel`\n * as a standalone control.\n *\n * **standalone**: When set to true, the `ngModel` will not register itself with its parent form,\n * and acts as if it's not in the form. Defaults to false.\n *\n * **updateOn**: Defines the event upon which the form control value and validity update.\n * Defaults to 'change'. Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelOptions')\n options !: {name?: string, standalone?: boolean, updateOn?: FormHooks};\n\n /**\n * @description\n * Event emitter for producing the `ngModelChange` event after\n * the view model updates.\n */\n @Output('ngModelChange') update = new EventEmitter();\n\n constructor(@Optional() @Host() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[]) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n this._checkForErrors();\n if (!this._registered) this._setUpControl();\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal\n * use only.\n */\n ngOnDestroy(): void { this.formDirective && this.formDirective.removeControl(this); }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] {\n return this._parent ? controlPath(this.name, this._parent) : [this.name];\n }\n\n /**\n * @description\n * The top-level directive for this control if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value emitted by `ngModelChange`.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _setUpControl(): void {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() :\n this.formDirective.addControl(this);\n this._registered = true;\n }\n\n private _setUpdateStrategy(): void {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n }\n\n private _isStandalone(): boolean {\n return !this._parent || !!(this.options && this.options.standalone);\n }\n\n private _setUpStandalone(): void {\n setUpControl(this.control, this);\n this.control.updateValueAndValidity({emitEvent: false});\n }\n\n private _checkForErrors(): void {\n if (!this._isStandalone()) {\n this._checkParentType();\n }\n this._checkName();\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) &&\n this._parent instanceof AbstractFormGroupDirective) {\n TemplateDrivenErrors.formGroupNameException();\n } else if (\n !(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelParentException();\n }\n }\n\n private _checkName(): void {\n if (this.options && this.options.name) this.name = this.options.name;\n\n if (!this._isStandalone() && !this.name) {\n TemplateDrivenErrors.missingNameException();\n }\n }\n\n private _updateValue(value: any): void {\n resolvedPromise.then(\n () => { this.control.setValue(value, {emitViewToModelChange: false}); });\n }\n\n private _updateDisabled(changes: SimpleChanges) {\n const disabledValue = changes['isDisabled'].currentValue;\n\n const isDisabled =\n disabledValue === '' || (disabledValue && disabledValue !== 'false');\n\n resolvedPromise.then(() => {\n if (isDisabled && !this.control.disabled) {\n this.control.disable();\n } else if (!isDisabled && this.control.disabled) {\n this.control.enable();\n }\n });\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, InjectionToken, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, isPropertyUpdated, selectValueAccessor, setUpControl} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\n\n/**\n * Token to provide to turn off the ngModel warning on formControl and formControlName.\n */\nexport const NG_MODEL_WITH_FORM_CONTROL_WARNING =\n new InjectionToken('NgModelWithFormControlWarning');\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlDirective)\n};\n\n/**\n * @description\n * * Syncs a standalone `FormControl` instance to a form control element.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Registering a single form control\n * \n * The following examples shows how to register a standalone control and set its value.\n *\n * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <input [formControl]=\"control\" [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <input [formControl]=\"control\">\n * ```\n *\n * ```ts\n * this.control.setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControl]', providers: [formControlBinding], exportAs: 'ngForm'})\n\nexport class FormControlDirective extends NgControl implements OnChanges {\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControl') form !: FormControl;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlDirective. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular `FormControlDirective` instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(@Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|null) {\n super();\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._isControlChanged(changes)) {\n setUpControl(this.form, this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this.form.updateValueAndValidity({emitEvent: false});\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning(\n 'formControl', FormControlDirective, this, this._ngModelWarningConfig);\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * The `FormControl` bound to this directive.\n */\n get control(): FormControl { return this.form; }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _isControlChanged(changes: {[key: string]: any}): boolean {\n return changes.hasOwnProperty('form');\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\nimport {FormArray, FormControl, FormGroup} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators} from '../../validators';\nimport {ControlContainer} from '../control_container';\nimport {Form} from '../form_interface';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {cleanUpControl, composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from '../shared';\n\nimport {FormControlName} from './form_control_name';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupDirective)\n};\n\n/**\n * @description\n *\n * Binds an existing `FormGroup` to a DOM element.\n *\n * This directive accepts an existing `FormGroup` instance. It will then use this\n * `FormGroup` instance to match any child `FormControl`, `FormGroup`,\n * and `FormArray` instances to child `FormControlName`, `FormGroupName`,\n * and `FormArrayName` directives.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * ### Register Form Group\n *\n * The following example registers a `FormGroup` with first name and last name controls,\n * and listens for the *ngSubmit* event when the button is clicked.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector: '[formGroup]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n exportAs: 'ngForm'\n})\nexport class FormGroupDirective extends ControlContainer implements Form,\n OnChanges {\n /**\n * @description\n * Reports whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n // TODO(issue/24571): remove '!'.\n private _oldForm !: FormGroup;\n\n /**\n * @description\n * Tracks the list of added `FormControlName` instances\n */\n directives: FormControlName[] = [];\n\n /**\n * @description\n * Tracks the `FormGroup` bound to this directive.\n */\n @Input('formGroup') form: FormGroup = null !;\n\n /**\n * @description\n * Emits an event when the form submission has been triggered.\n */\n @Output() ngSubmit = new EventEmitter();\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) private _validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: any[]) {\n super();\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n }\n }\n\n /**\n * @description\n * Returns this directive's instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * Returns the `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `FormControlName` directive instance.\n */\n addControl(dir: FormControlName): FormControl {\n const ctrl: any = this.form.get(dir.path);\n setUpControl(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n this.directives.push(dir);\n return ctrl;\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `FormControlName` directive\n *\n * @param dir The `FormControlName` directive instance.\n */\n getControl(dir: FormControlName): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `FormControlName` instance from the internal list of directives\n *\n * @param dir The `FormControlName` directive instance.\n */\n removeControl(dir: FormControlName): void { removeDir<FormControlName>(this.directives, dir); }\n\n /**\n * Adds a new `FormGroupName` directive instance to the form.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n addFormGroup(dir: FormGroupName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form group.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n removeFormGroup(dir: FormGroupName): void {}\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance\n *\n * @param dir The `FormGroupName` directive instance.\n */\n getFormGroup(dir: FormGroupName): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Adds a new `FormArrayName` directive instance to the form.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n addFormArray(dir: FormArrayName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form array.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n removeFormArray(dir: FormArrayName): void {}\n\n /**\n * @description\n * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n getFormArray(dir: FormArrayName): FormArray { return <FormArray>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `FormControlName` directive.\n *\n * @param dir The `FormControlName` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: FormControlName, value: any): void {\n const ctrl  = <FormControl>this.form.get(dir.path);\n ctrl.setValue(value);\n }\n\n /**\n * @description\n * Method called with the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n\n /** @internal */\n _updateDomValue() {\n this.directives.forEach(dir => {\n const newCtrl: any = this.form.get(dir.path);\n if (dir.control !== newCtrl) {\n cleanUpControl(dir.control, dir);\n if (newCtrl) setUpControl(newCtrl, dir);\n (dir as{control: FormControl}).control = newCtrl;\n }\n });\n\n this.form._updateTreeValidity({emitEvent: false});\n }\n\n private _updateRegistrations() {\n this.form._registerOnCollectionChange(() => this._updateDomValue());\n if (this._oldForm) this._oldForm._registerOnCollectionChange(() => {});\n this._oldForm = this.form;\n }\n\n private _updateValidators() {\n const sync = composeValidators(this._validators);\n this.form.validator = Validators.compose([this.form.validator !, sync !]);\n\n const async = composeAsyncValidators(this._asyncValidators);\n this.form.asyncValidator = Validators.composeAsync([this.form.asyncValidator !, async !]);\n }\n\n private _checkFormPresent() {\n if (!this.form) {\n ReactiveErrors.missingFormException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormArray} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {composeAsyncValidators, composeValidators, controlPath} from '../shared';\nimport {AsyncValidatorFn, ValidatorFn} from '../validators';\n\nimport {FormGroupDirective} from './form_group_directive';\n\nexport const formGroupNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormGroup` to a DOM element.\n *\n * This directive can only be used with a parent `FormGroupDirective`.\n *\n * It accepts the string name of the nested `FormGroup` to link, and\n * looks for a `FormGroup` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * Use nested form groups to validate a sub-group of a\n * form separately from the rest or to group the values of certain\n * controls into their own nested object.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n *\n * @usageNotes\n * \n * ### Access the group by name\n * \n * The following example uses the {@link AbstractControl#get get} method to access the \n * associated `FormGroup`\n *\n * ```ts\n * this.form.get('name');\n * ```\n * \n * ### Access individual controls in the group\n * \n * The following example uses the {@link AbstractControl#get get} method to access \n * individual controls within the group using dot syntax.\n *\n * ```ts\n * this.form.get('name.first');\n * ```\n *\n * ### Register a nested `FormGroup`.\n * \n * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,\n * and provides methods to retrieve the nested `FormGroup` and individual controls.\n *\n * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formGroupName]', providers: [formGroupNameProvider]})\nexport class FormGroupName extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `FormGroup` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formGroupName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.groupParentException();\n }\n }\n}\n\nexport const formArrayNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormArrayName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormArray` to a DOM element.\n *\n * This directive is designed to be used with a parent `FormGroupDirective` (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested `FormArray` you want to link, and\n * will look for a `FormArray` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formArrayName]', providers: [formArrayNameProvider]})\nexport class FormArrayName extends ControlContainer implements OnInit, OnDestroy {\n /** @internal */\n _parent: ControlContainer;\n\n /** @internal */\n _validators: any[];\n\n /** @internal */\n _asyncValidators: any[];\n\n /**\n * @description\n * Tracks the name of the `FormArray` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formArrayName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs are initialized. For internal use only.\n *\n * @throws If the directive does not have a valid parent.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormArray(this);\n }\n\n /**\n * @description\n * A lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormArray(this);\n }\n }\n\n /**\n * @description\n * The `FormArray` bound to this directive.\n */\n get control(): FormArray { return this.formDirective !.getFormArray(this); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): FormGroupDirective|null {\n return this._parent ? <FormGroupDirective>this._parent.formDirective : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators registered with this\n * directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n private _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.arrayParentException();\n }\n }\n}\n\nfunction _hasInvalidParent(parent: ControlContainer): boolean {\n return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n !(parent instanceof FormArrayName);\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\nimport {NG_MODEL_WITH_FORM_CONTROL_WARNING} from './form_control_directive';\nimport {FormGroupDirective} from './form_group_directive';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const controlNameBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlName)\n};\n\n/**\n * @description\n * Syncs a `FormControl` in an existing `FormGroup` to a form control\n * element by name.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n * \n * ### Register `FormControl` within a group\n *\n * The following example shows how to register multiple form controls within a form group\n * and set their value.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: `RadioControlValueAccessor`\n * * Selects: `SelectControlValueAccessor`\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\" [(ngModel)]=\"value\">\n * </form>\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\">\n * </form>\n * ```\n *\n * ```ts\n * this.form.get('first').setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName]', providers: [controlNameBinding]})\nexport class FormControlName extends NgControl implements OnChanges, OnDestroy {\n private _added = false;\n /**\n * @description\n * Internal reference to the view model value.\n * @internal\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n readonly control !: FormControl;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControlName') name !: string;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlName. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular FormControlName instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators:\n Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR) valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|\n null) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n if (!this._added) this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning('formControlName', FormControlName, this, this._ngModelWarningConfig);\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent !); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn {\n return composeAsyncValidators(this._rawAsyncValidators) !;\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof FormGroupName) &&\n this._parent instanceof AbstractFormGroupDirective) {\n ReactiveErrors.ngModelGroupException();\n } else if (\n !(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&\n !(this._parent instanceof FormArrayName)) {\n ReactiveErrors.controlParentException();\n }\n }\n\n private _setUpControl() {\n this._checkParentType();\n (this as{control: FormControl}).control = this.formDirective.addControl(this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this._added = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Input, OnChanges, SimpleChanges, StaticProvider, forwardRef} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {AbstractControl} from '../model';\nimport {NG_VALIDATORS, Validators} from '../validators';\n\n\n/**\n * @description\n * Defines the map of errors returned from failed validation checks.\n *\n * @publicApi\n */\nexport type ValidationErrors = {\n [key: string]: any\n};\n\n/**\n * @description\n * An interface implemented by classes that perform synchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom validator\n *\n * The following example implements the `Validator` interface to create a\n * validator directive with a custom error key.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors|null {\n * return {'custom': true};\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface Validator {\n /**\n * @description\n * Method that performs synchronous validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A map of validation errors if validation fails,\n * otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null;\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange?(fn: () => void): void;\n}\n\n/**\n * @description\n * An interface implemented by classes that perform asynchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom async validator directive\n *\n * The following example implements the `AsyncValidator` interface to create an\n * async validator directive with a custom error key.\n *\n * ```typescript\n * import { of as observableOf } from 'rxjs';\n *\n * @Directive({\n * selector: '[customAsyncValidator]',\n * providers: [{provide: NG_ASYNC_VALIDATORS, useExisting: CustomAsyncValidatorDirective, multi:\n * true}]\n * })\n * class CustomAsyncValidatorDirective implements AsyncValidator {\n * validate(control: AbstractControl): Observable<ValidationErrors|null> {\n * return observableOf({'custom': true});\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface AsyncValidator extends Validator {\n /**\n * @description\n * Method that performs async validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A promise or observable that resolves a map of validation errors\n * if validation fails, otherwise null.\n */\n validate(control: AbstractControl):\n Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RequiredValidator),\n multi: true\n};\n\n/**\n * @description\n * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const CHECKBOX_REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CheckboxRequiredValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds the `required` validator to any controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required validator using template-driven forms\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector:\n ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n providers: [REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class RequiredValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _required !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the required attribute bound to this directive.\n */\n @Input()\n get required(): boolean|string { return this._required; }\n\n set required(value: boolean|string) {\n this._required = value != null && value !== false && `${value}` !== 'false';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether the control is empty.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.required(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n\n/**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required checkbox validator using template-driven forms\n *\n * The following example shows how to add a checkbox required validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector:\n 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n providers: [CHECKBOX_REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class CheckboxRequiredValidator extends RequiredValidator {\n /**\n * @description\n * Method that validates whether or not the checkbox has been checked.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.requiredTrue(control) : null;\n }\n}\n\n/**\n * @description\n * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const EMAIL_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => EmailValidator),\n multi: true\n};\n\n/**\n * A directive that adds the `email` validator to controls marked with the\n * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding an email validator\n *\n * The following example shows how to add an email validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n providers: [EMAIL_VALIDATOR]\n})\nexport class EmailValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _enabled !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the email attribute bound to this directive.\n */\n @Input()\n set email(value: boolean|string) {\n this._enabled = value === '' || value === true || value === 'true';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether an email address is valid.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this._enabled ? Validators.email(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n/**\n * @description\n * A function that receives a control and synchronously returns a map of\n * validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface ValidatorFn { (control: AbstractControl): ValidationErrors|null; }\n\n/**\n * @description\n * A function that receives a control and returns a Promise or observable\n * that emits validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface AsyncValidatorFn {\n (control: AbstractControl): Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MIN_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MinLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds minimum length validation to controls marked with the\n * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` mult-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a minimum length validator\n *\n * The following example shows how to add a minimum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel minlength=\"4\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n providers: [MIN_LENGTH_VALIDATOR],\n host: {'[attr.minlength]': 'minlength ? minlength : null'}\n})\nexport class MinLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the minimum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() minlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('minlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value meets a minimum length\n * requirement. Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.minlength == null ? null : this._validator(control);\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.minLength(parseInt(this.minlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MAX_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaxLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds max length validation to controls marked with the\n * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a maximum length validator\n *\n * The following example shows how to add a maximum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel maxlength=\"25\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n providers: [MAX_LENGTH_VALIDATOR],\n host: {'[attr.maxlength]': 'maxlength ? maxlength : null'}\n})\nexport class MaxLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the maximum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() maxlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('maxlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value exceeds\n * the maximum length requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.maxlength != null ? this._validator(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const PATTERN_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => PatternValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds regex pattern validation to controls marked with the\n * `pattern` attribute. The regex must match the entire control value.\n * The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a pattern validator\n *\n * The following example shows how to add a pattern validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel pattern=\"[a-zA-Z ]*\">\n * ```\n * \n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n providers: [PATTERN_VALIDATOR],\n host: {'[attr.pattern]': 'pattern ? pattern : null'}\n})\nexport class PatternValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the pattern bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() pattern !: string | RegExp;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('pattern' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value matches the\n * the pattern requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null { return this._validator(control); }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void { this._validator = Validators.pattern(this.pattern); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\n\nimport {AsyncValidatorFn, ValidatorFn} from './directives/validators';\nimport {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup, FormHooks} from './model';\n\nfunction isAbstractControlOptions(options: AbstractControlOptions | {[key: string]: any}):\n options is AbstractControlOptions {\n return (<AbstractControlOptions>options).asyncValidators !== undefined ||\n (<AbstractControlOptions>options).validators !== undefined ||\n (<AbstractControlOptions>options).updateOn !== undefined;\n}\n\n/**\n * @description\n * Creates an `AbstractControl` from a user-specified configuration.\n *\n * The `FormBuilder` provides syntactic sugar that shortens creating instances of a `FormControl`,\n * `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to build complex\n * forms.\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@Injectable()\nexport class FormBuilder {\n /**\n * @description\n * Construct a new `FormGroup` instance.\n *\n * @param controlsConfig A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param options Configuration options object for the `FormGroup`. The object can\n * have two shapes:\n *\n * 1) `AbstractControlOptions` object (preferred), which consists of:\n * * `validators`: A synchronous validator function, or an array of validator functions\n * * `asyncValidators`: A single async validator or array of async validator functions\n * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur' |\n * submit')\n *\n * 2) Legacy configuration object, which consists of:\n * * `validator`: A synchronous validator function, or an array of validator functions\n * * `asyncValidator`: A single async validator or array of async validator functions\n *\n */\n group(\n controlsConfig: {[key: string]: any},\n options: AbstractControlOptions|{[key: string]: any}|null = null): FormGroup {\n const controls = this._reduceControls(controlsConfig);\n\n let validators: ValidatorFn|ValidatorFn[]|null = null;\n let asyncValidators: AsyncValidatorFn|AsyncValidatorFn[]|null = null;\n let updateOn: FormHooks|undefined = undefined;\n\n if (options != null) {\n if (isAbstractControlOptions(options)) {\n // `options` are `AbstractControlOptions`\n validators = options.validators != null ? options.validators : null;\n asyncValidators = options.asyncValidators != null ? options.asyncValidators : null;\n updateOn = options.updateOn != null ? options.updateOn : undefined;\n } else {\n // `options` are legacy form group options\n validators = options.validator != null ? options.validator : null;\n asyncValidators = options.asyncValidator != null ? options.asyncValidator : null;\n }\n }\n\n return new FormGroup(controls, {asyncValidators, updateOn, validators});\n }\n\n /**\n * @description\n * Construct a new `FormControl` with the given state, validators and options.\n *\n * @param formState Initializes the control with an initial state value, or\n * with an object that contains both a value and a disabled status.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n *\n * @usageNotes\n *\n * ### Initialize a control as disabled\n *\n * The following example returns a control with an initial value in a disabled state.\n *\n * <code-example path=\"forms/ts/formBuilder/form_builder_example.ts\"\n * linenums=\"false\" region=\"disabled-control\">\n * </code-example>\n */\n control(\n formState: any, validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormControl {\n return new FormControl(formState, validatorOrOpts, asyncValidator);\n }\n\n /**\n * Constructs a new `FormArray` from the given array of configurations,\n * validators and options.\n *\n * @param controlsConfig An array of child controls or control configs. Each\n * child control is given an index when it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n */\n array(\n controlsConfig: any[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormArray {\n const controls = controlsConfig.map(c => this._createControl(c));\n return new FormArray(controls, validatorOrOpts, asyncValidator);\n }\n\n /** @internal */\n _reduceControls(controlsConfig: {[k: string]: any}): {[key: string]: AbstractControl} {\n const controls: {[key: string]: AbstractControl} = {};\n Object.keys(controlsConfig).forEach(controlName => {\n controls[controlName] = this._createControl(controlsConfig[controlName]);\n });\n return controls;\n }\n\n /** @internal */\n _createControl(controlConfig: any): AbstractControl {\n if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n controlConfig instanceof FormArray) {\n return controlConfig;\n\n } else if (Array.isArray(controlConfig)) {\n const value = controlConfig[0];\n const validator: ValidatorFn = controlConfig.length > 1 ? controlConfig[1] : null;\n const asyncValidator: AsyncValidatorFn = controlConfig.length > 2 ? controlConfig[2] : null;\n return this.control(value, validator, asyncValidator);\n\n } else {\n return this.control(controlConfig);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = new Version('7.2.7');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive} from '@angular/core';\n\n/**\n * @description\n *\n * Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```\n * <form ngNativeValidate></form>\n * ```\n *\n * @publicApi\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n host: {'novalidate': ''},\n})\nexport class NgNoValidate {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule, Type} from '@angular/core';\n\nimport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nimport {DefaultValueAccessor} from './directives/default_value_accessor';\nimport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nimport {NgForm} from './directives/ng_form';\nimport {NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nimport {NgModel} from './directives/ng_model';\nimport {NgModelGroup} from './directives/ng_model_group';\nimport {NgNoValidate} from './directives/ng_no_validate_directive';\nimport {NumberValueAccessor} from './directives/number_value_accessor';\nimport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nimport {RangeValueAccessor} from './directives/range_value_accessor';\nimport {FormControlDirective} from './directives/reactive_directives/form_control_directive';\nimport {FormControlName} from './directives/reactive_directives/form_control_name';\nimport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nimport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nimport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nimport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\nimport {CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator} from './directives/validators';\n\nexport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nexport {ControlValueAccessor} from './directives/control_value_accessor';\nexport {DefaultValueAccessor} from './directives/default_value_accessor';\nexport {NgControl} from './directives/ng_control';\nexport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nexport {NgForm} from './directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING, NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nexport {NgModel} from './directives/ng_model';\nexport {NgModelGroup} from './directives/ng_model_group';\nexport {NumberValueAccessor} from './directives/number_value_accessor';\nexport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nexport {RangeValueAccessor} from './directives/range_value_accessor';\nexport {FormControlDirective, NG_MODEL_WITH_FORM_CONTROL_WARNING} from './directives/reactive_directives/form_control_directive';\nexport {FormControlName} from './directives/reactive_directives/form_control_name';\nexport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nexport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nexport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nexport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\n\nexport const SHARED_FORM_DIRECTIVES: Type<any>[] = [\n NgNoValidate,\n NgSelectOption,\n NgSelectMultipleOption,\n DefaultValueAccessor,\n NumberValueAccessor,\n RangeValueAccessor,\n CheckboxControlValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n NgControlStatus,\n NgControlStatusGroup,\n RequiredValidator,\n MinLengthValidator,\n MaxLengthValidator,\n PatternValidator,\n CheckboxRequiredValidator,\n EmailValidator,\n];\n\nexport const TEMPLATE_DRIVEN_DIRECTIVES: Type<any>[] =\n [NgModel, NgModelGroup, NgForm, NgFormSelectorWarning];\n\nexport const REACTIVE_DRIVEN_DIRECTIVES: Type<any>[] =\n [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n\n/**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\n@NgModule({\n declarations: SHARED_FORM_DIRECTIVES,\n exports: SHARED_FORM_DIRECTIVES,\n})\nexport class InternalFormsSharedModule {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModuleWithProviders, NgModule} from '@angular/core';\n\nimport {InternalFormsSharedModule, NG_FORM_SELECTOR_WARNING, NG_MODEL_WITH_FORM_CONTROL_WARNING, REACTIVE_DRIVEN_DIRECTIVES, TEMPLATE_DRIVEN_DIRECTIVES} from './directives';\nimport {RadioControlRegistry} from './directives/radio_control_value_accessor';\nimport {FormBuilder} from './form_builder';\n\n/**\n * Exports the required providers and directives for template-driven forms,\n * making them available for import by NgModules that import this module.\n *\n * @see [Forms Guide](/guide/forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n providers: [RadioControlRegistry],\n exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n})\nexport class FormsModule {\n /**\n * @description\n * Provides options for configuring the template-driven forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnDeprecatedNgFormSelector` Configures when to emit a warning when the deprecated\n * `ngForm` selector is used.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnDeprecatedNgFormSelector?: 'never' | 'once' | 'always',\n }): ModuleWithProviders<FormsModule> {\n return {\n ngModule: FormsModule,\n providers:\n [{provide: NG_FORM_SELECTOR_WARNING, useValue: opts.warnOnDeprecatedNgFormSelector}]\n };\n }\n}\n\n/**\n * Exports the required infrastructure and directives for reactive forms,\n * making them available for import by NgModules that import this module.\n * @see [Forms](guide/reactive-forms)\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n providers: [FormBuilder, RadioControlRegistry],\n exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n})\nexport class ReactiveFormsModule {\n /**\n * @description\n * Provides options for configuring the reactive forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`\n * binding is used with reactive form directives.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnNgModelWithFormControl: 'never' | 'once' | 'always'\n }): ModuleWithProviders<ReactiveFormsModule> {\n return {\n ngModule: ReactiveFormsModule,\n providers: [{\n provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,\n useValue: opts.warnOnNgModelWithFormControl\n }]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {InternalFormsSharedModule as ɵangular_packages_forms_forms_bc,REACTIVE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_bb,SHARED_FORM_DIRECTIVES as ɵangular_packages_forms_forms_z,TEMPLATE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_ba} from './src/directives';\nexport {CHECKBOX_VALUE_ACCESSOR as ɵangular_packages_forms_forms_a} from './src/directives/checkbox_value_accessor';\nexport {DEFAULT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_b} from './src/directives/default_value_accessor';\nexport {AbstractControlStatus as ɵangular_packages_forms_forms_c,ngControlStatusHost as ɵangular_packages_forms_forms_d} from './src/directives/ng_control_status';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_e} from './src/directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING as ɵangular_packages_forms_forms_f} from './src/directives/ng_form_selector_warning';\nexport {formControlBinding as ɵangular_packages_forms_forms_g} from './src/directives/ng_model';\nexport {modelGroupProvider as ɵangular_packages_forms_forms_h} from './src/directives/ng_model_group';\nexport {NgNoValidate as ɵangular_packages_forms_forms_bh} from './src/directives/ng_no_validate_directive';\nexport {NUMBER_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bd,NumberValueAccessor as ɵangular_packages_forms_forms_be} from './src/directives/number_value_accessor';\nexport {RADIO_VALUE_ACCESSOR as ɵangular_packages_forms_forms_i,RadioControlRegistry as ɵangular_packages_forms_forms_j} from './src/directives/radio_control_value_accessor';\nexport {RANGE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bf,RangeValueAccessor as ɵangular_packages_forms_forms_bg} from './src/directives/range_value_accessor';\nexport {NG_MODEL_WITH_FORM_CONTROL_WARNING as ɵangular_packages_forms_forms_k,formControlBinding as ɵangular_packages_forms_forms_l} from './src/directives/reactive_directives/form_control_directive';\nexport {controlNameBinding as ɵangular_packages_forms_forms_m} from './src/directives/reactive_directives/form_control_name';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_n} from './src/directives/reactive_directives/form_group_directive';\nexport {formArrayNameProvider as ɵangular_packages_forms_forms_p,formGroupNameProvider as ɵangular_packages_forms_forms_o} from './src/directives/reactive_directives/form_group_name';\nexport {SELECT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_q} from './src/directives/select_control_value_accessor';\nexport {NgSelectMultipleOption as ɵangular_packages_forms_forms_s,SELECT_MULTIPLE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_r} from './src/directives/select_multiple_control_value_accessor';\nexport {CHECKBOX_REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_u,EMAIL_VALIDATOR as ɵangular_packages_forms_forms_v,MAX_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_x,MIN_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_w,PATTERN_VALIDATOR as ɵangular_packages_forms_forms_y,REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_t} from './src/directives/validators';"],"names":["isPromise","isObservable","getDOM","Examples","looseIdentical","_buildValueString","_extractId","resolvedPromise","formControlBinding","formDirectiveProvider"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"forms.js","sources":["../src/directives/abstract_control_directive.ts","../src/directives/control_container.ts","../src/validators.ts","../src/directives/control_value_accessor.ts","../src/directives/checkbox_value_accessor.ts","../src/directives/default_value_accessor.ts","../src/directives/normalize_validator.ts","../src/directives/number_value_accessor.ts","../src/directives/ng_control.ts","../src/directives/radio_control_value_accessor.ts","../src/directives/range_value_accessor.ts","../src/directives/error_examples.ts","../src/directives/reactive_errors.ts","../src/directives/select_control_value_accessor.ts","../src/directives/select_multiple_control_value_accessor.ts","../src/directives/shared.ts","../src/directives/abstract_form_group_directive.ts","../src/directives/ng_control_status.ts","../src/model.ts","../src/directives/ng_form.ts","../src/directives/template_driven_errors.ts","../src/directives/ng_form_selector_warning.ts","../src/directives/ng_model_group.ts","../src/directives/ng_model.ts","../src/directives/reactive_directives/form_control_directive.ts","../src/directives/reactive_directives/form_group_directive.ts","../src/directives/reactive_directives/form_group_name.ts","../src/directives/reactive_directives/form_control_name.ts","../src/directives/validators.ts","../src/form_builder.ts","../src/version.ts","../src/directives/ng_no_validate_directive.ts","../src/directives.ts","../src/form_providers.ts","../forms.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable} from 'rxjs';\nimport {AbstractControl} from '../model';\nimport {ValidationErrors} from './validators';\n\n/**\n * @description\n * Base class for control directives.\n *\n * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.\n *\n * @publicApi\n */\nexport abstract class AbstractControlDirective {\n /**\n * @description\n * A reference to the underlying control.\n *\n * @returns the control that backs this directive. Most properties fall through to that instance.\n */\n abstract get control(): AbstractControl|null;\n\n /**\n * @description\n * Reports the value of the control if it is present, otherwise null.\n */\n get value(): any { return this.control ? this.control.value : null; }\n\n /**\n * @description\n * Reports whether the control is valid. A control is considered valid if no\n * validation errors exist with the current value.\n * If the control is not present, null is returned.\n */\n get valid(): boolean|null { return this.control ? this.control.valid : null; }\n\n /**\n * @description\n * Reports whether the control is invalid, meaning that an error exists in the input value.\n * If the control is not present, null is returned.\n */\n get invalid(): boolean|null { return this.control ? this.control.invalid : null; }\n\n /**\n * @description\n * Reports whether a control is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value. If the control is not present, null is\n * returned.\n */\n get pending(): boolean|null { return this.control ? this.control.pending : null; }\n\n /**\n * @description\n * Reports whether the control is disabled, meaning that the control is disabled\n * in the UI and is exempt from validation checks and excluded from aggregate\n * values of ancestor controls. If the control is not present, null is returned.\n */\n get disabled(): boolean|null { return this.control ? this.control.disabled : null; }\n\n /**\n * @description\n * Reports whether the control is enabled, meaning that the control is included in ancestor\n * calculations of validity or value. If the control is not present, null is returned.\n */\n get enabled(): boolean|null { return this.control ? this.control.enabled : null; }\n\n /**\n * @description\n * Reports the control's validation errors. If the control is not present, null is returned.\n */\n get errors(): ValidationErrors|null { return this.control ? this.control.errors : null; }\n\n /**\n * @description\n * Reports whether the control is pristine, meaning that the user has not yet changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get pristine(): boolean|null { return this.control ? this.control.pristine : null; }\n\n /**\n * @description\n * Reports whether the control is dirty, meaning that the user has changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get dirty(): boolean|null { return this.control ? this.control.dirty : null; }\n\n /**\n * @description\n * Reports whether the control is touched, meaning that the user has triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get touched(): boolean|null { return this.control ? this.control.touched : null; }\n\n /**\n * @description\n * Reports the validation status of the control. Possible values include:\n * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.\n * If the control is not present, null is returned.\n */\n get status(): string|null { return this.control ? this.control.status : null; }\n\n /**\n * @description\n * Reports whether the control is untouched, meaning that the user has not yet triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get untouched(): boolean|null { return this.control ? this.control.untouched : null; }\n\n /**\n * @description\n * Returns a multicasting observable that emits a validation status whenever it is\n * calculated for the control. If the control is not present, null is returned.\n */\n get statusChanges(): Observable<any>|null {\n return this.control ? this.control.statusChanges : null;\n }\n\n /**\n * @description\n * Returns a multicasting observable of value changes for the control that emits every time the\n * value of the control changes in the UI or programmatically.\n * If the control is not present, null is returned.\n */\n get valueChanges(): Observable<any>|null {\n return this.control ? this.control.valueChanges : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[]|null { return null; }\n\n /**\n * @description\n * Resets the control with the provided value if the control is present.\n */\n reset(value: any = undefined): void {\n if (this.control) this.control.reset(value);\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return this.control ? this.control.hasError(errorCode, path) : false;\n }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n return this.control ? this.control.getError(errorCode, path) : null;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {Form} from './form_interface';\n\n\n/**\n * @description\n * A base class for directives that contain multiple registered instances of `NgControl`.\n * Only used by the forms module.\n *\n * @publicApi\n */\nexport abstract class ControlContainer extends AbstractControlDirective {\n /**\n * @description\n * The name for the control\n */\n // TODO(issue/24571): remove '!'.\n name !: string;\n\n /**\n * @description\n * The top-level form directive for the control.\n */\n get formDirective(): Form|null { return null; }\n\n /**\n * @description\n * The path to this group.\n */\n get path(): string[]|null { return null; }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken, ɵisObservable as isObservable, ɵisPromise as isPromise} from '@angular/core';\nimport {Observable, forkJoin, from} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {AsyncValidatorFn, ValidationErrors, Validator, ValidatorFn} from './directives/validators';\nimport {AbstractControl, FormControl} from './model';\n\nfunction isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n}\n\n/**\n * @description\n * An `InjectionToken` for registering additional synchronous validators used with `AbstractControl`s.\n *\n * @see `NG_ASYNC_VALIDATORS`\n *\n * @usageNotes\n *\n * ### Providing a custom validator\n *\n * The following example registers a custom validator directive. Adding the validator to the\n * existing collection of validators requires the `multi: true` option.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors | null {\n * return { 'custom': true };\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport const NG_VALIDATORS = new InjectionToken<Array<Validator|Function>>('NgValidators');\n\n/**\n * @description\n * An `InjectionToken` for registering additional asynchronous validators used with `AbstractControl`s.\n *\n * @see `NG_VALIDATORS`\n *\n * @publicApi\n */\nexport const NG_ASYNC_VALIDATORS =\n new InjectionToken<Array<Validator|Function>>('NgAsyncValidators');\n\nconst EMAIL_REGEXP =\n /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n\n/**\n * @description\n * Provides a set of built-in validators that can be used by form controls.\n *\n * A validator is a function that processes a `FormControl` or collection of\n * controls and returns an error map or null. A null map means that validation has passed.\n *\n * @see [Form Validation](/guide/form-validation)\n *\n * @publicApi\n */\nexport class Validators {\n /**\n * @description\n * Validator that requires the control's value to be greater than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a minimum of 3\n *\n * ```typescript\n * const control = new FormControl(2, Validators.min(3));\n *\n * console.log(control.errors); // {min: {min: 3, actual: 2}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `min` property if the validation check fails, otherwise `null`.\n *\n */\n static min(min: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value < min ? {'min': {'min': min, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to be less than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a maximum of 15\n *\n * ```typescript\n * const control = new FormControl(16, Validators.max(15));\n *\n * console.log(control.errors); // {max: {max: 15, actual: 16}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `max` property if the validation check fails, otherwise `null`.\n *\n */\n static max(max: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n return !isNaN(value) && value > max ? {'max': {'max': max, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control have a non-empty value.\n *\n * @usageNotes\n *\n * ### Validate that the field is non-empty\n *\n * ```typescript\n * const control = new FormControl('', Validators.required);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map with the `required` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static required(control: AbstractControl): ValidationErrors|null {\n return isEmptyInputValue(control.value) ? {'required': true} : null;\n }\n\n /**\n * @description\n * Validator that requires the control's value be true. This validator is commonly\n * used for required checkboxes.\n *\n * @usageNotes\n *\n * ### Validate that the field value is true\n *\n * ```typescript\n * const control = new FormControl('', Validators.requiredTrue);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map that contains the `required` property\n * set to `true` if the validation check fails, otherwise `null`.\n */\n static requiredTrue(control: AbstractControl): ValidationErrors|null {\n return control.value === true ? null : {'required': true};\n }\n\n /**\n * @description\n * Validator that requires the control's value pass an email validation test.\n *\n * @usageNotes\n *\n * ### Validate that the field matches a valid email pattern\n *\n * ```typescript\n * const control = new FormControl('bad@', Validators.email);\n *\n * console.log(control.errors); // {email: true}\n * ```\n *\n * @returns An error map with the `email` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static email(control: AbstractControl): ValidationErrors|null {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n return EMAIL_REGEXP.test(control.value) ? null : {'email': true};\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be greater than or equal\n * to the provided minimum length. This validator is also provided by default if you use the\n * the HTML5 `minlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has a minimum of 3 characters\n *\n * ```typescript\n * const control = new FormControl('ng', Validators.minLength(3));\n *\n * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}\n * ```\n *\n * ```html\n * <input minlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `minlength` if the validation check fails, otherwise `null`.\n */\n static minLength(minLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const length: number = control.value ? control.value.length : 0;\n return length < minLength ?\n {'minlength': {'requiredLength': minLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be less than or equal\n * to the provided maximum length. This validator is also provided by default if you use the\n * the HTML5 `maxlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has maximum of 5 characters\n *\n * ```typescript\n * const control = new FormControl('Angular', Validators.maxLength(5));\n *\n * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}\n * ```\n *\n * ```html\n * <input maxlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `maxlength` property if the validation check fails, otherwise `null`.\n */\n static maxLength(maxLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const length: number = control.value ? control.value.length : 0;\n return length > maxLength ?\n {'maxlength': {'requiredLength': maxLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to match a regex pattern. This validator is also\n * provided by default if you use the HTML5 `pattern` attribute.\n *\n * Note that if a Regexp is provided, the Regexp is used as is to test the values. On the other\n * hand, if a string is passed, the `^` character is prepended and the `$` character is\n * appended to the provided string (if not already present), and the resulting regular\n * expression is used to test the values.\n *\n * @usageNotes\n *\n * ### Validate that the field only contains letters or spaces\n *\n * ```typescript\n * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));\n *\n * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}\n * ```\n *\n * ```html\n * <input pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `pattern` property if the validation check fails, otherwise `null`.\n */\n static pattern(pattern: string|RegExp): ValidatorFn {\n if (!pattern) return Validators.nullValidator;\n let regex: RegExp;\n let regexStr: string;\n if (typeof pattern === 'string') {\n regexStr = '';\n\n if (pattern.charAt(0) !== '^') regexStr += '^';\n\n regexStr += pattern;\n\n if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$';\n\n regex = new RegExp(regexStr);\n } else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value: string = control.value;\n return regex.test(value) ? null :\n {'pattern': {'requiredPattern': regexStr, 'actualValue': value}};\n };\n }\n\n /**\n * @description\n * Validator that performs no operation.\n */\n static nullValidator(control: AbstractControl): ValidationErrors|null { return null; }\n\n /**\n * @description\n * Compose multiple validators into a single function that returns the union\n * of the individual error maps for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error maps of the validators if the validation check fails, otherwise `null`.\n */\n static compose(validators: null): null;\n static compose(validators: (ValidatorFn|null|undefined)[]): ValidatorFn|null;\n static compose(validators: (ValidatorFn|null|undefined)[]|null): ValidatorFn|null {\n if (!validators) return null;\n const presentValidators: ValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n return _mergeErrors(_executeValidators(control, presentValidators));\n };\n }\n\n /**\n * @description\n * Compose multiple async validators into a single function that returns the union\n * of the individual error objects for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error objects of the async validators if the validation check fails, otherwise `null`.\n */\n static composeAsync(validators: (AsyncValidatorFn|null)[]): AsyncValidatorFn|null {\n if (!validators) return null;\n const presentValidators: AsyncValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n const observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n return forkJoin(observables).pipe(map(_mergeErrors));\n };\n }\n}\n\nfunction isPresent(o: any): boolean {\n return o != null;\n}\n\nexport function toObservable(r: any): Observable<any> {\n const obs = isPromise(r) ? from(r) : r;\n if (!(isObservable(obs))) {\n throw new Error(`Expected validator to return Promise or Observable.`);\n }\n return obs;\n}\n\nfunction _executeValidators(control: AbstractControl, validators: ValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _executeAsyncValidators(control: AbstractControl, validators: AsyncValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _mergeErrors(arrayOfErrors: ValidationErrors[]): ValidationErrors|null {\n const res: {[key: string]: any} =\n arrayOfErrors.reduce((res: ValidationErrors | null, errors: ValidationErrors | null) => {\n return errors != null ? {...res !, ...errors} : res !;\n }, {});\n return Object.keys(res).length === 0 ? null : res;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * @description\n * Defines an interface that acts as a bridge between the Angular forms API and a\n * native element in the DOM.\n *\n * Implement this interface to create a custom form control directive\n * that integrates with Angular forms.\n *\n * @see DefaultValueAccessor\n *\n * @publicApi\n */\nexport interface ControlValueAccessor {\n /**\n * @description\n * Writes a new value to the element.\n *\n * This method is called by the forms API to write to the view when programmatic\n * changes from model to view are requested.\n *\n * @usageNotes\n * ### Write a value to the element\n *\n * The following example writes a value to the native DOM element.\n *\n * ```ts\n * writeValue(value: any): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'value', value);\n * }\n * ```\n *\n * @param obj The new value for the element\n */\n writeValue(obj: any): void;\n\n /**\n * @description\n * Registers a callback function that is called when the control's value\n * changes in the UI.\n *\n * This method is called by the forms API on initialization to update the form\n * model when values propagate from the view to the model.\n *\n * When implementing the `registerOnChange` method in your own value accessor,\n * save the given function so your class calls it at the appropriate time.\n *\n * @usageNotes\n * ### Store the change function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnChange(fn: (_: any) => void): void {\n * this._onChange = fn;\n * }\n * ```\n *\n * When the value changes in the UI, call the registered\n * function to allow the forms API to update itself:\n *\n * ```ts\n * host: {\n * (change): '_onChange($event.target.value)'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnChange(fn: any): void;\n\n /**\n * @description\n * Registers a callback function is called by the forms API on initialization\n * to update the form model on blur.\n *\n * When implementing `registerOnTouched` in your own value accessor, save the given\n * function so your class calls it when the control should be considered\n * blurred or \"touched\".\n *\n * @usageNotes\n * ### Store the callback function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnTouched(fn: any): void {\n * this._onTouched = fn;\n * }\n * ```\n *\n * On blur (or equivalent), your class should call the registered function to allow\n * the forms API to update itself:\n *\n * ```ts\n * host: {\n * '(blur)': '_onTouched()'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnTouched(fn: any): void;\n\n /**\n * @description\n * Function that is called by the forms API when the control status changes to\n * or from 'DISABLED'. Depending on the status, it enables or disables the\n * appropriate DOM element.\n *\n * @usageNotes\n * The following is an example of writing the disabled property to a native DOM element:\n *\n * ```ts\n * setDisabledState(isDisabled: boolean): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n * }\n * ```\n *\n * @param isDisabled The disabled status to set on the element\n */\n setDisabledState?(isDisabled: boolean): void;\n}\n\n/**\n * Used to provide a `ControlValueAccessor` for form controls.\n *\n * See `DefaultValueAccessor` for how to implement one.\n *\n * @publicApi\n */\nexport const NG_VALUE_ACCESSOR = new InjectionToken<ControlValueAccessor>('NgValueAccessor');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const CHECKBOX_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlValueAccessor),\n multi: true,\n};\n\n/**\n * @description\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\n * element.\n *\n * @usageNotes\n *\n * ### Using a checkbox with a reactive form.\n *\n * The following example shows how to use a checkbox with a reactive form.\n *\n * ```ts\n * const rememberLoginControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"checkbox\" [formControl]=\"rememberLoginControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: {'(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()'},\n providers: [CHECKBOX_VALUE_ACCESSOR]\n})\nexport class CheckboxControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"checked\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Inject, InjectionToken, Optional, Renderer2, forwardRef} from '@angular/core';\nimport {ɵgetDOM as getDOM} from '@angular/platform-browser';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const DEFAULT_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DefaultValueAccessor),\n multi: true\n};\n\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\nfunction _isAndroid(): boolean {\n const userAgent = getDOM() ? getDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n\n/**\n * @description\n * Provide this token to control if form directives buffer IME input until\n * the \"compositionend\" event occurs.\n * @publicApi\n */\nexport const COMPOSITION_BUFFER_MODE = new InjectionToken<boolean>('CompositionEventMode');\n\n/**\n * @description\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using the default value accessor\n *\n * The following example shows how to use an input element that activates the default value accessor\n * (in this case, a text field).\n *\n * ```ts\n * const firstNameControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"text\" [formControl]=\"firstNameControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n // TODO: vsavkin replace the above selector with the one below it once\n // https://github.com/angular/angular/issues/3011 is implemented\n // selector: '[ngModel],[formControl],[formControlName]',\n host: {\n '(input)': '$any(this)._handleInput($event.target.value)',\n '(blur)': 'onTouched()',\n '(compositionstart)': '$any(this)._compositionStart()',\n '(compositionend)': '$any(this)._compositionEnd($event.target.value)'\n },\n providers: [DEFAULT_VALUE_ACCESSOR]\n})\nexport class DefaultValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when an input event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /** Whether the user is creating a composition string (IME events). */\n private _composing = false;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n @Optional() @Inject(COMPOSITION_BUFFER_MODE) private _compositionMode: boolean) {\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _handleInput(value: any): void {\n if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n this.onChange(value);\n }\n }\n\n /** @internal */\n _compositionStart(): void { this._composing = true; }\n\n /** @internal */\n _compositionEnd(value: any): void {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControl} from '../model';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport function normalizeValidator(validator: ValidatorFn | Validator): ValidatorFn {\n if ((<Validator>validator).validate) {\n return (c: AbstractControl) => (<Validator>validator).validate(c);\n } else {\n return <ValidatorFn>validator;\n }\n}\n\nexport function normalizeAsyncValidator(validator: AsyncValidatorFn | AsyncValidator):\n AsyncValidatorFn {\n if ((<AsyncValidator>validator).validate) {\n return (c: AbstractControl) => (<AsyncValidator>validator).validate(c);\n } else {\n return <AsyncValidatorFn>validator;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const NUMBER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a number value and listening to number input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a number input with a reactive form.\n *\n * The following example shows how to use a number input with a reactive form.\n *\n * ```ts\n * const totalCountControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"number\" [formControl]=\"totalCountControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [NUMBER_VALUE_ACCESSOR]\n})\nexport class NumberValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: number): void {\n // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nfunction unimplemented(): any {\n throw new Error('unimplemented');\n}\n\n/**\n * @description\n * A base class that all control `FormControl`-based directives extend. It binds a `FormControl`\n * object to a DOM element.\n *\n * @publicApi\n */\nexport abstract class NgControl extends AbstractControlDirective {\n /**\n * @description\n * The parent form for the control.\n *\n * @internal\n */\n _parent: ControlContainer|null = null;\n\n /**\n * @description\n * The name for the control\n */\n name: string|null = null;\n\n /**\n * @description\n * The value accessor for the control\n */\n valueAccessor: ControlValueAccessor|null = null;\n\n /**\n * @description\n * The uncomposed array of synchronous validators for the control\n *\n * @internal\n */\n _rawValidators: Array<Validator|ValidatorFn> = [];\n\n /**\n * @description\n * The uncomposed array of async validators for the control\n *\n * @internal\n */\n _rawAsyncValidators: Array<AsyncValidator|AsyncValidatorFn> = [];\n\n /**\n * @description\n * The registered synchronous validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get validator(): ValidatorFn|null { return <ValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The registered async validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get asyncValidator(): AsyncValidatorFn|null { return <AsyncValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The callback method to update the model from the view when requested\n *\n * @param newValue The new value for the view\n */\n abstract viewToModelUpdate(newValue: any): void;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Injectable, Injector, Input, OnDestroy, OnInit, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\n\nexport const RADIO_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioControlValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * Class used by Angular to track radio buttons. For internal use only.\n */\n@Injectable()\nexport class RadioControlRegistry {\n private _accessors: any[] = [];\n\n /**\n * @description\n * Adds a control to the internal registry. For internal use only.\n */\n add(control: NgControl, accessor: RadioControlValueAccessor) {\n this._accessors.push([control, accessor]);\n }\n\n /**\n * @description\n * Removes a control from the internal registry. For internal use only.\n */\n remove(accessor: RadioControlValueAccessor) {\n for (let i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n }\n\n /**\n * @description\n * Selects a radio button. For internal use only.\n */\n select(accessor: RadioControlValueAccessor) {\n this._accessors.forEach((c) => {\n if (this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n }\n\n private _isSameGroup(\n controlPair: [NgControl, RadioControlValueAccessor],\n accessor: RadioControlValueAccessor): boolean {\n if (!controlPair[0].control) return false;\n return controlPair[0]._parent === accessor._control._parent &&\n controlPair[1].name === accessor.name;\n }\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing radio control values and listening to radio control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using radio buttons with reactive form directives\n *\n * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in\n * a reactive form, radio buttons in the same group should have the same `formControlName`.\n * Providing a `name` attribute is optional.\n *\n * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n host: {'(change)': 'onChange()', '(blur)': 'onTouched()'},\n providers: [RADIO_VALUE_ACCESSOR]\n})\nexport class RadioControlValueAccessor implements ControlValueAccessor,\n OnDestroy, OnInit {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _state !: boolean;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _control !: NgControl;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _fn !: Function;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = () => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the name of the radio input element.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input() formControlName !: string;\n\n /**\n * @description\n * Tracks the value of the radio input element\n */\n @Input() value: any;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n private _registry: RadioControlRegistry, private _injector: Injector) {}\n\n /**\n * @description\n * A lifecycle method called when the directive is initialized. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnInit(): void {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnDestroy(): void { this._registry.remove(this); }\n\n /**\n * @description\n * Sets the \"checked\" property value on the radio input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._state = value === this.value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void {\n this._fn = fn;\n this.onChange = () => {\n fn(this.value);\n this._registry.select(this);\n };\n }\n\n /**\n * Sets the \"value\" on the radio input element and unchecks it.\n *\n * @param value\n */\n fireUncheck(value: any): void { this.writeValue(value); }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n private _checkName(): void {\n if (this.name && this.formControlName && this.name !== this.formControlName) {\n this._throwNameError();\n }\n if (!this.name && this.formControlName) this.name = this.formControlName;\n }\n\n private _throwNameError(): void {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, StaticProvider, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const RANGE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a range value and listening to range input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a range input with a reactive form\n *\n * The following example shows how to use a range input with a reactive form.\n *\n * ```ts\n * const ageControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"range\" [formControl]=\"ageControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [RANGE_VALUE_ACCESSOR]\n})\nexport class RangeValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the range input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const FormErrorExamples = {\n formControlName: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });`,\n\n formGroupName: `\n <div [formGroup]=\"myGroup\">\n <div formGroupName=\"person\">\n <input formControlName=\"firstName\">\n </div>\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });`,\n\n formArrayName: `\n <div [formGroup]=\"myGroup\">\n <div formArrayName=\"cities\">\n <div *ngFor=\"let city of cityArray.controls; index as i\">\n <input [formControlName]=\"i\">\n </div>\n </div>\n </div>\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl('SF')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });`,\n\n ngModelGroup: `\n <form>\n <div ngModelGroup=\"person\">\n <input [(ngModel)]=\"person.name\" name=\"firstName\">\n </div>\n </form>`,\n\n ngModelWithFormGroup: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n `\n};\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class ReactiveErrors {\n static controlParentException(): void {\n throw new Error(\n `formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static ngModelGroupException(): void {\n throw new Error(\n `formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n ${Examples.formGroupName}\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n ${Examples.ngModelGroup}`);\n }\n static missingFormException(): void {\n throw new Error(`formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static groupParentException(): void {\n throw new Error(\n `formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formGroupName}`);\n }\n\n static arrayParentException(): void {\n throw new Error(\n `formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formArrayName}`);\n }\n\n static disabledAttrWarning(): void {\n console.warn(`\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n \n Example: \n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n `);\n }\n\n static ngModelWarning(directiveName: string): void {\n console.warn(`\n It looks like you're using ngModel on the same form field as ${directiveName}. \n Support for using the ngModel input property and ngModelChange event with \n reactive form directives has been deprecated in Angular v6 and will be removed \n in Angular v7.\n \n For more information on this, see our API docs here:\n https://angular.io/api/forms/${directiveName === 'formControl' ? 'FormControlDirective' \n : 'FormControlName'}#use-with-ngmodel\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string | null, value: any): string {\n if (id == null) return `${value}`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing select control values and listening to select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using select controls in a reactive form\n *\n * The following examples show how to use a select control in a reactive form.\n *\n * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Using select controls in a template-driven form\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * {@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * ### Customizing option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * ```ts\n * const selectedCountriesControl = new FormControl();\n * ```\n *\n * ```\n * <select [compareWith]=\"compareFn\" [formControl]=\"selectedCountriesControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{country.name}}\n * </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n * return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * **Note:** We listen to the 'change' event because 'input' events aren't fired\n * for selects in Firefox and IE:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n host: {'(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()'},\n providers: [SELECT_VALUE_ACCESSOR]\n})\nexport class SelectControlValueAccessor implements ControlValueAccessor {\n value: any;\n /** @internal */\n _optionMap: Map<string, any> = new Map<string, any>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element. The \"selectedIndex\"\n * property is also set if an ID is provided on the option element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this.value = value;\n const id: string|null = this._getOptionId(value);\n if (id == null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n }\n const valueString = _buildValueString(id, value);\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (valueString: string) => {\n this.value = this._getOptionValue(valueString);\n fn(this.value);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(): string { return (this._idCounter++).toString(); }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id), value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectOption implements OnDestroy {\n /**\n * @description\n * ID of the option element\n */\n // TODO(issue/24571): remove '!'.\n id !: string;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectControlValueAccessor) {\n if (this._select) this.id = this._select._registerOption();\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n this._setElementValue(value);\n if (this._select) this._select.writeValue(this._select.value);\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_MULTIPLE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectMultipleControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string, value: any): string {\n if (id == null) return `${value}`;\n if (typeof value === 'string') value = `'${value}'`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/** Mock interface for HTML Options */\ninterface HTMLOption {\n value: string;\n selected: boolean;\n}\n\n/** Mock interface for HTMLCollection */\nabstract class HTMLCollection {\n // TODO(issue/24571): remove '!'.\n length !: number;\n abstract item(_: number): HTMLOption;\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n * \n * @see `SelectControlValueAccessor`\n *\n * @usageNotes\n * \n * ### Using a multi-select control\n * \n * The follow example shows you how to use a multi-select control with a reactive form.\n * \n * ```ts\n * const countryControl = new FormControl();\n * ```\n *\n * ```\n * <select multiple name=\"countries\" [formControl]=\"countryControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{ country.name }}\n * </option>\n * </select>\n * ```\n * \n * ### Customizing option selection\n * \n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * See the `SelectControlValueAccessor` for usage.\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n host: {'(change)': 'onChange($event.target)', '(blur)': 'onTouched()'},\n providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]\n})\nexport class SelectMultipleControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The current value\n */\n value: any;\n\n /** @internal */\n _optionMap: Map<string, NgSelectMultipleOption> = new Map<string, NgSelectMultipleOption>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * @description\n * Sets the \"value\" property on one or of more\n * of the select's options.\n *\n * @param value The value\n */\n writeValue(value: any): void {\n this.value = value;\n let optionSelectedStateSetter: (opt: NgSelectMultipleOption, o: any) => void;\n if (Array.isArray(value)) {\n // convert values to ids\n const ids = value.map((v) => this._getOptionId(v));\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(ids.indexOf(o.toString()) > -1); };\n } else {\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(false); };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes\n * and writes an array of the selected options.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (_: any) => {\n const selected: Array<any> = [];\n if (_.hasOwnProperty('selectedOptions')) {\n const options: HTMLCollection = _.selectedOptions;\n for (let i = 0; i < options.length; i++) {\n const opt: any = options.item(i);\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n // Degrade on IE\n else {\n const options: HTMLCollection = <HTMLCollection>_.options;\n for (let i = 0; i < options.length; i++) {\n const opt: HTMLOption = options.item(i);\n if (opt.selected) {\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n this.value = selected;\n fn(selected);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(value: NgSelectMultipleOption): string {\n const id: string = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id) !._value, value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) !._value : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectMultipleControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectMultipleOption implements OnDestroy {\n // TODO(issue/24571): remove '!'.\n id !: string;\n /** @internal */\n _value: any;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectMultipleControlValueAccessor) {\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n } else {\n this._setElementValue(value);\n }\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /** @internal */\n _setSelected(selected: boolean) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {isDevMode, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {FormArray, FormControl, FormGroup} from '../model';\nimport {Validators} from '../validators';\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {CheckboxControlValueAccessor} from './checkbox_value_accessor';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {DefaultValueAccessor} from './default_value_accessor';\nimport {NgControl} from './ng_control';\nimport {normalizeAsyncValidator, normalizeValidator} from './normalize_validator';\nimport {NumberValueAccessor} from './number_value_accessor';\nimport {RadioControlValueAccessor} from './radio_control_value_accessor';\nimport {RangeValueAccessor} from './range_value_accessor';\nimport {FormArrayName} from './reactive_directives/form_group_name';\nimport {ReactiveErrors} from './reactive_errors';\nimport {SelectControlValueAccessor} from './select_control_value_accessor';\nimport {SelectMultipleControlValueAccessor} from './select_multiple_control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\n\nexport function controlPath(name: string, parent: ControlContainer): string[] {\n return [...parent.path !, name];\n}\n\nexport function setUpControl(control: FormControl, dir: NgControl): void {\n if (!control) _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor) _throwError(dir, 'No value accessor for form control with');\n\n control.validator = Validators.compose([control.validator !, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator !, dir.asyncValidator]);\n dir.valueAccessor !.writeValue(control.value);\n\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n\n setUpBlurPipeline(control, dir);\n\n if (dir.valueAccessor !.setDisabledState) {\n control.registerOnDisabledChange(\n (isDisabled: boolean) => { dir.valueAccessor !.setDisabledState !(isDisabled); });\n }\n\n // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n dir._rawValidators.forEach((validator: Validator | ValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n\n dir._rawAsyncValidators.forEach((validator: AsyncValidator | AsyncValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n}\n\nexport function cleanUpControl(control: FormControl, dir: NgControl) {\n dir.valueAccessor !.registerOnChange(() => _noControlError(dir));\n dir.valueAccessor !.registerOnTouched(() => _noControlError(dir));\n\n dir._rawValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n dir._rawAsyncValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n if (control) control._clearChangeFns();\n}\n\nfunction setUpViewChangePipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnChange((newValue: any) => {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n\n if (control.updateOn === 'change') updateControl(control, dir);\n });\n}\n\nfunction setUpBlurPipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnTouched(() => {\n control._pendingTouched = true;\n\n if (control.updateOn === 'blur' && control._pendingChange) updateControl(control, dir);\n if (control.updateOn !== 'submit') control.markAsTouched();\n });\n}\n\nfunction updateControl(control: FormControl, dir: NgControl): void {\n if (control._pendingDirty) control.markAsDirty();\n control.setValue(control._pendingValue, {emitModelToViewChange: false});\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n}\n\nfunction setUpModelChangePipeline(control: FormControl, dir: NgControl): void {\n control.registerOnChange((newValue: any, emitModelEvent: boolean) => {\n // control -> view\n dir.valueAccessor !.writeValue(newValue);\n\n // control -> ngModel\n if (emitModelEvent) dir.viewToModelUpdate(newValue);\n });\n}\n\nexport function setUpFormContainer(\n control: FormGroup | FormArray, dir: AbstractFormGroupDirective | FormArrayName) {\n if (control == null) _throwError(dir, 'Cannot find control with');\n control.validator = Validators.compose([control.validator, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n}\n\nfunction _noControlError(dir: NgControl) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\n\nfunction _throwError(dir: AbstractControlDirective, message: string): void {\n let messageEnd: string;\n if (dir.path !.length > 1) {\n messageEnd = `path: '${dir.path!.join(' -> ')}'`;\n } else if (dir.path ![0]) {\n messageEnd = `name: '${dir.path}'`;\n } else {\n messageEnd = 'unspecified name attribute';\n }\n throw new Error(`${message} ${messageEnd}`);\n}\n\nexport function composeValidators(validators: Array<Validator|Function>): ValidatorFn|null {\n return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n}\n\nexport function composeAsyncValidators(validators: Array<Validator|Function>): AsyncValidatorFn|\n null {\n return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n null;\n}\n\nexport function isPropertyUpdated(changes: {[key: string]: any}, viewModel: any): boolean {\n if (!changes.hasOwnProperty('model')) return false;\n const change = changes['model'];\n\n if (change.isFirstChange()) return true;\n return !looseIdentical(viewModel, change.currentValue);\n}\n\nconst BUILTIN_ACCESSORS = [\n CheckboxControlValueAccessor,\n RangeValueAccessor,\n NumberValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n];\n\nexport function isBuiltInAccessor(valueAccessor: ControlValueAccessor): boolean {\n return BUILTIN_ACCESSORS.some(a => valueAccessor.constructor === a);\n}\n\nexport function syncPendingControls(form: FormGroup, directives: NgControl[]): void {\n form._syncPendingControls();\n directives.forEach(dir => {\n const control = dir.control as FormControl;\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n}\n\n// TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented\nexport function selectValueAccessor(\n dir: NgControl, valueAccessors: ControlValueAccessor[]): ControlValueAccessor|null {\n if (!valueAccessors) return null;\n\n if (!Array.isArray(valueAccessors))\n _throwError(dir, 'Value accessor was not provided as an array for form control with');\n\n let defaultAccessor: ControlValueAccessor|undefined = undefined;\n let builtinAccessor: ControlValueAccessor|undefined = undefined;\n let customAccessor: ControlValueAccessor|undefined = undefined;\n\n valueAccessors.forEach((v: ControlValueAccessor) => {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n\n } else if (isBuiltInAccessor(v)) {\n if (builtinAccessor)\n _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n\n } else {\n if (customAccessor)\n _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n\n if (customAccessor) return customAccessor;\n if (builtinAccessor) return builtinAccessor;\n if (defaultAccessor) return defaultAccessor;\n\n _throwError(dir, 'No valid value accessor for form control with');\n return null;\n}\n\nexport function removeDir<T>(list: T[], el: T): void {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\n\n// TODO(kara): remove after deprecation period\nexport function _ngModelWarning(\n name: string, type: {_ngModelWarningSentOnce: boolean},\n instance: {_ngModelWarningSent: boolean}, warningConfig: string | null) {\n if (!isDevMode() || warningConfig === 'never') return;\n\n if (((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce) ||\n (warningConfig === 'always' && !instance._ngModelWarningSent)) {\n ReactiveErrors.ngModelWarning(name);\n type._ngModelWarningSentOnce = true;\n instance._ngModelWarningSent = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {OnDestroy, OnInit} from '@angular/core';\n\nimport {FormGroup} from '../model';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {composeAsyncValidators, composeValidators, controlPath} from './shared';\nimport {AsyncValidatorFn, ValidatorFn} from './validators';\n\n\n\n/**\n * @description\n * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.\n *\n * @publicApi\n */\nexport class AbstractFormGroupDirective extends ControlContainer implements OnInit, OnDestroy {\n /**\n * @description\n * The parent control for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _parent !: ControlContainer;\n\n /**\n * @description\n * An array of synchronous validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _validators !: any[];\n\n /**\n * @description\n * An array of async validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _asyncValidators !: any[];\n\n /**\n * @description\n * An internal callback method triggered on the instance after the inputs are set.\n * Registers the group with its parent group.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormGroup(this);\n }\n\n /**\n * @description\n * An internal callback method triggered before the instance is destroyed.\n * Removes the group from its parent group.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormGroup(this);\n }\n }\n\n /**\n * @description\n * The `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.formDirective !.getFormGroup(this); }\n\n /**\n * @description\n * The path to this group from the top-level directive.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): Form|null { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * The synchronous validators registered with this group.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * The async validators registered with this group.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n /** @internal */\n _checkParentType(): void {}\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Self} from '@angular/core';\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {NgControl} from './ng_control';\n\nexport class AbstractControlStatus {\n private _cd: AbstractControlDirective;\n\n constructor(cd: AbstractControlDirective) { this._cd = cd; }\n\n get ngClassUntouched(): boolean { return this._cd.control ? this._cd.control.untouched : false; }\n get ngClassTouched(): boolean { return this._cd.control ? this._cd.control.touched : false; }\n get ngClassPristine(): boolean { return this._cd.control ? this._cd.control.pristine : false; }\n get ngClassDirty(): boolean { return this._cd.control ? this._cd.control.dirty : false; }\n get ngClassValid(): boolean { return this._cd.control ? this._cd.control.valid : false; }\n get ngClassInvalid(): boolean { return this._cd.control ? this._cd.control.invalid : false; }\n get ngClassPending(): boolean { return this._cd.control ? this._cd.control.pending : false; }\n}\n\nexport const ngControlStatusHost = {\n '[class.ng-untouched]': 'ngClassUntouched',\n '[class.ng-touched]': 'ngClassTouched',\n '[class.ng-pristine]': 'ngClassPristine',\n '[class.ng-dirty]': 'ngClassDirty',\n '[class.ng-valid]': 'ngClassValid',\n '[class.ng-invalid]': 'ngClassInvalid',\n '[class.ng-pending]': 'ngClassPending',\n};\n\n/**\n * @description\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status.\n *\n * @usageNotes\n *\n * ### CSS classes applied\n *\n * The following classes are applied as the properties become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost})\nexport class NgControlStatus extends AbstractControlStatus {\n constructor(@Self() cd: NgControl) { super(cd); }\n}\n\n/**\n * @description\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n * \n * @see `NgControlStatus`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n host: ngControlStatusHost\n})\nexport class NgControlStatusGroup extends AbstractControlStatus {\n constructor(@Self() cd: ControlContainer) { super(cd); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {EventEmitter} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {composeAsyncValidators, composeValidators} from './directives/shared';\nimport {AsyncValidatorFn, ValidationErrors, ValidatorFn} from './directives/validators';\nimport {toObservable} from './validators';\n\n/**\n * Reports that a FormControl is valid, meaning that no errors exist in the input value.\n *\n * @see `status`\n */\nexport const VALID = 'VALID';\n\n/**\n * Reports that a FormControl is invalid, meaning that an error exists in the input value.\n *\n * @see `status`\n */\nexport const INVALID = 'INVALID';\n\n/**\n * Reports that a FormControl is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value.\n *\n * @see `markAsPending`\n * @see `status`\n */\nexport const PENDING = 'PENDING';\n\n/**\n * Reports that a FormControl is disabled, meaning that the control is exempt from ancestor\n * calculations of validity or value.\n *\n * @see `markAsDisabled`\n * @see `status`\n */\nexport const DISABLED = 'DISABLED';\n\nfunction _find(control: AbstractControl, path: Array<string|number>| string, delimiter: string) {\n if (path == null) return null;\n\n if (!(path instanceof Array)) {\n path = (<string>path).split(delimiter);\n }\n if (path instanceof Array && (path.length === 0)) return null;\n\n return (<Array<string|number>>path).reduce((v: AbstractControl, name) => {\n if (v instanceof FormGroup) {\n return v.controls.hasOwnProperty(name as string) ? v.controls[name] : null;\n }\n\n if (v instanceof FormArray) {\n return v.at(<number>name) || null;\n }\n\n return null;\n }, control);\n}\n\nfunction coerceToValidator(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): ValidatorFn|\n null {\n const validator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).validators :\n validatorOrOpts) as ValidatorFn |\n ValidatorFn[] | null;\n\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\n\nfunction coerceToAsyncValidator(\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null, validatorOrOpts?: ValidatorFn |\n ValidatorFn[] | AbstractControlOptions | null): AsyncValidatorFn|null {\n const origAsyncValidator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).asyncValidators :\n asyncValidator) as AsyncValidatorFn |\n AsyncValidatorFn | null;\n\n return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :\n origAsyncValidator || null;\n}\n\nexport type FormHooks = 'change' | 'blur' | 'submit';\n\n/**\n * Interface for options provided to an `AbstractControl`.\n *\n * @publicApi\n */\nexport interface AbstractControlOptions {\n /**\n * @description\n * The list of validators applied to a control.\n */\n validators?: ValidatorFn|ValidatorFn[]|null;\n /**\n * @description\n * The list of async validators applied to control.\n */\n asyncValidators?: AsyncValidatorFn|AsyncValidatorFn[]|null;\n /**\n * @description\n * The event name for control to update upon.\n */\n updateOn?: 'change'|'blur'|'submit';\n}\n\n\nfunction isOptionsObj(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): boolean {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&\n typeof validatorOrOpts === 'object';\n}\n\n\n/**\n * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * @see [Forms Guide](/guide/forms)\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n * @see [Dynamic Forms Guide](/guide/dynamic-form)\n *\n * @publicApi\n */\nexport abstract class AbstractControl {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingDirty !: boolean;\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingTouched !: boolean;\n\n /** @internal */\n _onCollectionChange = () => {};\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _updateOn !: FormHooks;\n\n // TODO(issue/24571): remove '!'.\n private _parent !: FormGroup | FormArray;\n private _asyncValidationSubscription: any;\n\n /**\n * The current value of the control.\n *\n * * For a `FormControl`, the current value.\n * * For a `FormGroup`, the values of enabled controls as an object\n * with a key-value pair for each member of the group.\n * * For a `FormArray`, the values of enabled controls as an array.\n *\n */\n public readonly value: any;\n\n /**\n * Initialize the AbstractControl instance.\n *\n * @param validator The function that determines the synchronous validity of this control.\n * @param asyncValidator The function that determines the asynchronous validity of this\n * control.\n */\n constructor(public validator: ValidatorFn|null, public asyncValidator: AsyncValidatorFn|null) {}\n\n /**\n * The parent control.\n */\n get parent(): FormGroup|FormArray { return this._parent; }\n\n /**\n * The validation status of the control. There are four possible\n * validation status values:\n *\n * * **VALID**: This control has passed all validation checks.\n * * **INVALID**: This control has failed at least one validation check.\n * * **PENDING**: This control is in the midst of conducting a validation check.\n * * **DISABLED**: This control is exempt from validation checks.\n *\n * These status values are mutually exclusive, so a control cannot be\n * both valid AND invalid or invalid AND disabled.\n */\n // TODO(issue/24571): remove '!'.\n public readonly status !: string;\n\n /**\n * A control is `valid` when its `status` is `VALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control has passed all of its validation tests,\n * false otherwise.\n */\n get valid(): boolean { return this.status === VALID; }\n\n /**\n * A control is `invalid` when its `status` is `INVALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control has failed one or more of its validation checks,\n * false otherwise.\n */\n get invalid(): boolean { return this.status === INVALID; }\n\n /**\n * A control is `pending` when its `status` is `PENDING`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control is in the process of conducting a validation check,\n * false otherwise.\n */\n get pending(): boolean { return this.status == PENDING; }\n\n /**\n * A control is `disabled` when its `status` is `DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control is disabled, false otherwise.\n */\n get disabled(): boolean { return this.status === DISABLED; }\n\n /**\n * A control is `enabled` as long as its `status` is not `DISABLED`.\n *\n * @returns True if the control has any status other than 'DISABLED',\n * false if the status is 'DISABLED'.\n *\n * @see {@link AbstractControl.status}\n *\n */\n get enabled(): boolean { return this.status !== DISABLED; }\n\n /**\n * An object containing any errors generated by failing validation,\n * or null if there are no errors.\n */\n // TODO(issue/24571): remove '!'.\n public readonly errors !: ValidationErrors | null;\n\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * @returns True if the user has not yet changed the value in the UI; compare `dirty`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n public readonly pristine: boolean = true;\n\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * @returns True if the user has changed the value of this control in the UI; compare `pristine`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n get dirty(): boolean { return !this.pristine; }\n\n /**\n * True if the control is marked as `touched`.\n *\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n */\n public readonly touched: boolean = false;\n\n /**\n * True if the control has not been marked as touched\n *\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n */\n get untouched(): boolean { return !this.touched; }\n\n /**\n * A multicasting observable that emits an event every time the value of the control changes, in\n * the UI or programmatically.\n */\n // TODO(issue/24571): remove '!'.\n public readonly valueChanges !: Observable<any>;\n\n /**\n * A multicasting observable that emits an event every time the validation `status` of the control\n * recalculates.\n *\n * @see {@link AbstractControl.status}\n *\n */\n // TODO(issue/24571): remove '!'.\n public readonly statusChanges !: Observable<any>;\n\n /**\n * Reports the update strategy of the `AbstractControl` (meaning\n * the event on which the control updates itself).\n * Possible values: `'change'` | `'blur'` | `'submit'`\n * Default value: `'change'`\n */\n get updateOn(): FormHooks {\n return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');\n }\n\n /**\n * Sets the synchronous validators that are active on this control. Calling\n * this overwrites any existing sync validators.\n */\n setValidators(newValidator: ValidatorFn|ValidatorFn[]|null): void {\n this.validator = coerceToValidator(newValidator);\n }\n\n /**\n * Sets the async validators that are active on this control. Calling this\n * overwrites any existing async validators.\n */\n setAsyncValidators(newValidator: AsyncValidatorFn|AsyncValidatorFn[]|null): void {\n this.asyncValidator = coerceToAsyncValidator(newValidator);\n }\n\n /**\n * Empties out the sync validator list.\n */\n clearValidators(): void { this.validator = null; }\n\n /**\n * Empties out the async validator list.\n */\n clearAsyncValidators(): void { this.asyncValidator = null; }\n\n /**\n * Marks the control as `touched`. A control is touched by focus and\n * blur events that do not change the value.\n *\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = true;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsTouched(opts);\n }\n }\n\n /**\n * Marks the control as `untouched`.\n *\n * If the control has any children, also marks all children as `untouched`\n * and recalculates the `touched` status of all parent controls.\n *\n * @see `markAsTouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after the marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsUntouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = false;\n this._pendingTouched = false;\n\n this._forEachChild(\n (control: AbstractControl) => { control.markAsUntouched({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /**\n * Marks the control as `dirty`. A control becomes dirty when\n * the control's value is changed through the UI; compare `markAsTouched`.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsDirty(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = false;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsDirty(opts);\n }\n }\n\n /**\n * Marks the control as `pristine`.\n *\n * If the control has any children, marks all children as `pristine`,\n * and recalculates the `pristine` status of all parent\n * controls.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n *\n * @param opts Configuration options that determine how the control emits events after\n * marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n */\n markAsPristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = true;\n this._pendingDirty = false;\n\n this._forEachChild((control: AbstractControl) => { control.markAsPristine({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /**\n * Marks the control as `pending`.\n *\n * A control is pending while the control performs async validation.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates changes and\n * emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), the `statusChanges`\n * observable emits an event with the latest status the control is marked pending.\n * When false, no events are emitted.\n *\n */\n markAsPending(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = PENDING;\n\n if (opts.emitEvent !== false) {\n (this.statusChanges as EventEmitter<any>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsPending(opts);\n }\n }\n\n /**\n * Disables the control. This means the control is exempt from validation checks and\n * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n *\n * If the control has children, all children are also disabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates\n * changes and emits events after the control is disabled.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is disabled.\n * When false, no events are emitted.\n */\n disable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = DISABLED;\n (this as{errors: ValidationErrors | null}).errors = null;\n this._forEachChild(\n (control: AbstractControl) => { control.disable({...opts, onlySelf: true}); });\n this._updateValue();\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(true));\n }\n\n /**\n * Enables the control. This means the control is included in validation checks and\n * the aggregate value of its parent. Its status recalculates based on its value and\n * its validators.\n *\n * By default, if the control has children, all children are enabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configure options that control how the control propagates changes and\n * emits events when marked as untouched\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is enabled.\n * When false, no events are emitted.\n */\n enable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = VALID;\n this._forEachChild(\n (control: AbstractControl) => { control.enable({...opts, onlySelf: true}); });\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(false));\n }\n\n private _updateAncestors(opts: {onlySelf?: boolean, emitEvent?: boolean}) {\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n this._parent._updatePristine();\n this._parent._updateTouched();\n }\n }\n\n /**\n * @param parent Sets the parent of the control\n */\n setParent(parent: FormGroup|FormArray): void { this._parent = parent; }\n\n /**\n * Sets the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract setValue(value: any, options?: Object): void;\n\n /**\n * Patches the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract patchValue(value: any, options?: Object): void;\n\n /**\n * Resets the control. Abstract method (implemented in sub-classes).\n */\n abstract reset(value?: any, options?: Object): void;\n\n /**\n * Recalculates the value and validation status of the control.\n *\n * By default, it also updates the value and validity of its ancestors.\n *\n * @param opts Configuration options determine how the control propagates changes and emits events\n * after updates and validity checks are applied.\n * * `onlySelf`: When true, only update this control. When false or not supplied,\n * update all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is updated.\n * When false, no events are emitted.\n */\n updateValueAndValidity(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._setInitialStatus();\n this._updateValue();\n\n if (this.enabled) {\n this._cancelExistingSubscription();\n (this as{errors: ValidationErrors | null}).errors = this._runValidator();\n (this as{status: string}).status = this._calculateStatus();\n\n if (this.status === VALID || this.status === PENDING) {\n this._runAsyncValidator(opts.emitEvent);\n }\n }\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n }\n }\n\n /** @internal */\n _updateTreeValidity(opts: {emitEvent?: boolean} = {emitEvent: true}) {\n this._forEachChild((ctrl: AbstractControl) => ctrl._updateTreeValidity(opts));\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n }\n\n private _setInitialStatus() {\n (this as{status: string}).status = this._allControlsDisabled() ? DISABLED : VALID;\n }\n\n private _runValidator(): ValidationErrors|null {\n return this.validator ? this.validator(this) : null;\n }\n\n private _runAsyncValidator(emitEvent?: boolean): void {\n if (this.asyncValidator) {\n (this as{status: string}).status = PENDING;\n const obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription =\n obs.subscribe((errors: ValidationErrors | null) => this.setErrors(errors, {emitEvent}));\n }\n }\n\n private _cancelExistingSubscription(): void {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n }\n }\n\n /**\n * Sets errors on a form control when running validations manually, rather than automatically.\n *\n * Calling `setErrors` also updates the validity of the parent control.\n *\n * @usageNotes\n * ### Manually set the errors for a control\n *\n * ```\n * const login = new FormControl('someLogin');\n * login.setErrors({\n * notUnique: true\n * });\n *\n * expect(login.valid).toEqual(false);\n * expect(login.errors).toEqual({ notUnique: true });\n *\n * login.setValue('someOtherLogin');\n *\n * expect(login.valid).toEqual(true);\n * ```\n */\n setErrors(errors: ValidationErrors|null, opts: {emitEvent?: boolean} = {}): void {\n (this as{errors: ValidationErrors | null}).errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false);\n }\n\n /**\n * Retrieves a child control given the control's name or path.\n *\n * @param path A dot-delimited string or array of string/number values that define the path to the\n * control.\n *\n * @usageNotes\n * ### Retrieve a nested control\n *\n * For example, to get a `name` control nested within a `person` sub-group:\n *\n * * `this.form.get('person.name');`\n *\n * -OR-\n *\n * * `this.form.get(['person', 'name']);`\n */\n get(path: Array<string|number>|string): AbstractControl|null { return _find(this, path, '.'); }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n const control = path ? this.get(path) : this;\n return control && control.errors ? control.errors[errorCode] : null;\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return !!this.getError(errorCode, path);\n }\n\n /**\n * Retrieves the top-level ancestor of this control.\n */\n get root(): AbstractControl {\n let x: AbstractControl = this;\n\n while (x._parent) {\n x = x._parent;\n }\n\n return x;\n }\n\n /** @internal */\n _updateControlsErrors(emitEvent: boolean): void {\n (this as{status: string}).status = this._calculateStatus();\n\n if (emitEvent) {\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent);\n }\n }\n\n /** @internal */\n _initObservables() {\n (this as{valueChanges: Observable<any>}).valueChanges = new EventEmitter();\n (this as{statusChanges: Observable<any>}).statusChanges = new EventEmitter();\n }\n\n\n private _calculateStatus(): string {\n if (this._allControlsDisabled()) return DISABLED;\n if (this.errors) return INVALID;\n if (this._anyControlsHaveStatus(PENDING)) return PENDING;\n if (this._anyControlsHaveStatus(INVALID)) return INVALID;\n return VALID;\n }\n\n /** @internal */\n abstract _updateValue(): void;\n\n /** @internal */\n abstract _forEachChild(cb: Function): void;\n\n /** @internal */\n abstract _anyControls(condition: Function): boolean;\n\n /** @internal */\n abstract _allControlsDisabled(): boolean;\n\n /** @internal */\n abstract _syncPendingControls(): boolean;\n\n /** @internal */\n _anyControlsHaveStatus(status: string): boolean {\n return this._anyControls((control: AbstractControl) => control.status === status);\n }\n\n /** @internal */\n _anyControlsDirty(): boolean {\n return this._anyControls((control: AbstractControl) => control.dirty);\n }\n\n /** @internal */\n _anyControlsTouched(): boolean {\n return this._anyControls((control: AbstractControl) => control.touched);\n }\n\n /** @internal */\n _updatePristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = !this._anyControlsDirty();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /** @internal */\n _updateTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = this._anyControlsTouched();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /** @internal */\n _onDisabledChange: Function[] = [];\n\n /** @internal */\n _isBoxedValue(formState: any): boolean {\n return typeof formState === 'object' && formState !== null &&\n Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n }\n\n /** @internal */\n _registerOnCollectionChange(fn: () => void): void { this._onCollectionChange = fn; }\n\n /** @internal */\n _setUpdateStrategy(opts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null): void {\n if (isOptionsObj(opts) && (opts as AbstractControlOptions).updateOn != null) {\n this._updateOn = (opts as AbstractControlOptions).updateOn !;\n }\n }\n}\n\n/**\n * Tracks the value and validation status of an individual form control.\n *\n * This is one of the three fundamental building blocks of Angular forms, along with\n * `FormGroup` and `FormArray`. It extends the `AbstractControl` class that\n * implements most of the base functionality for accessing the value, validation status,\n * user interactions and events.\n *\n * @see `AbstractControl`\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see [Usage Notes](#usage-notes)\n *\n * @usageNotes\n *\n * ### Initializing Form Controls\n *\n * Instantiate a `FormControl`, with an initial value.\n *\n * ```ts\n * const control = new FormControl('some value');\n * console.log(control.value); // 'some value'\n *```\n *\n * The following example initializes the control with a form state object. The `value`\n * and `disabled` keys are required in this case.\n *\n * ```ts\n * const control = new FormControl({ value: 'n/a', disabled: true });\n * console.log(control.value); // 'n/a'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * The following example initializes the control with a sync validator.\n *\n * ```ts\n * const control = new FormControl('', Validators.required);\n * console.log(control.value); // ''\n * console.log(control.status); // 'INVALID'\n * ```\n *\n * The following example initializes the control using an options object.\n *\n * ```ts\n * const control = new FormControl('', {\n * validators: Validators.required,\n * asyncValidators: myAsyncValidator\n * });\n * ```\n *\n * ### Configure the control to update on a blur event\n *\n * Set the `updateOn` option to `'blur'` to update on the blur `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'blur' });\n * ```\n *\n * ### Configure the control to update on a submit event\n *\n * Set the `updateOn` option to `'submit'` to update on a submit `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'submit' });\n * ```\n *\n * ### Reset the control back to an initial value\n *\n * You reset to a specific form state by passing through a standalone\n * value or a form state object that contains both a value and a disabled state\n * (these are the only two properties that cannot be calculated).\n *\n * ```ts\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n *\n * control.reset('Drew');\n *\n * console.log(control.value); // 'Drew'\n * ```\n *\n * ### Reset the control back to an initial value and disabled\n *\n * ```\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n * console.log(control.status); // 'VALID'\n *\n * control.reset({ value: 'Drew', disabled: true });\n *\n * console.log(control.value); // 'Drew'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * @publicApi\n */\nexport class FormControl extends AbstractControl {\n /** @internal */\n _onChange: Function[] = [];\n\n /** @internal */\n _pendingValue: any;\n\n /** @internal */\n _pendingChange: any;\n\n /**\n * Creates a new `FormControl` instance.\n *\n * @param formState Initializes the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n formState: any = null,\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._applyFormState(formState);\n this._setUpdateStrategy(validatorOrOpts);\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n this._initObservables();\n }\n\n /**\n * Sets a new value for the form control.\n *\n * @param value The new value for the control.\n * @param options Configuration options that determine how the control proopagates changes\n * and emits events when the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * * `emitModelToViewChange`: When true or not supplied (the default), each change triggers an\n * `onChange` event to\n * update the view.\n * * `emitViewToModelChange`: When true or not supplied (the default), each change triggers an\n * `ngModelChange`\n * event to update the model.\n *\n */\n setValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n (this as{value: any}).value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach(\n (changeFn) => changeFn(this.value, options.emitViewToModelChange !== false));\n }\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of a control.\n *\n * This function is functionally the same as {@link FormControl#setValue setValue} at this level.\n * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and\n * `FormArrays`, where it does behave differently.\n *\n * @see `setValue` for options\n */\n patchValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n this.setValue(value, options);\n }\n\n /**\n * Resets the form control, marking it `pristine` and `untouched`, and setting\n * the value to null.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n *\n */\n reset(formState: any = null, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n this._pendingChange = false;\n }\n\n /**\n * @internal\n */\n _updateValue() {}\n\n /**\n * @internal\n */\n _anyControls(condition: Function): boolean { return false; }\n\n /**\n * @internal\n */\n _allControlsDisabled(): boolean { return this.disabled; }\n\n /**\n * Register a listener for change events.\n *\n * @param fn The method that is called when the value changes\n */\n registerOnChange(fn: Function): void { this._onChange.push(fn); }\n\n /**\n * @internal\n */\n _clearChangeFns(): void {\n this._onChange = [];\n this._onDisabledChange = [];\n this._onCollectionChange = () => {};\n }\n\n /**\n * Register a listener for disabled events.\n *\n * @param fn The method that is called when the disabled status changes.\n */\n registerOnDisabledChange(fn: (isDisabled: boolean) => void): void {\n this._onDisabledChange.push(fn);\n }\n\n /**\n * @internal\n */\n _forEachChild(cb: Function): void {}\n\n /** @internal */\n _syncPendingControls(): boolean {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty) this.markAsDirty();\n if (this._pendingTouched) this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, {onlySelf: true, emitModelToViewChange: false});\n return true;\n }\n }\n return false;\n }\n\n private _applyFormState(formState: any) {\n if (this._isBoxedValue(formState)) {\n (this as{value: any}).value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({onlySelf: true, emitEvent: false}) :\n this.enable({onlySelf: true, emitEvent: false});\n } else {\n (this as{value: any}).value = this._pendingValue = formState;\n }\n }\n}\n\n/**\n * Tracks the value and validity state of a group of `FormControl` instances.\n *\n * A `FormGroup` aggregates the values of each child `FormControl` into one object,\n * with each control name as the key. It calculates its status by reducing the status values\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormArray`.\n *\n * When instantiating a `FormGroup`, pass in a collection of child controls as the first\n * argument. The key for each child registers the name for the control.\n *\n * @usageNotes\n *\n * ### Create a form group with 2 controls\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('Nancy', Validators.minLength(2)),\n * last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value); // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status); // 'VALID'\n * ```\n *\n * ### Create a form group with a group-level validator\n *\n * You include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('', Validators.minLength(2)),\n * passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n * return g.get('password').value === g.get('passwordConfirm').value\n * ? null : {'mismatch': true};\n * }\n * ```\n *\n * Like `FormControl` instances, you choose to pass in\n * validators and async validators as part of an options object.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('')\n * passwordConfirm: new FormControl('')\n * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });\n * ```\n *\n * ### Set the updateOn property for all controls in a form group\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * group level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormGroup({\n * one: new FormControl()\n * }, { updateOn: 'blur' });\n * ```\n *\n * @publicApi\n */\nexport class FormGroup extends AbstractControl {\n /**\n * Creates a new `FormGroup` instance.\n *\n * @param controls A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: {[key: string]: AbstractControl},\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Registers a control with the group's list of controls.\n *\n * This method does not update the value or validity of the control.\n * Use {@link FormGroup#addControl addControl} instead.\n *\n * @param name The control name to register in the collection\n * @param control Provides the control for the given name\n */\n registerControl(name: string, control: AbstractControl): AbstractControl {\n if (this.controls[name]) return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n }\n\n /**\n * Add a control to this group.\n *\n * This method also updates the value and validity of the control.\n *\n * @param name The control name to add to the collection\n * @param control Provides the control for the given name\n */\n addControl(name: string, control: AbstractControl): void {\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Remove a control from this group.\n *\n * @param name The control name to remove from the collection\n */\n removeControl(name: string): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Replace an existing control.\n *\n * @param name The control name to replace in the collection\n * @param control Provides the control for the given name\n */\n setControl(name: string, control: AbstractControl): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n if (control) this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Check whether there is an enabled control with the given name in the group.\n *\n * Reports false for disabled controls. If you'd like to check for existence in the group\n * only, use {@link AbstractControl#get get} instead.\n *\n * @param name The control name to check for existence in the collection\n *\n * @returns false for disabled controls, true otherwise.\n */\n contains(controlName: string): boolean {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n }\n\n /**\n * Sets the value of the `FormGroup`. It accepts an object that matches\n * the structure of the group, with control names as keys.\n *\n * @usageNotes\n * ### Set the complete value for the form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n *\n * console.log(form.value); // {first: null, last: null}\n *\n * form.setValue({first: 'Nancy', last: 'Drew'});\n * console.log(form.value); // {first: 'Nancy', last: 'Drew'}\n * ```\n *\n * @throws When strict checks fail, such as setting the value of a control\n * that doesn't exist or if you excluding the value of a control.\n *\n * @param value The new value for the control that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n */\n setValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n this._checkAllValuesPresent(value);\n Object.keys(value).forEach(name => {\n this._throwIfControlMissing(name);\n this.controls[name].setValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormGroup`. It accepts an object with control\n * names as keys, and does its best to match the values to the correct controls\n * in the group.\n *\n * It accepts both super-sets and sub-sets of the group without throwing an error.\n *\n * @usageNotes\n * ### Patch the value for a form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n * console.log(form.value); // {first: null, last: null}\n *\n * form.patchValue({first: 'Nancy'});\n * console.log(form.value); // {first: 'Nancy', last: null}\n * ```\n *\n * @param value The object that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes and\n * emits events after the value is patched.\n * * `onlySelf`: When true, each change only affects this control and not its parent. Default is\n * true.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n Object.keys(value).forEach(name => {\n if (this.controls[name]) {\n this.controls[name].patchValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormGroup`, marks all descendants are marked `pristine` and `untouched`, and\n * the value of all descendants to null.\n *\n * You reset to a specific form state by passing in a map of states\n * that matches the structure of your form, with control names as keys. The state\n * is a standalone value or a form state object with both a value and a disabled\n * status.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events when the group is reset.\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * @usageNotes\n *\n * ### Reset the form group values\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * console.log(form.value); // {first: 'first name', last: 'last name'}\n *\n * form.reset({ first: 'name', last: 'last name' });\n *\n * console.log(form.value); // {first: 'name', last: 'last name'}\n * ```\n *\n * ### Reset the form group values and disabled status\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * form.reset({\n * first: {value: 'name', disabled: true},\n * last: 'last'\n * });\n *\n * console.log(this.form.value); // {first: 'name', last: 'last name'}\n * console.log(this.form.get('first').status); // 'DISABLED'\n * ```\n */\n reset(value: any = {}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n control.reset(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the `FormGroup`, including any disabled controls.\n *\n * Retrieves all values regardless of disabled status.\n * The `value` property is the best way to get the value of the group, because\n * it excludes disabled controls in the `FormGroup`.\n */\n getRawValue(): any {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n acc[name] = control instanceof FormControl ? control.value : (<any>control).getRawValue();\n return acc;\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this._reduceChildren(false, (updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(name: string): void {\n if (!Object.keys(this.controls).length) {\n throw new Error(`\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.controls[name]) {\n throw new Error(`Cannot find form control with name: ${name}.`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: (v: any, k: string) => void): void {\n Object.keys(this.controls).forEach(k => cb(this.controls[k], k));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n });\n }\n\n /** @internal */\n _updateValue(): void { (this as{value: any}).value = this._reduceValue(); }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n let res = false;\n this._forEachChild((control: AbstractControl, name: string) => {\n res = res || (this.contains(name) && condition(control));\n });\n return res;\n }\n\n /** @internal */\n _reduceValue() {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n if (control.enabled || this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n }\n\n /** @internal */\n _reduceChildren(initValue: any, fn: Function) {\n let res = initValue;\n this._forEachChild(\n (control: AbstractControl, name: string) => { res = fn(res, control, name); });\n return res;\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const controlName of Object.keys(this.controls)) {\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n if (value[name] === undefined) {\n throw new Error(`Must supply a value for form control with name: '${name}'.`);\n }\n });\n }\n}\n\n/**\n * Tracks the value and validity state of an array of `FormControl`,\n * `FormGroup` or `FormArray` instances.\n *\n * A `FormArray` aggregates the values of each child `FormControl` into an array.\n * It calculates its status by reducing the status values of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormGroup`.\n *\n * @usageNotes\n *\n * ### Create an array of form controls\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy', Validators.minLength(2)),\n * new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value); // ['Nancy', 'Drew']\n * console.log(arr.status); // 'VALID'\n * ```\n *\n * ### Create a form array with array-level validators\n *\n * You include array-level validators and async validators. These come in handy\n * when you want to perform validation that considers the value of more than one child\n * control.\n *\n * The two types of validators are passed in separately as the second and third arg\n * respectively, or together as part of an options object.\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy'),\n * new FormControl('Drew')\n * ], {validators: myValidator, asyncValidators: myAsyncValidator});\n * ```\n *\n * ### Set the updateOn property for all controls in a form array\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * array level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl()\n * ], {updateOn: 'blur'});\n * ```\n *\n * ### Adding or removing controls from a form array\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that result in strange and unexpected behavior such\n * as broken change detection.\n *\n * @publicApi\n */\nexport class FormArray extends AbstractControl {\n /**\n * Creates a new `FormArray` instance.\n *\n * @param controls An array of child controls. Each child control is given an index\n * where it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: AbstractControl[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Get the `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to retrieve the control\n */\n at(index: number): AbstractControl { return this.controls[index]; }\n\n /**\n * Insert a new `AbstractControl` at the end of the array.\n *\n * @param control Form control to be inserted\n */\n push(control: AbstractControl): void {\n this.controls.push(control);\n this._registerControl(control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Insert a new `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to insert the control\n * @param control Form control to be inserted\n */\n insert(index: number, control: AbstractControl): void {\n this.controls.splice(index, 0, control);\n\n this._registerControl(control);\n this.updateValueAndValidity();\n }\n\n /**\n * Remove the control at the given `index` in the array.\n *\n * @param index Index in the array to remove the control\n */\n removeAt(index: number): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n this.updateValueAndValidity();\n }\n\n /**\n * Replace an existing control.\n *\n * @param index Index in the array to replace the control\n * @param control The `AbstractControl` control to replace the existing control\n */\n setControl(index: number, control: AbstractControl): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n\n if (control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n }\n\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Length of the control array.\n */\n get length(): number { return this.controls.length; }\n\n /**\n * Sets the value of the `FormArray`. It accepts an array that matches\n * the structure of the control.\n *\n * This method performs strict checks, and throws an error if you try\n * to set the value of a control that doesn't exist or if you exclude the\n * value of a control.\n *\n * @usageNotes\n * ### Set the values for the controls in the form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.setValue(['Nancy', 'Drew']);\n * console.log(arr.value); // ['Nancy', 'Drew']\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n setValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._checkAllValuesPresent(value);\n value.forEach((newValue: any, index: number) => {\n this._throwIfControlMissing(index);\n this.at(index).setValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormArray`. It accepts an array that matches the\n * structure of the control, and does its best to match the values to the correct\n * controls in the group.\n *\n * It accepts both super-sets and sub-sets of the array without throwing an error.\n *\n * @usageNotes\n * ### Patch the values for controls in a form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.patchValue(['Nancy']);\n * console.log(arr.value); // ['Nancy', null]\n * ```\n *\n * @param value Array of latest values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n value.forEach((newValue: any, index: number) => {\n if (this.at(index)) {\n this.at(index).patchValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the\n * value of all descendants to null or null maps.\n *\n * You reset to a specific form state by passing in an array of states\n * that matches the structure of the control. The state is a standalone value\n * or a form state object with both a value and a disabled status.\n *\n * @usageNotes\n * ### Reset the values in a form array\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * arr.reset(['name', 'last name']);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * ```\n *\n * ### Reset the values in a form array and the disabled status for the first control\n *\n * ```\n * this.arr.reset([\n * {value: 'name', disabled: true},\n * 'last'\n * ]);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * console.log(this.arr.get(0).status); // 'DISABLED'\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n reset(value: any = [], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, index: number) => {\n control.reset(value[index], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the array, including any disabled controls.\n *\n * Reports all values regardless of disabled status.\n * For enabled controls only, the `value` property is the best way to get the value of the array.\n */\n getRawValue(): any[] {\n return this.controls.map((control: AbstractControl) => {\n return control instanceof FormControl ? control.value : (<any>control).getRawValue();\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this.controls.reduce((updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(index: number): void {\n if (!this.controls.length) {\n throw new Error(`\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.at(index)) {\n throw new Error(`Cannot find form control at index ${index}`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: Function): void {\n this.controls.forEach((control: AbstractControl, index: number) => { cb(control, index); });\n }\n\n /** @internal */\n _updateValue(): void {\n (this as{value: any}).value =\n this.controls.filter((control) => control.enabled || this.disabled)\n .map((control) => control.value);\n }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n return this.controls.some((control: AbstractControl) => control.enabled && condition(control));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => this._registerControl(control));\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, i: number) => {\n if (value[i] === undefined) {\n throw new Error(`Must supply a value for form control at index: ${i}.`);\n }\n });\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const control of this.controls) {\n if (control.enabled) return false;\n }\n return this.controls.length > 0 || this.disabled;\n }\n\n private _registerControl(control: AbstractControl) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AfterViewInit, Directive, EventEmitter, Inject, Input, Optional, Self, forwardRef} from '@angular/core';\n\nimport {AbstractControl, FormControl, FormGroup, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {NgControl} from './ng_control';\nimport {NgModel} from './ng_model';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from './shared';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgForm)\n};\n\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a top-level `FormGroup` instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags. You don't need to add a special selector.\n *\n * You optionally export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful. Many properties from the underlying\n * `FormGroup` instance are duplicated on the directive itself, so a reference to it\n * gives you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, use `NgModel` with a `name`\n * attribute. You may use `NgModelGroup` to create sub-groups within the form.\n *\n * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event emits the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * To import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * @usageNotes\n *\n * ### Migrating from deprecated ngForm selector\n *\n * Support for using `ngForm` element selector has been deprecated in Angular v6 and will be removed\n * in Angular v9.\n *\n * This has been deprecated to keep selectors consistent with other core Angular selectors,\n * as element selectors are typically written in kebab-case.\n *\n * Now deprecated:\n * ```html\n * <ngForm #myForm=\"ngForm\">\n * ```\n *\n * After:\n * ```html\n * <ng-form #myForm=\"ngForm\">\n * ```\n *\n * ### Listening for form submission\n *\n * The following example shows how to capture the form values from the \"ngSubmit\" event.\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Setting the update options\n *\n * The following example shows you how to change the \"updateOn\" option from its default using\n * ngFormOptions.\n *\n * ```html\n * <form [ngFormOptions]=\"{updateOn: 'blur'}\">\n * <input name=\"one\" ngModel> <!-- this ngModel will update on blur -->\n * </form>\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,ng-form,[ngForm]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n outputs: ['ngSubmit'],\n exportAs: 'ngForm'\n})\nexport class NgForm extends ControlContainer implements Form,\n AfterViewInit {\n /**\n * @description\n * Returns whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n private _directives: NgModel[] = [];\n\n /**\n * @description\n * The `FormGroup` instance created for this form.\n */\n form: FormGroup;\n\n /**\n * @description\n * Event emitter for the \"ngSubmit\" event\n */\n ngSubmit = new EventEmitter();\n\n /**\n * @description\n * Tracks options for the `NgForm` instance.\n *\n * **updateOn**: Sets the default `updateOn` value for all child `NgModels` below it\n * unless explicitly set by a child `NgModel` using `ngModelOptions`). Defaults to 'change'.\n * Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngFormOptions') options !: {updateOn?: FormHooks};\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this.form =\n new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n }\n\n /**\n * @description\n * Lifecycle method called after the view is initialized. For internal use only.\n */\n ngAfterViewInit() { this._setUpdateStrategy(); }\n\n /**\n * @description\n * The directive instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * The internal `FormGroup` instance.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it is always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Returns a map of the controls in this group.\n */\n get controls(): {[key: string]: AbstractControl} { return this.form.controls; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `NgModel` directive instance.\n */\n addControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n (dir as{control: FormControl}).control =\n <FormControl>container.registerControl(dir.name, dir.control);\n setUpControl(dir.control, dir);\n dir.control.updateValueAndValidity({emitEvent: false});\n this._directives.push(dir);\n });\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `NgModel` directive.\n *\n * @param dir The `NgModel` directive instance.\n */\n getControl(dir: NgModel): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `NgModel` instance from the internal list of directives\n *\n * @param dir The `NgModel` directive instance.\n */\n removeControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n removeDir<NgModel>(this._directives, dir);\n });\n }\n\n /**\n * @description\n * Adds a new `NgModelGroup` directive instance to the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n addFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n const group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({emitEvent: false});\n });\n }\n\n /**\n * @description\n * Removes the `NgModelGroup` directive instance from the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n removeFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n });\n }\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n getFormGroup(dir: NgModelGroup): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `NgControl` directive.\n *\n * @param dir The `NgControl` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: NgControl, value: any): void {\n resolvedPromise.then(() => {\n const ctrl = <FormControl>this.form.get(dir.path !);\n ctrl.setValue(value);\n });\n }\n\n /**\n * @description\n * Sets the value for this `FormGroup`.\n *\n * @param value The new value\n */\n setValue(value: {[key: string]: any}): void { this.control.setValue(value); }\n\n /**\n * @description\n * Method called when the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n private _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n }\n\n /** @internal */\n _findContainer(path: string[]): FormGroup {\n path.pop();\n return path.length ? <FormGroup>this.form.get(path) : this.form;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class TemplateDrivenErrors {\n static modelParentException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup's partner directive \"formControlName\" instead. Example:\n\n ${Examples.formControlName}\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n ${Examples.ngModelWithFormGroup}`);\n }\n\n static formGroupNameException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static missingNameException() {\n throw new Error(\n `If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as 'standalone' in ngModelOptions.\n\n Example 1: <input [(ngModel)]=\"person.firstName\" name=\"first\">\n Example 2: <input [(ngModel)]=\"person.firstName\" [ngModelOptions]=\"{standalone: true}\">`);\n }\n\n static modelGroupParentException() {\n throw new Error(`\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static ngFormWarning() {\n console.warn(`\n It looks like you're using 'ngForm'.\n\n Support for using the 'ngForm' element selector has been deprecated in Angular v6 and will be removed\n in Angular v9.\n\n Use 'ng-form' instead.\n\n Before:\n <ngForm #myForm=\"ngForm\">\n\n After:\n <ng-form #myForm=\"ngForm\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Inject, InjectionToken, Optional} from '@angular/core';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\n/**\n * @description\n * `InjectionToken` to provide to turn off the warning when using 'ngForm' deprecated selector.\n */\nexport const NG_FORM_SELECTOR_WARNING = new InjectionToken('NgFormSelectorWarning');\n\n/**\n * This directive is solely used to display warnings when the deprecated `ngForm` selector is used.\n *\n * @deprecated in Angular v6 and will be removed in Angular v9.\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'ngForm'})\nexport class NgFormSelectorWarning {\n /**\n * Static property used to track whether the deprecation warning for this selector has been sent.\n * Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngFormWarning = false;\n\n constructor(@Optional() @Inject(NG_FORM_SELECTOR_WARNING) ngFormWarning: string|null) {\n if (((!ngFormWarning || ngFormWarning === 'once') && !NgFormSelectorWarning._ngFormWarning) ||\n ngFormWarning === 'always') {\n TemplateDrivenErrors.ngFormWarning();\n NgFormSelectorWarning._ngFormWarning = true;\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {NgForm} from './ng_form';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\nexport const modelGroupProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgModelGroup)\n};\n\n/**\n * @description\n * Creates and binds a `FormGroup` instance to a DOM element.\n *\n * This directive can only be used as a child of `NgForm` (within `<form>` tags).\n *\n * Use this directive to validate a sub-group of your form separately from the\n * rest of your form, or if some values in your domain model make more sense\n * to consume together in a nested object.\n *\n * Provide a name for the sub-group and it will become the key\n * for the sub-group in the form's full value. If you need direct access, export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * @usageNotes\n *\n * ### Consuming controls in a grouping\n *\n * The following example shows you how to combine controls together in a sub-group\n * of the form.\n *\n * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup'})\nexport class NgModelGroup extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `NgModelGroup` bound to the directive. The name corresponds\n * to a key in the parent `NgForm`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelGroup') name !: string;\n\n constructor(\n @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelGroupParentException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\nimport {NgForm} from './ng_form';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor, setUpControl} from './shared';\nimport {TemplateDrivenErrors} from './template_driven_errors';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => NgModel)\n};\n\n/**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have and old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel` have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a `FormControl` instance from a domain model and binds it\n * to a form control element.\n *\n * The `FormControl` instance tracks the value, user interaction, and\n * validation status of the control and keeps the view synced with the model. If used\n * within a parent form, the directive also registers itself with the form as a child\n * control.\n *\n * This directive is used by itself or as part of a larger form. Use the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional `Input`. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\n * class sets the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-box syntax'), the value in the UI always syncs back to\n * the domain model in your class.\n *\n * To inspect the properties of the associated `FormControl` (like validity state), \n * export the directive into a local template variable using `ngModel` as the key (ex: `#myVar=\"ngModel\"`).\n * You then access the control using the directive's `control` property, \n * but most properties used (like `valid` and `dirty`) fall through to the control anyway for direct access. \n * See a full list of properties directly available in `AbstractControlDirective`.\n *\n * @see `RadioControlValueAccessor` \n * @see `SelectControlValueAccessor`\n * \n * @usageNotes\n * \n * ### Using ngModel on a standalone control\n *\n * The following examples show a simple standalone control using `ngModel`:\n *\n * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * In the context of a parent form, it's often unnecessary to include one-way or two-way binding, \n * as the parent form syncs the value for you. You access its properties by exporting it into a \n * local template variable using `ngForm` such as (`#f=\"ngForm\"`). Use the variable where \n * needed on form submission.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n * \n * ### Using ngModel within a form\n *\n * The following example shows controls using `ngModel` within a form:\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n * \n * ### Using a standalone ngModel within a group\n * \n * The following example shows you how to use a standalone ngModel control\n * within a form. This controls the display of the form, but doesn't contain form data.\n *\n * ```html\n * <form>\n * <input name=\"login\" ngModel placeholder=\"Login\">\n * <input type=\"checkbox\" ngModel [ngModelOptions]=\"{standalone: true}\"> Show more options?\n * </form>\n * <!-- form value: {login: ''} -->\n * ```\n * \n * ### Setting the ngModel name attribute through options\n * \n * The following example shows you an alternate way to set the name attribute. The name attribute is used\n * within a custom form component, and the name `@Input` property serves a different purpose.\n *\n * ```html\n * <form>\n * <my-person-control name=\"Nancy\" ngModel [ngModelOptions]=\"{name: 'user'}\">\n * </my-person-control>\n * </form>\n * <!-- form value: {user: ''} -->\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[ngModel]:not([formControlName]):not([formControl])',\n providers: [formControlBinding],\n exportAs: 'ngModel'\n})\nexport class NgModel extends NgControl implements OnChanges,\n OnDestroy {\n public readonly control: FormControl = new FormControl();\n /** @internal */\n _registered = false;\n\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the name bound to the directive. The parent form\n * uses this name as a key to retrieve this control's value.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks whether the control is disabled.\n */\n // TODO(issue/24571): remove '!'.\n @Input('disabled') isDisabled !: boolean;\n\n /**\n * @description\n * Tracks the value bound to this directive.\n */\n @Input('ngModel') model: any;\n\n /**\n * @description\n * Tracks the configuration options for this `ngModel` instance.\n *\n * **name**: An alternative to setting the name attribute on the form control element. See\n * the [example](api/forms/NgModel#using-ngmodel-on-a-standalone-control) for using `NgModel`\n * as a standalone control.\n *\n * **standalone**: When set to true, the `ngModel` will not register itself with its parent form,\n * and acts as if it's not in the form. Defaults to false.\n *\n * **updateOn**: Defines the event upon which the form control value and validity update.\n * Defaults to 'change'. Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelOptions')\n options !: {name?: string, standalone?: boolean, updateOn?: FormHooks};\n\n /**\n * @description\n * Event emitter for producing the `ngModelChange` event after\n * the view model updates.\n */\n @Output('ngModelChange') update = new EventEmitter();\n\n constructor(@Optional() @Host() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[]) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n this._checkForErrors();\n if (!this._registered) this._setUpControl();\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal\n * use only.\n */\n ngOnDestroy(): void { this.formDirective && this.formDirective.removeControl(this); }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] {\n return this._parent ? controlPath(this.name, this._parent) : [this.name];\n }\n\n /**\n * @description\n * The top-level directive for this control if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value emitted by `ngModelChange`.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _setUpControl(): void {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() :\n this.formDirective.addControl(this);\n this._registered = true;\n }\n\n private _setUpdateStrategy(): void {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n }\n\n private _isStandalone(): boolean {\n return !this._parent || !!(this.options && this.options.standalone);\n }\n\n private _setUpStandalone(): void {\n setUpControl(this.control, this);\n this.control.updateValueAndValidity({emitEvent: false});\n }\n\n private _checkForErrors(): void {\n if (!this._isStandalone()) {\n this._checkParentType();\n }\n this._checkName();\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) &&\n this._parent instanceof AbstractFormGroupDirective) {\n TemplateDrivenErrors.formGroupNameException();\n } else if (\n !(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelParentException();\n }\n }\n\n private _checkName(): void {\n if (this.options && this.options.name) this.name = this.options.name;\n\n if (!this._isStandalone() && !this.name) {\n TemplateDrivenErrors.missingNameException();\n }\n }\n\n private _updateValue(value: any): void {\n resolvedPromise.then(\n () => { this.control.setValue(value, {emitViewToModelChange: false}); });\n }\n\n private _updateDisabled(changes: SimpleChanges) {\n const disabledValue = changes['isDisabled'].currentValue;\n\n const isDisabled =\n disabledValue === '' || (disabledValue && disabledValue !== 'false');\n\n resolvedPromise.then(() => {\n if (isDisabled && !this.control.disabled) {\n this.control.disable();\n } else if (!isDisabled && this.control.disabled) {\n this.control.enable();\n }\n });\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, InjectionToken, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, isPropertyUpdated, selectValueAccessor, setUpControl} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\n\n/**\n * Token to provide to turn off the ngModel warning on formControl and formControlName.\n */\nexport const NG_MODEL_WITH_FORM_CONTROL_WARNING =\n new InjectionToken('NgModelWithFormControlWarning');\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlDirective)\n};\n\n/**\n * @description\n * * Syncs a standalone `FormControl` instance to a form control element.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Registering a single form control\n * \n * The following examples shows how to register a standalone control and set its value.\n *\n * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <input [formControl]=\"control\" [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <input [formControl]=\"control\">\n * ```\n *\n * ```ts\n * this.control.setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControl]', providers: [formControlBinding], exportAs: 'ngForm'})\n\nexport class FormControlDirective extends NgControl implements OnChanges {\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControl') form !: FormControl;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlDirective. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular `FormControlDirective` instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(@Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|null) {\n super();\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._isControlChanged(changes)) {\n setUpControl(this.form, this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this.form.updateValueAndValidity({emitEvent: false});\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning(\n 'formControl', FormControlDirective, this, this._ngModelWarningConfig);\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * The `FormControl` bound to this directive.\n */\n get control(): FormControl { return this.form; }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _isControlChanged(changes: {[key: string]: any}): boolean {\n return changes.hasOwnProperty('form');\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\nimport {FormArray, FormControl, FormGroup} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators} from '../../validators';\nimport {ControlContainer} from '../control_container';\nimport {Form} from '../form_interface';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {cleanUpControl, composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from '../shared';\n\nimport {FormControlName} from './form_control_name';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupDirective)\n};\n\n/**\n * @description\n *\n * Binds an existing `FormGroup` to a DOM element.\n *\n * This directive accepts an existing `FormGroup` instance. It will then use this\n * `FormGroup` instance to match any child `FormControl`, `FormGroup`,\n * and `FormArray` instances to child `FormControlName`, `FormGroupName`,\n * and `FormArrayName` directives.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * ### Register Form Group\n *\n * The following example registers a `FormGroup` with first name and last name controls,\n * and listens for the *ngSubmit* event when the button is clicked.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector: '[formGroup]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n exportAs: 'ngForm'\n})\nexport class FormGroupDirective extends ControlContainer implements Form,\n OnChanges {\n /**\n * @description\n * Reports whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n // TODO(issue/24571): remove '!'.\n private _oldForm !: FormGroup;\n\n /**\n * @description\n * Tracks the list of added `FormControlName` instances\n */\n directives: FormControlName[] = [];\n\n /**\n * @description\n * Tracks the `FormGroup` bound to this directive.\n */\n @Input('formGroup') form: FormGroup = null !;\n\n /**\n * @description\n * Emits an event when the form submission has been triggered.\n */\n @Output() ngSubmit = new EventEmitter();\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) private _validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: any[]) {\n super();\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n }\n }\n\n /**\n * @description\n * Returns this directive's instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * Returns the `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `FormControlName` directive instance.\n */\n addControl(dir: FormControlName): FormControl {\n const ctrl: any = this.form.get(dir.path);\n setUpControl(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n this.directives.push(dir);\n return ctrl;\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `FormControlName` directive\n *\n * @param dir The `FormControlName` directive instance.\n */\n getControl(dir: FormControlName): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `FormControlName` instance from the internal list of directives\n *\n * @param dir The `FormControlName` directive instance.\n */\n removeControl(dir: FormControlName): void { removeDir<FormControlName>(this.directives, dir); }\n\n /**\n * Adds a new `FormGroupName` directive instance to the form.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n addFormGroup(dir: FormGroupName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form group.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n removeFormGroup(dir: FormGroupName): void {}\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance\n *\n * @param dir The `FormGroupName` directive instance.\n */\n getFormGroup(dir: FormGroupName): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Adds a new `FormArrayName` directive instance to the form.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n addFormArray(dir: FormArrayName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form array.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n removeFormArray(dir: FormArrayName): void {}\n\n /**\n * @description\n * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n getFormArray(dir: FormArrayName): FormArray { return <FormArray>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `FormControlName` directive.\n *\n * @param dir The `FormControlName` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: FormControlName, value: any): void {\n const ctrl  = <FormControl>this.form.get(dir.path);\n ctrl.setValue(value);\n }\n\n /**\n * @description\n * Method called with the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n\n /** @internal */\n _updateDomValue() {\n this.directives.forEach(dir => {\n const newCtrl: any = this.form.get(dir.path);\n if (dir.control !== newCtrl) {\n cleanUpControl(dir.control, dir);\n if (newCtrl) setUpControl(newCtrl, dir);\n (dir as{control: FormControl}).control = newCtrl;\n }\n });\n\n this.form._updateTreeValidity({emitEvent: false});\n }\n\n private _updateRegistrations() {\n this.form._registerOnCollectionChange(() => this._updateDomValue());\n if (this._oldForm) this._oldForm._registerOnCollectionChange(() => {});\n this._oldForm = this.form;\n }\n\n private _updateValidators() {\n const sync = composeValidators(this._validators);\n this.form.validator = Validators.compose([this.form.validator !, sync !]);\n\n const async = composeAsyncValidators(this._asyncValidators);\n this.form.asyncValidator = Validators.composeAsync([this.form.asyncValidator !, async !]);\n }\n\n private _checkFormPresent() {\n if (!this.form) {\n ReactiveErrors.missingFormException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormArray} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {composeAsyncValidators, composeValidators, controlPath} from '../shared';\nimport {AsyncValidatorFn, ValidatorFn} from '../validators';\n\nimport {FormGroupDirective} from './form_group_directive';\n\nexport const formGroupNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormGroup` to a DOM element.\n *\n * This directive can only be used with a parent `FormGroupDirective`.\n *\n * It accepts the string name of the nested `FormGroup` to link, and\n * looks for a `FormGroup` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * Use nested form groups to validate a sub-group of a\n * form separately from the rest or to group the values of certain\n * controls into their own nested object.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n *\n * @usageNotes\n * \n * ### Access the group by name\n * \n * The following example uses the {@link AbstractControl#get get} method to access the \n * associated `FormGroup`\n *\n * ```ts\n * this.form.get('name');\n * ```\n * \n * ### Access individual controls in the group\n * \n * The following example uses the {@link AbstractControl#get get} method to access \n * individual controls within the group using dot syntax.\n *\n * ```ts\n * this.form.get('name.first');\n * ```\n *\n * ### Register a nested `FormGroup`.\n * \n * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,\n * and provides methods to retrieve the nested `FormGroup` and individual controls.\n *\n * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formGroupName]', providers: [formGroupNameProvider]})\nexport class FormGroupName extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `FormGroup` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formGroupName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.groupParentException();\n }\n }\n}\n\nexport const formArrayNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormArrayName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormArray` to a DOM element.\n *\n * This directive is designed to be used with a parent `FormGroupDirective` (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested `FormArray` you want to link, and\n * will look for a `FormArray` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formArrayName]', providers: [formArrayNameProvider]})\nexport class FormArrayName extends ControlContainer implements OnInit, OnDestroy {\n /** @internal */\n _parent: ControlContainer;\n\n /** @internal */\n _validators: any[];\n\n /** @internal */\n _asyncValidators: any[];\n\n /**\n * @description\n * Tracks the name of the `FormArray` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formArrayName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs are initialized. For internal use only.\n *\n * @throws If the directive does not have a valid parent.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormArray(this);\n }\n\n /**\n * @description\n * A lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormArray(this);\n }\n }\n\n /**\n * @description\n * The `FormArray` bound to this directive.\n */\n get control(): FormArray { return this.formDirective !.getFormArray(this); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): FormGroupDirective|null {\n return this._parent ? <FormGroupDirective>this._parent.formDirective : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators registered with this\n * directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n private _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.arrayParentException();\n }\n }\n}\n\nfunction _hasInvalidParent(parent: ControlContainer): boolean {\n return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n !(parent instanceof FormArrayName);\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\nimport {NG_MODEL_WITH_FORM_CONTROL_WARNING} from './form_control_directive';\nimport {FormGroupDirective} from './form_group_directive';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const controlNameBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlName)\n};\n\n/**\n * @description\n * Syncs a `FormControl` in an existing `FormGroup` to a form control\n * element by name.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n * \n * ### Register `FormControl` within a group\n *\n * The following example shows how to register multiple form controls within a form group\n * and set their value.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: `RadioControlValueAccessor`\n * * Selects: `SelectControlValueAccessor`\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\" [(ngModel)]=\"value\">\n * </form>\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\">\n * </form>\n * ```\n *\n * ```ts\n * this.form.get('first').setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName]', providers: [controlNameBinding]})\nexport class FormControlName extends NgControl implements OnChanges, OnDestroy {\n private _added = false;\n /**\n * @description\n * Internal reference to the view model value.\n * @internal\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n readonly control !: FormControl;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControlName') name !: string;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlName. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular FormControlName instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators:\n Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR) valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|\n null) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n if (!this._added) this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning('formControlName', FormControlName, this, this._ngModelWarningConfig);\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent !); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn {\n return composeAsyncValidators(this._rawAsyncValidators) !;\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof FormGroupName) &&\n this._parent instanceof AbstractFormGroupDirective) {\n ReactiveErrors.ngModelGroupException();\n } else if (\n !(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&\n !(this._parent instanceof FormArrayName)) {\n ReactiveErrors.controlParentException();\n }\n }\n\n private _setUpControl() {\n this._checkParentType();\n (this as{control: FormControl}).control = this.formDirective.addControl(this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this._added = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Input, OnChanges, SimpleChanges, StaticProvider, forwardRef} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {AbstractControl} from '../model';\nimport {NG_VALIDATORS, Validators} from '../validators';\n\n\n/**\n * @description\n * Defines the map of errors returned from failed validation checks.\n *\n * @publicApi\n */\nexport type ValidationErrors = {\n [key: string]: any\n};\n\n/**\n * @description\n * An interface implemented by classes that perform synchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom validator\n *\n * The following example implements the `Validator` interface to create a\n * validator directive with a custom error key.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors|null {\n * return {'custom': true};\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface Validator {\n /**\n * @description\n * Method that performs synchronous validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A map of validation errors if validation fails,\n * otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null;\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange?(fn: () => void): void;\n}\n\n/**\n * @description\n * An interface implemented by classes that perform asynchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom async validator directive\n *\n * The following example implements the `AsyncValidator` interface to create an\n * async validator directive with a custom error key.\n *\n * ```typescript\n * import { of as observableOf } from 'rxjs';\n *\n * @Directive({\n * selector: '[customAsyncValidator]',\n * providers: [{provide: NG_ASYNC_VALIDATORS, useExisting: CustomAsyncValidatorDirective, multi:\n * true}]\n * })\n * class CustomAsyncValidatorDirective implements AsyncValidator {\n * validate(control: AbstractControl): Observable<ValidationErrors|null> {\n * return observableOf({'custom': true});\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface AsyncValidator extends Validator {\n /**\n * @description\n * Method that performs async validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A promise or observable that resolves a map of validation errors\n * if validation fails, otherwise null.\n */\n validate(control: AbstractControl):\n Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RequiredValidator),\n multi: true\n};\n\n/**\n * @description\n * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const CHECKBOX_REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CheckboxRequiredValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds the `required` validator to any controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required validator using template-driven forms\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector:\n ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n providers: [REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class RequiredValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _required !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the required attribute bound to this directive.\n */\n @Input()\n get required(): boolean|string { return this._required; }\n\n set required(value: boolean|string) {\n this._required = value != null && value !== false && `${value}` !== 'false';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether the control is empty.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.required(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n\n/**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required checkbox validator using template-driven forms\n *\n * The following example shows how to add a checkbox required validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector:\n 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n providers: [CHECKBOX_REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class CheckboxRequiredValidator extends RequiredValidator {\n /**\n * @description\n * Method that validates whether or not the checkbox has been checked.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.requiredTrue(control) : null;\n }\n}\n\n/**\n * @description\n * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const EMAIL_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => EmailValidator),\n multi: true\n};\n\n/**\n * A directive that adds the `email` validator to controls marked with the\n * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding an email validator\n *\n * The following example shows how to add an email validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n providers: [EMAIL_VALIDATOR]\n})\nexport class EmailValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _enabled !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the email attribute bound to this directive.\n */\n @Input()\n set email(value: boolean|string) {\n this._enabled = value === '' || value === true || value === 'true';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether an email address is valid.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this._enabled ? Validators.email(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n/**\n * @description\n * A function that receives a control and synchronously returns a map of\n * validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface ValidatorFn { (control: AbstractControl): ValidationErrors|null; }\n\n/**\n * @description\n * A function that receives a control and returns a Promise or observable\n * that emits validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface AsyncValidatorFn {\n (control: AbstractControl): Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MIN_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MinLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds minimum length validation to controls marked with the\n * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` mult-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a minimum length validator\n *\n * The following example shows how to add a minimum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel minlength=\"4\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n providers: [MIN_LENGTH_VALIDATOR],\n host: {'[attr.minlength]': 'minlength ? minlength : null'}\n})\nexport class MinLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the minimum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() minlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('minlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value meets a minimum length\n * requirement. Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.minlength == null ? null : this._validator(control);\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.minLength(parseInt(this.minlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MAX_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaxLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds max length validation to controls marked with the\n * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a maximum length validator\n *\n * The following example shows how to add a maximum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel maxlength=\"25\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n providers: [MAX_LENGTH_VALIDATOR],\n host: {'[attr.maxlength]': 'maxlength ? maxlength : null'}\n})\nexport class MaxLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the maximum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() maxlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('maxlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value exceeds\n * the maximum length requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.maxlength != null ? this._validator(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const PATTERN_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => PatternValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds regex pattern validation to controls marked with the\n * `pattern` attribute. The regex must match the entire control value.\n * The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a pattern validator\n *\n * The following example shows how to add a pattern validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel pattern=\"[a-zA-Z ]*\">\n * ```\n * \n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n providers: [PATTERN_VALIDATOR],\n host: {'[attr.pattern]': 'pattern ? pattern : null'}\n})\nexport class PatternValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the pattern bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() pattern !: string | RegExp;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('pattern' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value matches the\n * the pattern requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null { return this._validator(control); }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void { this._validator = Validators.pattern(this.pattern); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\n\nimport {AsyncValidatorFn, ValidatorFn} from './directives/validators';\nimport {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup, FormHooks} from './model';\n\nfunction isAbstractControlOptions(options: AbstractControlOptions | {[key: string]: any}):\n options is AbstractControlOptions {\n return (<AbstractControlOptions>options).asyncValidators !== undefined ||\n (<AbstractControlOptions>options).validators !== undefined ||\n (<AbstractControlOptions>options).updateOn !== undefined;\n}\n\n/**\n * @description\n * Creates an `AbstractControl` from a user-specified configuration.\n *\n * The `FormBuilder` provides syntactic sugar that shortens creating instances of a `FormControl`,\n * `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to build complex\n * forms.\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@Injectable()\nexport class FormBuilder {\n /**\n * @description\n * Construct a new `FormGroup` instance.\n *\n * @param controlsConfig A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param options Configuration options object for the `FormGroup`. The object can\n * have two shapes:\n *\n * 1) `AbstractControlOptions` object (preferred), which consists of:\n * * `validators`: A synchronous validator function, or an array of validator functions\n * * `asyncValidators`: A single async validator or array of async validator functions\n * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur' |\n * submit')\n *\n * 2) Legacy configuration object, which consists of:\n * * `validator`: A synchronous validator function, or an array of validator functions\n * * `asyncValidator`: A single async validator or array of async validator functions\n *\n */\n group(\n controlsConfig: {[key: string]: any},\n options: AbstractControlOptions|{[key: string]: any}|null = null): FormGroup {\n const controls = this._reduceControls(controlsConfig);\n\n let validators: ValidatorFn|ValidatorFn[]|null = null;\n let asyncValidators: AsyncValidatorFn|AsyncValidatorFn[]|null = null;\n let updateOn: FormHooks|undefined = undefined;\n\n if (options != null) {\n if (isAbstractControlOptions(options)) {\n // `options` are `AbstractControlOptions`\n validators = options.validators != null ? options.validators : null;\n asyncValidators = options.asyncValidators != null ? options.asyncValidators : null;\n updateOn = options.updateOn != null ? options.updateOn : undefined;\n } else {\n // `options` are legacy form group options\n validators = options['validator'] != null ? options['validator'] : null;\n asyncValidators = options['asyncValidator'] != null ? options['asyncValidator'] : null;\n }\n }\n\n return new FormGroup(controls, {asyncValidators, updateOn, validators});\n }\n\n /**\n * @description\n * Construct a new `FormControl` with the given state, validators and options.\n *\n * @param formState Initializes the control with an initial state value, or\n * with an object that contains both a value and a disabled status.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n *\n * @usageNotes\n *\n * ### Initialize a control as disabled\n *\n * The following example returns a control with an initial value in a disabled state.\n *\n * <code-example path=\"forms/ts/formBuilder/form_builder_example.ts\"\n * linenums=\"false\" region=\"disabled-control\">\n * </code-example>\n */\n control(\n formState: any, validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormControl {\n return new FormControl(formState, validatorOrOpts, asyncValidator);\n }\n\n /**\n * Constructs a new `FormArray` from the given array of configurations,\n * validators and options.\n *\n * @param controlsConfig An array of child controls or control configs. Each\n * child control is given an index when it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n */\n array(\n controlsConfig: any[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormArray {\n const controls = controlsConfig.map(c => this._createControl(c));\n return new FormArray(controls, validatorOrOpts, asyncValidator);\n }\n\n /** @internal */\n _reduceControls(controlsConfig: {[k: string]: any}): {[key: string]: AbstractControl} {\n const controls: {[key: string]: AbstractControl} = {};\n Object.keys(controlsConfig).forEach(controlName => {\n controls[controlName] = this._createControl(controlsConfig[controlName]);\n });\n return controls;\n }\n\n /** @internal */\n _createControl(controlConfig: any): AbstractControl {\n if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n controlConfig instanceof FormArray) {\n return controlConfig;\n\n } else if (Array.isArray(controlConfig)) {\n const value = controlConfig[0];\n const validator: ValidatorFn = controlConfig.length > 1 ? controlConfig[1] : null;\n const asyncValidator: AsyncValidatorFn = controlConfig.length > 2 ? controlConfig[2] : null;\n return this.control(value, validator, asyncValidator);\n\n } else {\n return this.control(controlConfig);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = new Version('7.2.8');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive} from '@angular/core';\n\n/**\n * @description\n *\n * Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```\n * <form ngNativeValidate></form>\n * ```\n *\n * @publicApi\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n host: {'novalidate': ''},\n})\nexport class NgNoValidate {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule, Type} from '@angular/core';\n\nimport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nimport {DefaultValueAccessor} from './directives/default_value_accessor';\nimport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nimport {NgForm} from './directives/ng_form';\nimport {NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nimport {NgModel} from './directives/ng_model';\nimport {NgModelGroup} from './directives/ng_model_group';\nimport {NgNoValidate} from './directives/ng_no_validate_directive';\nimport {NumberValueAccessor} from './directives/number_value_accessor';\nimport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nimport {RangeValueAccessor} from './directives/range_value_accessor';\nimport {FormControlDirective} from './directives/reactive_directives/form_control_directive';\nimport {FormControlName} from './directives/reactive_directives/form_control_name';\nimport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nimport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nimport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nimport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\nimport {CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator} from './directives/validators';\n\nexport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nexport {ControlValueAccessor} from './directives/control_value_accessor';\nexport {DefaultValueAccessor} from './directives/default_value_accessor';\nexport {NgControl} from './directives/ng_control';\nexport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nexport {NgForm} from './directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING, NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nexport {NgModel} from './directives/ng_model';\nexport {NgModelGroup} from './directives/ng_model_group';\nexport {NumberValueAccessor} from './directives/number_value_accessor';\nexport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nexport {RangeValueAccessor} from './directives/range_value_accessor';\nexport {FormControlDirective, NG_MODEL_WITH_FORM_CONTROL_WARNING} from './directives/reactive_directives/form_control_directive';\nexport {FormControlName} from './directives/reactive_directives/form_control_name';\nexport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nexport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nexport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nexport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\n\nexport const SHARED_FORM_DIRECTIVES: Type<any>[] = [\n NgNoValidate,\n NgSelectOption,\n NgSelectMultipleOption,\n DefaultValueAccessor,\n NumberValueAccessor,\n RangeValueAccessor,\n CheckboxControlValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n NgControlStatus,\n NgControlStatusGroup,\n RequiredValidator,\n MinLengthValidator,\n MaxLengthValidator,\n PatternValidator,\n CheckboxRequiredValidator,\n EmailValidator,\n];\n\nexport const TEMPLATE_DRIVEN_DIRECTIVES: Type<any>[] =\n [NgModel, NgModelGroup, NgForm, NgFormSelectorWarning];\n\nexport const REACTIVE_DRIVEN_DIRECTIVES: Type<any>[] =\n [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n\n/**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\n@NgModule({\n declarations: SHARED_FORM_DIRECTIVES,\n exports: SHARED_FORM_DIRECTIVES,\n})\nexport class InternalFormsSharedModule {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModuleWithProviders, NgModule} from '@angular/core';\n\nimport {InternalFormsSharedModule, NG_FORM_SELECTOR_WARNING, NG_MODEL_WITH_FORM_CONTROL_WARNING, REACTIVE_DRIVEN_DIRECTIVES, TEMPLATE_DRIVEN_DIRECTIVES} from './directives';\nimport {RadioControlRegistry} from './directives/radio_control_value_accessor';\nimport {FormBuilder} from './form_builder';\n\n/**\n * Exports the required providers and directives for template-driven forms,\n * making them available for import by NgModules that import this module.\n *\n * @see [Forms Guide](/guide/forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n providers: [RadioControlRegistry],\n exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n})\nexport class FormsModule {\n /**\n * @description\n * Provides options for configuring the template-driven forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnDeprecatedNgFormSelector` Configures when to emit a warning when the deprecated\n * `ngForm` selector is used.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnDeprecatedNgFormSelector?: 'never' | 'once' | 'always',\n }): ModuleWithProviders<FormsModule> {\n return {\n ngModule: FormsModule,\n providers:\n [{provide: NG_FORM_SELECTOR_WARNING, useValue: opts.warnOnDeprecatedNgFormSelector}]\n };\n }\n}\n\n/**\n * Exports the required infrastructure and directives for reactive forms,\n * making them available for import by NgModules that import this module.\n * @see [Forms](guide/reactive-forms)\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n providers: [FormBuilder, RadioControlRegistry],\n exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n})\nexport class ReactiveFormsModule {\n /**\n * @description\n * Provides options for configuring the reactive forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`\n * binding is used with reactive form directives.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnNgModelWithFormControl: 'never' | 'once' | 'always'\n }): ModuleWithProviders<ReactiveFormsModule> {\n return {\n ngModule: ReactiveFormsModule,\n providers: [{\n provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,\n useValue: opts.warnOnNgModelWithFormControl\n }]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {InternalFormsSharedModule as ɵangular_packages_forms_forms_bc,REACTIVE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_bb,SHARED_FORM_DIRECTIVES as ɵangular_packages_forms_forms_z,TEMPLATE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_ba} from './src/directives';\nexport {CHECKBOX_VALUE_ACCESSOR as ɵangular_packages_forms_forms_a} from './src/directives/checkbox_value_accessor';\nexport {DEFAULT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_b} from './src/directives/default_value_accessor';\nexport {AbstractControlStatus as ɵangular_packages_forms_forms_c,ngControlStatusHost as ɵangular_packages_forms_forms_d} from './src/directives/ng_control_status';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_e} from './src/directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING as ɵangular_packages_forms_forms_f} from './src/directives/ng_form_selector_warning';\nexport {formControlBinding as ɵangular_packages_forms_forms_g} from './src/directives/ng_model';\nexport {modelGroupProvider as ɵangular_packages_forms_forms_h} from './src/directives/ng_model_group';\nexport {NgNoValidate as ɵangular_packages_forms_forms_bh} from './src/directives/ng_no_validate_directive';\nexport {NUMBER_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bd,NumberValueAccessor as ɵangular_packages_forms_forms_be} from './src/directives/number_value_accessor';\nexport {RADIO_VALUE_ACCESSOR as ɵangular_packages_forms_forms_i,RadioControlRegistry as ɵangular_packages_forms_forms_j} from './src/directives/radio_control_value_accessor';\nexport {RANGE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bf,RangeValueAccessor as ɵangular_packages_forms_forms_bg} from './src/directives/range_value_accessor';\nexport {NG_MODEL_WITH_FORM_CONTROL_WARNING as ɵangular_packages_forms_forms_k,formControlBinding as ɵangular_packages_forms_forms_l} from './src/directives/reactive_directives/form_control_directive';\nexport {controlNameBinding as ɵangular_packages_forms_forms_m} from './src/directives/reactive_directives/form_control_name';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_n} from './src/directives/reactive_directives/form_group_directive';\nexport {formArrayNameProvider as ɵangular_packages_forms_forms_p,formGroupNameProvider as ɵangular_packages_forms_forms_o} from './src/directives/reactive_directives/form_group_name';\nexport {SELECT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_q} from './src/directives/select_control_value_accessor';\nexport {NgSelectMultipleOption as ɵangular_packages_forms_forms_s,SELECT_MULTIPLE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_r} from './src/directives/select_multiple_control_value_accessor';\nexport {CHECKBOX_REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_u,EMAIL_VALIDATOR as ɵangular_packages_forms_forms_v,MAX_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_x,MIN_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_w,PATTERN_VALIDATOR as ɵangular_packages_forms_forms_y,REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_t} from './src/directives/validators';"],"names":["isPromise","isObservable","getDOM","Examples","looseIdentical","_buildValueString","_extractId","resolvedPromise","formControlBinding","formDirectiveProvider"],"mappings":"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"}
\ No newline at end of file

fesm5/forms.js

@@ -1,5 +1,5 @@
/**
- * @license Angular v7.2.7
+ * @license Angular v7.2.8
* (c) 2010-2019 Google LLC. https://angular.io/
* License: MIT
*/
@@ -6428,8 +6428,8 @@
}
else {
// `options` are legacy form group options
- validators = options.validator != null ? options.validator : null;
- asyncValidators = options.asyncValidator != null ? options.asyncValidator : null;
+ validators = options['validator'] != null ? options['validator'] : null;
+ asyncValidators = options['asyncValidator'] != null ? options['asyncValidator'] : null;
}
}
return new FormGroup(controls, { asyncValidators: asyncValidators, updateOn: updateOn, validators: validators });
@@ -6521,7 +6521,7 @@
/**
* @publicApi
*/
-var VERSION = new Version('7.2.7');
+var VERSION = new Version('7.2.8');
/**
* @license

fesm5/forms.js.map

@@ -1 +1 @@
-{"version":3,"file":"forms.js","sources":["../../../../../../packages/forms/src/directives/abstract_control_directive.ts","../../../../../../packages/forms/src/directives/control_container.ts","../../../../../../packages/forms/src/validators.ts","../../../../../../packages/forms/src/directives/control_value_accessor.ts","../../../../../../packages/forms/src/directives/checkbox_value_accessor.ts","../../../../../../packages/forms/src/directives/default_value_accessor.ts","../../../../../../packages/forms/src/directives/normalize_validator.ts","../../../../../../packages/forms/src/directives/number_value_accessor.ts","../../../../../../packages/forms/src/directives/ng_control.ts","../../../../../../packages/forms/src/directives/radio_control_value_accessor.ts","../../../../../../packages/forms/src/directives/range_value_accessor.ts","../../../../../../packages/forms/src/directives/error_examples.ts","../../../../../../packages/forms/src/directives/reactive_errors.ts","../../../../../../packages/forms/src/directives/select_control_value_accessor.ts","../../../../../../packages/forms/src/directives/select_multiple_control_value_accessor.ts","../../../../../../packages/forms/src/directives/shared.ts","../../../../../../packages/forms/src/directives/abstract_form_group_directive.ts","../../../../../../packages/forms/src/directives/ng_control_status.ts","../../../../../../packages/forms/src/model.ts","../../../../../../packages/forms/src/directives/ng_form.ts","../../../../../../packages/forms/src/directives/template_driven_errors.ts","../../../../../../packages/forms/src/directives/ng_form_selector_warning.ts","../../../../../../packages/forms/src/directives/ng_model_group.ts","../../../../../../packages/forms/src/directives/ng_model.ts","../../../../../../packages/forms/src/directives/reactive_directives/form_control_directive.ts","../../../../../../packages/forms/src/directives/reactive_directives/form_group_directive.ts","../../../../../../packages/forms/src/directives/reactive_directives/form_group_name.ts","../../../../../../packages/forms/src/directives/reactive_directives/form_control_name.ts","../../../../../../packages/forms/src/directives/validators.ts","../../../../../../packages/forms/src/form_builder.ts","../../../../../../packages/forms/src/version.ts","../../../../../../packages/forms/src/directives/ng_no_validate_directive.ts","../../../../../../packages/forms/src/directives.ts","../../../../../../packages/forms/src/form_providers.ts","../../../../../../packages/forms/src/forms.ts","../../../../../../packages/forms/public_api.ts","../../../../../../packages/forms/index.ts","../../../../../../packages/forms/forms.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable} from 'rxjs';\nimport {AbstractControl} from '../model';\nimport {ValidationErrors} from './validators';\n\n/**\n * @description\n * Base class for control directives.\n *\n * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.\n *\n * @publicApi\n */\nexport abstract class AbstractControlDirective {\n /**\n * @description\n * A reference to the underlying control.\n *\n * @returns the control that backs this directive. Most properties fall through to that instance.\n */\n abstract get control(): AbstractControl|null;\n\n /**\n * @description\n * Reports the value of the control if it is present, otherwise null.\n */\n get value(): any { return this.control ? this.control.value : null; }\n\n /**\n * @description\n * Reports whether the control is valid. A control is considered valid if no\n * validation errors exist with the current value.\n * If the control is not present, null is returned.\n */\n get valid(): boolean|null { return this.control ? this.control.valid : null; }\n\n /**\n * @description\n * Reports whether the control is invalid, meaning that an error exists in the input value.\n * If the control is not present, null is returned.\n */\n get invalid(): boolean|null { return this.control ? this.control.invalid : null; }\n\n /**\n * @description\n * Reports whether a control is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value. If the control is not present, null is\n * returned.\n */\n get pending(): boolean|null { return this.control ? this.control.pending : null; }\n\n /**\n * @description\n * Reports whether the control is disabled, meaning that the control is disabled\n * in the UI and is exempt from validation checks and excluded from aggregate\n * values of ancestor controls. If the control is not present, null is returned.\n */\n get disabled(): boolean|null { return this.control ? this.control.disabled : null; }\n\n /**\n * @description\n * Reports whether the control is enabled, meaning that the control is included in ancestor\n * calculations of validity or value. If the control is not present, null is returned.\n */\n get enabled(): boolean|null { return this.control ? this.control.enabled : null; }\n\n /**\n * @description\n * Reports the control's validation errors. If the control is not present, null is returned.\n */\n get errors(): ValidationErrors|null { return this.control ? this.control.errors : null; }\n\n /**\n * @description\n * Reports whether the control is pristine, meaning that the user has not yet changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get pristine(): boolean|null { return this.control ? this.control.pristine : null; }\n\n /**\n * @description\n * Reports whether the control is dirty, meaning that the user has changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get dirty(): boolean|null { return this.control ? this.control.dirty : null; }\n\n /**\n * @description\n * Reports whether the control is touched, meaning that the user has triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get touched(): boolean|null { return this.control ? this.control.touched : null; }\n\n /**\n * @description\n * Reports the validation status of the control. Possible values include:\n * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.\n * If the control is not present, null is returned.\n */\n get status(): string|null { return this.control ? this.control.status : null; }\n\n /**\n * @description\n * Reports whether the control is untouched, meaning that the user has not yet triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get untouched(): boolean|null { return this.control ? this.control.untouched : null; }\n\n /**\n * @description\n * Returns a multicasting observable that emits a validation status whenever it is\n * calculated for the control. If the control is not present, null is returned.\n */\n get statusChanges(): Observable<any>|null {\n return this.control ? this.control.statusChanges : null;\n }\n\n /**\n * @description\n * Returns a multicasting observable of value changes for the control that emits every time the\n * value of the control changes in the UI or programmatically.\n * If the control is not present, null is returned.\n */\n get valueChanges(): Observable<any>|null {\n return this.control ? this.control.valueChanges : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[]|null { return null; }\n\n /**\n * @description\n * Resets the control with the provided value if the control is present.\n */\n reset(value: any = undefined): void {\n if (this.control) this.control.reset(value);\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return this.control ? this.control.hasError(errorCode, path) : false;\n }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n return this.control ? this.control.getError(errorCode, path) : null;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {Form} from './form_interface';\n\n\n/**\n * @description\n * A base class for directives that contain multiple registered instances of `NgControl`.\n * Only used by the forms module.\n *\n * @publicApi\n */\nexport abstract class ControlContainer extends AbstractControlDirective {\n /**\n * @description\n * The name for the control\n */\n // TODO(issue/24571): remove '!'.\n name !: string;\n\n /**\n * @description\n * The top-level form directive for the control.\n */\n get formDirective(): Form|null { return null; }\n\n /**\n * @description\n * The path to this group.\n */\n get path(): string[]|null { return null; }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken, ɵisObservable as isObservable, ɵisPromise as isPromise} from '@angular/core';\nimport {Observable, forkJoin, from} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {AsyncValidatorFn, ValidationErrors, Validator, ValidatorFn} from './directives/validators';\nimport {AbstractControl, FormControl} from './model';\n\nfunction isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n}\n\n/**\n * @description\n * An `InjectionToken` for registering additional synchronous validators used with `AbstractControl`s.\n *\n * @see `NG_ASYNC_VALIDATORS`\n *\n * @usageNotes\n *\n * ### Providing a custom validator\n *\n * The following example registers a custom validator directive. Adding the validator to the\n * existing collection of validators requires the `multi: true` option.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors | null {\n * return { 'custom': true };\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport const NG_VALIDATORS = new InjectionToken<Array<Validator|Function>>('NgValidators');\n\n/**\n * @description\n * An `InjectionToken` for registering additional asynchronous validators used with `AbstractControl`s.\n *\n * @see `NG_VALIDATORS`\n *\n * @publicApi\n */\nexport const NG_ASYNC_VALIDATORS =\n new InjectionToken<Array<Validator|Function>>('NgAsyncValidators');\n\nconst EMAIL_REGEXP =\n /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n\n/**\n * @description\n * Provides a set of built-in validators that can be used by form controls.\n *\n * A validator is a function that processes a `FormControl` or collection of\n * controls and returns an error map or null. A null map means that validation has passed.\n *\n * @see [Form Validation](/guide/form-validation)\n *\n * @publicApi\n */\nexport class Validators {\n /**\n * @description\n * Validator that requires the control's value to be greater than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a minimum of 3\n *\n * ```typescript\n * const control = new FormControl(2, Validators.min(3));\n *\n * console.log(control.errors); // {min: {min: 3, actual: 2}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `min` property if the validation check fails, otherwise `null`.\n *\n */\n static min(min: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value < min ? {'min': {'min': min, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to be less than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a maximum of 15\n *\n * ```typescript\n * const control = new FormControl(16, Validators.max(15));\n *\n * console.log(control.errors); // {max: {max: 15, actual: 16}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `max` property if the validation check fails, otherwise `null`.\n *\n */\n static max(max: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n return !isNaN(value) && value > max ? {'max': {'max': max, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control have a non-empty value.\n *\n * @usageNotes\n *\n * ### Validate that the field is non-empty\n *\n * ```typescript\n * const control = new FormControl('', Validators.required);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map with the `required` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static required(control: AbstractControl): ValidationErrors|null {\n return isEmptyInputValue(control.value) ? {'required': true} : null;\n }\n\n /**\n * @description\n * Validator that requires the control's value be true. This validator is commonly\n * used for required checkboxes.\n *\n * @usageNotes\n *\n * ### Validate that the field value is true\n *\n * ```typescript\n * const control = new FormControl('', Validators.requiredTrue);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map that contains the `required` property\n * set to `true` if the validation check fails, otherwise `null`.\n */\n static requiredTrue(control: AbstractControl): ValidationErrors|null {\n return control.value === true ? null : {'required': true};\n }\n\n /**\n * @description\n * Validator that requires the control's value pass an email validation test.\n *\n * @usageNotes\n *\n * ### Validate that the field matches a valid email pattern\n *\n * ```typescript\n * const control = new FormControl('bad@', Validators.email);\n *\n * console.log(control.errors); // {email: true}\n * ```\n *\n * @returns An error map with the `email` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static email(control: AbstractControl): ValidationErrors|null {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n return EMAIL_REGEXP.test(control.value) ? null : {'email': true};\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be greater than or equal\n * to the provided minimum length. This validator is also provided by default if you use the\n * the HTML5 `minlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has a minimum of 3 characters\n *\n * ```typescript\n * const control = new FormControl('ng', Validators.minLength(3));\n *\n * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}\n * ```\n *\n * ```html\n * <input minlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `minlength` if the validation check fails, otherwise `null`.\n */\n static minLength(minLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const length: number = control.value ? control.value.length : 0;\n return length < minLength ?\n {'minlength': {'requiredLength': minLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be less than or equal\n * to the provided maximum length. This validator is also provided by default if you use the\n * the HTML5 `maxlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has maximum of 5 characters\n *\n * ```typescript\n * const control = new FormControl('Angular', Validators.maxLength(5));\n *\n * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}\n * ```\n *\n * ```html\n * <input maxlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `maxlength` property if the validation check fails, otherwise `null`.\n */\n static maxLength(maxLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const length: number = control.value ? control.value.length : 0;\n return length > maxLength ?\n {'maxlength': {'requiredLength': maxLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to match a regex pattern. This validator is also\n * provided by default if you use the HTML5 `pattern` attribute.\n *\n * Note that if a Regexp is provided, the Regexp is used as is to test the values. On the other\n * hand, if a string is passed, the `^` character is prepended and the `$` character is\n * appended to the provided string (if not already present), and the resulting regular\n * expression is used to test the values.\n *\n * @usageNotes\n *\n * ### Validate that the field only contains letters or spaces\n *\n * ```typescript\n * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));\n *\n * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}\n * ```\n *\n * ```html\n * <input pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `pattern` property if the validation check fails, otherwise `null`.\n */\n static pattern(pattern: string|RegExp): ValidatorFn {\n if (!pattern) return Validators.nullValidator;\n let regex: RegExp;\n let regexStr: string;\n if (typeof pattern === 'string') {\n regexStr = '';\n\n if (pattern.charAt(0) !== '^') regexStr += '^';\n\n regexStr += pattern;\n\n if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$';\n\n regex = new RegExp(regexStr);\n } else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value: string = control.value;\n return regex.test(value) ? null :\n {'pattern': {'requiredPattern': regexStr, 'actualValue': value}};\n };\n }\n\n /**\n * @description\n * Validator that performs no operation.\n */\n static nullValidator(control: AbstractControl): ValidationErrors|null { return null; }\n\n /**\n * @description\n * Compose multiple validators into a single function that returns the union\n * of the individual error maps for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error maps of the validators if the validation check fails, otherwise `null`.\n */\n static compose(validators: null): null;\n static compose(validators: (ValidatorFn|null|undefined)[]): ValidatorFn|null;\n static compose(validators: (ValidatorFn|null|undefined)[]|null): ValidatorFn|null {\n if (!validators) return null;\n const presentValidators: ValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n return _mergeErrors(_executeValidators(control, presentValidators));\n };\n }\n\n /**\n * @description\n * Compose multiple async validators into a single function that returns the union\n * of the individual error objects for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error objects of the async validators if the validation check fails, otherwise `null`.\n */\n static composeAsync(validators: (AsyncValidatorFn|null)[]): AsyncValidatorFn|null {\n if (!validators) return null;\n const presentValidators: AsyncValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n const observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n return forkJoin(observables).pipe(map(_mergeErrors));\n };\n }\n}\n\nfunction isPresent(o: any): boolean {\n return o != null;\n}\n\nexport function toObservable(r: any): Observable<any> {\n const obs = isPromise(r) ? from(r) : r;\n if (!(isObservable(obs))) {\n throw new Error(`Expected validator to return Promise or Observable.`);\n }\n return obs;\n}\n\nfunction _executeValidators(control: AbstractControl, validators: ValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _executeAsyncValidators(control: AbstractControl, validators: AsyncValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _mergeErrors(arrayOfErrors: ValidationErrors[]): ValidationErrors|null {\n const res: {[key: string]: any} =\n arrayOfErrors.reduce((res: ValidationErrors | null, errors: ValidationErrors | null) => {\n return errors != null ? {...res !, ...errors} : res !;\n }, {});\n return Object.keys(res).length === 0 ? null : res;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * @description\n * Defines an interface that acts as a bridge between the Angular forms API and a\n * native element in the DOM.\n *\n * Implement this interface to create a custom form control directive\n * that integrates with Angular forms.\n *\n * @see DefaultValueAccessor\n *\n * @publicApi\n */\nexport interface ControlValueAccessor {\n /**\n * @description\n * Writes a new value to the element.\n *\n * This method is called by the forms API to write to the view when programmatic\n * changes from model to view are requested.\n *\n * @usageNotes\n * ### Write a value to the element\n *\n * The following example writes a value to the native DOM element.\n *\n * ```ts\n * writeValue(value: any): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'value', value);\n * }\n * ```\n *\n * @param obj The new value for the element\n */\n writeValue(obj: any): void;\n\n /**\n * @description\n * Registers a callback function that is called when the control's value\n * changes in the UI.\n *\n * This method is called by the forms API on initialization to update the form\n * model when values propagate from the view to the model.\n *\n * When implementing the `registerOnChange` method in your own value accessor,\n * save the given function so your class calls it at the appropriate time.\n *\n * @usageNotes\n * ### Store the change function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnChange(fn: (_: any) => void): void {\n * this._onChange = fn;\n * }\n * ```\n *\n * When the value changes in the UI, call the registered\n * function to allow the forms API to update itself:\n *\n * ```ts\n * host: {\n * (change): '_onChange($event.target.value)'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnChange(fn: any): void;\n\n /**\n * @description\n * Registers a callback function is called by the forms API on initialization\n * to update the form model on blur.\n *\n * When implementing `registerOnTouched` in your own value accessor, save the given\n * function so your class calls it when the control should be considered\n * blurred or \"touched\".\n *\n * @usageNotes\n * ### Store the callback function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnTouched(fn: any): void {\n * this._onTouched = fn;\n * }\n * ```\n *\n * On blur (or equivalent), your class should call the registered function to allow\n * the forms API to update itself:\n *\n * ```ts\n * host: {\n * '(blur)': '_onTouched()'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnTouched(fn: any): void;\n\n /**\n * @description\n * Function that is called by the forms API when the control status changes to\n * or from 'DISABLED'. Depending on the status, it enables or disables the\n * appropriate DOM element.\n *\n * @usageNotes\n * The following is an example of writing the disabled property to a native DOM element:\n *\n * ```ts\n * setDisabledState(isDisabled: boolean): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n * }\n * ```\n *\n * @param isDisabled The disabled status to set on the element\n */\n setDisabledState?(isDisabled: boolean): void;\n}\n\n/**\n * Used to provide a `ControlValueAccessor` for form controls.\n *\n * See `DefaultValueAccessor` for how to implement one.\n *\n * @publicApi\n */\nexport const NG_VALUE_ACCESSOR = new InjectionToken<ControlValueAccessor>('NgValueAccessor');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const CHECKBOX_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlValueAccessor),\n multi: true,\n};\n\n/**\n * @description\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\n * element.\n *\n * @usageNotes\n *\n * ### Using a checkbox with a reactive form.\n *\n * The following example shows how to use a checkbox with a reactive form.\n *\n * ```ts\n * const rememberLoginControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"checkbox\" [formControl]=\"rememberLoginControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: {'(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()'},\n providers: [CHECKBOX_VALUE_ACCESSOR]\n})\nexport class CheckboxControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"checked\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Inject, InjectionToken, Optional, Renderer2, forwardRef} from '@angular/core';\nimport {ɵgetDOM as getDOM} from '@angular/platform-browser';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const DEFAULT_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DefaultValueAccessor),\n multi: true\n};\n\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\nfunction _isAndroid(): boolean {\n const userAgent = getDOM() ? getDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n\n/**\n * @description\n * Provide this token to control if form directives buffer IME input until\n * the \"compositionend\" event occurs.\n * @publicApi\n */\nexport const COMPOSITION_BUFFER_MODE = new InjectionToken<boolean>('CompositionEventMode');\n\n/**\n * @description\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using the default value accessor\n *\n * The following example shows how to use an input element that activates the default value accessor\n * (in this case, a text field).\n *\n * ```ts\n * const firstNameControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"text\" [formControl]=\"firstNameControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n // TODO: vsavkin replace the above selector with the one below it once\n // https://github.com/angular/angular/issues/3011 is implemented\n // selector: '[ngModel],[formControl],[formControlName]',\n host: {\n '(input)': '$any(this)._handleInput($event.target.value)',\n '(blur)': 'onTouched()',\n '(compositionstart)': '$any(this)._compositionStart()',\n '(compositionend)': '$any(this)._compositionEnd($event.target.value)'\n },\n providers: [DEFAULT_VALUE_ACCESSOR]\n})\nexport class DefaultValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when an input event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /** Whether the user is creating a composition string (IME events). */\n private _composing = false;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n @Optional() @Inject(COMPOSITION_BUFFER_MODE) private _compositionMode: boolean) {\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _handleInput(value: any): void {\n if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n this.onChange(value);\n }\n }\n\n /** @internal */\n _compositionStart(): void { this._composing = true; }\n\n /** @internal */\n _compositionEnd(value: any): void {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControl} from '../model';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport function normalizeValidator(validator: ValidatorFn | Validator): ValidatorFn {\n if ((<Validator>validator).validate) {\n return (c: AbstractControl) => (<Validator>validator).validate(c);\n } else {\n return <ValidatorFn>validator;\n }\n}\n\nexport function normalizeAsyncValidator(validator: AsyncValidatorFn | AsyncValidator):\n AsyncValidatorFn {\n if ((<AsyncValidator>validator).validate) {\n return (c: AbstractControl) => (<AsyncValidator>validator).validate(c);\n } else {\n return <AsyncValidatorFn>validator;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const NUMBER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a number value and listening to number input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a number input with a reactive form.\n *\n * The following example shows how to use a number input with a reactive form.\n *\n * ```ts\n * const totalCountControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"number\" [formControl]=\"totalCountControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [NUMBER_VALUE_ACCESSOR]\n})\nexport class NumberValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: number): void {\n // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nfunction unimplemented(): any {\n throw new Error('unimplemented');\n}\n\n/**\n * @description\n * A base class that all control `FormControl`-based directives extend. It binds a `FormControl`\n * object to a DOM element.\n *\n * @publicApi\n */\nexport abstract class NgControl extends AbstractControlDirective {\n /**\n * @description\n * The parent form for the control.\n *\n * @internal\n */\n _parent: ControlContainer|null = null;\n\n /**\n * @description\n * The name for the control\n */\n name: string|null = null;\n\n /**\n * @description\n * The value accessor for the control\n */\n valueAccessor: ControlValueAccessor|null = null;\n\n /**\n * @description\n * The uncomposed array of synchronous validators for the control\n *\n * @internal\n */\n _rawValidators: Array<Validator|ValidatorFn> = [];\n\n /**\n * @description\n * The uncomposed array of async validators for the control\n *\n * @internal\n */\n _rawAsyncValidators: Array<AsyncValidator|AsyncValidatorFn> = [];\n\n /**\n * @description\n * The registered synchronous validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get validator(): ValidatorFn|null { return <ValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The registered async validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get asyncValidator(): AsyncValidatorFn|null { return <AsyncValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The callback method to update the model from the view when requested\n *\n * @param newValue The new value for the view\n */\n abstract viewToModelUpdate(newValue: any): void;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Injectable, Injector, Input, OnDestroy, OnInit, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\n\nexport const RADIO_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioControlValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * Class used by Angular to track radio buttons. For internal use only.\n */\n@Injectable()\nexport class RadioControlRegistry {\n private _accessors: any[] = [];\n\n /**\n * @description\n * Adds a control to the internal registry. For internal use only.\n */\n add(control: NgControl, accessor: RadioControlValueAccessor) {\n this._accessors.push([control, accessor]);\n }\n\n /**\n * @description\n * Removes a control from the internal registry. For internal use only.\n */\n remove(accessor: RadioControlValueAccessor) {\n for (let i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n }\n\n /**\n * @description\n * Selects a radio button. For internal use only.\n */\n select(accessor: RadioControlValueAccessor) {\n this._accessors.forEach((c) => {\n if (this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n }\n\n private _isSameGroup(\n controlPair: [NgControl, RadioControlValueAccessor],\n accessor: RadioControlValueAccessor): boolean {\n if (!controlPair[0].control) return false;\n return controlPair[0]._parent === accessor._control._parent &&\n controlPair[1].name === accessor.name;\n }\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing radio control values and listening to radio control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using radio buttons with reactive form directives\n *\n * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in\n * a reactive form, radio buttons in the same group should have the same `formControlName`.\n * Providing a `name` attribute is optional.\n *\n * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n host: {'(change)': 'onChange()', '(blur)': 'onTouched()'},\n providers: [RADIO_VALUE_ACCESSOR]\n})\nexport class RadioControlValueAccessor implements ControlValueAccessor,\n OnDestroy, OnInit {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _state !: boolean;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _control !: NgControl;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _fn !: Function;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = () => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the name of the radio input element.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input() formControlName !: string;\n\n /**\n * @description\n * Tracks the value of the radio input element\n */\n @Input() value: any;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n private _registry: RadioControlRegistry, private _injector: Injector) {}\n\n /**\n * @description\n * A lifecycle method called when the directive is initialized. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnInit(): void {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnDestroy(): void { this._registry.remove(this); }\n\n /**\n * @description\n * Sets the \"checked\" property value on the radio input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._state = value === this.value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void {\n this._fn = fn;\n this.onChange = () => {\n fn(this.value);\n this._registry.select(this);\n };\n }\n\n /**\n * Sets the \"value\" on the radio input element and unchecks it.\n *\n * @param value\n */\n fireUncheck(value: any): void { this.writeValue(value); }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n private _checkName(): void {\n if (this.name && this.formControlName && this.name !== this.formControlName) {\n this._throwNameError();\n }\n if (!this.name && this.formControlName) this.name = this.formControlName;\n }\n\n private _throwNameError(): void {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, StaticProvider, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const RANGE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a range value and listening to range input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a range input with a reactive form\n *\n * The following example shows how to use a range input with a reactive form.\n *\n * ```ts\n * const ageControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"range\" [formControl]=\"ageControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [RANGE_VALUE_ACCESSOR]\n})\nexport class RangeValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the range input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const FormErrorExamples = {\n formControlName: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });`,\n\n formGroupName: `\n <div [formGroup]=\"myGroup\">\n <div formGroupName=\"person\">\n <input formControlName=\"firstName\">\n </div>\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });`,\n\n formArrayName: `\n <div [formGroup]=\"myGroup\">\n <div formArrayName=\"cities\">\n <div *ngFor=\"let city of cityArray.controls; index as i\">\n <input [formControlName]=\"i\">\n </div>\n </div>\n </div>\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl('SF')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });`,\n\n ngModelGroup: `\n <form>\n <div ngModelGroup=\"person\">\n <input [(ngModel)]=\"person.name\" name=\"firstName\">\n </div>\n </form>`,\n\n ngModelWithFormGroup: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n `\n};\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class ReactiveErrors {\n static controlParentException(): void {\n throw new Error(\n `formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static ngModelGroupException(): void {\n throw new Error(\n `formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n ${Examples.formGroupName}\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n ${Examples.ngModelGroup}`);\n }\n static missingFormException(): void {\n throw new Error(`formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static groupParentException(): void {\n throw new Error(\n `formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formGroupName}`);\n }\n\n static arrayParentException(): void {\n throw new Error(\n `formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formArrayName}`);\n }\n\n static disabledAttrWarning(): void {\n console.warn(`\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n \n Example: \n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n `);\n }\n\n static ngModelWarning(directiveName: string): void {\n console.warn(`\n It looks like you're using ngModel on the same form field as ${directiveName}. \n Support for using the ngModel input property and ngModelChange event with \n reactive form directives has been deprecated in Angular v6 and will be removed \n in Angular v7.\n \n For more information on this, see our API docs here:\n https://angular.io/api/forms/${directiveName === 'formControl' ? 'FormControlDirective' \n : 'FormControlName'}#use-with-ngmodel\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string | null, value: any): string {\n if (id == null) return `${value}`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing select control values and listening to select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using select controls in a reactive form\n *\n * The following examples show how to use a select control in a reactive form.\n *\n * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Using select controls in a template-driven form\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * {@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * ### Customizing option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * ```ts\n * const selectedCountriesControl = new FormControl();\n * ```\n *\n * ```\n * <select [compareWith]=\"compareFn\" [formControl]=\"selectedCountriesControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{country.name}}\n * </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n * return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * **Note:** We listen to the 'change' event because 'input' events aren't fired\n * for selects in Firefox and IE:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n host: {'(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()'},\n providers: [SELECT_VALUE_ACCESSOR]\n})\nexport class SelectControlValueAccessor implements ControlValueAccessor {\n value: any;\n /** @internal */\n _optionMap: Map<string, any> = new Map<string, any>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element. The \"selectedIndex\"\n * property is also set if an ID is provided on the option element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this.value = value;\n const id: string|null = this._getOptionId(value);\n if (id == null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n }\n const valueString = _buildValueString(id, value);\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (valueString: string) => {\n this.value = this._getOptionValue(valueString);\n fn(this.value);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(): string { return (this._idCounter++).toString(); }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id), value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectOption implements OnDestroy {\n /**\n * @description\n * ID of the option element\n */\n // TODO(issue/24571): remove '!'.\n id !: string;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectControlValueAccessor) {\n if (this._select) this.id = this._select._registerOption();\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n this._setElementValue(value);\n if (this._select) this._select.writeValue(this._select.value);\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_MULTIPLE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectMultipleControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string, value: any): string {\n if (id == null) return `${value}`;\n if (typeof value === 'string') value = `'${value}'`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/** Mock interface for HTML Options */\ninterface HTMLOption {\n value: string;\n selected: boolean;\n}\n\n/** Mock interface for HTMLCollection */\nabstract class HTMLCollection {\n // TODO(issue/24571): remove '!'.\n length !: number;\n abstract item(_: number): HTMLOption;\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n * \n * @see `SelectControlValueAccessor`\n *\n * @usageNotes\n * \n * ### Using a multi-select control\n * \n * The follow example shows you how to use a multi-select control with a reactive form.\n * \n * ```ts\n * const countryControl = new FormControl();\n * ```\n *\n * ```\n * <select multiple name=\"countries\" [formControl]=\"countryControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{ country.name }}\n * </option>\n * </select>\n * ```\n * \n * ### Customizing option selection\n * \n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * See the `SelectControlValueAccessor` for usage.\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n host: {'(change)': 'onChange($event.target)', '(blur)': 'onTouched()'},\n providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]\n})\nexport class SelectMultipleControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The current value\n */\n value: any;\n\n /** @internal */\n _optionMap: Map<string, NgSelectMultipleOption> = new Map<string, NgSelectMultipleOption>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * @description\n * Sets the \"value\" property on one or of more\n * of the select's options.\n *\n * @param value The value\n */\n writeValue(value: any): void {\n this.value = value;\n let optionSelectedStateSetter: (opt: NgSelectMultipleOption, o: any) => void;\n if (Array.isArray(value)) {\n // convert values to ids\n const ids = value.map((v) => this._getOptionId(v));\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(ids.indexOf(o.toString()) > -1); };\n } else {\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(false); };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes\n * and writes an array of the selected options.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (_: any) => {\n const selected: Array<any> = [];\n if (_.hasOwnProperty('selectedOptions')) {\n const options: HTMLCollection = _.selectedOptions;\n for (let i = 0; i < options.length; i++) {\n const opt: any = options.item(i);\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n // Degrade on IE\n else {\n const options: HTMLCollection = <HTMLCollection>_.options;\n for (let i = 0; i < options.length; i++) {\n const opt: HTMLOption = options.item(i);\n if (opt.selected) {\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n this.value = selected;\n fn(selected);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(value: NgSelectMultipleOption): string {\n const id: string = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id) !._value, value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) !._value : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectMultipleControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectMultipleOption implements OnDestroy {\n // TODO(issue/24571): remove '!'.\n id !: string;\n /** @internal */\n _value: any;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectMultipleControlValueAccessor) {\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n } else {\n this._setElementValue(value);\n }\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /** @internal */\n _setSelected(selected: boolean) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {isDevMode, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {FormArray, FormControl, FormGroup} from '../model';\nimport {Validators} from '../validators';\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {CheckboxControlValueAccessor} from './checkbox_value_accessor';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {DefaultValueAccessor} from './default_value_accessor';\nimport {NgControl} from './ng_control';\nimport {normalizeAsyncValidator, normalizeValidator} from './normalize_validator';\nimport {NumberValueAccessor} from './number_value_accessor';\nimport {RadioControlValueAccessor} from './radio_control_value_accessor';\nimport {RangeValueAccessor} from './range_value_accessor';\nimport {FormArrayName} from './reactive_directives/form_group_name';\nimport {ReactiveErrors} from './reactive_errors';\nimport {SelectControlValueAccessor} from './select_control_value_accessor';\nimport {SelectMultipleControlValueAccessor} from './select_multiple_control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\n\nexport function controlPath(name: string, parent: ControlContainer): string[] {\n return [...parent.path !, name];\n}\n\nexport function setUpControl(control: FormControl, dir: NgControl): void {\n if (!control) _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor) _throwError(dir, 'No value accessor for form control with');\n\n control.validator = Validators.compose([control.validator !, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator !, dir.asyncValidator]);\n dir.valueAccessor !.writeValue(control.value);\n\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n\n setUpBlurPipeline(control, dir);\n\n if (dir.valueAccessor !.setDisabledState) {\n control.registerOnDisabledChange(\n (isDisabled: boolean) => { dir.valueAccessor !.setDisabledState !(isDisabled); });\n }\n\n // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n dir._rawValidators.forEach((validator: Validator | ValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n\n dir._rawAsyncValidators.forEach((validator: AsyncValidator | AsyncValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n}\n\nexport function cleanUpControl(control: FormControl, dir: NgControl) {\n dir.valueAccessor !.registerOnChange(() => _noControlError(dir));\n dir.valueAccessor !.registerOnTouched(() => _noControlError(dir));\n\n dir._rawValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n dir._rawAsyncValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n if (control) control._clearChangeFns();\n}\n\nfunction setUpViewChangePipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnChange((newValue: any) => {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n\n if (control.updateOn === 'change') updateControl(control, dir);\n });\n}\n\nfunction setUpBlurPipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnTouched(() => {\n control._pendingTouched = true;\n\n if (control.updateOn === 'blur' && control._pendingChange) updateControl(control, dir);\n if (control.updateOn !== 'submit') control.markAsTouched();\n });\n}\n\nfunction updateControl(control: FormControl, dir: NgControl): void {\n if (control._pendingDirty) control.markAsDirty();\n control.setValue(control._pendingValue, {emitModelToViewChange: false});\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n}\n\nfunction setUpModelChangePipeline(control: FormControl, dir: NgControl): void {\n control.registerOnChange((newValue: any, emitModelEvent: boolean) => {\n // control -> view\n dir.valueAccessor !.writeValue(newValue);\n\n // control -> ngModel\n if (emitModelEvent) dir.viewToModelUpdate(newValue);\n });\n}\n\nexport function setUpFormContainer(\n control: FormGroup | FormArray, dir: AbstractFormGroupDirective | FormArrayName) {\n if (control == null) _throwError(dir, 'Cannot find control with');\n control.validator = Validators.compose([control.validator, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n}\n\nfunction _noControlError(dir: NgControl) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\n\nfunction _throwError(dir: AbstractControlDirective, message: string): void {\n let messageEnd: string;\n if (dir.path !.length > 1) {\n messageEnd = `path: '${dir.path!.join(' -> ')}'`;\n } else if (dir.path ![0]) {\n messageEnd = `name: '${dir.path}'`;\n } else {\n messageEnd = 'unspecified name attribute';\n }\n throw new Error(`${message} ${messageEnd}`);\n}\n\nexport function composeValidators(validators: Array<Validator|Function>): ValidatorFn|null {\n return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n}\n\nexport function composeAsyncValidators(validators: Array<Validator|Function>): AsyncValidatorFn|\n null {\n return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n null;\n}\n\nexport function isPropertyUpdated(changes: {[key: string]: any}, viewModel: any): boolean {\n if (!changes.hasOwnProperty('model')) return false;\n const change = changes['model'];\n\n if (change.isFirstChange()) return true;\n return !looseIdentical(viewModel, change.currentValue);\n}\n\nconst BUILTIN_ACCESSORS = [\n CheckboxControlValueAccessor,\n RangeValueAccessor,\n NumberValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n];\n\nexport function isBuiltInAccessor(valueAccessor: ControlValueAccessor): boolean {\n return BUILTIN_ACCESSORS.some(a => valueAccessor.constructor === a);\n}\n\nexport function syncPendingControls(form: FormGroup, directives: NgControl[]): void {\n form._syncPendingControls();\n directives.forEach(dir => {\n const control = dir.control as FormControl;\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n}\n\n// TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented\nexport function selectValueAccessor(\n dir: NgControl, valueAccessors: ControlValueAccessor[]): ControlValueAccessor|null {\n if (!valueAccessors) return null;\n\n if (!Array.isArray(valueAccessors))\n _throwError(dir, 'Value accessor was not provided as an array for form control with');\n\n let defaultAccessor: ControlValueAccessor|undefined = undefined;\n let builtinAccessor: ControlValueAccessor|undefined = undefined;\n let customAccessor: ControlValueAccessor|undefined = undefined;\n\n valueAccessors.forEach((v: ControlValueAccessor) => {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n\n } else if (isBuiltInAccessor(v)) {\n if (builtinAccessor)\n _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n\n } else {\n if (customAccessor)\n _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n\n if (customAccessor) return customAccessor;\n if (builtinAccessor) return builtinAccessor;\n if (defaultAccessor) return defaultAccessor;\n\n _throwError(dir, 'No valid value accessor for form control with');\n return null;\n}\n\nexport function removeDir<T>(list: T[], el: T): void {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\n\n// TODO(kara): remove after deprecation period\nexport function _ngModelWarning(\n name: string, type: {_ngModelWarningSentOnce: boolean},\n instance: {_ngModelWarningSent: boolean}, warningConfig: string | null) {\n if (!isDevMode() || warningConfig === 'never') return;\n\n if (((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce) ||\n (warningConfig === 'always' && !instance._ngModelWarningSent)) {\n ReactiveErrors.ngModelWarning(name);\n type._ngModelWarningSentOnce = true;\n instance._ngModelWarningSent = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {OnDestroy, OnInit} from '@angular/core';\n\nimport {FormGroup} from '../model';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {composeAsyncValidators, composeValidators, controlPath} from './shared';\nimport {AsyncValidatorFn, ValidatorFn} from './validators';\n\n\n\n/**\n * @description\n * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.\n *\n * @publicApi\n */\nexport class AbstractFormGroupDirective extends ControlContainer implements OnInit, OnDestroy {\n /**\n * @description\n * The parent control for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _parent !: ControlContainer;\n\n /**\n * @description\n * An array of synchronous validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _validators !: any[];\n\n /**\n * @description\n * An array of async validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _asyncValidators !: any[];\n\n /**\n * @description\n * An internal callback method triggered on the instance after the inputs are set.\n * Registers the group with its parent group.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormGroup(this);\n }\n\n /**\n * @description\n * An internal callback method triggered before the instance is destroyed.\n * Removes the group from its parent group.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormGroup(this);\n }\n }\n\n /**\n * @description\n * The `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.formDirective !.getFormGroup(this); }\n\n /**\n * @description\n * The path to this group from the top-level directive.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): Form|null { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * The synchronous validators registered with this group.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * The async validators registered with this group.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n /** @internal */\n _checkParentType(): void {}\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Self} from '@angular/core';\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {NgControl} from './ng_control';\n\nexport class AbstractControlStatus {\n private _cd: AbstractControlDirective;\n\n constructor(cd: AbstractControlDirective) { this._cd = cd; }\n\n get ngClassUntouched(): boolean { return this._cd.control ? this._cd.control.untouched : false; }\n get ngClassTouched(): boolean { return this._cd.control ? this._cd.control.touched : false; }\n get ngClassPristine(): boolean { return this._cd.control ? this._cd.control.pristine : false; }\n get ngClassDirty(): boolean { return this._cd.control ? this._cd.control.dirty : false; }\n get ngClassValid(): boolean { return this._cd.control ? this._cd.control.valid : false; }\n get ngClassInvalid(): boolean { return this._cd.control ? this._cd.control.invalid : false; }\n get ngClassPending(): boolean { return this._cd.control ? this._cd.control.pending : false; }\n}\n\nexport const ngControlStatusHost = {\n '[class.ng-untouched]': 'ngClassUntouched',\n '[class.ng-touched]': 'ngClassTouched',\n '[class.ng-pristine]': 'ngClassPristine',\n '[class.ng-dirty]': 'ngClassDirty',\n '[class.ng-valid]': 'ngClassValid',\n '[class.ng-invalid]': 'ngClassInvalid',\n '[class.ng-pending]': 'ngClassPending',\n};\n\n/**\n * @description\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status.\n *\n * @usageNotes\n *\n * ### CSS classes applied\n *\n * The following classes are applied as the properties become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost})\nexport class NgControlStatus extends AbstractControlStatus {\n constructor(@Self() cd: NgControl) { super(cd); }\n}\n\n/**\n * @description\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n * \n * @see `NgControlStatus`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n host: ngControlStatusHost\n})\nexport class NgControlStatusGroup extends AbstractControlStatus {\n constructor(@Self() cd: ControlContainer) { super(cd); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {EventEmitter} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {composeAsyncValidators, composeValidators} from './directives/shared';\nimport {AsyncValidatorFn, ValidationErrors, ValidatorFn} from './directives/validators';\nimport {toObservable} from './validators';\n\n/**\n * Reports that a FormControl is valid, meaning that no errors exist in the input value.\n *\n * @see `status`\n */\nexport const VALID = 'VALID';\n\n/**\n * Reports that a FormControl is invalid, meaning that an error exists in the input value.\n *\n * @see `status`\n */\nexport const INVALID = 'INVALID';\n\n/**\n * Reports that a FormControl is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value.\n *\n * @see `markAsPending`\n * @see `status`\n */\nexport const PENDING = 'PENDING';\n\n/**\n * Reports that a FormControl is disabled, meaning that the control is exempt from ancestor\n * calculations of validity or value.\n *\n * @see `markAsDisabled`\n * @see `status`\n */\nexport const DISABLED = 'DISABLED';\n\nfunction _find(control: AbstractControl, path: Array<string|number>| string, delimiter: string) {\n if (path == null) return null;\n\n if (!(path instanceof Array)) {\n path = (<string>path).split(delimiter);\n }\n if (path instanceof Array && (path.length === 0)) return null;\n\n return (<Array<string|number>>path).reduce((v: AbstractControl, name) => {\n if (v instanceof FormGroup) {\n return v.controls.hasOwnProperty(name as string) ? v.controls[name] : null;\n }\n\n if (v instanceof FormArray) {\n return v.at(<number>name) || null;\n }\n\n return null;\n }, control);\n}\n\nfunction coerceToValidator(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): ValidatorFn|\n null {\n const validator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).validators :\n validatorOrOpts) as ValidatorFn |\n ValidatorFn[] | null;\n\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\n\nfunction coerceToAsyncValidator(\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null, validatorOrOpts?: ValidatorFn |\n ValidatorFn[] | AbstractControlOptions | null): AsyncValidatorFn|null {\n const origAsyncValidator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).asyncValidators :\n asyncValidator) as AsyncValidatorFn |\n AsyncValidatorFn | null;\n\n return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :\n origAsyncValidator || null;\n}\n\nexport type FormHooks = 'change' | 'blur' | 'submit';\n\n/**\n * Interface for options provided to an `AbstractControl`.\n *\n * @publicApi\n */\nexport interface AbstractControlOptions {\n /**\n * @description\n * The list of validators applied to a control.\n */\n validators?: ValidatorFn|ValidatorFn[]|null;\n /**\n * @description\n * The list of async validators applied to control.\n */\n asyncValidators?: AsyncValidatorFn|AsyncValidatorFn[]|null;\n /**\n * @description\n * The event name for control to update upon.\n */\n updateOn?: 'change'|'blur'|'submit';\n}\n\n\nfunction isOptionsObj(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): boolean {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&\n typeof validatorOrOpts === 'object';\n}\n\n\n/**\n * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * @see [Forms Guide](/guide/forms)\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n * @see [Dynamic Forms Guide](/guide/dynamic-form)\n *\n * @publicApi\n */\nexport abstract class AbstractControl {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingDirty !: boolean;\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingTouched !: boolean;\n\n /** @internal */\n _onCollectionChange = () => {};\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _updateOn !: FormHooks;\n\n // TODO(issue/24571): remove '!'.\n private _parent !: FormGroup | FormArray;\n private _asyncValidationSubscription: any;\n\n /**\n * The current value of the control.\n *\n * * For a `FormControl`, the current value.\n * * For a `FormGroup`, the values of enabled controls as an object\n * with a key-value pair for each member of the group.\n * * For a `FormArray`, the values of enabled controls as an array.\n *\n */\n public readonly value: any;\n\n /**\n * Initialize the AbstractControl instance.\n *\n * @param validator The function that determines the synchronous validity of this control.\n * @param asyncValidator The function that determines the asynchronous validity of this\n * control.\n */\n constructor(public validator: ValidatorFn|null, public asyncValidator: AsyncValidatorFn|null) {}\n\n /**\n * The parent control.\n */\n get parent(): FormGroup|FormArray { return this._parent; }\n\n /**\n * The validation status of the control. There are four possible\n * validation status values:\n *\n * * **VALID**: This control has passed all validation checks.\n * * **INVALID**: This control has failed at least one validation check.\n * * **PENDING**: This control is in the midst of conducting a validation check.\n * * **DISABLED**: This control is exempt from validation checks.\n *\n * These status values are mutually exclusive, so a control cannot be\n * both valid AND invalid or invalid AND disabled.\n */\n // TODO(issue/24571): remove '!'.\n public readonly status !: string;\n\n /**\n * A control is `valid` when its `status` is `VALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control has passed all of its validation tests,\n * false otherwise.\n */\n get valid(): boolean { return this.status === VALID; }\n\n /**\n * A control is `invalid` when its `status` is `INVALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control has failed one or more of its validation checks,\n * false otherwise.\n */\n get invalid(): boolean { return this.status === INVALID; }\n\n /**\n * A control is `pending` when its `status` is `PENDING`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control is in the process of conducting a validation check,\n * false otherwise.\n */\n get pending(): boolean { return this.status == PENDING; }\n\n /**\n * A control is `disabled` when its `status` is `DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control is disabled, false otherwise.\n */\n get disabled(): boolean { return this.status === DISABLED; }\n\n /**\n * A control is `enabled` as long as its `status` is not `DISABLED`.\n *\n * @returns True if the control has any status other than 'DISABLED',\n * false if the status is 'DISABLED'.\n *\n * @see {@link AbstractControl.status}\n *\n */\n get enabled(): boolean { return this.status !== DISABLED; }\n\n /**\n * An object containing any errors generated by failing validation,\n * or null if there are no errors.\n */\n // TODO(issue/24571): remove '!'.\n public readonly errors !: ValidationErrors | null;\n\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * @returns True if the user has not yet changed the value in the UI; compare `dirty`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n public readonly pristine: boolean = true;\n\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * @returns True if the user has changed the value of this control in the UI; compare `pristine`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n get dirty(): boolean { return !this.pristine; }\n\n /**\n * True if the control is marked as `touched`.\n *\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n */\n public readonly touched: boolean = false;\n\n /**\n * True if the control has not been marked as touched\n *\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n */\n get untouched(): boolean { return !this.touched; }\n\n /**\n * A multicasting observable that emits an event every time the value of the control changes, in\n * the UI or programmatically.\n */\n // TODO(issue/24571): remove '!'.\n public readonly valueChanges !: Observable<any>;\n\n /**\n * A multicasting observable that emits an event every time the validation `status` of the control\n * recalculates.\n *\n * @see {@link AbstractControl.status}\n *\n */\n // TODO(issue/24571): remove '!'.\n public readonly statusChanges !: Observable<any>;\n\n /**\n * Reports the update strategy of the `AbstractControl` (meaning\n * the event on which the control updates itself).\n * Possible values: `'change'` | `'blur'` | `'submit'`\n * Default value: `'change'`\n */\n get updateOn(): FormHooks {\n return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');\n }\n\n /**\n * Sets the synchronous validators that are active on this control. Calling\n * this overwrites any existing sync validators.\n */\n setValidators(newValidator: ValidatorFn|ValidatorFn[]|null): void {\n this.validator = coerceToValidator(newValidator);\n }\n\n /**\n * Sets the async validators that are active on this control. Calling this\n * overwrites any existing async validators.\n */\n setAsyncValidators(newValidator: AsyncValidatorFn|AsyncValidatorFn[]|null): void {\n this.asyncValidator = coerceToAsyncValidator(newValidator);\n }\n\n /**\n * Empties out the sync validator list.\n */\n clearValidators(): void { this.validator = null; }\n\n /**\n * Empties out the async validator list.\n */\n clearAsyncValidators(): void { this.asyncValidator = null; }\n\n /**\n * Marks the control as `touched`. A control is touched by focus and\n * blur events that do not change the value.\n *\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = true;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsTouched(opts);\n }\n }\n\n /**\n * Marks the control as `untouched`.\n *\n * If the control has any children, also marks all children as `untouched`\n * and recalculates the `touched` status of all parent controls.\n *\n * @see `markAsTouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after the marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsUntouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = false;\n this._pendingTouched = false;\n\n this._forEachChild(\n (control: AbstractControl) => { control.markAsUntouched({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /**\n * Marks the control as `dirty`. A control becomes dirty when\n * the control's value is changed through the UI; compare `markAsTouched`.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsDirty(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = false;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsDirty(opts);\n }\n }\n\n /**\n * Marks the control as `pristine`.\n *\n * If the control has any children, marks all children as `pristine`,\n * and recalculates the `pristine` status of all parent\n * controls.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n *\n * @param opts Configuration options that determine how the control emits events after\n * marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n */\n markAsPristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = true;\n this._pendingDirty = false;\n\n this._forEachChild((control: AbstractControl) => { control.markAsPristine({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /**\n * Marks the control as `pending`.\n *\n * A control is pending while the control performs async validation.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates changes and\n * emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), the `statusChanges`\n * observable emits an event with the latest status the control is marked pending.\n * When false, no events are emitted.\n *\n */\n markAsPending(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = PENDING;\n\n if (opts.emitEvent !== false) {\n (this.statusChanges as EventEmitter<any>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsPending(opts);\n }\n }\n\n /**\n * Disables the control. This means the control is exempt from validation checks and\n * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n *\n * If the control has children, all children are also disabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates\n * changes and emits events after the control is disabled.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is disabled.\n * When false, no events are emitted.\n */\n disable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = DISABLED;\n (this as{errors: ValidationErrors | null}).errors = null;\n this._forEachChild(\n (control: AbstractControl) => { control.disable({...opts, onlySelf: true}); });\n this._updateValue();\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(true));\n }\n\n /**\n * Enables the control. This means the control is included in validation checks and\n * the aggregate value of its parent. Its status recalculates based on its value and\n * its validators.\n *\n * By default, if the control has children, all children are enabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configure options that control how the control propagates changes and\n * emits events when marked as untouched\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is enabled.\n * When false, no events are emitted.\n */\n enable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = VALID;\n this._forEachChild(\n (control: AbstractControl) => { control.enable({...opts, onlySelf: true}); });\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(false));\n }\n\n private _updateAncestors(opts: {onlySelf?: boolean, emitEvent?: boolean}) {\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n this._parent._updatePristine();\n this._parent._updateTouched();\n }\n }\n\n /**\n * @param parent Sets the parent of the control\n */\n setParent(parent: FormGroup|FormArray): void { this._parent = parent; }\n\n /**\n * Sets the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract setValue(value: any, options?: Object): void;\n\n /**\n * Patches the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract patchValue(value: any, options?: Object): void;\n\n /**\n * Resets the control. Abstract method (implemented in sub-classes).\n */\n abstract reset(value?: any, options?: Object): void;\n\n /**\n * Recalculates the value and validation status of the control.\n *\n * By default, it also updates the value and validity of its ancestors.\n *\n * @param opts Configuration options determine how the control propagates changes and emits events\n * after updates and validity checks are applied.\n * * `onlySelf`: When true, only update this control. When false or not supplied,\n * update all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is updated.\n * When false, no events are emitted.\n */\n updateValueAndValidity(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._setInitialStatus();\n this._updateValue();\n\n if (this.enabled) {\n this._cancelExistingSubscription();\n (this as{errors: ValidationErrors | null}).errors = this._runValidator();\n (this as{status: string}).status = this._calculateStatus();\n\n if (this.status === VALID || this.status === PENDING) {\n this._runAsyncValidator(opts.emitEvent);\n }\n }\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n }\n }\n\n /** @internal */\n _updateTreeValidity(opts: {emitEvent?: boolean} = {emitEvent: true}) {\n this._forEachChild((ctrl: AbstractControl) => ctrl._updateTreeValidity(opts));\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n }\n\n private _setInitialStatus() {\n (this as{status: string}).status = this._allControlsDisabled() ? DISABLED : VALID;\n }\n\n private _runValidator(): ValidationErrors|null {\n return this.validator ? this.validator(this) : null;\n }\n\n private _runAsyncValidator(emitEvent?: boolean): void {\n if (this.asyncValidator) {\n (this as{status: string}).status = PENDING;\n const obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription =\n obs.subscribe((errors: ValidationErrors | null) => this.setErrors(errors, {emitEvent}));\n }\n }\n\n private _cancelExistingSubscription(): void {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n }\n }\n\n /**\n * Sets errors on a form control when running validations manually, rather than automatically.\n *\n * Calling `setErrors` also updates the validity of the parent control.\n *\n * @usageNotes\n * ### Manually set the errors for a control\n *\n * ```\n * const login = new FormControl('someLogin');\n * login.setErrors({\n * notUnique: true\n * });\n *\n * expect(login.valid).toEqual(false);\n * expect(login.errors).toEqual({ notUnique: true });\n *\n * login.setValue('someOtherLogin');\n *\n * expect(login.valid).toEqual(true);\n * ```\n */\n setErrors(errors: ValidationErrors|null, opts: {emitEvent?: boolean} = {}): void {\n (this as{errors: ValidationErrors | null}).errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false);\n }\n\n /**\n * Retrieves a child control given the control's name or path.\n *\n * @param path A dot-delimited string or array of string/number values that define the path to the\n * control.\n *\n * @usageNotes\n * ### Retrieve a nested control\n *\n * For example, to get a `name` control nested within a `person` sub-group:\n *\n * * `this.form.get('person.name');`\n *\n * -OR-\n *\n * * `this.form.get(['person', 'name']);`\n */\n get(path: Array<string|number>|string): AbstractControl|null { return _find(this, path, '.'); }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n const control = path ? this.get(path) : this;\n return control && control.errors ? control.errors[errorCode] : null;\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return !!this.getError(errorCode, path);\n }\n\n /**\n * Retrieves the top-level ancestor of this control.\n */\n get root(): AbstractControl {\n let x: AbstractControl = this;\n\n while (x._parent) {\n x = x._parent;\n }\n\n return x;\n }\n\n /** @internal */\n _updateControlsErrors(emitEvent: boolean): void {\n (this as{status: string}).status = this._calculateStatus();\n\n if (emitEvent) {\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent);\n }\n }\n\n /** @internal */\n _initObservables() {\n (this as{valueChanges: Observable<any>}).valueChanges = new EventEmitter();\n (this as{statusChanges: Observable<any>}).statusChanges = new EventEmitter();\n }\n\n\n private _calculateStatus(): string {\n if (this._allControlsDisabled()) return DISABLED;\n if (this.errors) return INVALID;\n if (this._anyControlsHaveStatus(PENDING)) return PENDING;\n if (this._anyControlsHaveStatus(INVALID)) return INVALID;\n return VALID;\n }\n\n /** @internal */\n abstract _updateValue(): void;\n\n /** @internal */\n abstract _forEachChild(cb: Function): void;\n\n /** @internal */\n abstract _anyControls(condition: Function): boolean;\n\n /** @internal */\n abstract _allControlsDisabled(): boolean;\n\n /** @internal */\n abstract _syncPendingControls(): boolean;\n\n /** @internal */\n _anyControlsHaveStatus(status: string): boolean {\n return this._anyControls((control: AbstractControl) => control.status === status);\n }\n\n /** @internal */\n _anyControlsDirty(): boolean {\n return this._anyControls((control: AbstractControl) => control.dirty);\n }\n\n /** @internal */\n _anyControlsTouched(): boolean {\n return this._anyControls((control: AbstractControl) => control.touched);\n }\n\n /** @internal */\n _updatePristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = !this._anyControlsDirty();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /** @internal */\n _updateTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = this._anyControlsTouched();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /** @internal */\n _onDisabledChange: Function[] = [];\n\n /** @internal */\n _isBoxedValue(formState: any): boolean {\n return typeof formState === 'object' && formState !== null &&\n Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n }\n\n /** @internal */\n _registerOnCollectionChange(fn: () => void): void { this._onCollectionChange = fn; }\n\n /** @internal */\n _setUpdateStrategy(opts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null): void {\n if (isOptionsObj(opts) && (opts as AbstractControlOptions).updateOn != null) {\n this._updateOn = (opts as AbstractControlOptions).updateOn !;\n }\n }\n}\n\n/**\n * Tracks the value and validation status of an individual form control.\n *\n * This is one of the three fundamental building blocks of Angular forms, along with\n * `FormGroup` and `FormArray`. It extends the `AbstractControl` class that\n * implements most of the base functionality for accessing the value, validation status,\n * user interactions and events.\n *\n * @see `AbstractControl`\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see [Usage Notes](#usage-notes)\n *\n * @usageNotes\n *\n * ### Initializing Form Controls\n *\n * Instantiate a `FormControl`, with an initial value.\n *\n * ```ts\n * const control = new FormControl('some value');\n * console.log(control.value); // 'some value'\n *```\n *\n * The following example initializes the control with a form state object. The `value`\n * and `disabled` keys are required in this case.\n *\n * ```ts\n * const control = new FormControl({ value: 'n/a', disabled: true });\n * console.log(control.value); // 'n/a'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * The following example initializes the control with a sync validator.\n *\n * ```ts\n * const control = new FormControl('', Validators.required);\n * console.log(control.value); // ''\n * console.log(control.status); // 'INVALID'\n * ```\n *\n * The following example initializes the control using an options object.\n *\n * ```ts\n * const control = new FormControl('', {\n * validators: Validators.required,\n * asyncValidators: myAsyncValidator\n * });\n * ```\n *\n * ### Configure the control to update on a blur event\n *\n * Set the `updateOn` option to `'blur'` to update on the blur `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'blur' });\n * ```\n *\n * ### Configure the control to update on a submit event\n *\n * Set the `updateOn` option to `'submit'` to update on a submit `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'submit' });\n * ```\n *\n * ### Reset the control back to an initial value\n *\n * You reset to a specific form state by passing through a standalone\n * value or a form state object that contains both a value and a disabled state\n * (these are the only two properties that cannot be calculated).\n *\n * ```ts\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n *\n * control.reset('Drew');\n *\n * console.log(control.value); // 'Drew'\n * ```\n *\n * ### Reset the control back to an initial value and disabled\n *\n * ```\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n * console.log(control.status); // 'VALID'\n *\n * control.reset({ value: 'Drew', disabled: true });\n *\n * console.log(control.value); // 'Drew'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * @publicApi\n */\nexport class FormControl extends AbstractControl {\n /** @internal */\n _onChange: Function[] = [];\n\n /** @internal */\n _pendingValue: any;\n\n /** @internal */\n _pendingChange: any;\n\n /**\n * Creates a new `FormControl` instance.\n *\n * @param formState Initializes the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n formState: any = null,\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._applyFormState(formState);\n this._setUpdateStrategy(validatorOrOpts);\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n this._initObservables();\n }\n\n /**\n * Sets a new value for the form control.\n *\n * @param value The new value for the control.\n * @param options Configuration options that determine how the control proopagates changes\n * and emits events when the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * * `emitModelToViewChange`: When true or not supplied (the default), each change triggers an\n * `onChange` event to\n * update the view.\n * * `emitViewToModelChange`: When true or not supplied (the default), each change triggers an\n * `ngModelChange`\n * event to update the model.\n *\n */\n setValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n (this as{value: any}).value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach(\n (changeFn) => changeFn(this.value, options.emitViewToModelChange !== false));\n }\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of a control.\n *\n * This function is functionally the same as {@link FormControl#setValue setValue} at this level.\n * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and\n * `FormArrays`, where it does behave differently.\n *\n * @see `setValue` for options\n */\n patchValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n this.setValue(value, options);\n }\n\n /**\n * Resets the form control, marking it `pristine` and `untouched`, and setting\n * the value to null.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n *\n */\n reset(formState: any = null, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n this._pendingChange = false;\n }\n\n /**\n * @internal\n */\n _updateValue() {}\n\n /**\n * @internal\n */\n _anyControls(condition: Function): boolean { return false; }\n\n /**\n * @internal\n */\n _allControlsDisabled(): boolean { return this.disabled; }\n\n /**\n * Register a listener for change events.\n *\n * @param fn The method that is called when the value changes\n */\n registerOnChange(fn: Function): void { this._onChange.push(fn); }\n\n /**\n * @internal\n */\n _clearChangeFns(): void {\n this._onChange = [];\n this._onDisabledChange = [];\n this._onCollectionChange = () => {};\n }\n\n /**\n * Register a listener for disabled events.\n *\n * @param fn The method that is called when the disabled status changes.\n */\n registerOnDisabledChange(fn: (isDisabled: boolean) => void): void {\n this._onDisabledChange.push(fn);\n }\n\n /**\n * @internal\n */\n _forEachChild(cb: Function): void {}\n\n /** @internal */\n _syncPendingControls(): boolean {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty) this.markAsDirty();\n if (this._pendingTouched) this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, {onlySelf: true, emitModelToViewChange: false});\n return true;\n }\n }\n return false;\n }\n\n private _applyFormState(formState: any) {\n if (this._isBoxedValue(formState)) {\n (this as{value: any}).value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({onlySelf: true, emitEvent: false}) :\n this.enable({onlySelf: true, emitEvent: false});\n } else {\n (this as{value: any}).value = this._pendingValue = formState;\n }\n }\n}\n\n/**\n * Tracks the value and validity state of a group of `FormControl` instances.\n *\n * A `FormGroup` aggregates the values of each child `FormControl` into one object,\n * with each control name as the key. It calculates its status by reducing the status values\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormArray`.\n *\n * When instantiating a `FormGroup`, pass in a collection of child controls as the first\n * argument. The key for each child registers the name for the control.\n *\n * @usageNotes\n *\n * ### Create a form group with 2 controls\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('Nancy', Validators.minLength(2)),\n * last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value); // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status); // 'VALID'\n * ```\n *\n * ### Create a form group with a group-level validator\n *\n * You include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('', Validators.minLength(2)),\n * passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n * return g.get('password').value === g.get('passwordConfirm').value\n * ? null : {'mismatch': true};\n * }\n * ```\n *\n * Like `FormControl` instances, you choose to pass in\n * validators and async validators as part of an options object.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('')\n * passwordConfirm: new FormControl('')\n * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });\n * ```\n *\n * ### Set the updateOn property for all controls in a form group\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * group level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormGroup({\n * one: new FormControl()\n * }, { updateOn: 'blur' });\n * ```\n *\n * @publicApi\n */\nexport class FormGroup extends AbstractControl {\n /**\n * Creates a new `FormGroup` instance.\n *\n * @param controls A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: {[key: string]: AbstractControl},\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Registers a control with the group's list of controls.\n *\n * This method does not update the value or validity of the control.\n * Use {@link FormGroup#addControl addControl} instead.\n *\n * @param name The control name to register in the collection\n * @param control Provides the control for the given name\n */\n registerControl(name: string, control: AbstractControl): AbstractControl {\n if (this.controls[name]) return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n }\n\n /**\n * Add a control to this group.\n *\n * This method also updates the value and validity of the control.\n *\n * @param name The control name to add to the collection\n * @param control Provides the control for the given name\n */\n addControl(name: string, control: AbstractControl): void {\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Remove a control from this group.\n *\n * @param name The control name to remove from the collection\n */\n removeControl(name: string): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Replace an existing control.\n *\n * @param name The control name to replace in the collection\n * @param control Provides the control for the given name\n */\n setControl(name: string, control: AbstractControl): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n if (control) this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Check whether there is an enabled control with the given name in the group.\n *\n * Reports false for disabled controls. If you'd like to check for existence in the group\n * only, use {@link AbstractControl#get get} instead.\n *\n * @param name The control name to check for existence in the collection\n *\n * @returns false for disabled controls, true otherwise.\n */\n contains(controlName: string): boolean {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n }\n\n /**\n * Sets the value of the `FormGroup`. It accepts an object that matches\n * the structure of the group, with control names as keys.\n *\n * @usageNotes\n * ### Set the complete value for the form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n *\n * console.log(form.value); // {first: null, last: null}\n *\n * form.setValue({first: 'Nancy', last: 'Drew'});\n * console.log(form.value); // {first: 'Nancy', last: 'Drew'}\n * ```\n *\n * @throws When strict checks fail, such as setting the value of a control\n * that doesn't exist or if you excluding the value of a control.\n *\n * @param value The new value for the control that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n */\n setValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n this._checkAllValuesPresent(value);\n Object.keys(value).forEach(name => {\n this._throwIfControlMissing(name);\n this.controls[name].setValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormGroup`. It accepts an object with control\n * names as keys, and does its best to match the values to the correct controls\n * in the group.\n *\n * It accepts both super-sets and sub-sets of the group without throwing an error.\n *\n * @usageNotes\n * ### Patch the value for a form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n * console.log(form.value); // {first: null, last: null}\n *\n * form.patchValue({first: 'Nancy'});\n * console.log(form.value); // {first: 'Nancy', last: null}\n * ```\n *\n * @param value The object that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes and\n * emits events after the value is patched.\n * * `onlySelf`: When true, each change only affects this control and not its parent. Default is\n * true.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n Object.keys(value).forEach(name => {\n if (this.controls[name]) {\n this.controls[name].patchValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormGroup`, marks all descendants are marked `pristine` and `untouched`, and\n * the value of all descendants to null.\n *\n * You reset to a specific form state by passing in a map of states\n * that matches the structure of your form, with control names as keys. The state\n * is a standalone value or a form state object with both a value and a disabled\n * status.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events when the group is reset.\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * @usageNotes\n *\n * ### Reset the form group values\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * console.log(form.value); // {first: 'first name', last: 'last name'}\n *\n * form.reset({ first: 'name', last: 'last name' });\n *\n * console.log(form.value); // {first: 'name', last: 'last name'}\n * ```\n *\n * ### Reset the form group values and disabled status\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * form.reset({\n * first: {value: 'name', disabled: true},\n * last: 'last'\n * });\n *\n * console.log(this.form.value); // {first: 'name', last: 'last name'}\n * console.log(this.form.get('first').status); // 'DISABLED'\n * ```\n */\n reset(value: any = {}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n control.reset(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the `FormGroup`, including any disabled controls.\n *\n * Retrieves all values regardless of disabled status.\n * The `value` property is the best way to get the value of the group, because\n * it excludes disabled controls in the `FormGroup`.\n */\n getRawValue(): any {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n acc[name] = control instanceof FormControl ? control.value : (<any>control).getRawValue();\n return acc;\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this._reduceChildren(false, (updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(name: string): void {\n if (!Object.keys(this.controls).length) {\n throw new Error(`\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.controls[name]) {\n throw new Error(`Cannot find form control with name: ${name}.`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: (v: any, k: string) => void): void {\n Object.keys(this.controls).forEach(k => cb(this.controls[k], k));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n });\n }\n\n /** @internal */\n _updateValue(): void { (this as{value: any}).value = this._reduceValue(); }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n let res = false;\n this._forEachChild((control: AbstractControl, name: string) => {\n res = res || (this.contains(name) && condition(control));\n });\n return res;\n }\n\n /** @internal */\n _reduceValue() {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n if (control.enabled || this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n }\n\n /** @internal */\n _reduceChildren(initValue: any, fn: Function) {\n let res = initValue;\n this._forEachChild(\n (control: AbstractControl, name: string) => { res = fn(res, control, name); });\n return res;\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const controlName of Object.keys(this.controls)) {\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n if (value[name] === undefined) {\n throw new Error(`Must supply a value for form control with name: '${name}'.`);\n }\n });\n }\n}\n\n/**\n * Tracks the value and validity state of an array of `FormControl`,\n * `FormGroup` or `FormArray` instances.\n *\n * A `FormArray` aggregates the values of each child `FormControl` into an array.\n * It calculates its status by reducing the status values of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormGroup`.\n *\n * @usageNotes\n *\n * ### Create an array of form controls\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy', Validators.minLength(2)),\n * new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value); // ['Nancy', 'Drew']\n * console.log(arr.status); // 'VALID'\n * ```\n *\n * ### Create a form array with array-level validators\n *\n * You include array-level validators and async validators. These come in handy\n * when you want to perform validation that considers the value of more than one child\n * control.\n *\n * The two types of validators are passed in separately as the second and third arg\n * respectively, or together as part of an options object.\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy'),\n * new FormControl('Drew')\n * ], {validators: myValidator, asyncValidators: myAsyncValidator});\n * ```\n *\n * ### Set the updateOn property for all controls in a form array\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * array level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl()\n * ], {updateOn: 'blur'});\n * ```\n *\n * ### Adding or removing controls from a form array\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that result in strange and unexpected behavior such\n * as broken change detection.\n *\n * @publicApi\n */\nexport class FormArray extends AbstractControl {\n /**\n * Creates a new `FormArray` instance.\n *\n * @param controls An array of child controls. Each child control is given an index\n * where it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: AbstractControl[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Get the `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to retrieve the control\n */\n at(index: number): AbstractControl { return this.controls[index]; }\n\n /**\n * Insert a new `AbstractControl` at the end of the array.\n *\n * @param control Form control to be inserted\n */\n push(control: AbstractControl): void {\n this.controls.push(control);\n this._registerControl(control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Insert a new `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to insert the control\n * @param control Form control to be inserted\n */\n insert(index: number, control: AbstractControl): void {\n this.controls.splice(index, 0, control);\n\n this._registerControl(control);\n this.updateValueAndValidity();\n }\n\n /**\n * Remove the control at the given `index` in the array.\n *\n * @param index Index in the array to remove the control\n */\n removeAt(index: number): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n this.updateValueAndValidity();\n }\n\n /**\n * Replace an existing control.\n *\n * @param index Index in the array to replace the control\n * @param control The `AbstractControl` control to replace the existing control\n */\n setControl(index: number, control: AbstractControl): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n\n if (control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n }\n\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Length of the control array.\n */\n get length(): number { return this.controls.length; }\n\n /**\n * Sets the value of the `FormArray`. It accepts an array that matches\n * the structure of the control.\n *\n * This method performs strict checks, and throws an error if you try\n * to set the value of a control that doesn't exist or if you exclude the\n * value of a control.\n *\n * @usageNotes\n * ### Set the values for the controls in the form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.setValue(['Nancy', 'Drew']);\n * console.log(arr.value); // ['Nancy', 'Drew']\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n setValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._checkAllValuesPresent(value);\n value.forEach((newValue: any, index: number) => {\n this._throwIfControlMissing(index);\n this.at(index).setValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormArray`. It accepts an array that matches the\n * structure of the control, and does its best to match the values to the correct\n * controls in the group.\n *\n * It accepts both super-sets and sub-sets of the array without throwing an error.\n *\n * @usageNotes\n * ### Patch the values for controls in a form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.patchValue(['Nancy']);\n * console.log(arr.value); // ['Nancy', null]\n * ```\n *\n * @param value Array of latest values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n value.forEach((newValue: any, index: number) => {\n if (this.at(index)) {\n this.at(index).patchValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the\n * value of all descendants to null or null maps.\n *\n * You reset to a specific form state by passing in an array of states\n * that matches the structure of the control. The state is a standalone value\n * or a form state object with both a value and a disabled status.\n *\n * @usageNotes\n * ### Reset the values in a form array\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * arr.reset(['name', 'last name']);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * ```\n *\n * ### Reset the values in a form array and the disabled status for the first control\n *\n * ```\n * this.arr.reset([\n * {value: 'name', disabled: true},\n * 'last'\n * ]);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * console.log(this.arr.get(0).status); // 'DISABLED'\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n reset(value: any = [], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, index: number) => {\n control.reset(value[index], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the array, including any disabled controls.\n *\n * Reports all values regardless of disabled status.\n * For enabled controls only, the `value` property is the best way to get the value of the array.\n */\n getRawValue(): any[] {\n return this.controls.map((control: AbstractControl) => {\n return control instanceof FormControl ? control.value : (<any>control).getRawValue();\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this.controls.reduce((updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(index: number): void {\n if (!this.controls.length) {\n throw new Error(`\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.at(index)) {\n throw new Error(`Cannot find form control at index ${index}`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: Function): void {\n this.controls.forEach((control: AbstractControl, index: number) => { cb(control, index); });\n }\n\n /** @internal */\n _updateValue(): void {\n (this as{value: any}).value =\n this.controls.filter((control) => control.enabled || this.disabled)\n .map((control) => control.value);\n }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n return this.controls.some((control: AbstractControl) => control.enabled && condition(control));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => this._registerControl(control));\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, i: number) => {\n if (value[i] === undefined) {\n throw new Error(`Must supply a value for form control at index: ${i}.`);\n }\n });\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const control of this.controls) {\n if (control.enabled) return false;\n }\n return this.controls.length > 0 || this.disabled;\n }\n\n private _registerControl(control: AbstractControl) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AfterViewInit, Directive, EventEmitter, Inject, Input, Optional, Self, forwardRef} from '@angular/core';\n\nimport {AbstractControl, FormControl, FormGroup, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {NgControl} from './ng_control';\nimport {NgModel} from './ng_model';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from './shared';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgForm)\n};\n\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a top-level `FormGroup` instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags. You don't need to add a special selector.\n *\n * You optionally export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful. Many properties from the underlying\n * `FormGroup` instance are duplicated on the directive itself, so a reference to it\n * gives you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, use `NgModel` with a `name`\n * attribute. You may use `NgModelGroup` to create sub-groups within the form.\n *\n * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event emits the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * To import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * @usageNotes\n *\n * ### Migrating from deprecated ngForm selector\n *\n * Support for using `ngForm` element selector has been deprecated in Angular v6 and will be removed\n * in Angular v9.\n *\n * This has been deprecated to keep selectors consistent with other core Angular selectors,\n * as element selectors are typically written in kebab-case.\n *\n * Now deprecated:\n * ```html\n * <ngForm #myForm=\"ngForm\">\n * ```\n *\n * After:\n * ```html\n * <ng-form #myForm=\"ngForm\">\n * ```\n *\n * ### Listening for form submission\n *\n * The following example shows how to capture the form values from the \"ngSubmit\" event.\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Setting the update options\n *\n * The following example shows you how to change the \"updateOn\" option from its default using\n * ngFormOptions.\n *\n * ```html\n * <form [ngFormOptions]=\"{updateOn: 'blur'}\">\n * <input name=\"one\" ngModel> <!-- this ngModel will update on blur -->\n * </form>\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,ng-form,[ngForm]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n outputs: ['ngSubmit'],\n exportAs: 'ngForm'\n})\nexport class NgForm extends ControlContainer implements Form,\n AfterViewInit {\n /**\n * @description\n * Returns whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n private _directives: NgModel[] = [];\n\n /**\n * @description\n * The `FormGroup` instance created for this form.\n */\n form: FormGroup;\n\n /**\n * @description\n * Event emitter for the \"ngSubmit\" event\n */\n ngSubmit = new EventEmitter();\n\n /**\n * @description\n * Tracks options for the `NgForm` instance.\n *\n * **updateOn**: Sets the default `updateOn` value for all child `NgModels` below it\n * unless explicitly set by a child `NgModel` using `ngModelOptions`). Defaults to 'change'.\n * Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngFormOptions') options !: {updateOn?: FormHooks};\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this.form =\n new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n }\n\n /**\n * @description\n * Lifecycle method called after the view is initialized. For internal use only.\n */\n ngAfterViewInit() { this._setUpdateStrategy(); }\n\n /**\n * @description\n * The directive instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * The internal `FormGroup` instance.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it is always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Returns a map of the controls in this group.\n */\n get controls(): {[key: string]: AbstractControl} { return this.form.controls; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `NgModel` directive instance.\n */\n addControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n (dir as{control: FormControl}).control =\n <FormControl>container.registerControl(dir.name, dir.control);\n setUpControl(dir.control, dir);\n dir.control.updateValueAndValidity({emitEvent: false});\n this._directives.push(dir);\n });\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `NgModel` directive.\n *\n * @param dir The `NgModel` directive instance.\n */\n getControl(dir: NgModel): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `NgModel` instance from the internal list of directives\n *\n * @param dir The `NgModel` directive instance.\n */\n removeControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n removeDir<NgModel>(this._directives, dir);\n });\n }\n\n /**\n * @description\n * Adds a new `NgModelGroup` directive instance to the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n addFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n const group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({emitEvent: false});\n });\n }\n\n /**\n * @description\n * Removes the `NgModelGroup` directive instance from the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n removeFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n });\n }\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n getFormGroup(dir: NgModelGroup): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `NgControl` directive.\n *\n * @param dir The `NgControl` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: NgControl, value: any): void {\n resolvedPromise.then(() => {\n const ctrl = <FormControl>this.form.get(dir.path !);\n ctrl.setValue(value);\n });\n }\n\n /**\n * @description\n * Sets the value for this `FormGroup`.\n *\n * @param value The new value\n */\n setValue(value: {[key: string]: any}): void { this.control.setValue(value); }\n\n /**\n * @description\n * Method called when the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n private _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n }\n\n /** @internal */\n _findContainer(path: string[]): FormGroup {\n path.pop();\n return path.length ? <FormGroup>this.form.get(path) : this.form;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class TemplateDrivenErrors {\n static modelParentException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup's partner directive \"formControlName\" instead. Example:\n\n ${Examples.formControlName}\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n ${Examples.ngModelWithFormGroup}`);\n }\n\n static formGroupNameException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static missingNameException() {\n throw new Error(\n `If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as 'standalone' in ngModelOptions.\n\n Example 1: <input [(ngModel)]=\"person.firstName\" name=\"first\">\n Example 2: <input [(ngModel)]=\"person.firstName\" [ngModelOptions]=\"{standalone: true}\">`);\n }\n\n static modelGroupParentException() {\n throw new Error(`\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static ngFormWarning() {\n console.warn(`\n It looks like you're using 'ngForm'.\n\n Support for using the 'ngForm' element selector has been deprecated in Angular v6 and will be removed\n in Angular v9.\n\n Use 'ng-form' instead.\n\n Before:\n <ngForm #myForm=\"ngForm\">\n\n After:\n <ng-form #myForm=\"ngForm\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Inject, InjectionToken, Optional} from '@angular/core';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\n/**\n * @description\n * `InjectionToken` to provide to turn off the warning when using 'ngForm' deprecated selector.\n */\nexport const NG_FORM_SELECTOR_WARNING = new InjectionToken('NgFormSelectorWarning');\n\n/**\n * This directive is solely used to display warnings when the deprecated `ngForm` selector is used.\n *\n * @deprecated in Angular v6 and will be removed in Angular v9.\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'ngForm'})\nexport class NgFormSelectorWarning {\n /**\n * Static property used to track whether the deprecation warning for this selector has been sent.\n * Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngFormWarning = false;\n\n constructor(@Optional() @Inject(NG_FORM_SELECTOR_WARNING) ngFormWarning: string|null) {\n if (((!ngFormWarning || ngFormWarning === 'once') && !NgFormSelectorWarning._ngFormWarning) ||\n ngFormWarning === 'always') {\n TemplateDrivenErrors.ngFormWarning();\n NgFormSelectorWarning._ngFormWarning = true;\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {NgForm} from './ng_form';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\nexport const modelGroupProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgModelGroup)\n};\n\n/**\n * @description\n * Creates and binds a `FormGroup` instance to a DOM element.\n *\n * This directive can only be used as a child of `NgForm` (within `<form>` tags).\n *\n * Use this directive to validate a sub-group of your form separately from the\n * rest of your form, or if some values in your domain model make more sense\n * to consume together in a nested object.\n *\n * Provide a name for the sub-group and it will become the key\n * for the sub-group in the form's full value. If you need direct access, export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * @usageNotes\n *\n * ### Consuming controls in a grouping\n *\n * The following example shows you how to combine controls together in a sub-group\n * of the form.\n *\n * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup'})\nexport class NgModelGroup extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `NgModelGroup` bound to the directive. The name corresponds\n * to a key in the parent `NgForm`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelGroup') name !: string;\n\n constructor(\n @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelGroupParentException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\nimport {NgForm} from './ng_form';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor, setUpControl} from './shared';\nimport {TemplateDrivenErrors} from './template_driven_errors';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => NgModel)\n};\n\n/**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have and old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel` have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a `FormControl` instance from a domain model and binds it\n * to a form control element.\n *\n * The `FormControl` instance tracks the value, user interaction, and\n * validation status of the control and keeps the view synced with the model. If used\n * within a parent form, the directive also registers itself with the form as a child\n * control.\n *\n * This directive is used by itself or as part of a larger form. Use the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional `Input`. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\n * class sets the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-box syntax'), the value in the UI always syncs back to\n * the domain model in your class.\n *\n * To inspect the properties of the associated `FormControl` (like validity state), \n * export the directive into a local template variable using `ngModel` as the key (ex: `#myVar=\"ngModel\"`).\n * You then access the control using the directive's `control` property, \n * but most properties used (like `valid` and `dirty`) fall through to the control anyway for direct access. \n * See a full list of properties directly available in `AbstractControlDirective`.\n *\n * @see `RadioControlValueAccessor` \n * @see `SelectControlValueAccessor`\n * \n * @usageNotes\n * \n * ### Using ngModel on a standalone control\n *\n * The following examples show a simple standalone control using `ngModel`:\n *\n * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * In the context of a parent form, it's often unnecessary to include one-way or two-way binding, \n * as the parent form syncs the value for you. You access its properties by exporting it into a \n * local template variable using `ngForm` such as (`#f=\"ngForm\"`). Use the variable where \n * needed on form submission.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n * \n * ### Using ngModel within a form\n *\n * The following example shows controls using `ngModel` within a form:\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n * \n * ### Using a standalone ngModel within a group\n * \n * The following example shows you how to use a standalone ngModel control\n * within a form. This controls the display of the form, but doesn't contain form data.\n *\n * ```html\n * <form>\n * <input name=\"login\" ngModel placeholder=\"Login\">\n * <input type=\"checkbox\" ngModel [ngModelOptions]=\"{standalone: true}\"> Show more options?\n * </form>\n * <!-- form value: {login: ''} -->\n * ```\n * \n * ### Setting the ngModel name attribute through options\n * \n * The following example shows you an alternate way to set the name attribute. The name attribute is used\n * within a custom form component, and the name `@Input` property serves a different purpose.\n *\n * ```html\n * <form>\n * <my-person-control name=\"Nancy\" ngModel [ngModelOptions]=\"{name: 'user'}\">\n * </my-person-control>\n * </form>\n * <!-- form value: {user: ''} -->\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[ngModel]:not([formControlName]):not([formControl])',\n providers: [formControlBinding],\n exportAs: 'ngModel'\n})\nexport class NgModel extends NgControl implements OnChanges,\n OnDestroy {\n public readonly control: FormControl = new FormControl();\n /** @internal */\n _registered = false;\n\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the name bound to the directive. The parent form\n * uses this name as a key to retrieve this control's value.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks whether the control is disabled.\n */\n // TODO(issue/24571): remove '!'.\n @Input('disabled') isDisabled !: boolean;\n\n /**\n * @description\n * Tracks the value bound to this directive.\n */\n @Input('ngModel') model: any;\n\n /**\n * @description\n * Tracks the configuration options for this `ngModel` instance.\n *\n * **name**: An alternative to setting the name attribute on the form control element. See\n * the [example](api/forms/NgModel#using-ngmodel-on-a-standalone-control) for using `NgModel`\n * as a standalone control.\n *\n * **standalone**: When set to true, the `ngModel` will not register itself with its parent form,\n * and acts as if it's not in the form. Defaults to false.\n *\n * **updateOn**: Defines the event upon which the form control value and validity update.\n * Defaults to 'change'. Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelOptions')\n options !: {name?: string, standalone?: boolean, updateOn?: FormHooks};\n\n /**\n * @description\n * Event emitter for producing the `ngModelChange` event after\n * the view model updates.\n */\n @Output('ngModelChange') update = new EventEmitter();\n\n constructor(@Optional() @Host() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[]) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n this._checkForErrors();\n if (!this._registered) this._setUpControl();\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal\n * use only.\n */\n ngOnDestroy(): void { this.formDirective && this.formDirective.removeControl(this); }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] {\n return this._parent ? controlPath(this.name, this._parent) : [this.name];\n }\n\n /**\n * @description\n * The top-level directive for this control if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value emitted by `ngModelChange`.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _setUpControl(): void {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() :\n this.formDirective.addControl(this);\n this._registered = true;\n }\n\n private _setUpdateStrategy(): void {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n }\n\n private _isStandalone(): boolean {\n return !this._parent || !!(this.options && this.options.standalone);\n }\n\n private _setUpStandalone(): void {\n setUpControl(this.control, this);\n this.control.updateValueAndValidity({emitEvent: false});\n }\n\n private _checkForErrors(): void {\n if (!this._isStandalone()) {\n this._checkParentType();\n }\n this._checkName();\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) &&\n this._parent instanceof AbstractFormGroupDirective) {\n TemplateDrivenErrors.formGroupNameException();\n } else if (\n !(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelParentException();\n }\n }\n\n private _checkName(): void {\n if (this.options && this.options.name) this.name = this.options.name;\n\n if (!this._isStandalone() && !this.name) {\n TemplateDrivenErrors.missingNameException();\n }\n }\n\n private _updateValue(value: any): void {\n resolvedPromise.then(\n () => { this.control.setValue(value, {emitViewToModelChange: false}); });\n }\n\n private _updateDisabled(changes: SimpleChanges) {\n const disabledValue = changes['isDisabled'].currentValue;\n\n const isDisabled =\n disabledValue === '' || (disabledValue && disabledValue !== 'false');\n\n resolvedPromise.then(() => {\n if (isDisabled && !this.control.disabled) {\n this.control.disable();\n } else if (!isDisabled && this.control.disabled) {\n this.control.enable();\n }\n });\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, InjectionToken, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, isPropertyUpdated, selectValueAccessor, setUpControl} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\n\n/**\n * Token to provide to turn off the ngModel warning on formControl and formControlName.\n */\nexport const NG_MODEL_WITH_FORM_CONTROL_WARNING =\n new InjectionToken('NgModelWithFormControlWarning');\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlDirective)\n};\n\n/**\n * @description\n * * Syncs a standalone `FormControl` instance to a form control element.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Registering a single form control\n * \n * The following examples shows how to register a standalone control and set its value.\n *\n * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <input [formControl]=\"control\" [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <input [formControl]=\"control\">\n * ```\n *\n * ```ts\n * this.control.setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControl]', providers: [formControlBinding], exportAs: 'ngForm'})\n\nexport class FormControlDirective extends NgControl implements OnChanges {\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControl') form !: FormControl;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlDirective. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular `FormControlDirective` instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(@Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|null) {\n super();\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._isControlChanged(changes)) {\n setUpControl(this.form, this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this.form.updateValueAndValidity({emitEvent: false});\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning(\n 'formControl', FormControlDirective, this, this._ngModelWarningConfig);\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * The `FormControl` bound to this directive.\n */\n get control(): FormControl { return this.form; }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _isControlChanged(changes: {[key: string]: any}): boolean {\n return changes.hasOwnProperty('form');\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\nimport {FormArray, FormControl, FormGroup} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators} from '../../validators';\nimport {ControlContainer} from '../control_container';\nimport {Form} from '../form_interface';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {cleanUpControl, composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from '../shared';\n\nimport {FormControlName} from './form_control_name';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupDirective)\n};\n\n/**\n * @description\n *\n * Binds an existing `FormGroup` to a DOM element.\n *\n * This directive accepts an existing `FormGroup` instance. It will then use this\n * `FormGroup` instance to match any child `FormControl`, `FormGroup`,\n * and `FormArray` instances to child `FormControlName`, `FormGroupName`,\n * and `FormArrayName` directives.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * ### Register Form Group\n *\n * The following example registers a `FormGroup` with first name and last name controls,\n * and listens for the *ngSubmit* event when the button is clicked.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector: '[formGroup]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n exportAs: 'ngForm'\n})\nexport class FormGroupDirective extends ControlContainer implements Form,\n OnChanges {\n /**\n * @description\n * Reports whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n // TODO(issue/24571): remove '!'.\n private _oldForm !: FormGroup;\n\n /**\n * @description\n * Tracks the list of added `FormControlName` instances\n */\n directives: FormControlName[] = [];\n\n /**\n * @description\n * Tracks the `FormGroup` bound to this directive.\n */\n @Input('formGroup') form: FormGroup = null !;\n\n /**\n * @description\n * Emits an event when the form submission has been triggered.\n */\n @Output() ngSubmit = new EventEmitter();\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) private _validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: any[]) {\n super();\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n }\n }\n\n /**\n * @description\n * Returns this directive's instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * Returns the `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `FormControlName` directive instance.\n */\n addControl(dir: FormControlName): FormControl {\n const ctrl: any = this.form.get(dir.path);\n setUpControl(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n this.directives.push(dir);\n return ctrl;\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `FormControlName` directive\n *\n * @param dir The `FormControlName` directive instance.\n */\n getControl(dir: FormControlName): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `FormControlName` instance from the internal list of directives\n *\n * @param dir The `FormControlName` directive instance.\n */\n removeControl(dir: FormControlName): void { removeDir<FormControlName>(this.directives, dir); }\n\n /**\n * Adds a new `FormGroupName` directive instance to the form.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n addFormGroup(dir: FormGroupName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form group.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n removeFormGroup(dir: FormGroupName): void {}\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance\n *\n * @param dir The `FormGroupName` directive instance.\n */\n getFormGroup(dir: FormGroupName): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Adds a new `FormArrayName` directive instance to the form.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n addFormArray(dir: FormArrayName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form array.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n removeFormArray(dir: FormArrayName): void {}\n\n /**\n * @description\n * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n getFormArray(dir: FormArrayName): FormArray { return <FormArray>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `FormControlName` directive.\n *\n * @param dir The `FormControlName` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: FormControlName, value: any): void {\n const ctrl  = <FormControl>this.form.get(dir.path);\n ctrl.setValue(value);\n }\n\n /**\n * @description\n * Method called with the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n\n /** @internal */\n _updateDomValue() {\n this.directives.forEach(dir => {\n const newCtrl: any = this.form.get(dir.path);\n if (dir.control !== newCtrl) {\n cleanUpControl(dir.control, dir);\n if (newCtrl) setUpControl(newCtrl, dir);\n (dir as{control: FormControl}).control = newCtrl;\n }\n });\n\n this.form._updateTreeValidity({emitEvent: false});\n }\n\n private _updateRegistrations() {\n this.form._registerOnCollectionChange(() => this._updateDomValue());\n if (this._oldForm) this._oldForm._registerOnCollectionChange(() => {});\n this._oldForm = this.form;\n }\n\n private _updateValidators() {\n const sync = composeValidators(this._validators);\n this.form.validator = Validators.compose([this.form.validator !, sync !]);\n\n const async = composeAsyncValidators(this._asyncValidators);\n this.form.asyncValidator = Validators.composeAsync([this.form.asyncValidator !, async !]);\n }\n\n private _checkFormPresent() {\n if (!this.form) {\n ReactiveErrors.missingFormException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormArray} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {composeAsyncValidators, composeValidators, controlPath} from '../shared';\nimport {AsyncValidatorFn, ValidatorFn} from '../validators';\n\nimport {FormGroupDirective} from './form_group_directive';\n\nexport const formGroupNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormGroup` to a DOM element.\n *\n * This directive can only be used with a parent `FormGroupDirective`.\n *\n * It accepts the string name of the nested `FormGroup` to link, and\n * looks for a `FormGroup` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * Use nested form groups to validate a sub-group of a\n * form separately from the rest or to group the values of certain\n * controls into their own nested object.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n *\n * @usageNotes\n * \n * ### Access the group by name\n * \n * The following example uses the {@link AbstractControl#get get} method to access the \n * associated `FormGroup`\n *\n * ```ts\n * this.form.get('name');\n * ```\n * \n * ### Access individual controls in the group\n * \n * The following example uses the {@link AbstractControl#get get} method to access \n * individual controls within the group using dot syntax.\n *\n * ```ts\n * this.form.get('name.first');\n * ```\n *\n * ### Register a nested `FormGroup`.\n * \n * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,\n * and provides methods to retrieve the nested `FormGroup` and individual controls.\n *\n * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formGroupName]', providers: [formGroupNameProvider]})\nexport class FormGroupName extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `FormGroup` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formGroupName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.groupParentException();\n }\n }\n}\n\nexport const formArrayNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormArrayName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormArray` to a DOM element.\n *\n * This directive is designed to be used with a parent `FormGroupDirective` (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested `FormArray` you want to link, and\n * will look for a `FormArray` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formArrayName]', providers: [formArrayNameProvider]})\nexport class FormArrayName extends ControlContainer implements OnInit, OnDestroy {\n /** @internal */\n _parent: ControlContainer;\n\n /** @internal */\n _validators: any[];\n\n /** @internal */\n _asyncValidators: any[];\n\n /**\n * @description\n * Tracks the name of the `FormArray` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formArrayName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs are initialized. For internal use only.\n *\n * @throws If the directive does not have a valid parent.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormArray(this);\n }\n\n /**\n * @description\n * A lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormArray(this);\n }\n }\n\n /**\n * @description\n * The `FormArray` bound to this directive.\n */\n get control(): FormArray { return this.formDirective !.getFormArray(this); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): FormGroupDirective|null {\n return this._parent ? <FormGroupDirective>this._parent.formDirective : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators registered with this\n * directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n private _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.arrayParentException();\n }\n }\n}\n\nfunction _hasInvalidParent(parent: ControlContainer): boolean {\n return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n !(parent instanceof FormArrayName);\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\nimport {NG_MODEL_WITH_FORM_CONTROL_WARNING} from './form_control_directive';\nimport {FormGroupDirective} from './form_group_directive';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const controlNameBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlName)\n};\n\n/**\n * @description\n * Syncs a `FormControl` in an existing `FormGroup` to a form control\n * element by name.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n * \n * ### Register `FormControl` within a group\n *\n * The following example shows how to register multiple form controls within a form group\n * and set their value.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: `RadioControlValueAccessor`\n * * Selects: `SelectControlValueAccessor`\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\" [(ngModel)]=\"value\">\n * </form>\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\">\n * </form>\n * ```\n *\n * ```ts\n * this.form.get('first').setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName]', providers: [controlNameBinding]})\nexport class FormControlName extends NgControl implements OnChanges, OnDestroy {\n private _added = false;\n /**\n * @description\n * Internal reference to the view model value.\n * @internal\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n readonly control !: FormControl;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControlName') name !: string;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlName. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular FormControlName instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators:\n Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR) valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|\n null) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n if (!this._added) this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning('formControlName', FormControlName, this, this._ngModelWarningConfig);\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent !); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn {\n return composeAsyncValidators(this._rawAsyncValidators) !;\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof FormGroupName) &&\n this._parent instanceof AbstractFormGroupDirective) {\n ReactiveErrors.ngModelGroupException();\n } else if (\n !(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&\n !(this._parent instanceof FormArrayName)) {\n ReactiveErrors.controlParentException();\n }\n }\n\n private _setUpControl() {\n this._checkParentType();\n (this as{control: FormControl}).control = this.formDirective.addControl(this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this._added = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Input, OnChanges, SimpleChanges, StaticProvider, forwardRef} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {AbstractControl} from '../model';\nimport {NG_VALIDATORS, Validators} from '../validators';\n\n\n/**\n * @description\n * Defines the map of errors returned from failed validation checks.\n *\n * @publicApi\n */\nexport type ValidationErrors = {\n [key: string]: any\n};\n\n/**\n * @description\n * An interface implemented by classes that perform synchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom validator\n *\n * The following example implements the `Validator` interface to create a\n * validator directive with a custom error key.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors|null {\n * return {'custom': true};\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface Validator {\n /**\n * @description\n * Method that performs synchronous validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A map of validation errors if validation fails,\n * otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null;\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange?(fn: () => void): void;\n}\n\n/**\n * @description\n * An interface implemented by classes that perform asynchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom async validator directive\n *\n * The following example implements the `AsyncValidator` interface to create an\n * async validator directive with a custom error key.\n *\n * ```typescript\n * import { of as observableOf } from 'rxjs';\n *\n * @Directive({\n * selector: '[customAsyncValidator]',\n * providers: [{provide: NG_ASYNC_VALIDATORS, useExisting: CustomAsyncValidatorDirective, multi:\n * true}]\n * })\n * class CustomAsyncValidatorDirective implements AsyncValidator {\n * validate(control: AbstractControl): Observable<ValidationErrors|null> {\n * return observableOf({'custom': true});\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface AsyncValidator extends Validator {\n /**\n * @description\n * Method that performs async validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A promise or observable that resolves a map of validation errors\n * if validation fails, otherwise null.\n */\n validate(control: AbstractControl):\n Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RequiredValidator),\n multi: true\n};\n\n/**\n * @description\n * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const CHECKBOX_REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CheckboxRequiredValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds the `required` validator to any controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required validator using template-driven forms\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector:\n ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n providers: [REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class RequiredValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _required !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the required attribute bound to this directive.\n */\n @Input()\n get required(): boolean|string { return this._required; }\n\n set required(value: boolean|string) {\n this._required = value != null && value !== false && `${value}` !== 'false';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether the control is empty.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.required(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n\n/**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required checkbox validator using template-driven forms\n *\n * The following example shows how to add a checkbox required validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector:\n 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n providers: [CHECKBOX_REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class CheckboxRequiredValidator extends RequiredValidator {\n /**\n * @description\n * Method that validates whether or not the checkbox has been checked.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.requiredTrue(control) : null;\n }\n}\n\n/**\n * @description\n * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const EMAIL_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => EmailValidator),\n multi: true\n};\n\n/**\n * A directive that adds the `email` validator to controls marked with the\n * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding an email validator\n *\n * The following example shows how to add an email validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n providers: [EMAIL_VALIDATOR]\n})\nexport class EmailValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _enabled !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the email attribute bound to this directive.\n */\n @Input()\n set email(value: boolean|string) {\n this._enabled = value === '' || value === true || value === 'true';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether an email address is valid.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this._enabled ? Validators.email(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n/**\n * @description\n * A function that receives a control and synchronously returns a map of\n * validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface ValidatorFn { (control: AbstractControl): ValidationErrors|null; }\n\n/**\n * @description\n * A function that receives a control and returns a Promise or observable\n * that emits validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface AsyncValidatorFn {\n (control: AbstractControl): Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MIN_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MinLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds minimum length validation to controls marked with the\n * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` mult-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a minimum length validator\n *\n * The following example shows how to add a minimum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel minlength=\"4\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n providers: [MIN_LENGTH_VALIDATOR],\n host: {'[attr.minlength]': 'minlength ? minlength : null'}\n})\nexport class MinLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the minimum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() minlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('minlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value meets a minimum length\n * requirement. Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.minlength == null ? null : this._validator(control);\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.minLength(parseInt(this.minlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MAX_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaxLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds max length validation to controls marked with the\n * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a maximum length validator\n *\n * The following example shows how to add a maximum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel maxlength=\"25\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n providers: [MAX_LENGTH_VALIDATOR],\n host: {'[attr.maxlength]': 'maxlength ? maxlength : null'}\n})\nexport class MaxLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the maximum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() maxlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('maxlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value exceeds\n * the maximum length requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.maxlength != null ? this._validator(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const PATTERN_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => PatternValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds regex pattern validation to controls marked with the\n * `pattern` attribute. The regex must match the entire control value.\n * The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a pattern validator\n *\n * The following example shows how to add a pattern validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel pattern=\"[a-zA-Z ]*\">\n * ```\n * \n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n providers: [PATTERN_VALIDATOR],\n host: {'[attr.pattern]': 'pattern ? pattern : null'}\n})\nexport class PatternValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the pattern bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() pattern !: string | RegExp;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('pattern' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value matches the\n * the pattern requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null { return this._validator(control); }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void { this._validator = Validators.pattern(this.pattern); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\n\nimport {AsyncValidatorFn, ValidatorFn} from './directives/validators';\nimport {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup, FormHooks} from './model';\n\nfunction isAbstractControlOptions(options: AbstractControlOptions | {[key: string]: any}):\n options is AbstractControlOptions {\n return (<AbstractControlOptions>options).asyncValidators !== undefined ||\n (<AbstractControlOptions>options).validators !== undefined ||\n (<AbstractControlOptions>options).updateOn !== undefined;\n}\n\n/**\n * @description\n * Creates an `AbstractControl` from a user-specified configuration.\n *\n * The `FormBuilder` provides syntactic sugar that shortens creating instances of a `FormControl`,\n * `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to build complex\n * forms.\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@Injectable()\nexport class FormBuilder {\n /**\n * @description\n * Construct a new `FormGroup` instance.\n *\n * @param controlsConfig A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param options Configuration options object for the `FormGroup`. The object can\n * have two shapes:\n *\n * 1) `AbstractControlOptions` object (preferred), which consists of:\n * * `validators`: A synchronous validator function, or an array of validator functions\n * * `asyncValidators`: A single async validator or array of async validator functions\n * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur' |\n * submit')\n *\n * 2) Legacy configuration object, which consists of:\n * * `validator`: A synchronous validator function, or an array of validator functions\n * * `asyncValidator`: A single async validator or array of async validator functions\n *\n */\n group(\n controlsConfig: {[key: string]: any},\n options: AbstractControlOptions|{[key: string]: any}|null = null): FormGroup {\n const controls = this._reduceControls(controlsConfig);\n\n let validators: ValidatorFn|ValidatorFn[]|null = null;\n let asyncValidators: AsyncValidatorFn|AsyncValidatorFn[]|null = null;\n let updateOn: FormHooks|undefined = undefined;\n\n if (options != null) {\n if (isAbstractControlOptions(options)) {\n // `options` are `AbstractControlOptions`\n validators = options.validators != null ? options.validators : null;\n asyncValidators = options.asyncValidators != null ? options.asyncValidators : null;\n updateOn = options.updateOn != null ? options.updateOn : undefined;\n } else {\n // `options` are legacy form group options\n validators = options.validator != null ? options.validator : null;\n asyncValidators = options.asyncValidator != null ? options.asyncValidator : null;\n }\n }\n\n return new FormGroup(controls, {asyncValidators, updateOn, validators});\n }\n\n /**\n * @description\n * Construct a new `FormControl` with the given state, validators and options.\n *\n * @param formState Initializes the control with an initial state value, or\n * with an object that contains both a value and a disabled status.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n *\n * @usageNotes\n *\n * ### Initialize a control as disabled\n *\n * The following example returns a control with an initial value in a disabled state.\n *\n * <code-example path=\"forms/ts/formBuilder/form_builder_example.ts\"\n * linenums=\"false\" region=\"disabled-control\">\n * </code-example>\n */\n control(\n formState: any, validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormControl {\n return new FormControl(formState, validatorOrOpts, asyncValidator);\n }\n\n /**\n * Constructs a new `FormArray` from the given array of configurations,\n * validators and options.\n *\n * @param controlsConfig An array of child controls or control configs. Each\n * child control is given an index when it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n */\n array(\n controlsConfig: any[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormArray {\n const controls = controlsConfig.map(c => this._createControl(c));\n return new FormArray(controls, validatorOrOpts, asyncValidator);\n }\n\n /** @internal */\n _reduceControls(controlsConfig: {[k: string]: any}): {[key: string]: AbstractControl} {\n const controls: {[key: string]: AbstractControl} = {};\n Object.keys(controlsConfig).forEach(controlName => {\n controls[controlName] = this._createControl(controlsConfig[controlName]);\n });\n return controls;\n }\n\n /** @internal */\n _createControl(controlConfig: any): AbstractControl {\n if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n controlConfig instanceof FormArray) {\n return controlConfig;\n\n } else if (Array.isArray(controlConfig)) {\n const value = controlConfig[0];\n const validator: ValidatorFn = controlConfig.length > 1 ? controlConfig[1] : null;\n const asyncValidator: AsyncValidatorFn = controlConfig.length > 2 ? controlConfig[2] : null;\n return this.control(value, validator, asyncValidator);\n\n } else {\n return this.control(controlConfig);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = new Version('7.2.7');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive} from '@angular/core';\n\n/**\n * @description\n *\n * Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```\n * <form ngNativeValidate></form>\n * ```\n *\n * @publicApi\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n host: {'novalidate': ''},\n})\nexport class NgNoValidate {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule, Type} from '@angular/core';\n\nimport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nimport {DefaultValueAccessor} from './directives/default_value_accessor';\nimport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nimport {NgForm} from './directives/ng_form';\nimport {NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nimport {NgModel} from './directives/ng_model';\nimport {NgModelGroup} from './directives/ng_model_group';\nimport {NgNoValidate} from './directives/ng_no_validate_directive';\nimport {NumberValueAccessor} from './directives/number_value_accessor';\nimport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nimport {RangeValueAccessor} from './directives/range_value_accessor';\nimport {FormControlDirective} from './directives/reactive_directives/form_control_directive';\nimport {FormControlName} from './directives/reactive_directives/form_control_name';\nimport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nimport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nimport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nimport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\nimport {CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator} from './directives/validators';\n\nexport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nexport {ControlValueAccessor} from './directives/control_value_accessor';\nexport {DefaultValueAccessor} from './directives/default_value_accessor';\nexport {NgControl} from './directives/ng_control';\nexport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nexport {NgForm} from './directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING, NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nexport {NgModel} from './directives/ng_model';\nexport {NgModelGroup} from './directives/ng_model_group';\nexport {NumberValueAccessor} from './directives/number_value_accessor';\nexport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nexport {RangeValueAccessor} from './directives/range_value_accessor';\nexport {FormControlDirective, NG_MODEL_WITH_FORM_CONTROL_WARNING} from './directives/reactive_directives/form_control_directive';\nexport {FormControlName} from './directives/reactive_directives/form_control_name';\nexport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nexport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nexport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nexport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\n\nexport const SHARED_FORM_DIRECTIVES: Type<any>[] = [\n NgNoValidate,\n NgSelectOption,\n NgSelectMultipleOption,\n DefaultValueAccessor,\n NumberValueAccessor,\n RangeValueAccessor,\n CheckboxControlValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n NgControlStatus,\n NgControlStatusGroup,\n RequiredValidator,\n MinLengthValidator,\n MaxLengthValidator,\n PatternValidator,\n CheckboxRequiredValidator,\n EmailValidator,\n];\n\nexport const TEMPLATE_DRIVEN_DIRECTIVES: Type<any>[] =\n [NgModel, NgModelGroup, NgForm, NgFormSelectorWarning];\n\nexport const REACTIVE_DRIVEN_DIRECTIVES: Type<any>[] =\n [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n\n/**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\n@NgModule({\n declarations: SHARED_FORM_DIRECTIVES,\n exports: SHARED_FORM_DIRECTIVES,\n})\nexport class InternalFormsSharedModule {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModuleWithProviders, NgModule} from '@angular/core';\n\nimport {InternalFormsSharedModule, NG_FORM_SELECTOR_WARNING, NG_MODEL_WITH_FORM_CONTROL_WARNING, REACTIVE_DRIVEN_DIRECTIVES, TEMPLATE_DRIVEN_DIRECTIVES} from './directives';\nimport {RadioControlRegistry} from './directives/radio_control_value_accessor';\nimport {FormBuilder} from './form_builder';\n\n/**\n * Exports the required providers and directives for template-driven forms,\n * making them available for import by NgModules that import this module.\n *\n * @see [Forms Guide](/guide/forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n providers: [RadioControlRegistry],\n exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n})\nexport class FormsModule {\n /**\n * @description\n * Provides options for configuring the template-driven forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnDeprecatedNgFormSelector` Configures when to emit a warning when the deprecated\n * `ngForm` selector is used.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnDeprecatedNgFormSelector?: 'never' | 'once' | 'always',\n }): ModuleWithProviders<FormsModule> {\n return {\n ngModule: FormsModule,\n providers:\n [{provide: NG_FORM_SELECTOR_WARNING, useValue: opts.warnOnDeprecatedNgFormSelector}]\n };\n }\n}\n\n/**\n * Exports the required infrastructure and directives for reactive forms,\n * making them available for import by NgModules that import this module.\n * @see [Forms](guide/reactive-forms)\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n providers: [FormBuilder, RadioControlRegistry],\n exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n})\nexport class ReactiveFormsModule {\n /**\n * @description\n * Provides options for configuring the reactive forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`\n * binding is used with reactive form directives.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnNgModelWithFormControl: 'never' | 'once' | 'always'\n }): ModuleWithProviders<ReactiveFormsModule> {\n return {\n ngModule: ReactiveFormsModule,\n providers: [{\n provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,\n useValue: opts.warnOnNgModelWithFormControl\n }]\n };\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * This module is used for handling user input, by defining and building a `FormGroup` that\n * consists of `FormControl` objects, and mapping them onto the DOM. `FormControl`\n * objects can then be used to read information from the form DOM elements.\n *\n * Forms providers are not included in default providers; you must import these providers\n * explicitly.\n */\n\n\nexport {AbstractControlDirective} from './directives/abstract_control_directive';\nexport {AbstractFormGroupDirective} from './directives/abstract_form_group_directive';\nexport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nexport {ControlContainer} from './directives/control_container';\nexport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './directives/control_value_accessor';\nexport {COMPOSITION_BUFFER_MODE, DefaultValueAccessor} from './directives/default_value_accessor';\nexport {Form} from './directives/form_interface';\nexport {NgControl} from './directives/ng_control';\nexport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nexport {NgForm} from './directives/ng_form';\nexport {NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nexport {NgModel} from './directives/ng_model';\nexport {NgModelGroup} from './directives/ng_model_group';\nexport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nexport {FormControlDirective} from './directives/reactive_directives/form_control_directive';\nexport {FormControlName} from './directives/reactive_directives/form_control_name';\nexport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nexport {FormArrayName} from './directives/reactive_directives/form_group_name';\nexport {FormGroupName} from './directives/reactive_directives/form_group_name';\nexport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nexport {SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\nexport {AsyncValidator, AsyncValidatorFn, CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator, ValidationErrors, Validator, ValidatorFn} from './directives/validators';\nexport {FormBuilder} from './form_builder';\nexport {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup} from './model';\nexport {NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators} from './validators';\nexport {VERSION} from './version';\n\nexport * from './form_providers';\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\nexport * from './src/forms';\n\n// This file only reexports content of the `src` folder. Keep it that way.\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// This file is not used to build this module. It is only used during editing\n// by the TypeScript language service and during build for verification. `ngc`\n// replaces this file with production index.ts when it rewrites private symbol\n// names.\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {InternalFormsSharedModule as ɵangular_packages_forms_forms_bc,REACTIVE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_bb,SHARED_FORM_DIRECTIVES as ɵangular_packages_forms_forms_z,TEMPLATE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_ba} from './src/directives';\nexport {CHECKBOX_VALUE_ACCESSOR as ɵangular_packages_forms_forms_a} from './src/directives/checkbox_value_accessor';\nexport {DEFAULT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_b} from './src/directives/default_value_accessor';\nexport {AbstractControlStatus as ɵangular_packages_forms_forms_c,ngControlStatusHost as ɵangular_packages_forms_forms_d} from './src/directives/ng_control_status';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_e} from './src/directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING as ɵangular_packages_forms_forms_f} from './src/directives/ng_form_selector_warning';\nexport {formControlBinding as ɵangular_packages_forms_forms_g} from './src/directives/ng_model';\nexport {modelGroupProvider as ɵangular_packages_forms_forms_h} from './src/directives/ng_model_group';\nexport {NgNoValidate as ɵangular_packages_forms_forms_bh} from './src/directives/ng_no_validate_directive';\nexport {NUMBER_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bd,NumberValueAccessor as ɵangular_packages_forms_forms_be} from './src/directives/number_value_accessor';\nexport {RADIO_VALUE_ACCESSOR as ɵangular_packages_forms_forms_i,RadioControlRegistry as ɵangular_packages_forms_forms_j} from './src/directives/radio_control_value_accessor';\nexport {RANGE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bf,RangeValueAccessor as ɵangular_packages_forms_forms_bg} from './src/directives/range_value_accessor';\nexport {NG_MODEL_WITH_FORM_CONTROL_WARNING as ɵangular_packages_forms_forms_k,formControlBinding as ɵangular_packages_forms_forms_l} from './src/directives/reactive_directives/form_control_directive';\nexport {controlNameBinding as ɵangular_packages_forms_forms_m} from './src/directives/reactive_directives/form_control_name';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_n} from './src/directives/reactive_directives/form_group_directive';\nexport {formArrayNameProvider as ɵangular_packages_forms_forms_p,formGroupNameProvider as ɵangular_packages_forms_forms_o} from './src/directives/reactive_directives/form_group_name';\nexport {SELECT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_q} from './src/directives/select_control_value_accessor';\nexport {NgSelectMultipleOption as ɵangular_packages_forms_forms_s,SELECT_MULTIPLE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_r} from './src/directives/select_multiple_control_value_accessor';\nexport {CHECKBOX_REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_u,EMAIL_VALIDATOR as ɵangular_packages_forms_forms_v,MAX_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_x,MIN_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_w,PATTERN_VALIDATOR as ɵangular_packages_forms_forms_y,REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_t} from './src/directives/validators';"],"names":["tslib_1.__extends","isPromise","isObservable","getDOM","tslib_1.__param","tslib_1.__decorate","Examples","looseIdentical","tslib_1.__values","_buildValueString","_extractId","resolvedPromise","formControlBinding","formDirectiveProvider"],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;AAoBA;IAAA;KAiMC;IApLC,sBAAI,2CAAK;;;;;aAAT,cAAmB,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAQrE,sBAAI,2CAAK;;;;;;;aAAT,cAA4B,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAO9E,sBAAI,6CAAO;;;;;;aAAX,cAA8B,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAQlF,sBAAI,6CAAO;;;;;;;aAAX,cAA8B,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAQlF,sBAAI,8CAAQ;;;;;;;aAAZ,cAA+B,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAOpF,sBAAI,6CAAO;;;;;;aAAX,cAA8B,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAMlF,sBAAI,4CAAM;;;;;aAAV,cAAsC,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAOzF,sBAAI,8CAAQ;;;;;;aAAZ,cAA+B,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAOpF,sBAAI,2CAAK;;;;;;aAAT,cAA4B,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAO9E,sBAAI,6CAAO;;;;;;aAAX,cAA8B,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAQlF,sBAAI,4CAAM;;;;;;;aAAV,cAA4B,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAO/E,sBAAI,+CAAS;;;;;;aAAb,cAAgC,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAOtF,sBAAI,mDAAa;;;;;;aAAjB;YACE,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;SACzD;;;OAAA;IAQD,sBAAI,kDAAY;;;;;;;aAAhB;YACE,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;SACxD;;;OAAA;IAOD,sBAAI,0CAAI;;;;;;aAAR,cAA4B,OAAO,IAAI,CAAC,EAAE;;;OAAA;;;;;IAM1C,wCAAK,GAAL,UAAM,KAAsB;QAAtB,sBAAA,EAAA,iBAAsB;QAC1B,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgCD,2CAAQ,GAAR,UAAS,SAAiB,EAAE,IAAkC;QAC5D,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;KACtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6BD,2CAAQ,GAAR,UAAS,SAAiB,EAAE,IAAkC;QAC5D,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;KACrE;IACH,+BAAC;CAAA;;ACrND;;;;;;;AAYA;;;;;;;AAOA;IAA+CA,oCAAwB;IAAvE;;KAmBC;IAPC,sBAAI,2CAAa;;;;;aAAjB,cAAiC,OAAO,IAAI,CAAC,EAAE;;;OAAA;IAM/C,sBAAI,kCAAI;;;;;aAAR,cAA4B,OAAO,IAAI,CAAC,EAAE;;;OAAA;IAC5C,uBAAC;CAnBD,CAA+C,wBAAwB;;ACnBvE;;;;;;;AAcA,SAAS,iBAAiB,CAAC,KAAU;;IAEnC,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;CAC5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BD,IAAa,aAAa,GAAG,IAAI,cAAc,CAA4B,cAAc,CAAC,CAAC;;;;;;;;;AAU3F,IAAa,mBAAmB,GAC5B,IAAI,cAAc,CAA4B,mBAAmB,CAAC,CAAC;AAEvE,IAAM,YAAY,GACd,4LAA4L,CAAC;;;;;;;;;;;;AAajM;IAAA;KA0SC;;;;;;;;;;;;;;;;;;;;IAtRQ,cAAG,GAAV,UAAW,GAAW;QACpB,OAAO,UAAC,OAAwB;YAC9B,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE;gBAC9D,OAAO,IAAI,CAAC;aACb;YACD,IAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;;;YAGxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,GAAG,EAAC,KAAK,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAC,EAAC,GAAG,IAAI,CAAC;SAC7F,CAAC;KACH;;;;;;;;;;;;;;;;;;;;IAqBM,cAAG,GAAV,UAAW,GAAW;QACpB,OAAO,UAAC,OAAwB;YAC9B,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE;gBAC9D,OAAO,IAAI,CAAC;aACb;YACD,IAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;;;YAGxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,GAAG,EAAC,KAAK,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAC,EAAC,GAAG,IAAI,CAAC;SAC7F,CAAC;KACH;;;;;;;;;;;;;;;;;;;IAoBM,mBAAQ,GAAf,UAAgB,OAAwB;QACtC,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAC,UAAU,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC;KACrE;;;;;;;;;;;;;;;;;;;IAoBM,uBAAY,GAAnB,UAAoB,OAAwB;QAC1C,OAAO,OAAO,CAAC,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC;KAC3D;;;;;;;;;;;;;;;;;;;IAoBM,gBAAK,GAAZ,UAAa,OAAwB;QACnC,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACpC,OAAO,IAAI,CAAC;SACb;QACD,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;KAClE;;;;;;;;;;;;;;;;;;;;;;;;IAyBM,oBAAS,GAAhB,UAAiB,SAAiB;QAChC,OAAO,UAAC,OAAwB;YAC9B,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpC,OAAO,IAAI,CAAC;aACb;YACD,IAAM,MAAM,GAAW,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAChE,OAAO,MAAM,GAAG,SAAS;gBACrB,EAAC,WAAW,EAAE,EAAC,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAC,EAAC;gBACpE,IAAI,CAAC;SACV,CAAC;KACH;;;;;;;;;;;;;;;;;;;;;;;;IAyBM,oBAAS,GAAhB,UAAiB,SAAiB;QAChC,OAAO,UAAC,OAAwB;YAC9B,IAAM,MAAM,GAAW,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAChE,OAAO,MAAM,GAAG,SAAS;gBACrB,EAAC,WAAW,EAAE,EAAC,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAC,EAAC;gBACpE,IAAI,CAAC;SACV,CAAC;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6BM,kBAAO,GAAd,UAAe,OAAsB;QACnC,IAAI,CAAC,OAAO;YAAE,OAAO,UAAU,CAAC,aAAa,CAAC;QAC9C,IAAI,KAAa,CAAC;QAClB,IAAI,QAAgB,CAAC;QACrB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,QAAQ,GAAG,EAAE,CAAC;YAEd,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,QAAQ,IAAI,GAAG,CAAC;YAE/C,QAAQ,IAAI,OAAO,CAAC;YAEpB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;gBAAE,QAAQ,IAAI,GAAG,CAAC;YAEhE,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;SAC9B;aAAM;YACL,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC9B,KAAK,GAAG,OAAO,CAAC;SACjB;QACD,OAAO,UAAC,OAAwB;YAC9B,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpC,OAAO,IAAI,CAAC;aACb;YACD,IAAM,KAAK,GAAW,OAAO,CAAC,KAAK,CAAC;YACpC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;gBACJ,EAAC,SAAS,EAAE,EAAC,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAC,EAAC,CAAC;SAC7F,CAAC;KACH;;;;;IAMM,wBAAa,GAApB,UAAqB,OAAwB,IAA2B,OAAO,IAAI,CAAC,EAAE;IAY/E,kBAAO,GAAd,UAAe,UAA+C;QAC5D,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,IAAM,iBAAiB,GAAkB,UAAU,CAAC,MAAM,CAAC,SAAS,CAAQ,CAAC;QAC7E,IAAI,iBAAiB,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAE/C,OAAO,UAAS,OAAwB;YACtC,OAAO,YAAY,CAAC,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;SACrE,CAAC;KACH;;;;;;;;;IAUM,uBAAY,GAAnB,UAAoB,UAAqC;QACvD,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,IAAM,iBAAiB,GAAuB,UAAU,CAAC,MAAM,CAAC,SAAS,CAAQ,CAAC;QAClF,IAAI,iBAAiB,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAE/C,OAAO,UAAS,OAAwB;YACtC,IAAM,WAAW,GAAG,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1F,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;SACtD,CAAC;KACH;IACH,iBAAC;CAAA,IAAA;AAED,SAAS,SAAS,CAAC,CAAM;IACvB,OAAO,CAAC,IAAI,IAAI,CAAC;CAClB;AAED,SAAgB,YAAY,CAAC,CAAM;IACjC,IAAM,GAAG,GAAGC,UAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,EAAEC,aAAY,CAAC,GAAG,CAAC,CAAC,EAAE;QACxB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;IACD,OAAO,GAAG,CAAC;CACZ;AAED,SAAS,kBAAkB,CAAC,OAAwB,EAAE,UAAyB;IAC7E,OAAO,UAAU,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,CAAC,GAAA,CAAC,CAAC;CACxC;AAED,SAAS,uBAAuB,CAAC,OAAwB,EAAE,UAA8B;IACvF,OAAO,UAAU,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,CAAC,GAAA,CAAC,CAAC;CACxC;AAED,SAAS,YAAY,CAAC,aAAiC;IACrD,IAAM,GAAG,GACL,aAAa,CAAC,MAAM,CAAC,UAAC,GAA4B,EAAE,MAA+B;QACjF,OAAO,MAAM,IAAI,IAAI,gBAAO,GAAK,EAAK,MAAM,IAAI,GAAK,CAAC;KACvD,EAAE,EAAE,CAAC,CAAC;IACX,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;CACnD;;AC/YD;;;;;;;AAQA,AA6HA;;;;;;;AAOA,IAAa,iBAAiB,GAAG,IAAI,cAAc,CAAuB,iBAAiB,CAAC;;AC5I5F;;;;;;;IAYa,uBAAuB,GAAQ;IAC1C,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,4BAA4B,GAAA,CAAC;IAC3D,KAAK,EAAE,IAAI;CACZ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AA+BF;IAaE,sCAAoB,SAAoB,EAAU,WAAuB;QAArD,cAAS,GAAT,SAAS,CAAW;QAAU,gBAAW,GAAX,WAAW,CAAY;;;;;QARzE,aAAQ,GAAG,UAAC,CAAM,KAAO,CAAC;;;;;QAM1B,cAAS,GAAG,eAAQ,CAAC;KAEwD;;;;;;IAO7E,iDAAU,GAAV,UAAW,KAAU;QACnB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;KAC9E;;;;;;;IAQD,uDAAgB,GAAhB,UAAiB,EAAkB,IAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE;;;;;;;IAQlE,wDAAiB,GAAjB,UAAkB,EAAY,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;;;;;;IAO9D,uDAAgB,GAAhB,UAAiB,UAAmB;QAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACpF;IA/CU,4BAA4B;QANxC,SAAS,CAAC;YACT,QAAQ,EACJ,uGAAuG;YAC3G,IAAI,EAAE,EAAC,UAAU,EAAE,iCAAiC,EAAE,QAAQ,EAAE,aAAa,EAAC;YAC9E,SAAS,EAAE,CAAC,uBAAuB,CAAC;SACrC,CAAC;yCAc+B,SAAS,EAAuB,UAAU;OAb9D,4BAA4B,CAgDxC;IAAD,mCAAC;CAhDD;;AC/CA;;;;;;;IAYa,sBAAsB,GAAQ;IACzC,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,oBAAoB,GAAA,CAAC;IACnD,KAAK,EAAE,IAAI;CACZ,CAAC;;;;;AAMF,SAAS,UAAU;IACjB,IAAM,SAAS,GAAGC,OAAM,EAAE,GAAGA,OAAM,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC;IAC1D,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;CACtD;;;;;;;AAQD,IAAa,uBAAuB,GAAG,IAAI,cAAc,CAAU,sBAAsB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AAyC3F;IAgBE,8BACY,SAAoB,EAAU,WAAuB,EACR,gBAAyB;QADtE,cAAS,GAAT,SAAS,CAAW;QAAU,gBAAW,GAAX,WAAW,CAAY;QACR,qBAAgB,GAAhB,gBAAgB,CAAS;;;;;QAblF,aAAQ,GAAG,UAAC,CAAM,KAAO,CAAC;;;;;QAM1B,cAAS,GAAG,eAAQ,CAAC;;QAGb,eAAU,GAAG,KAAK,CAAC;QAKzB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;YACjC,IAAI,CAAC,gBAAgB,GAAG,CAAC,UAAU,EAAE,CAAC;SACvC;KACF;;;;;;IAOD,yCAAU,GAAV,UAAW,KAAU;QACnB,IAAM,eAAe,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;KACtF;;;;;;;IAQD,+CAAgB,GAAhB,UAAiB,EAAoB,IAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE;;;;;;;IAQpE,gDAAiB,GAAjB,UAAkB,EAAc,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;;;;;;IAOhE,+CAAgB,GAAhB,UAAiB,UAAmB;QAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACpF;;IAGD,2CAAY,GAAZ,UAAa,KAAU;QACrB,IAAI,CAAC,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACzE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACtB;KACF;;IAGD,gDAAiB,GAAjB,cAA4B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE;;IAGrD,8CAAe,GAAf,UAAgB,KAAU;QACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC/C;IAzEU,oBAAoB;QAdhC,SAAS,CAAC;YACT,QAAQ,EACJ,8MAA8M;;;;YAIlN,IAAI,EAAE;gBACJ,SAAS,EAAE,8CAA8C;gBACzD,QAAQ,EAAE,aAAa;gBACvB,oBAAoB,EAAE,gCAAgC;gBACtD,kBAAkB,EAAE,iDAAiD;aACtE;YACD,SAAS,EAAE,CAAC,sBAAsB,CAAC;SACpC,CAAC;QAmBKC,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,uBAAuB,CAAC,CAAA;yCADzB,SAAS,EAAuB,UAAU;OAjBtD,oBAAoB,CA0EhC;IAAD,2BAAC;CA1ED;;AC1EA;;;;;;;AAWA,SAAgB,kBAAkB,CAAC,SAAkC;IACnE,IAAgB,SAAU,CAAC,QAAQ,EAAE;QACnC,OAAO,UAAC,CAAkB,IAAK,OAAY,SAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAA,CAAC;KACnE;SAAM;QACL,OAAoB,SAAS,CAAC;KAC/B;CACF;AAED,SAAgB,uBAAuB,CAAC,SAA4C;IAElF,IAAqB,SAAU,CAAC,QAAQ,EAAE;QACxC,OAAO,UAAC,CAAkB,IAAK,OAAiB,SAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAA,CAAC;KACxE;SAAM;QACL,OAAyB,SAAS,CAAC;KACpC;CACF;;AC1BD;;;;;;;IAYa,qBAAqB,GAAQ;IACxC,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,mBAAmB,GAAA,CAAC;IAClD,KAAK,EAAE,IAAI;CACZ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AAmCF;IAcE,6BAAoB,SAAoB,EAAU,WAAuB;QAArD,cAAS,GAAT,SAAS,CAAW;QAAU,gBAAW,GAAX,WAAW,CAAY;;;;;;QARzE,aAAQ,GAAG,UAAC,CAAM,KAAO,CAAC;;;;;QAM1B,cAAS,GAAG,eAAQ,CAAC;KAEwD;;;;;;IAO7E,wCAAU,GAAV,UAAW,KAAa;;QAEtB,IAAM,eAAe,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;KACtF;;;;;;;IAQD,8CAAgB,GAAhB,UAAiB,EAA4B;QAC3C,IAAI,CAAC,QAAQ,GAAG,UAAC,KAAK,IAAO,EAAE,CAAC,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E;;;;;;;IAQD,+CAAiB,GAAjB,UAAkB,EAAc,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;;;;;;IAOhE,8CAAgB,GAAhB,UAAiB,UAAmB;QAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACpF;IApDU,mBAAmB;QAV/B,SAAS,CAAC;YACT,QAAQ,EACJ,iGAAiG;YACrG,IAAI,EAAE;gBACJ,UAAU,EAAE,+BAA+B;gBAC3C,SAAS,EAAE,+BAA+B;gBAC1C,QAAQ,EAAE,aAAa;aACxB;YACD,SAAS,EAAE,CAAC,qBAAqB,CAAC;SACnC,CAAC;yCAe+B,SAAS,EAAuB,UAAU;OAd9D,mBAAmB,CAqD/B;IAAD,0BAAC;CArDD;;ACnDA;;;;;;;AAcA,SAAS,aAAa;IACpB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;CAClC;;;;;;;;AASD;IAAwCJ,6BAAwB;IAAhE;QAAA,qEA4DC;;;;;;;QArDC,aAAO,GAA0B,IAAI,CAAC;;;;;QAMtC,UAAI,GAAgB,IAAI,CAAC;;;;;QAMzB,mBAAa,GAA8B,IAAI,CAAC;;;;;;;QAQhD,oBAAc,GAAiC,EAAE,CAAC;;;;;;;QAQlD,yBAAmB,GAA2C,EAAE,CAAC;;KAyBlE;IAjBC,sBAAI,gCAAS;;;;;;;aAAb,cAAoC,OAAoB,aAAa,EAAE,CAAC,EAAE;;;OAAA;IAQ1E,sBAAI,qCAAc;;;;;;;aAAlB,cAA8C,OAAyB,aAAa,EAAE,CAAC,EAAE;;;OAAA;IAS3F,gBAAC;CA5DD,CAAwC,wBAAwB;;ACzBhE;;;;;;;IAaa,oBAAoB,GAAQ;IACvC,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,yBAAyB,GAAA,CAAC;IACxD,KAAK,EAAE,IAAI;CACZ,CAAC;;;;;AAOF;IADA;QAEU,eAAU,GAAU,EAAE,CAAC;KA0ChC;;;;;IApCC,kCAAG,GAAH,UAAI,OAAkB,EAAE,QAAmC;QACzD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;KAC3C;;;;;IAMD,qCAAM,GAAN,UAAO,QAAmC;QACxC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;YACpD,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;gBACtC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,OAAO;aACR;SACF;KACF;;;;;IAMD,qCAAM,GAAN,UAAO,QAAmC;QAA1C,iBAMC;QALC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,CAAC;YACxB,IAAI,KAAI,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;gBACvD,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAClC;SACF,CAAC,CAAC;KACJ;IAEO,2CAAY,GAApB,UACI,WAAmD,EACnD,QAAmC;QACrC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC1C,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,QAAQ,CAAC,OAAO;YACvD,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;KAC3C;IA1CU,oBAAoB;QADhC,UAAU,EAAE;OACA,oBAAoB,CA2ChC;IAAD,2BAAC;CA3CD,IA2CC;AAED;;;;;;;;;;;;;;;;;;;;AA0BA;IA6CE,mCACY,SAAoB,EAAU,WAAuB,EACrD,SAA+B,EAAU,SAAmB;QAD5D,cAAS,GAAT,SAAS,CAAW;QAAU,gBAAW,GAAX,WAAW,CAAY;QACrD,cAAS,GAAT,SAAS,CAAsB;QAAU,cAAS,GAAT,SAAS,CAAU;;;;;QA/BxE,aAAQ,GAAG,eAAQ,CAAC;;;;;QAMpB,cAAS,GAAG,eAAQ,CAAC;KAyBuD;;;;;;;IAQ5E,4CAAQ,GAAR;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;KACzC;;;;;;;IAQD,+CAAW,GAAX,cAAsB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;;;;;;;IAQpD,8CAAU,GAAV,UAAW,KAAU;QACnB,IAAI,CAAC,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;KACpF;;;;;;;IAQD,oDAAgB,GAAhB,UAAiB,EAAkB;QAAnC,iBAMC;QALC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,QAAQ,GAAG;YACd,EAAE,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;YACf,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAI,CAAC,CAAC;SAC7B,CAAC;KACH;;;;;;IAOD,+CAAW,GAAX,UAAY,KAAU,IAAU,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;;;;;;;IAQzD,qDAAiB,GAAjB,UAAkB,EAAY,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;;;;;;IAO9D,oDAAgB,GAAhB,UAAiB,UAAmB;QAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACpF;IAEO,8CAAU,GAAlB;QACE,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE;YAC3E,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;KAC1E;IAEO,mDAAe,GAAvB;QACE,MAAM,IAAI,KAAK,CAAC,iMAGf,CAAC,CAAC;KACJ;IArGQK;QAAR,KAAK,EAAE;;2DAAgB;IAQfA;QAAR,KAAK,EAAE;;sEAA2B;IAM1BA;QAAR,KAAK,EAAE;;4DAAY;IA3CT,yBAAyB;QANrC,SAAS,CAAC;YACT,QAAQ,EACJ,8FAA8F;YAClG,IAAI,EAAE,EAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAC;YACzD,SAAS,EAAE,CAAC,oBAAoB,CAAC;SAClC,CAAC;yCA+CuB,SAAS,EAAuB,UAAU;YAC1C,oBAAoB,EAAqB,QAAQ;OA/C7D,yBAAyB,CAmIrC;IAAD,gCAAC;CAnID;;AC/FA;;;;;;;IAYa,oBAAoB,GAAmB;IAClD,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,kBAAkB,GAAA,CAAC;IACjD,KAAK,EAAE,IAAI;CACZ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AAmCF;IAcE,4BAAoB,SAAoB,EAAU,WAAuB;QAArD,cAAS,GAAT,SAAS,CAAW;QAAU,gBAAW,GAAX,WAAW,CAAY;;;;;;QARzE,aAAQ,GAAG,UAAC,CAAM,KAAO,CAAC;;;;;QAM1B,cAAS,GAAG,eAAQ,CAAC;KAEwD;;;;;;IAO7E,uCAAU,GAAV,UAAW,KAAU;QACnB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;KACxF;;;;;;;IAQD,6CAAgB,GAAhB,UAAiB,EAA4B;QAC3C,IAAI,CAAC,QAAQ,GAAG,UAAC,KAAK,IAAO,EAAE,CAAC,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E;;;;;;;IAQD,8CAAiB,GAAjB,UAAkB,EAAc,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;;;;;;IAOhE,6CAAgB,GAAhB,UAAiB,UAAmB;QAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACpF;IAlDU,kBAAkB;QAV9B,SAAS,CAAC;YACT,QAAQ,EACJ,8FAA8F;YAClG,IAAI,EAAE;gBACJ,UAAU,EAAE,+BAA+B;gBAC3C,SAAS,EAAE,+BAA+B;gBAC1C,QAAQ,EAAE,aAAa;aACxB;YACD,SAAS,EAAE,CAAC,oBAAoB,CAAC;SAClC,CAAC;yCAe+B,SAAS,EAAuB,UAAU;OAd9D,kBAAkB,CAmD9B;IAAD,yBAAC;CAnDD;;ACnDA;;;;;;;AAQA,AAAO,IAAM,iBAAiB,GAAG;IAC/B,eAAe,EAAE,wMASX;IAEN,aAAa,EAAE,6RAWT;IAEN,aAAa,EAAE,sYAcT;IAEN,YAAY,EAAE,kJAKJ;IAEV,oBAAoB,EAAE,4LAKrB;CACF,CAAC;;AC9DF;;;;;;;AASA,AAEA;IAAA;KA8EC;IA7EQ,qCAAsB,GAA7B;QACE,MAAM,IAAI,KAAK,CACX,iOAKAC,iBAAQ,CAAC,eAAiB,CAAC,CAAC;KACjC;IAEM,oCAAqB,GAA5B;QACE,MAAM,IAAI,KAAK,CACX,yRAKEA,iBAAQ,CAAC,aAAa,2GAItBA,iBAAQ,CAAC,YAAc,CAAC,CAAC;KAChC;IACM,mCAAoB,GAA3B;QACE,MAAM,IAAI,KAAK,CAAC,8FAIXA,iBAAQ,CAAC,eAAiB,CAAC,CAAC;KAClC;IAEM,mCAAoB,GAA3B;QACE,MAAM,IAAI,KAAK,CACX,8NAKAA,iBAAQ,CAAC,aAAe,CAAC,CAAC;KAC/B;IAEM,mCAAoB,GAA3B;QACE,MAAM,IAAI,KAAK,CACX,mOAKEA,iBAAQ,CAAC,aAAe,CAAC,CAAC;KACjC;IAEM,kCAAmB,GAA1B;QACE,OAAO,CAAC,IAAI,CAAC,kiBAUZ,CAAC,CAAC;KACJ;IAEM,6BAAc,GAArB,UAAsB,aAAqB;QACzC,OAAO,CAAC,IAAI,CAAC,wEACkD,aAAa,uSAM7C,aAAa,KAAK,aAAa,GAAG,sBAAsB;cACnF,iBAAiB,6BACpB,CAAC,CAAC;KACJ;IACH,qBAAC;CAAA,IAAA;;ACzFD;;;;;;;IAYa,qBAAqB,GAAmB;IACnD,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,0BAA0B,GAAA,CAAC;IACzD,KAAK,EAAE,IAAI;CACZ,CAAC;AAEF,SAAS,iBAAiB,CAAC,EAAiB,EAAE,KAAU;IACtD,IAAI,EAAE,IAAI,IAAI;QAAE,OAAO,KAAG,KAAO,CAAC;IAClC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,KAAK,GAAG,QAAQ,CAAC;IACzD,OAAO,CAAG,EAAE,UAAK,KAAO,EAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;CACvC;AAED,SAAS,UAAU,CAAC,WAAmB;IACrC,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiED;IAkCE,oCAAoB,SAAoB,EAAU,WAAuB;QAArD,cAAS,GAAT,SAAS,CAAW;QAAU,gBAAW,GAAX,WAAW,CAAY;;QA/BzE,eAAU,GAAqB,IAAI,GAAG,EAAe,CAAC;;QAEtD,eAAU,GAAW,CAAC,CAAC;;;;;QAMvB,aAAQ,GAAG,UAAC,CAAM,KAAO,CAAC;;;;;QAM1B,cAAS,GAAG,eAAQ,CAAC;QAeb,iBAAY,GAAkCC,eAAc,CAAC;KAEQ;IAT7E,sBAAI,mDAAW;;;;;;aAAf,UAAgB,EAAiC;YAC/C,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;gBAC5B,MAAM,IAAI,KAAK,CAAC,kDAAgD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAG,CAAC,CAAC;aACvF;YACD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;SACxB;;;OAAA;;;;;;;IAYD,+CAAU,GAAV,UAAW,KAAU;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAM,EAAE,GAAgB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,EAAE,IAAI,IAAI,EAAE;YACd,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;SACjF;QACD,IAAM,WAAW,GAAG,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAClF;;;;;;;IAQD,qDAAgB,GAAhB,UAAiB,EAAuB;QAAxC,iBAKC;QAJC,IAAI,CAAC,QAAQ,GAAG,UAAC,WAAmB;YAClC,KAAI,CAAC,KAAK,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAC/C,EAAE,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;SAChB,CAAC;KACH;;;;;;;IAQD,sDAAiB,GAAjB,UAAkB,EAAa,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;;;;;;IAO/D,qDAAgB,GAAhB,UAAiB,UAAmB;QAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACpF;;IAGD,oDAAe,GAAf,cAA4B,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;;IAGpE,iDAAY,GAAZ,UAAa,KAAU;;;YACrB,KAAiB,IAAA,KAAAC,SAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA,gBAAA,4BAAE;gBAAhD,IAAM,EAAE,WAAA;gBACX,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;oBAAE,OAAO,EAAE,CAAC;aAClE;;;;;;;;;QACD,OAAO,IAAI,CAAC;KACb;;IAGD,oDAAe,GAAf,UAAgB,WAAmB;QACjC,IAAM,EAAE,GAAW,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;KACxE;IAxEDH;QADC,KAAK,EAAE;;;iEAMP;IA9BU,0BAA0B;QANtC,SAAS,CAAC;YACT,QAAQ,EACJ,6GAA6G;YACjH,IAAI,EAAE,EAAC,UAAU,EAAE,+BAA+B,EAAE,QAAQ,EAAE,aAAa,EAAC;YAC5E,SAAS,EAAE,CAAC,qBAAqB,CAAC;SACnC,CAAC;yCAmC+B,SAAS,EAAuB,UAAU;OAlC9D,0BAA0B,CAkGtC;IAAD,iCAAC;CAlGD,IAkGC;AAED;;;;;;;;;;AAWA;IAQE,wBACY,QAAoB,EAAU,SAAoB,EAC9B,OAAmC;QADvD,aAAQ,GAAR,QAAQ,CAAY;QAAU,cAAS,GAAT,SAAS,CAAW;QAC9B,YAAO,GAAP,OAAO,CAA4B;QACjE,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;KAC5D;IAQD,sBAAI,mCAAO;;;;;;aAAX,UAAY,KAAU;YACpB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;gBAAE,OAAO;YACjC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC7C;;;OAAA;IAQD,sBAAI,iCAAK;;;;;;aAAT,UAAU,KAAU;YAClB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/D;;;OAAA;;IAGD,yCAAgB,GAAhB,UAAiB,KAAa;QAC5B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;KACzE;;;;;IAMD,oCAAW,GAAX;QACE,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC7C;KACF;IAhCDA;QADC,KAAK,CAAC,SAAS,CAAC;;;iDAMhB;IAQDA;QADC,KAAK,CAAC,OAAO,CAAC;;;+CAId;IApCU,cAAc;QAD1B,SAAS,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAC,CAAC;QAWzBD,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA;yCADD,UAAU,EAAqB,SAAS;YACrB,0BAA0B;OAVxD,cAAc,CAqD1B;IAAD,qBAAC;CArDD;;AC1MA;;;;;;;IAYa,8BAA8B,GAAmB;IAC5D,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,kCAAkC,GAAA,CAAC;IACjE,KAAK,EAAE,IAAI;CACZ,CAAC;AAEF,SAASK,mBAAiB,CAAC,EAAU,EAAE,KAAU;IAC/C,IAAI,EAAE,IAAI,IAAI;QAAE,OAAO,KAAG,KAAO,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,KAAK,GAAG,MAAI,KAAK,MAAG,CAAC;IACpD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,KAAK,GAAG,QAAQ,CAAC;IACzD,OAAO,CAAG,EAAE,UAAK,KAAO,EAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;CACvC;AAED,SAASC,YAAU,CAAC,WAAmB;IACrC,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CAClC;AAQD,AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA;IAuCE,4CAAoB,SAAoB,EAAU,WAAuB;QAArD,cAAS,GAAT,SAAS,CAAW;QAAU,gBAAW,GAAX,WAAW,CAAY;;QA/BzE,eAAU,GAAwC,IAAI,GAAG,EAAkC,CAAC;;QAE5F,eAAU,GAAW,CAAC,CAAC;;;;;QAMvB,aAAQ,GAAG,UAAC,CAAM,KAAO,CAAC;;;;;QAM1B,cAAS,GAAG,eAAQ,CAAC;QAeb,iBAAY,GAAkCH,eAAc,CAAC;KAEQ;IAT7E,sBAAI,2DAAW;;;;;;aAAf,UAAgB,EAAiC;YAC/C,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;gBAC5B,MAAM,IAAI,KAAK,CAAC,kDAAgD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAG,CAAC,CAAC;aACvF;YACD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;SACxB;;;OAAA;;;;;;;;IAaD,uDAAU,GAAV,UAAW,KAAU;QAArB,iBAWC;QAVC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,yBAAwE,CAAC;QAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;YAExB,IAAM,KAAG,GAAG,KAAK,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC;YACnD,yBAAyB,GAAG,UAAC,GAAG,EAAE,CAAC,IAAO,GAAG,CAAC,YAAY,CAAC,KAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/F;aAAM;YACL,yBAAyB,GAAG,UAAC,GAAG,EAAE,CAAC,IAAO,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;SACtE;QACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;KACpD;;;;;;;;IASD,6DAAgB,GAAhB,UAAiB,EAAuB;QAAxC,iBAyBC;QAxBC,IAAI,CAAC,QAAQ,GAAG,UAAC,CAAM;YACrB,IAAM,QAAQ,GAAe,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE;gBACvC,IAAM,OAAO,GAAmB,CAAC,CAAC,eAAe,CAAC;gBAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,IAAM,GAAG,GAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAM,GAAG,GAAQ,KAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACjD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACpB;aACF;;iBAEI;gBACH,IAAM,OAAO,GAAmC,CAAC,CAAC,OAAO,CAAC;gBAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,IAAM,GAAG,GAAe,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACxC,IAAI,GAAG,CAAC,QAAQ,EAAE;wBAChB,IAAM,GAAG,GAAQ,KAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACjD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBACpB;iBACF;aACF;YACD,KAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,EAAE,CAAC,QAAQ,CAAC,CAAC;SACd,CAAC;KACH;;;;;;;IAQD,8DAAiB,GAAjB,UAAkB,EAAa,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;;;;;;IAO/D,6DAAgB,GAAhB,UAAiB,UAAmB;QAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACpF;;IAGD,4DAAe,GAAf,UAAgB,KAA6B;QAC3C,IAAM,EAAE,GAAW,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC;KACX;;IAGD,yDAAY,GAAZ,UAAa,KAAU;;;YACrB,KAAiB,IAAA,KAAAC,SAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA,gBAAA,4BAAE;gBAAhD,IAAM,EAAE,WAAA;gBACX,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAG,CAAC,MAAM,EAAE,KAAK,CAAC;oBAAE,OAAO,EAAE,CAAC;aAC3E;;;;;;;;;QACD,OAAO,IAAI,CAAC;KACb;;IAGD,4DAAe,GAAf,UAAgB,WAAmB;QACjC,IAAM,EAAE,GAAWE,YAAU,CAAC,WAAW,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAG,CAAC,MAAM,GAAG,WAAW,CAAC;KACjF;IArGDL;QADC,KAAK,EAAE;;;yEAMP;IAnCU,kCAAkC;QAN9C,SAAS,CAAC;YACT,QAAQ,EACJ,2FAA2F;YAC/F,IAAI,EAAE,EAAC,UAAU,EAAE,yBAAyB,EAAE,QAAQ,EAAE,aAAa,EAAC;YACtE,SAAS,EAAE,CAAC,8BAA8B,CAAC;SAC5C,CAAC;yCAwC+B,SAAS,EAAuB,UAAU;OAvC9D,kCAAkC,CAoI9C;IAAD,yCAAC;CApID,IAoIC;AAED;;;;;;;;;;AAWA;IAME,gCACY,QAAoB,EAAU,SAAoB,EAC9B,OAA2C;QAD/D,aAAQ,GAAR,QAAQ,CAAY;QAAU,cAAS,GAAT,SAAS,CAAW;QAC9B,YAAO,GAAP,OAAO,CAAoC;QACzE,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SAC9C;KACF;IAQD,sBAAI,2CAAO;;;;;;aAAX,UAAY,KAAU;YACpB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;gBAAE,OAAO;YACjC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,gBAAgB,CAACI,mBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC7C;;;OAAA;IAQD,sBAAI,yCAAK;;;;;;aAAT,UAAU,KAAU;YAClB,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,gBAAgB,CAACA,mBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;gBACzD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC7C;iBAAM;gBACL,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;aAC9B;SACF;;;OAAA;;IAGD,iDAAgB,GAAhB,UAAiB,KAAa;QAC5B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;KACzE;;IAGD,6CAAY,GAAZ,UAAa,QAAiB;QAC5B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;KAC/E;;;;;IAMD,4CAAW,GAAX;QACE,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC7C;KACF;IA1CDJ;QADC,KAAK,CAAC,SAAS,CAAC;;;yDAMhB;IAQDA;QADC,KAAK,CAAC,OAAO,CAAC;;;uDASd;IAzCU,sBAAsB;QADlC,SAAS,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAC,CAAC;QASzBD,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA;yCADD,UAAU,EAAqB,SAAS;YACrB,kCAAkC;OARhE,sBAAsB,CA+DlC;IAAD,6BAAC;CA/DD;;ACpOA;;;;;;;SA8BgB,WAAW,CAAC,IAAY,EAAE,MAAwB;IAChE,gBAAW,MAAM,CAAC,IAAM,GAAE,IAAI,GAAE;CACjC;AAED,SAAgB,YAAY,CAAC,OAAoB,EAAE,GAAc;IAC/D,IAAI,CAAC,OAAO;QAAE,WAAW,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,CAAC,aAAa;QAAE,WAAW,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAC;IAEpF,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAW,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,cAAgB,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IACjG,GAAG,CAAC,aAAe,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE9C,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtC,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAEvC,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAEhC,IAAI,GAAG,CAAC,aAAe,CAAC,gBAAgB,EAAE;QACxC,OAAO,CAAC,wBAAwB,CAC5B,UAAC,UAAmB,IAAO,GAAG,CAAC,aAAe,CAAC,gBAAkB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;KACvF;;IAGD,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAC,SAAkC;QAC5D,IAAgB,SAAU,CAAC,yBAAyB;YACtC,SAAU,CAAC,yBAA2B,CAAC,cAAM,OAAA,OAAO,CAAC,sBAAsB,EAAE,GAAA,CAAC,CAAC;KAC9F,CAAC,CAAC;IAEH,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAC,SAA4C;QAC3E,IAAgB,SAAU,CAAC,yBAAyB;YACtC,SAAU,CAAC,yBAA2B,CAAC,cAAM,OAAA,OAAO,CAAC,sBAAsB,EAAE,GAAA,CAAC,CAAC;KAC9F,CAAC,CAAC;CACJ;AAED,SAAgB,cAAc,CAAC,OAAoB,EAAE,GAAc;IACjE,GAAG,CAAC,aAAe,CAAC,gBAAgB,CAAC,cAAM,OAAA,eAAe,CAAC,GAAG,CAAC,GAAA,CAAC,CAAC;IACjE,GAAG,CAAC,aAAe,CAAC,iBAAiB,CAAC,cAAM,OAAA,eAAe,CAAC,GAAG,CAAC,GAAA,CAAC,CAAC;IAElE,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAC,SAAc;QACxC,IAAI,SAAS,CAAC,yBAAyB,EAAE;YACvC,SAAS,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;SAC3C;KACF,CAAC,CAAC;IAEH,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAC,SAAc;QAC7C,IAAI,SAAS,CAAC,yBAAyB,EAAE;YACvC,SAAS,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;SAC3C;KACF,CAAC,CAAC;IAEH,IAAI,OAAO;QAAE,OAAO,CAAC,eAAe,EAAE,CAAC;CACxC;AAED,SAAS,uBAAuB,CAAC,OAAoB,EAAE,GAAc;IACnE,GAAG,CAAC,aAAe,CAAC,gBAAgB,CAAC,UAAC,QAAa;QACjD,OAAO,CAAC,aAAa,GAAG,QAAQ,CAAC;QACjC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;QAC9B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;QAE7B,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAAE,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;KAChE,CAAC,CAAC;CACJ;AAED,SAAS,iBAAiB,CAAC,OAAoB,EAAE,GAAc;IAC7D,GAAG,CAAC,aAAe,CAAC,iBAAiB,CAAC;QACpC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;QAE/B,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,cAAc;YAAE,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACvF,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,CAAC,aAAa,EAAE,CAAC;KAC5D,CAAC,CAAC;CACJ;AAED,SAAS,aAAa,CAAC,OAAoB,EAAE,GAAc;IACzD,IAAI,OAAO,CAAC,aAAa;QAAE,OAAO,CAAC,WAAW,EAAE,CAAC;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,EAAC,qBAAqB,EAAE,KAAK,EAAC,CAAC,CAAC;IACxE,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7C,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC;CAChC;AAED,SAAS,wBAAwB,CAAC,OAAoB,EAAE,GAAc;IACpE,OAAO,CAAC,gBAAgB,CAAC,UAAC,QAAa,EAAE,cAAuB;;QAE9D,GAAG,CAAC,aAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;;QAGzC,IAAI,cAAc;YAAE,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;KACrD,CAAC,CAAC;CACJ;AAED,SAAgB,kBAAkB,CAC9B,OAA8B,EAAE,GAA+C;IACjF,IAAI,OAAO,IAAI,IAAI;QAAE,WAAW,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;IAClE,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;CAChG;AAED,SAAS,eAAe,CAAC,GAAc;IACrC,OAAO,WAAW,CAAC,GAAG,EAAE,wEAAwE,CAAC,CAAC;CACnG;AAED,SAAS,WAAW,CAAC,GAA6B,EAAE,OAAe;IACjE,IAAI,UAAkB,CAAC;IACvB,IAAI,GAAG,CAAC,IAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACzB,UAAU,GAAG,YAAU,GAAG,CAAC,IAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAG,CAAC;KAClD;SAAM,IAAI,GAAG,CAAC,IAAM,CAAC,CAAC,CAAC,EAAE;QACxB,UAAU,GAAG,YAAU,GAAG,CAAC,IAAI,MAAG,CAAC;KACpC;SAAM;QACL,UAAU,GAAG,4BAA4B,CAAC;KAC3C;IACD,MAAM,IAAI,KAAK,CAAI,OAAO,SAAI,UAAY,CAAC,CAAC;CAC7C;AAED,SAAgB,iBAAiB,CAAC,UAAqC;IACrE,OAAO,UAAU,IAAI,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC;CAC3F;AAED,SAAgB,sBAAsB,CAAC,UAAqC;IAE1E,OAAO,UAAU,IAAI,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAChE,IAAI,CAAC;CAClC;AAED,SAAgB,iBAAiB,CAAC,OAA6B,EAAE,SAAc;IAC7E,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,IAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC,IAAI,MAAM,CAAC,aAAa,EAAE;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,CAACG,eAAc,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;CACxD;AAED,IAAM,iBAAiB,GAAG;IACxB,4BAA4B;IAC5B,kBAAkB;IAClB,mBAAmB;IACnB,0BAA0B;IAC1B,kCAAkC;IAClC,yBAAyB;CAC1B,CAAC;AAEF,SAAgB,iBAAiB,CAAC,aAAmC;IACnE,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,aAAa,CAAC,WAAW,KAAK,CAAC,GAAA,CAAC,CAAC;CACrE;AAED,SAAgB,mBAAmB,CAAC,IAAe,EAAE,UAAuB;IAC1E,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC5B,UAAU,CAAC,OAAO,CAAC,UAAA,GAAG;QACpB,IAAM,OAAO,GAAG,GAAG,CAAC,OAAsB,CAAC;QAC3C,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE;YAC3D,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC7C,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC;SAChC;KACF,CAAC,CAAC;CACJ;;AAGD,SAAgB,mBAAmB,CAC/B,GAAc,EAAE,cAAsC;IACxD,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAEjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;QAChC,WAAW,CAAC,GAAG,EAAE,mEAAmE,CAAC,CAAC;IAExF,IAAI,eAAe,GAAmC,SAAS,CAAC;IAChE,IAAI,eAAe,GAAmC,SAAS,CAAC;IAChE,IAAI,cAAc,GAAmC,SAAS,CAAC;IAE/D,cAAc,CAAC,OAAO,CAAC,UAAC,CAAuB;QAC7C,IAAI,CAAC,CAAC,WAAW,KAAK,oBAAoB,EAAE;YAC1C,eAAe,GAAG,CAAC,CAAC;SAErB;aAAM,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE;YAC/B,IAAI,eAAe;gBACjB,WAAW,CAAC,GAAG,EAAE,iEAAiE,CAAC,CAAC;YACtF,eAAe,GAAG,CAAC,CAAC;SAErB;aAAM;YACL,IAAI,cAAc;gBAChB,WAAW,CAAC,GAAG,EAAE,+DAA+D,CAAC,CAAC;YACpF,cAAc,GAAG,CAAC,CAAC;SACpB;KACF,CAAC,CAAC;IAEH,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAC1C,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAC5C,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAE5C,WAAW,CAAC,GAAG,EAAE,+CAA+C,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC;CACb;AAED,SAAgB,SAAS,CAAI,IAAS,EAAE,EAAK;IAC3C,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;QAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CACvC;;AAGD,SAAgB,eAAe,CAC3B,IAAY,EAAE,IAAwC,EACtD,QAAwC,EAAE,aAA4B;IACxE,IAAI,CAAC,SAAS,EAAE,IAAI,aAAa,KAAK,OAAO;QAAE,OAAO;IAEtD,IAAI,CAAC,CAAC,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,MAAM,KAAK,CAAC,IAAI,CAAC,uBAAuB;SACrF,aAAa,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;QACjE,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,QAAQ,CAAC,mBAAmB,GAAG,IAAI,CAAC;KACrC;CACF;;AC7OD;;;;;;;AAmBA;;;;;;AAMA;IAAgDP,8CAAgB;IAAhE;;KAmFC;;;;;;IAlDC,6CAAQ,GAAR;QACE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,aAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KACzC;;;;;;IAOD,gDAAW,GAAX;QACE,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SAC1C;KACF;IAMD,sBAAI,+CAAO;;;;;aAAX,cAA2B,OAAO,IAAI,CAAC,aAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE;;;OAAA;IAM5E,sBAAI,4CAAI;;;;;aAAR,cAAuB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;;;OAAA;IAMrE,sBAAI,qDAAa;;;;;aAAjB,cAAiC,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAM3F,sBAAI,iDAAS;;;;;aAAb,cAAoC,OAAO,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE;;;OAAA;IAMjF,sBAAI,sDAAc;;;;;aAAlB;YACE,OAAO,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACtD;;;OAAA;;IAGD,qDAAgB,GAAhB,eAA2B;IAC7B,iCAAC;CAnFD,CAAgD,gBAAgB;;ACzBhE;;;;;;;;IAiBE,+BAAY,EAA4B;QAAI,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;KAAE;IAE5D,sBAAI,mDAAgB;aAApB,cAAkC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE;;;OAAA;IACjG,sBAAI,iDAAc;aAAlB,cAAgC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE;;;OAAA;IAC7F,sBAAI,kDAAe;aAAnB,cAAiC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE;;;OAAA;IAC/F,sBAAI,+CAAY;aAAhB,cAA8B,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE;;;OAAA;IACzF,sBAAI,+CAAY;aAAhB,cAA8B,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE;;;OAAA;IACzF,sBAAI,iDAAc;aAAlB,cAAgC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE;;;OAAA;IAC7F,sBAAI,iDAAc;aAAlB,cAAgC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE;;;OAAA;IAC/F,4BAAC;CAAA,IAAA;IAEY,mBAAmB,GAAG;IACjC,sBAAsB,EAAE,kBAAkB;IAC1C,oBAAoB,EAAE,gBAAgB;IACtC,qBAAqB,EAAE,iBAAiB;IACxC,kBAAkB,EAAE,cAAc;IAClC,kBAAkB,EAAE,cAAc;IAClC,oBAAoB,EAAE,gBAAgB;IACtC,oBAAoB,EAAE,gBAAgB;CACvC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AA0BF;IAAqCA,mCAAqB;IACxD,yBAAoB,EAAa;eAAI,kBAAM,EAAE,CAAC;KAAG;IADtC,eAAe;QAD3B,SAAS,CAAC,EAAC,QAAQ,EAAE,2CAA2C,EAAE,IAAI,EAAE,mBAAmB,EAAC,CAAC;QAE/EI,WAAA,IAAI,EAAE,CAAA;yCAAK,SAAS;OADtB,eAAe,CAE3B;IAAD,sBAAC;CAAA,CAFoC,qBAAqB,GAEzD;AAED;;;;;;;;;;;AAgBA;IAA0CJ,wCAAqB;IAC7D,8BAAoB,EAAoB;eAAI,kBAAM,EAAE,CAAC;KAAG;IAD7C,oBAAoB;QALhC,SAAS,CAAC;YACT,QAAQ,EACJ,0FAA0F;YAC9F,IAAI,EAAE,mBAAmB;SAC1B,CAAC;QAEaI,WAAA,IAAI,EAAE,CAAA;yCAAK,gBAAgB;OAD7B,oBAAoB,CAEhC;IAAD,2BAAC;CAAA,CAFyC,qBAAqB;;AClF/D;;;;;;;AAcA;;;;;AAKA,AAAO,IAAM,KAAK,GAAG,OAAO,CAAC;;;;;;AAO7B,AAAO,IAAM,OAAO,GAAG,SAAS,CAAC;;;;;;;;AASjC,AAAO,IAAM,OAAO,GAAG,SAAS,CAAC;;;;;;;;AASjC,AAAO,IAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC,SAAS,KAAK,CAAC,OAAwB,EAAE,IAAkC,EAAE,SAAiB;IAC5F,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAE9B,IAAI,EAAE,IAAI,YAAY,KAAK,CAAC,EAAE;QAC5B,IAAI,GAAY,IAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;KACxC;IACD,IAAI,IAAI,YAAY,KAAK,KAAK,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9D,OAA8B,IAAK,CAAC,MAAM,CAAC,UAAC,CAAkB,EAAE,IAAI;QAClE,IAAI,CAAC,YAAY,SAAS,EAAE;YAC1B,OAAO,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;SAC5E;QAED,IAAI,CAAC,YAAY,SAAS,EAAE;YAC1B,OAAO,CAAC,CAAC,EAAE,CAAS,IAAI,CAAC,IAAI,IAAI,CAAC;SACnC;QAED,OAAO,IAAI,CAAC;KACb,EAAE,OAAO,CAAC,CAAC;CACb;AAED,SAAS,iBAAiB,CACtB,eAA6E;IAE/E,IAAM,SAAS,IACV,YAAY,CAAC,eAAe,CAAC,GAAI,eAA0C,CAAC,UAAU;QACtD,eAAe,CAC5B,CAAC;IAEzB,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,SAAS,IAAI,IAAI,CAAC;CACpF;AAED,SAAS,sBAAsB,CAC3B,cAA6D,EAAE,eACd;IACnD,IAAM,kBAAkB,IACnB,YAAY,CAAC,eAAe,CAAC,GAAI,eAA0C,CAAC,eAAe;QAC3D,cAAc,CACxB,CAAC;IAE5B,OAAO,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,sBAAsB,CAAC,kBAAkB,CAAC;QAC1C,kBAAkB,IAAI,IAAI,CAAC;CACvE;AA4BD,SAAS,YAAY,CACjB,eAA6E;IAC/E,OAAO,eAAe,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;QAC7D,OAAO,eAAe,KAAK,QAAQ,CAAC;CACzC;;;;;;;;;;;;;;;AAiBD;;;;;;;;IAsCE,yBAAmB,SAA2B,EAAS,cAAqC;QAAzE,cAAS,GAAT,SAAS,CAAkB;QAAS,mBAAc,GAAd,cAAc,CAAuB;;QA5B5F,wBAAmB,GAAG,eAAQ,CAAC;;;;;;;;QAsHf,aAAQ,GAAY,IAAI,CAAC;;;;;;;QAiBzB,YAAO,GAAY,KAAK,CAAC;;QAiiBzC,sBAAiB,GAAe,EAAE,CAAC;KA5oB6D;IAKhG,sBAAI,mCAAM;;;;aAAV,cAAoC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE;;;OAAA;IAyB1D,sBAAI,kCAAK;;;;;;;;;aAAT,cAAuB,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,EAAE;;;OAAA;IAUtD,sBAAI,oCAAO;;;;;;;;;aAAX,cAAyB,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,EAAE;;;OAAA;IAU1D,sBAAI,oCAAO;;;;;;;;;aAAX,cAAyB,OAAO,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,EAAE;;;OAAA;IAazD,sBAAI,qCAAQ;;;;;;;;;;;;aAAZ,cAA0B,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE;;;OAAA;IAW5D,sBAAI,oCAAO;;;;;;;;;;aAAX,cAAyB,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE;;;OAAA;IAyB3D,sBAAI,kCAAK;;;;;;;;aAAT,cAAuB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;;;OAAA;IAgB/C,sBAAI,sCAAS;;;;;;;aAAb,cAA2B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;;;OAAA;IAyBlD,sBAAI,qCAAQ;;;;;;;aAAZ;YACE,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;SAC1F;;;OAAA;;;;;IAMD,uCAAa,GAAb,UAAc,YAA4C;QACxD,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAClD;;;;;IAMD,4CAAkB,GAAlB,UAAmB,YAAsD;QACvE,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;KAC5D;;;;IAKD,yCAAe,GAAf,cAA0B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE;;;;IAKlD,8CAAoB,GAApB,cAA+B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE;;;;;;;;;;;;;;IAe5D,uCAAa,GAAb,UAAc,IAA+B;QAA/B,qBAAA,EAAA,SAA+B;QAC1C,IAA0B,CAAC,OAAO,GAAG,IAAI,CAAC;QAE3C,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAClC;KACF;;;;;;;;;;;;;;;;IAiBD,yCAAe,GAAf,UAAgB,IAA+B;QAA/B,qBAAA,EAAA,SAA+B;QAC5C,IAA0B,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAE7B,IAAI,CAAC,aAAa,CACd,UAAC,OAAwB,IAAO,OAAO,CAAC,eAAe,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAElF,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SACnC;KACF;;;;;;;;;;;;;;IAeD,qCAAW,GAAX,UAAY,IAA+B;QAA/B,qBAAA,EAAA,SAA+B;QACxC,IAA2B,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE9C,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAChC;KACF;;;;;;;;;;;;;;;;;IAkBD,wCAAc,GAAd,UAAe,IAA+B;QAA/B,qBAAA,EAAA,SAA+B;QAC3C,IAA2B,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC7C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAE3B,IAAI,CAAC,aAAa,CAAC,UAAC,OAAwB,IAAO,OAAO,CAAC,cAAc,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEhG,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SACpC;KACF;;;;;;;;;;;;;;;;;IAkBD,uCAAa,GAAb,UAAc,IAAoD;QAApD,qBAAA,EAAA,SAAoD;QAC/D,IAAwB,CAAC,MAAM,GAAG,OAAO,CAAC;QAE3C,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;YAC3B,IAAI,CAAC,aAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC7D;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAClC;KACF;;;;;;;;;;;;;;;;;;IAmBD,iCAAO,GAAP,UAAQ,IAAoD;QAApD,qBAAA,EAAA,SAAoD;QACzD,IAAwB,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC3C,IAAyC,CAAC,MAAM,GAAG,IAAI,CAAC;QACzD,IAAI,CAAC,aAAa,CACd,UAAC,OAAwB,IAAO,OAAO,CAAC,OAAO,cAAK,IAAI,IAAE,QAAQ,EAAE,IAAI,IAAE,CAAC,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;YAC3B,IAAI,CAAC,YAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,CAAC,aAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAChE;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAC,QAAQ,IAAK,OAAA,QAAQ,CAAC,IAAI,CAAC,GAAA,CAAC,CAAC;KAC9D;;;;;;;;;;;;;;;;;;;IAoBD,gCAAM,GAAN,UAAO,IAAoD;QAApD,qBAAA,EAAA,SAAoD;QACxD,IAAwB,CAAC,MAAM,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,aAAa,CACd,UAAC,OAAwB,IAAO,OAAO,CAAC,MAAM,cAAK,IAAI,IAAE,QAAQ,EAAE,IAAI,IAAE,CAAC,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,sBAAsB,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC;QAEzE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAC,QAAQ,IAAK,OAAA,QAAQ,CAAC,KAAK,CAAC,GAAA,CAAC,CAAC;KAC/D;IAEO,0CAAgB,GAAxB,UAAyB,IAA+C;QACtE,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;SAC/B;KACF;;;;IAKD,mCAAS,GAAT,UAAU,MAA2B,IAAU,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;IA+BvE,gDAAsB,GAAtB,UAAuB,IAAoD;QAApD,qBAAA,EAAA,SAAoD;QACzE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,2BAA2B,EAAE,CAAC;YAClC,IAAyC,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxE,IAAwB,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE3D,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;gBACpD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACzC;SACF;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;YAC3B,IAAI,CAAC,YAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,CAAC,aAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAChE;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;SAC3C;KACF;;IAGD,6CAAmB,GAAnB,UAAoB,IAA+C;QAA/C,qBAAA,EAAA,SAA+B,SAAS,EAAE,IAAI,EAAC;QACjE,IAAI,CAAC,aAAa,CAAC,UAAC,IAAqB,IAAK,OAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAA,CAAC,CAAC;QAC9E,IAAI,CAAC,sBAAsB,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC;KAC1E;IAEO,2CAAiB,GAAzB;QACG,IAAwB,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,QAAQ,GAAG,KAAK,CAAC;KACnF;IAEO,uCAAa,GAArB;QACE,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KACrD;IAEO,4CAAkB,GAA1B,UAA2B,SAAmB;QAA9C,iBAOC;QANC,IAAI,IAAI,CAAC,cAAc,EAAE;YACtB,IAAwB,CAAC,MAAM,GAAG,OAAO,CAAC;YAC3C,IAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,4BAA4B;gBAC7B,GAAG,CAAC,SAAS,CAAC,UAAC,MAA+B,IAAK,OAAA,KAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAC,SAAS,WAAA,EAAC,CAAC,GAAA,CAAC,CAAC;SAC7F;KACF;IAEO,qDAA2B,GAAnC;QACE,IAAI,IAAI,CAAC,4BAA4B,EAAE;YACrC,IAAI,CAAC,4BAA4B,CAAC,WAAW,EAAE,CAAC;SACjD;KACF;;;;;;;;;;;;;;;;;;;;;;;IAwBD,mCAAS,GAAT,UAAU,MAA6B,EAAE,IAAgC;QAAhC,qBAAA,EAAA,SAAgC;QACtE,IAAyC,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3D,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC;KACtD;;;;;;;;;;;;;;;;;;IAmBD,6BAAG,GAAH,UAAI,IAAiC,IAA0B,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6B/F,kCAAQ,GAAR,UAAS,SAAiB,EAAE,IAAkC;QAC5D,IAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC7C,OAAO,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;KACrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgCD,kCAAQ,GAAR,UAAS,SAAiB,EAAE,IAAkC;QAC5D,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;KACzC;IAKD,sBAAI,iCAAI;;;;aAAR;YACE,IAAI,CAAC,GAAoB,IAAI,CAAC;YAE9B,OAAO,CAAC,CAAC,OAAO,EAAE;gBAChB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;aACf;YAED,OAAO,CAAC,CAAC;SACV;;;OAAA;;IAGD,+CAAqB,GAArB,UAAsB,SAAkB;QACrC,IAAwB,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE3D,IAAI,SAAS,EAAE;YACZ,IAAI,CAAC,aAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAChE;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;SAC/C;KACF;;IAGD,0CAAgB,GAAhB;QACG,IAAuC,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAC1E,IAAwC,CAAC,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;KAC9E;IAGO,0CAAgB,GAAxB;QACE,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAAE,OAAO,QAAQ,CAAC;QACjD,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC;QAChC,IAAI,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;QACzD,IAAI,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;QACzD,OAAO,KAAK,CAAC;KACd;;IAkBD,gDAAsB,GAAtB,UAAuB,MAAc;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,UAAC,OAAwB,IAAK,OAAA,OAAO,CAAC,MAAM,KAAK,MAAM,GAAA,CAAC,CAAC;KACnF;;IAGD,2CAAiB,GAAjB;QACE,OAAO,IAAI,CAAC,YAAY,CAAC,UAAC,OAAwB,IAAK,OAAA,OAAO,CAAC,KAAK,GAAA,CAAC,CAAC;KACvE;;IAGD,6CAAmB,GAAnB;QACE,OAAO,IAAI,CAAC,YAAY,CAAC,UAAC,OAAwB,IAAK,OAAA,OAAO,CAAC,OAAO,GAAA,CAAC,CAAC;KACzE;;IAGD,yCAAe,GAAf,UAAgB,IAA+B;QAA/B,qBAAA,EAAA,SAA+B;QAC5C,IAA2B,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAElE,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SACpC;KACF;;IAGD,wCAAc,GAAd,UAAe,IAA+B;QAA/B,qBAAA,EAAA,SAA+B;QAC3C,IAA0B,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEjE,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SACnC;KACF;;IAMD,uCAAa,GAAb,UAAc,SAAc;QAC1B,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI;YACtD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,SAAS,IAAI,UAAU,IAAI,SAAS,CAAC;KAC5F;;IAGD,qDAA2B,GAA3B,UAA4B,EAAc,IAAU,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,EAAE;;IAGpF,4CAAkB,GAAlB,UAAmB,IAA4D;QAC7E,IAAI,YAAY,CAAC,IAAI,CAAC,IAAK,IAA+B,CAAC,QAAQ,IAAI,IAAI,EAAE;YAC3E,IAAI,CAAC,SAAS,GAAI,IAA+B,CAAC,QAAU,CAAC;SAC9D;KACF;IACH,sBAAC;CAAA,IAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiGA;IAAiCJ,+BAAe;;;;;;;;;;;;;;IAuB9C,qBACI,SAAqB,EACrB,eAAuE,EACvE,cAAyD;QAFzD,0BAAA,EAAA,gBAAqB;QADzB,YAIE,kBACI,iBAAiB,CAAC,eAAe,CAAC,EAClC,sBAAsB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,SAK7D;;QAhCD,eAAS,GAAe,EAAE,CAAC;QA4BzB,KAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAChC,KAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QACzC,KAAI,CAAC,sBAAsB,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;QAChE,KAAI,CAAC,gBAAgB,EAAE,CAAC;;KACzB;;;;;;;;;;;;;;;;;;;;;;;;IAyBD,8BAAQ,GAAR,UAAS,KAAU,EAAE,OAKf;QALN,iBAYC;QAZoB,wBAAA,EAAA,YAKf;QACH,IAAoB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QACzD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,OAAO,CAAC,qBAAqB,KAAK,KAAK,EAAE;YACpE,IAAI,CAAC,SAAS,CAAC,OAAO,CAClB,UAAC,QAAQ,IAAK,OAAA,QAAQ,CAAC,KAAI,CAAC,KAAK,EAAE,OAAO,CAAC,qBAAqB,KAAK,KAAK,CAAC,GAAA,CAAC,CAAC;SAClF;QACD,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACtC;;;;;;;;;;IAWD,gCAAU,GAAV,UAAW,KAAU,EAAE,OAKjB;QALiB,wBAAA,EAAA,YAKjB;QACJ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KAC/B;;;;;;;;;;;;;;;;;;;IAoBD,2BAAK,GAAL,UAAM,SAAqB,EAAE,OAAuD;QAA9E,0BAAA,EAAA,gBAAqB;QAAE,wBAAA,EAAA,YAAuD;QAClF,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC7B;;;;IAKD,kCAAY,GAAZ,eAAiB;;;;IAKjB,kCAAY,GAAZ,UAAa,SAAmB,IAAa,OAAO,KAAK,CAAC,EAAE;;;;IAK5D,0CAAoB,GAApB,cAAkC,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE;;;;;;IAOzD,sCAAgB,GAAhB,UAAiB,EAAY,IAAU,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;;;;IAKjE,qCAAe,GAAf;QACE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,mBAAmB,GAAG,eAAQ,CAAC;KACrC;;;;;;IAOD,8CAAwB,GAAxB,UAAyB,EAAiC;QACxD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACjC;;;;IAKD,mCAAa,GAAb,UAAc,EAAY,KAAU;;IAGpC,0CAAoB,GAApB;QACE,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC9B,IAAI,IAAI,CAAC,aAAa;gBAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,eAAe;gBAAE,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAC,CAAC,CAAC;gBAClF,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,KAAK,CAAC;KACd;IAEO,qCAAe,GAAvB,UAAwB,SAAc;QACpC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;YAChC,IAAoB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC;YACnE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC;gBAChD,IAAI,CAAC,MAAM,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;SACtE;aAAM;YACJ,IAAoB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;SAC9D;KACF;IACH,kBAAC;CAxLD,CAAiC,eAAe,GAwL/C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwEA;IAA+BA,6BAAe;;;;;;;;;;;;;;IAc5C,mBACW,QAA0C,EACjD,eAAuE,EACvE,cAAyD;QAH7D,YAIE,kBACI,iBAAiB,CAAC,eAAe,CAAC,EAClC,sBAAsB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,SAK7D;QAVU,cAAQ,GAAR,QAAQ,CAAkC;QAMnD,KAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,KAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QACzC,KAAI,CAAC,cAAc,EAAE,CAAC;QACtB,KAAI,CAAC,sBAAsB,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;;KACjE;;;;;;;;;;IAWD,mCAAe,GAAf,UAAgB,IAAY,EAAE,OAAwB;QACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAC9B,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,2BAA2B,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC9D,OAAO,OAAO,CAAC;KAChB;;;;;;;;;IAUD,8BAAU,GAAV,UAAW,IAAY,EAAE,OAAwB;QAC/C,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;;;;;;IAOD,iCAAa,GAAb,UAAc,IAAY;QACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC,eAAQ,CAAC,CAAC;QACnF,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;;;;;;;IAQD,8BAAU,GAAV,UAAW,IAAY,EAAE,OAAwB;QAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC,eAAQ,CAAC,CAAC;QACnF,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,IAAI,OAAO;YAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;;;;;;;;;;;IAYD,4BAAQ,GAAR,UAAS,WAAmB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;KACxF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqCD,4BAAQ,GAAR,UAAS,KAA2B,EAAE,OAAuD;QAA7F,iBAQC;QARqC,wBAAA,EAAA,YAAuD;QAE3F,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;YAC7B,KAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAClC,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAC,CAAC,CAAC;SAC3F,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmCD,8BAAU,GAAV,UAAW,KAA2B,EAAE,OAAuD;QAA/F,iBAQC;QARuC,wBAAA,EAAA,YAAuD;QAE7F,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;YAC7B,IAAI,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACvB,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAC,CAAC,CAAC;aAC7F;SACF,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2DD,yBAAK,GAAL,UAAM,KAAe,EAAE,OAAuD;QAAxE,sBAAA,EAAA,UAAe;QAAE,wBAAA,EAAA,YAAuD;QAC5E,IAAI,CAAC,aAAa,CAAC,UAAC,OAAwB,EAAE,IAAY;YACxD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAC,CAAC,CAAC;SAC5E,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;KAC9B;;;;;;;;IASD,+BAAW,GAAX;QACE,OAAO,IAAI,CAAC,eAAe,CACvB,EAAE,EAAE,UAAC,GAAmC,EAAE,OAAwB,EAAE,IAAY;YAC9E,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,YAAY,WAAW,GAAG,OAAO,CAAC,KAAK,GAAS,OAAQ,CAAC,WAAW,EAAE,CAAC;YAC1F,OAAO,GAAG,CAAC;SACZ,CAAC,CAAC;KACR;;IAGD,wCAAoB,GAApB;QACE,IAAI,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,UAAC,OAAgB,EAAE,KAAsB;YACxF,OAAO,KAAK,CAAC,oBAAoB,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC;SACtD,CAAC,CAAC;QACH,IAAI,cAAc;YAAE,IAAI,CAAC,sBAAsB,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;QAClE,OAAO,cAAc,CAAC;KACvB;;IAGD,0CAAsB,GAAtB,UAAuB,IAAY;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,wKAGf,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,yCAAuC,IAAI,MAAG,CAAC,CAAC;SACjE;KACF;;IAGD,iCAAa,GAAb,UAAc,EAA+B;QAA7C,iBAEC;QADC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,EAAE,CAAC,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAA,CAAC,CAAC;KAClE;;IAGD,kCAAc,GAAd;QAAA,iBAKC;QAJC,IAAI,CAAC,aAAa,CAAC,UAAC,OAAwB;YAC1C,OAAO,CAAC,SAAS,CAAC,KAAI,CAAC,CAAC;YACxB,OAAO,CAAC,2BAA2B,CAAC,KAAI,CAAC,mBAAmB,CAAC,CAAC;SAC/D,CAAC,CAAC;KACJ;;IAGD,gCAAY,GAAZ,cAAwB,IAAoB,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE;;IAG3E,gCAAY,GAAZ,UAAa,SAAmB;QAAhC,iBAMC;QALC,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,IAAI,CAAC,aAAa,CAAC,UAAC,OAAwB,EAAE,IAAY;YACxD,GAAG,GAAG,GAAG,KAAK,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;SAC1D,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;KACZ;;IAGD,gCAAY,GAAZ;QAAA,iBAQC;QAPC,OAAO,IAAI,CAAC,eAAe,CACvB,EAAE,EAAE,UAAC,GAAmC,EAAE,OAAwB,EAAE,IAAY;YAC9E,IAAI,OAAO,CAAC,OAAO,IAAI,KAAI,CAAC,QAAQ,EAAE;gBACpC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;aAC3B;YACD,OAAO,GAAG,CAAC;SACZ,CAAC,CAAC;KACR;;IAGD,mCAAe,GAAf,UAAgB,SAAc,EAAE,EAAY;QAC1C,IAAI,GAAG,GAAG,SAAS,CAAC;QACpB,IAAI,CAAC,aAAa,CACd,UAAC,OAAwB,EAAE,IAAY,IAAO,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACnF,OAAO,GAAG,CAAC;KACZ;;IAGD,wCAAoB,GAApB;;;YACE,KAA0B,IAAA,KAAAQ,SAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,gBAAA,4BAAE;gBAAjD,IAAM,WAAW,WAAA;gBACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;oBACtC,OAAO,KAAK,CAAC;iBACd;aACF;;;;;;;;;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;KAC/D;;IAGD,0CAAsB,GAAtB,UAAuB,KAAU;QAC/B,IAAI,CAAC,aAAa,CAAC,UAAC,OAAwB,EAAE,IAAY;YACxD,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,sDAAoD,IAAI,OAAI,CAAC,CAAC;aAC/E;SACF,CAAC,CAAC;KACJ;IACH,gBAAC;CA/VD,CAA+B,eAAe,GA+V7C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEA;IAA+BR,6BAAe;;;;;;;;;;;;;;IAc5C,mBACW,QAA2B,EAClC,eAAuE,EACvE,cAAyD;QAH7D,YAIE,kBACI,iBAAiB,CAAC,eAAe,CAAC,EAClC,sBAAsB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,SAK7D;QAVU,cAAQ,GAAR,QAAQ,CAAmB;QAMpC,KAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,KAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QACzC,KAAI,CAAC,cAAc,EAAE,CAAC;QACtB,KAAI,CAAC,sBAAsB,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;;KACjE;;;;;;IAOD,sBAAE,GAAF,UAAG,KAAa,IAAqB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;;;;;;IAOnE,wBAAI,GAAJ,UAAK,OAAwB;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;;;;;;;IAQD,0BAAM,GAAN,UAAO,KAAa,EAAE,OAAwB;QAC5C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAExC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;;;;;;IAOD,4BAAQ,GAAR,UAAS,KAAa;QACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,2BAA2B,CAAC,eAAQ,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;;;;;;;IAQD,8BAAU,GAAV,UAAW,KAAa,EAAE,OAAwB;QAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,2BAA2B,CAAC,eAAQ,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE/B,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;SAChC;QAED,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAKD,sBAAI,6BAAM;;;;aAAV,cAAuB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;;;OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqCrD,4BAAQ,GAAR,UAAS,KAAY,EAAE,OAAuD;QAA9E,iBAOC;QAPsB,wBAAA,EAAA,YAAuD;QAC5E,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACnC,KAAK,CAAC,OAAO,CAAC,UAAC,QAAa,EAAE,KAAa;YACzC,KAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACnC,KAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAC,CAAC,CAAC;SACnF,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoCD,8BAAU,GAAV,UAAW,KAAY,EAAE,OAAuD;QAAhF,iBAOC;QAPwB,wBAAA,EAAA,YAAuD;QAC9E,KAAK,CAAC,OAAO,CAAC,UAAC,QAAa,EAAE,KAAa;YACzC,IAAI,KAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;gBAClB,KAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAC,CAAC,CAAC;aACrF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgDD,yBAAK,GAAL,UAAM,KAAe,EAAE,OAAuD;QAAxE,sBAAA,EAAA,UAAe;QAAE,wBAAA,EAAA,YAAuD;QAC5E,IAAI,CAAC,aAAa,CAAC,UAAC,OAAwB,EAAE,KAAa;YACzD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAC,CAAC,CAAC;SAC7E,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;KAC9B;;;;;;;IAQD,+BAAW,GAAX;QACE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,OAAwB;YAChD,OAAO,OAAO,YAAY,WAAW,GAAG,OAAO,CAAC,KAAK,GAAS,OAAQ,CAAC,WAAW,EAAE,CAAC;SACtF,CAAC,CAAC;KACJ;;IAGD,wCAAoB,GAApB;QACE,IAAI,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAC,OAAgB,EAAE,KAAsB;YACjF,OAAO,KAAK,CAAC,oBAAoB,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC;SACtD,EAAE,KAAK,CAAC,CAAC;QACV,IAAI,cAAc;YAAE,IAAI,CAAC,sBAAsB,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;QAClE,OAAO,cAAc,CAAC;KACvB;;IAGD,0CAAsB,GAAtB,UAAuB,KAAa;QAClC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACzB,MAAM,IAAI,KAAK,CAAC,wKAGf,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,uCAAqC,KAAO,CAAC,CAAC;SAC/D;KACF;;IAGD,iCAAa,GAAb,UAAc,EAAY;QACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAwB,EAAE,KAAa,IAAO,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;KAC7F;;IAGD,gCAAY,GAAZ;QAAA,iBAIC;QAHE,IAAoB,CAAC,KAAK;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,OAAO,IAAI,KAAI,CAAC,QAAQ,GAAA,CAAC;iBAC9D,GAAG,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,KAAK,GAAA,CAAC,CAAC;KAC1C;;IAGD,gCAAY,GAAZ,UAAa,SAAmB;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAC,OAAwB,IAAK,OAAA,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,GAAA,CAAC,CAAC;KAChG;;IAGD,kCAAc,GAAd;QAAA,iBAEC;QADC,IAAI,CAAC,aAAa,CAAC,UAAC,OAAwB,IAAK,OAAA,KAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAA,CAAC,CAAC;KAClF;;IAGD,0CAAsB,GAAtB,UAAuB,KAAU;QAC/B,IAAI,CAAC,aAAa,CAAC,UAAC,OAAwB,EAAE,CAAS;YACrD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,oDAAkD,CAAC,MAAG,CAAC,CAAC;aACzE;SACF,CAAC,CAAC;KACJ;;IAGD,wCAAoB,GAApB;;;YACE,KAAsB,IAAA,KAAAQ,SAAA,IAAI,CAAC,QAAQ,CAAA,gBAAA,4BAAE;gBAAhC,IAAM,OAAO,WAAA;gBAChB,IAAI,OAAO,CAAC,OAAO;oBAAE,OAAO,KAAK,CAAC;aACnC;;;;;;;;;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;KAClD;IAEO,oCAAgB,GAAxB,UAAyB,OAAwB;QAC/C,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,2BAA2B,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KAC/D;IACH,gBAAC;CAzTD,CAA+B,eAAe;;ACllD9C;;;;;;;IAoBa,qBAAqB,GAAQ;IACxC,OAAO,EAAE,gBAAgB;IACzB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,MAAM,GAAA,CAAC;CACtC,CAAC;AAEF,IAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6E9C;IAA4BR,0BAAgB;IAkC1C,gBAC+C,UAAiB,EACX,eAAsB;QAF3E,YAGE,iBAAO,SAGR;;;;;QAlCe,eAAS,GAAY,KAAK,CAAC;QAEnC,iBAAW,GAAc,EAAE,CAAC;;;;;QAYpC,cAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QAkB5B,KAAI,CAAC,IAAI;YACL,IAAI,SAAS,CAAC,EAAE,EAAE,iBAAiB,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC;;KAC/F;;;;;IAMD,gCAAe,GAAf,cAAoB,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE;IAMhD,sBAAI,iCAAa;;;;;aAAjB,cAA4B,OAAO,IAAI,CAAC,EAAE;;;OAAA;IAM1C,sBAAI,2BAAO;;;;;aAAX,cAA2B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE;;;OAAA;IAO9C,sBAAI,wBAAI;;;;;;aAAR,cAAuB,OAAO,EAAE,CAAC,EAAE;;;OAAA;IAMnC,sBAAI,4BAAQ;;;;;aAAZ,cAAmD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;;;OAAA;;;;;;;;IAS/E,2BAAU,GAAV,UAAW,GAAY;QAAvB,iBASC;QARC,eAAe,CAAC,IAAI,CAAC;YACnB,IAAM,SAAS,GAAG,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/C,GAA6B,CAAC,OAAO;gBACrB,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAClE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC/B,GAAG,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;YACvD,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC5B,CAAC,CAAC;KACJ;;;;;;;IAQD,2BAAU,GAAV,UAAW,GAAY,IAAiB,OAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;;;;;;;IAQtF,8BAAa,GAAb,UAAc,GAAY;QAA1B,iBAQC;QAPC,eAAe,CAAC,IAAI,CAAC;YACnB,IAAM,SAAS,GAAG,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,SAAS,EAAE;gBACb,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACnC;YACD,SAAS,CAAU,KAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;SAC3C,CAAC,CAAC;KACJ;;;;;;;IAQD,6BAAY,GAAZ,UAAa,GAAiB;QAA9B,iBAQC;QAPC,eAAe,CAAC,IAAI,CAAC;YACnB,IAAM,SAAS,GAAG,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChD,IAAM,KAAK,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;YAChC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC/B,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC3C,KAAK,CAAC,sBAAsB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;SAClD,CAAC,CAAC;KACJ;;;;;;;IAQD,gCAAe,GAAf,UAAgB,GAAiB;QAAjC,iBAOC;QANC,eAAe,CAAC,IAAI,CAAC;YACnB,IAAM,SAAS,GAAG,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,SAAS,EAAE;gBACb,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACnC;SACF,CAAC,CAAC;KACJ;;;;;;;IAQD,6BAAY,GAAZ,UAAa,GAAiB,IAAe,OAAkB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;;;;;;;IAQzF,4BAAW,GAAX,UAAY,GAAc,EAAE,KAAU;QAAtC,iBAKC;QAJC,eAAe,CAAC,IAAI,CAAC;YACnB,IAAM,IAAI,GAAgB,KAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAM,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACtB,CAAC,CAAC;KACJ;;;;;;;IAQD,yBAAQ,GAAR,UAAS,KAA2B,IAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;;;;;;;;IAS7E,yBAAQ,GAAR,UAAS,MAAa;QACnB,IAA4B,CAAC,SAAS,GAAG,IAAI,CAAC;QAC/C,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;KACd;;;;;IAMD,wBAAO,GAAP,cAAkB,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;;;;;;;IAQrC,0BAAS,GAAT,UAAU,KAAsB;QAAtB,sBAAA,EAAA,iBAAsB;QAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,IAA4B,CAAC,SAAS,GAAG,KAAK,CAAC;KACjD;IAEO,mCAAkB,GAA1B;QACE,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;YACjD,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC7C;KACF;;IAGD,+BAAc,GAAd,UAAe,IAAc;QAC3B,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,OAAO,IAAI,CAAC,MAAM,GAAc,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;KACjE;IAxLuBK;QAAvB,KAAK,CAAC,eAAe,CAAC;;2CAAmC;IAhC/C,MAAM;QAPlB,SAAS,CAAC;YACT,QAAQ,EAAE,+DAA+D;YACzE,SAAS,EAAE,CAAC,qBAAqB,CAAC;YAClC,IAAI,EAAE,EAAC,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAC;YAC9D,OAAO,EAAE,CAAC,UAAU,CAAC;YACrB,QAAQ,EAAE,QAAQ;SACnB,CAAC;QAoCKD,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,aAAa,CAAC,CAAA;QACzCA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,mBAAmB,CAAC,CAAA;;OApCzC,MAAM,CAyNlB;IAAD,aAAC;CAAA,CAzN2B,gBAAgB;;ACtG5C;;;;;;;AAQA,AAEA;IAAA;KAkEC;IAjEQ,yCAAoB,GAA3B;QACE,MAAM,IAAI,KAAK,CAAC,iMAIZE,iBAAQ,CAAC,eAAe,wJAMxBA,iBAAQ,CAAC,oBAAsB,CAAC,CAAC;KACtC;IAEM,2CAAsB,GAA7B;QACE,MAAM,IAAI,KAAK,CAAC,8MAKZA,iBAAQ,CAAC,aAAa,0GAItBA,iBAAQ,CAAC,YAAc,CAAC,CAAC;KAC9B;IAEM,yCAAoB,GAA3B;QACE,MAAM,IAAI,KAAK,CACX,0UAIsF,CAAC,CAAC;KAC7F;IAEM,8CAAyB,GAAhC;QACE,MAAM,IAAI,KAAK,CAAC,uKAKZA,iBAAQ,CAAC,aAAa,4HAItBA,iBAAQ,CAAC,YAAc,CAAC,CAAC;KAC9B;IAEM,kCAAa,GAApB;QACE,OAAO,CAAC,IAAI,CAAC,iTAaZ,CAAC,CAAC;KACJ;IACH,2BAAC;CAAA,IAAA;;AC5ED;;;;;;;AAWA;;;;AAIA,IAAa,wBAAwB,GAAG,IAAI,cAAc,CAAC,uBAAuB,CAAC,CAAC;;;;;;;;AAUpF;IASE,+BAA0D,aAA0B;QAClF,IAAI,CAAC,CAAC,CAAC,aAAa,IAAI,aAAa,KAAK,MAAM,KAAK,CAAC,uBAAqB,CAAC,cAAc;YACtF,aAAa,KAAK,QAAQ,EAAE;YAC9B,oBAAoB,CAAC,aAAa,EAAE,CAAC;YACrC,uBAAqB,CAAC,cAAc,GAAG,IAAI,CAAC;SAC7C;KACF;8BAfU,qBAAqB;;;;;;;;IAOzB,oCAAc,GAAG,KAAK,CAAC;IAPnB,qBAAqB;QADjC,SAAS,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAC,CAAC;QAUjBF,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,wBAAwB,CAAC,CAAA;;OAT9C,qBAAqB,CAgBjC;IAAD,4BAAC;CAhBD;;ACzBA;;;;;;;IAiBa,kBAAkB,GAAQ;IACrC,OAAO,EAAE,gBAAgB;IACzB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,YAAY,GAAA,CAAC;CAC5C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BF;IAAkCJ,gCAA0B;IAS1D,sBACwB,MAAwB,EACD,UAAiB,EACX,eAAsB;QAH3E,YAIE,iBAAO,SAIR;QAHC,KAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,KAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,KAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;;KACzC;qBAjBU,YAAY;;IAoBvB,uCAAgB,GAAhB;QACE,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,cAAY,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,MAAM,CAAC,EAAE;YAChF,oBAAoB,CAAC,yBAAyB,EAAE,CAAC;SAClD;KACF;;IAjBsBK;QAAtB,KAAK,CAAC,cAAc,CAAC;;8CAAgB;IAP3B,YAAY;QADxB,SAAS,CAAC,EAAC,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAC,CAAC;QAW5FD,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,QAAQ,EAAE,CAAA;QAClBA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,aAAa,CAAC,CAAA;QACzCA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,mBAAmB,CAAC,CAAA;yCAFpB,gBAAgB;OAVrC,YAAY,CAyBxB;IAAD,mBAAC;CAAA,CAzBiC,0BAA0B;;ACjD5D;;;;;;;IAuBa,kBAAkB,GAAQ;IACrC,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,OAAO,GAAA,CAAC;CACvC,CAAC;;;;;;;;;;;;;;;;;;AAmBF,IAAMO,iBAAe,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0F9C;IAA6BX,2BAAS;IA2DpC,iBAAgC,MAAwB,EACD,UAAwC,EAClC,eAAuD,EAExG,cAAsC;QAJlD,YAKc,iBAAO,SAKR;QAnEG,aAAO,GAAgB,IAAI,WAAW,EAAE,CAAC;;QAEzD,iBAAW,GAAG,KAAK,CAAC;;;;;;QAqDK,YAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAQvC,KAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,KAAI,CAAC,cAAc,GAAG,UAAU,IAAI,EAAE,CAAC;QACvC,KAAI,CAAC,mBAAmB,GAAG,eAAe,IAAI,EAAE,CAAC;QACjD,KAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,KAAI,EAAE,cAAc,CAAC,CAAC;;KAChE;;;;;;;;IASD,6BAAW,GAAX,UAAY,OAAsB;QAChC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C,IAAI,YAAY,IAAI,OAAO,EAAE;YAC3B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;SAC/B;QAED,IAAI,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;YAC9C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;SAC7B;KACF;;;;;;IAOD,6BAAW,GAAX,cAAsB,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE;IAOrF,sBAAI,yBAAI;;;;;;aAAR;YACE,OAAO,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1E;;;OAAA;IAMD,sBAAI,kCAAa;;;;;aAAjB,cAA2B,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAOrF,sBAAI,8BAAS;;;;;;aAAb,cAAoC,OAAO,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE;;;OAAA;IAOpF,sBAAI,mCAAc;;;;;;aAAlB;YACE,OAAO,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;SACzD;;;OAAA;;;;;;;IAQD,mCAAiB,GAAjB,UAAkB,QAAa;QAC7B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC5B;IAEO,+BAAa,GAArB;QACE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;IAEO,oCAAkB,GAA1B;QACE,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;YACjD,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SAChD;KACF;IAEO,+BAAa,GAArB;QACE,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;KACrE;IAEO,kCAAgB,GAAxB;QACE,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;KACzD;IAEO,iCAAe,GAAvB;QACE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IAEO,kCAAgB,GAAxB;QACE,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,YAAY,CAAC;YACvC,IAAI,CAAC,OAAO,YAAY,0BAA0B,EAAE;YACtD,oBAAoB,CAAC,sBAAsB,EAAE,CAAC;SAC/C;aAAM,IACH,EAAE,IAAI,CAAC,OAAO,YAAY,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,MAAM,CAAC,EAAE;YAChF,oBAAoB,CAAC,oBAAoB,EAAE,CAAC;SAC7C;KACF;IAEO,4BAAU,GAAlB;QACE,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAErE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACvC,oBAAoB,CAAC,oBAAoB,EAAE,CAAC;SAC7C;KACF;IAEO,8BAAY,GAApB,UAAqB,KAAU;QAA/B,iBAGC;QAFCW,iBAAe,CAAC,IAAI,CAChB,cAAQ,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAC,qBAAqB,EAAE,KAAK,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC9E;IAEO,iCAAe,GAAvB,UAAwB,OAAsB;QAA9C,iBAaC;QAZC,IAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC;QAEzD,IAAM,UAAU,GACZ,aAAa,KAAK,EAAE,KAAK,aAAa,IAAI,aAAa,KAAK,OAAO,CAAC,CAAC;QAEzEA,iBAAe,CAAC,IAAI,CAAC;YACnB,IAAI,UAAU,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACxC,KAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACxB;iBAAM,IAAI,CAAC,UAAU,IAAI,KAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAC/C,KAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aACvB;SACF,CAAC,CAAC;KACJ;IA3LJN;QAAR,KAAK,EAAE;;yCAAgB;IAOLA;QAAlB,KAAK,CAAC,UAAU,CAAC;;+CAAuB;IAMvBA;QAAjB,KAAK,CAAC,SAAS,CAAC;;0CAAY;IAmB7BA;QADC,KAAK,CAAC,gBAAgB,CAAC;;4CAC+C;IAO9CA;QAAxB,MAAM,CAAC,eAAe,CAAC;;2CAA6B;IAzD1C,OAAO;QALnB,SAAS,CAAC;YACT,QAAQ,EAAE,qDAAqD;YAC/D,SAAS,EAAE,CAAC,kBAAkB,CAAC;YAC/B,QAAQ,EAAE,SAAS;SACpB,CAAC;QA4DaD,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA;QAClBA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,aAAa,CAAC,CAAA;QACzCA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAC/CA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAA;yCAHlB,gBAAgB;YACW,KAAK;YACM,KAAK;OA7DxE,OAAO,CA8MnB;IAAD,cAAC;CAAA,CA9M4B,SAAS;;ACvItC;;;;;;;AAmBA;;;AAGA,IAAa,kCAAkC,GAC3C,IAAI,cAAc,CAAC,+BAA+B,CAAC,CAAC;AAExD,IAAaQ,oBAAkB,GAAQ;IACrC,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,oBAAoB,GAAA,CAAC;CACpD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FF;IAA0CZ,wCAAS;IA+CjD,8BAAuD,UAAwC,EAClC,eAAuD,EAExG,cAAsC,EAC0B,qBAAkC;QAJ9G,YAKc,iBAAO,SAIR;QAL+D,2BAAqB,GAArB,qBAAqB,CAAa;;QAxBrF,YAAM,GAAG,IAAI,YAAY,EAAE,CAAC;;;;;;;;QAkBrD,yBAAmB,GAAG,KAAK,CAAC;QAQd,KAAI,CAAC,cAAc,GAAG,UAAU,IAAI,EAAE,CAAC;QACvC,KAAI,CAAC,mBAAmB,GAAG,eAAe,IAAI,EAAE,CAAC;QACjD,KAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,KAAI,EAAE,cAAc,CAAC,CAAC;;KAChE;6BAxDF,oBAAoB;IAmB/B,sBAAI,4CAAU;;;;;aAAd,UAAe,UAAmB,IAAI,cAAc,CAAC,mBAAmB,EAAE,CAAC,EAAE;;;OAAA;;;;;;;;IA8CjE,0CAAW,GAAX,UAAY,OAAsB;QAChC,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;YACnC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAe,CAAC,gBAAgB,EAAE;gBAClE,IAAI,CAAC,aAAe,CAAC,gBAAkB,CAAC,IAAI,CAAC,CAAC;aAC/C;YACD,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;SACtD;QACD,IAAI,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;YAC9C,eAAe,CACX,aAAa,EAAE,sBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC3E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;SAC7B;KACF;IAOD,sBAAI,sCAAI;;;;;;aAAR,cAAuB,OAAO,EAAE,CAAC,EAAE;;;OAAA;IAOnC,sBAAI,2CAAS;;;;;;aAAb,cAAoC,OAAO,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE;;;OAAA;IAOpF,sBAAI,gDAAc;;;;;;aAAlB;YACE,OAAO,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;SACzD;;;OAAA;IAMD,sBAAI,yCAAO;;;;;aAAX,cAA6B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE;;;OAAA;;;;;;;IAQhD,gDAAiB,GAAjB,UAAkB,QAAa;QAC7B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC5B;IAEO,gDAAiB,GAAzB,UAA0B,OAA6B;QACrD,OAAO,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;KACvC;;;;;;;;;IAvFN,4CAAuB,GAAG,KAAK,CAAC;IAxBjBK;QAArB,KAAK,CAAC,aAAa,CAAC;kCAAS,WAAW;sDAAC;IAO1CA;QADC,KAAK,CAAC,UAAU,CAAC;;;0DAC2D;IAK3DA;QAAjB,KAAK,CAAC,SAAS,CAAC;;uDAAY;IAGJA;QAAxB,MAAM,CAAC,eAAe,CAAC;;wDAA6B;IA3B1C,oBAAoB;QAFhC,SAAS,CAAC,EAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,CAACO,oBAAkB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC;QAiD7ER,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,aAAa,CAAC,CAAA;QACzCA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAC/CA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAE7CA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,kCAAkC,CAAC,CAAA;yCAJA,KAAK;YACM,KAAK;OAhDxE,oBAAoB,CA4HhC;IAAD,2BAAC;CAAA,CA5HyC,SAAS;;ACtHnD;;;;;;;IAmBaS,uBAAqB,GAAQ;IACxC,OAAO,EAAE,gBAAgB;IACzB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,kBAAkB,GAAA,CAAC;CAClD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AA+BF;IAAwCb,sCAAgB;IA6BtD,4BACuD,WAAkB,EACZ,gBAAuB;QAFpF,YAGE,iBAAO,SACR;QAHsD,iBAAW,GAAX,WAAW,CAAO;QACZ,sBAAgB,GAAhB,gBAAgB,CAAO;;;;;QAzBpE,eAAS,GAAY,KAAK,CAAC;;;;;QAS3C,gBAAU,GAAsB,EAAE,CAAC;;;;;QAMf,UAAI,GAAc,IAAM,CAAC;;;;;QAMnC,cAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;;KAMvC;;;;;;;IAQD,wCAAW,GAAX,UAAY,OAAsB;QAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YAClC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;KACF;IAMD,sBAAI,6CAAa;;;;;aAAjB,cAA4B,OAAO,IAAI,CAAC,EAAE;;;OAAA;IAM1C,sBAAI,uCAAO;;;;;aAAX,cAA2B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE;;;OAAA;IAO9C,sBAAI,oCAAI;;;;;;aAAR,cAAuB,OAAO,EAAE,CAAC,EAAE;;;OAAA;;;;;;;;IASnC,uCAAU,GAAV,UAAW,GAAoB;QAC7B,IAAM,IAAI,GAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,sBAAsB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;KACb;;;;;;;IAQD,uCAAU,GAAV,UAAW,GAAoB,IAAiB,OAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;;;;;;;IAQ9F,0CAAa,GAAb,UAAc,GAAoB,IAAU,SAAS,CAAkB,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE;;;;;;IAO/F,yCAAY,GAAZ,UAAa,GAAkB;QAC7B,IAAM,IAAI,GAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,sBAAsB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;KACjD;;;;;;IAOD,4CAAe,GAAf,UAAgB,GAAkB,KAAU;;;;;;;IAQ5C,yCAAY,GAAZ,UAAa,GAAkB,IAAe,OAAkB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;;;;;;IAO1F,yCAAY,GAAZ,UAAa,GAAkB;QAC7B,IAAM,IAAI,GAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,sBAAsB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;KACjD;;;;;;IAOD,4CAAe,GAAf,UAAgB,GAAkB,KAAU;;;;;;;IAQ5C,yCAAY,GAAZ,UAAa,GAAkB,IAAe,OAAkB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;;;;;;;IAQ1F,wCAAW,GAAX,UAAY,GAAoB,EAAE,KAAU;QAC1C,IAAM,IAAI,GAAiB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACtB;;;;;;;;IASD,qCAAQ,GAAR,UAAS,MAAa;QACnB,IAA4B,CAAC,SAAS,GAAG,IAAI,CAAC;QAC/C,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;KACd;;;;;IAMD,oCAAO,GAAP,cAAkB,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;;;;;;;IAQrC,sCAAS,GAAT,UAAU,KAAsB;QAAtB,sBAAA,EAAA,iBAAsB;QAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,IAA4B,CAAC,SAAS,GAAG,KAAK,CAAC;KACjD;;IAID,4CAAe,GAAf;QAAA,iBAWC;QAVC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,GAAG;YACzB,IAAM,OAAO,GAAQ,KAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE;gBAC3B,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACjC,IAAI,OAAO;oBAAE,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACvC,GAA6B,CAAC,OAAO,GAAG,OAAO,CAAC;aAClD;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;KACnD;IAEO,iDAAoB,GAA5B;QAAA,iBAIC;QAHC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,cAAM,OAAA,KAAI,CAAC,eAAe,EAAE,GAAA,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,eAAQ,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;KAC3B;IAEO,8CAAiB,GAAzB;QACE,IAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAW,EAAE,IAAM,CAAC,CAAC,CAAC;QAE1E,IAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAgB,EAAE,KAAO,CAAC,CAAC,CAAC;KAC3F;IAEO,8CAAiB,GAAzB;QACE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,cAAc,CAAC,oBAAoB,EAAE,CAAC;SACvC;KACF;IA9MmBK;QAAnB,KAAK,CAAC,WAAW,CAAC;kCAAO,SAAS;oDAAU;IAMnCA;QAAT,MAAM,EAAE;;wDAA+B;IA3B7B,kBAAkB;QAN9B,SAAS,CAAC;YACT,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,CAACQ,uBAAqB,CAAC;YAClC,IAAI,EAAE,EAAC,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAC;YAC9D,QAAQ,EAAE,QAAQ;SACnB,CAAC;QA+BKT,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,aAAa,CAAC,CAAA;QACzCA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,mBAAmB,CAAC,CAAA;;OA/BzC,kBAAkB,CAoO9B;IAAD,yBAAC;CAAA,CApOuC,gBAAgB;;ACrDxD;;;;;;;IAoBa,qBAAqB,GAAQ;IACxC,OAAO,EAAE,gBAAgB;IACzB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,aAAa,GAAA,CAAC;CAC7C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDF;IAAmCJ,iCAA0B;IAS3D,uBACoC,MAAwB,EACb,UAAiB,EACX,eAAsB;QAH3E,YAIE,iBAAO,SAIR;QAHC,KAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,KAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,KAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;;KACzC;;IAGD,wCAAgB,GAAhB;QACE,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACnC,cAAc,CAAC,oBAAoB,EAAE,CAAC;SACvC;KACF;IAjBuBK;QAAvB,KAAK,CAAC,eAAe,CAAC;;+CAAgB;IAP5B,aAAa;QADzB,SAAS,CAAC,EAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,qBAAqB,CAAC,EAAC,CAAC;QAWtED,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,QAAQ,EAAE,CAAA;QAC9BA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,aAAa,CAAC,CAAA;QACzCA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,mBAAmB,CAAC,CAAA;yCAFR,gBAAgB;OAVjD,aAAa,CAyBzB;IAAD,oBAAC;CAAA,CAzBkC,0BAA0B,GAyB5D;IAEY,qBAAqB,GAAQ;IACxC,OAAO,EAAE,gBAAgB;IACzB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,aAAa,GAAA,CAAC;CAC7C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;AA2BF;IAAmCJ,iCAAgB;IAkBjD,uBACoC,MAAwB,EACb,UAAiB,EACX,eAAsB;QAH3E,YAIE,iBAAO,SAIR;QAHC,KAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,KAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,KAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;;KACzC;;;;;;;IAQD,gCAAQ,GAAR;QACE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,aAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KACzC;;;;;IAMD,mCAAW,GAAX;QACE,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SAC1C;KACF;IAMD,sBAAI,kCAAO;;;;;aAAX,cAA2B,OAAO,IAAI,CAAC,aAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE;;;OAAA;IAM5E,sBAAI,wCAAa;;;;;aAAjB;YACE,OAAO,IAAI,CAAC,OAAO,GAAuB,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;SAC7E;;;OAAA;IAOD,sBAAI,+BAAI;;;;;;aAAR,cAAuB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;;;OAAA;IAOrE,sBAAI,oCAAS;;;;;;aAAb,cAAoC,OAAO,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE;;;OAAA;IAMjF,sBAAI,yCAAc;;;;;aAAlB;YACE,OAAO,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACtD;;;OAAA;IAEO,wCAAgB,GAAxB;QACE,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACnC,cAAc,CAAC,oBAAoB,EAAE,CAAC;SACvC;KACF;IAzEuBK;QAAvB,KAAK,CAAC,eAAe,CAAC;;+CAAgB;IAhB5B,aAAa;QADzB,SAAS,CAAC,EAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,qBAAqB,CAAC,EAAC,CAAC;QAoBtED,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,QAAQ,EAAE,CAAA;QAC9BA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,aAAa,CAAC,CAAA;QACzCA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,mBAAmB,CAAC,CAAA;yCAFR,gBAAgB;OAnBjD,aAAa,CA0FzB;IAAD,oBAAC;CAAA,CA1FkC,gBAAgB,GA0FlD;AAED,SAAS,iBAAiB,CAAC,MAAwB;IACjD,OAAO,EAAE,MAAM,YAAY,aAAa,CAAC,IAAI,EAAE,MAAM,YAAY,kBAAkB,CAAC;QAChF,EAAE,MAAM,YAAY,aAAa,CAAC,CAAC;CACxC;;ACjOD;;;;;;;IAwBa,kBAAkB,GAAQ;IACrC,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,eAAe,GAAA,CAAC;CAC/C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoGF;IAAqCJ,mCAAS;IAyD5C,yBACoC,MAAwB,EACb,UAAwC,EAClC,eACP,EACK,cAAsC,EACrB,qBAC5D;QAPR,YAQE,iBAAO,SAKR;QAPmE,2BAAqB,GAArB,qBAAqB,CACjF;QA/DA,YAAM,GAAG,KAAK,CAAC;;QAoCE,YAAM,GAAG,IAAI,YAAY,EAAE,CAAC;;;;;;;;QAkBrD,yBAAmB,GAAG,KAAK,CAAC;QAW1B,KAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,KAAI,CAAC,cAAc,GAAG,UAAU,IAAI,EAAE,CAAC;QACvC,KAAI,CAAC,mBAAmB,GAAG,eAAe,IAAI,EAAE,CAAC;QACjD,KAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,KAAI,EAAE,cAAc,CAAC,CAAC;;KAChE;wBAtEU,eAAe;IA6B1B,sBAAI,uCAAU;;;;;aAAd,UAAe,UAAmB,IAAI,cAAc,CAAC,mBAAmB,EAAE,CAAC,EAAE;;;OAAA;;;;;;;IAiD7E,qCAAW,GAAX,UAAY,OAAsB;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;YAC9C,eAAe,CAAC,iBAAiB,EAAE,iBAAe,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACtF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SAClD;KACF;;;;;IAMD,qCAAW,GAAX;QACE,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACxC;KACF;;;;;;;IAQD,2CAAiB,GAAjB,UAAkB,QAAa;QAC7B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC5B;IAOD,sBAAI,iCAAI;;;;;;aAAR,cAAuB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAS,CAAC,CAAC,EAAE;;;OAAA;IAMvE,sBAAI,0CAAa;;;;;aAAjB,cAA2B,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE;;;OAAA;IAOrF,sBAAI,sCAAS;;;;;;aAAb,cAAoC,OAAO,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE;;;OAAA;IAOpF,sBAAI,2CAAc;;;;;;aAAlB;YACE,OAAO,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAG,CAAC;SAC3D;;;OAAA;IAEO,0CAAgB,GAAxB;QACE,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,aAAa,CAAC;YACxC,IAAI,CAAC,OAAO,YAAY,0BAA0B,EAAE;YACtD,cAAc,CAAC,qBAAqB,EAAE,CAAC;SACxC;aAAM,IACH,EAAE,IAAI,CAAC,OAAO,YAAY,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,kBAAkB,CAAC;YACzF,EAAE,IAAI,CAAC,OAAO,YAAY,aAAa,CAAC,EAAE;YAC5C,cAAc,CAAC,sBAAsB,EAAE,CAAC;SACzC;KACF;IAEO,uCAAa,GAArB;QACE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvB,IAA8B,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAe,CAAC,gBAAgB,EAAE;YAClE,IAAI,CAAC,aAAe,CAAC,gBAAkB,CAAC,IAAI,CAAC,CAAC;SAC/C;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;KACpB;;;;;;;;;IA7GM,uCAAuB,GAAG,KAAK,CAAC;IAxBbK;QAAzB,KAAK,CAAC,iBAAiB,CAAC;;iDAAgB;IAOzCA;QADC,KAAK,CAAC,UAAU,CAAC;;;qDAC2D;IAK3DA;QAAjB,KAAK,CAAC,SAAS,CAAC;;kDAAY;IAGJA;QAAxB,MAAM,CAAC,eAAe,CAAC;;mDAA6B;IArC1C,eAAe;QAD3B,SAAS,CAAC,EAAC,QAAQ,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,kBAAkB,CAAC,EAAC,CAAC;QA2DrED,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,QAAQ,EAAE,CAAA;QAC9BA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,aAAa,CAAC,CAAA;QACzCA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAE/CA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,IAAI,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAC7CA,WAAA,QAAQ,EAAE,CAAA,EAAEA,WAAA,MAAM,CAAC,kCAAkC,CAAC,CAAA;yCALf,gBAAgB;YACD,KAAK;YAExD,KAAK;OA7DF,eAAe,CA4J3B;IAAD,sBAAC;CAAA,CA5JoC,SAAS;;AC/H9C;;;;;;;AAiHA;;;;AAIA,IAAa,kBAAkB,GAAmB;IAChD,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,iBAAiB,GAAA,CAAC;IAChD,KAAK,EAAE,IAAI;CACZ,CAAC;;;;;AAMF,IAAa,2BAA2B,GAAmB;IACzD,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,yBAAyB,GAAA,CAAC;IACxD,KAAK,EAAE,IAAI;CACZ,CAAC;;;;;;;;;;;;;;;;;;;;AA4BF;IAAA;KAkCC;IAvBC,sBAAI,uCAAQ;;;;;aAAZ,cAAiC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;aAEzD,UAAa,KAAqB;YAChC,IAAI,CAAC,SAAS,GAAG,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,KAAG,KAAO,KAAK,OAAO,CAAC;YAC5E,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,EAAE,CAAC;SACtC;;;OALwD;;;;;;IAYzD,oCAAQ,GAAR,UAAS,OAAwB;QAC/B,OAAO,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;KAC5D;;;;;;;IAQD,qDAAyB,GAAzB,UAA0B,EAAc,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;IAtBxEC;QADC,KAAK,EAAE;;;qDACiD;IAX9C,iBAAiB;QAN7B,SAAS,CAAC;YACT,QAAQ,EACJ,wIAAwI;YAC5I,SAAS,EAAE,CAAC,kBAAkB,CAAC;YAC/B,IAAI,EAAE,EAAC,iBAAiB,EAAE,sBAAsB,EAAC;SAClD,CAAC;OACW,iBAAiB,CAkC7B;IAAD,wBAAC;CAlCD,IAkCC;AAGD;;;;;;;;;;;;;;;;;;;;AA0BA;IAA+CL,6CAAiB;IAAhE;;KASC;;;;;;IAHC,4CAAQ,GAAR,UAAS,OAAwB;QAC/B,OAAO,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;KAChE;IARU,yBAAyB;QANrC,SAAS,CAAC;YACT,QAAQ,EACJ,qIAAqI;YACzI,SAAS,EAAE,CAAC,2BAA2B,CAAC;YACxC,IAAI,EAAE,EAAC,iBAAiB,EAAE,sBAAsB,EAAC;SAClD,CAAC;OACW,yBAAyB,CASrC;IAAD,gCAAC;CAAA,CAT8C,iBAAiB,GAS/D;AAED;;;;AAIA,IAAa,eAAe,GAAQ;IAClC,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,cAAc,GAAA,CAAC;IAC7C,KAAK,EAAE,IAAI;CACZ,CAAC;;;;;;;;;;;;;;;;;;;;;;;AA4BF;IAAA;KAgCC;IArBC,sBAAI,iCAAK;;;;;aAAT,UAAU,KAAqB;YAC7B,IAAI,CAAC,QAAQ,GAAG,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC;YACnE,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,EAAE,CAAC;SACtC;;;OAAA;;;;;;IAOD,iCAAQ,GAAR,UAAS,OAAwB;QAC/B,OAAO,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;KACzD;;;;;;;IAQD,kDAAyB,GAAzB,UAA0B,EAAc,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;IApBxEK;QADC,KAAK,EAAE;;;+CAIP;IAdU,cAAc;QAJ1B,SAAS,CAAC;YACT,QAAQ,EAAE,gEAAgE;YAC1E,SAAS,EAAE,CAAC,eAAe,CAAC;SAC7B,CAAC;OACW,cAAc,CAgC1B;IAAD,qBAAC;CAhCD,IAgCC;AAsBD;;;;AAIA,IAAa,oBAAoB,GAAQ;IACvC,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,kBAAkB,GAAA,CAAC;IACjD,KAAK,EAAE,IAAI;CACZ,CAAC;;;;;;;;;;;;;;;;;;;;;;AA4BF;IAAA;KAgDC;;;;;;;;IA3BC,wCAAW,GAAX,UAAY,OAAsB;QAChC,IAAI,WAAW,IAAI,OAAO,EAAE;YAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,EAAE,CAAC;SACtC;KACF;;;;;;IAOD,qCAAQ,GAAR,UAAS,OAAwB;QAC/B,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KACjE;;;;;;;IAQD,sDAAyB,GAAzB,UAA0B,EAAc,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;IAEhE,6CAAgB,GAAxB;QACE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;KACtE;IAnCQA;QAAR,KAAK,EAAE;;yDAAqB;IAZlB,kBAAkB;QAL9B,SAAS,CAAC;YACT,QAAQ,EAAE,4EAA4E;YACtF,SAAS,EAAE,CAAC,oBAAoB,CAAC;YACjC,IAAI,EAAE,EAAC,kBAAkB,EAAE,8BAA8B,EAAC;SAC3D,CAAC;OACW,kBAAkB,CAgD9B;IAAD,yBAAC;CAhDD,IAgDC;AAED;;;;AAIA,IAAa,oBAAoB,GAAQ;IACvC,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,kBAAkB,GAAA,CAAC;IACjD,KAAK,EAAE,IAAI;CACZ,CAAC;;;;;;;;;;;;;;;;;;;;;;AA4BF;IAAA;KAgDC;;;;;;;;IA3BC,wCAAW,GAAX,UAAY,OAAsB;QAChC,IAAI,WAAW,IAAI,OAAO,EAAE;YAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,EAAE,CAAC;SACtC;KACF;;;;;;IAOD,qCAAQ,GAAR,UAAS,OAAwB;QAC/B,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;KACjE;;;;;;;IAQD,sDAAyB,GAAzB,UAA0B,EAAc,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;IAEhE,6CAAgB,GAAxB;QACE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;KACtE;IAnCQA;QAAR,KAAK,EAAE;;yDAAqB;IAZlB,kBAAkB;QAL9B,SAAS,CAAC;YACT,QAAQ,EAAE,4EAA4E;YACtF,SAAS,EAAE,CAAC,oBAAoB,CAAC;YACjC,IAAI,EAAE,EAAC,kBAAkB,EAAE,8BAA8B,EAAC;SAC3D,CAAC;OACW,kBAAkB,CAgD9B;IAAD,yBAAC;CAhDD,IAgDC;AAED;;;;AAIA,IAAa,iBAAiB,GAAQ;IACpC,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,gBAAgB,GAAA,CAAC;IAC/C,KAAK,EAAE,IAAI;CACZ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AA+BF;IAAA;KA4CC;;;;;;;;IAvBC,sCAAW,GAAX,UAAY,OAAsB;QAChC,IAAI,SAAS,IAAI,OAAO,EAAE;YACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,EAAE,CAAC;SACtC;KACF;;;;;;IAOD,mCAAQ,GAAR,UAAS,OAAwB,IAA2B,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;;;;;;;IAQ9F,oDAAyB,GAAzB,UAA0B,EAAc,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;IAEhE,2CAAgB,GAAxB,cAAmC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;IA/B/EA;QAAR,KAAK,EAAE;;qDAA4B;IAZzB,gBAAgB;QAL5B,SAAS,CAAC;YACT,QAAQ,EAAE,sEAAsE;YAChF,SAAS,EAAE,CAAC,iBAAiB,CAAC;YAC9B,IAAI,EAAE,EAAC,gBAAgB,EAAE,0BAA0B,EAAC;SACrD,CAAC;OACW,gBAAgB,CA4C5B;IAAD,uBAAC;CA5CD;;ACthBA;;;;;;;AAaA,SAAS,wBAAwB,CAAC,OAAsD;IAEtF,OAAgC,OAAQ,CAAC,eAAe,KAAK,SAAS;QACzC,OAAQ,CAAC,UAAU,KAAK,SAAS;QACjC,OAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC;CAC9D;;;;;;;;;;;;;AAeD;IAAA;KA4HC;;;;;;;;;;;;;;;;;;;;;;IAtGC,2BAAK,GAAL,UACI,cAAoC,EACpC,OAAgE;QAAhE,wBAAA,EAAA,cAAgE;QAClE,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAEtD,IAAI,UAAU,GAAmC,IAAI,CAAC;QACtD,IAAI,eAAe,GAA6C,IAAI,CAAC;QACrE,IAAI,QAAQ,GAAwB,SAAS,CAAC;QAE9C,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,IAAI,wBAAwB,CAAC,OAAO,CAAC,EAAE;;gBAErC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;gBACpE,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;gBACnF,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;aACpE;iBAAM;;gBAEL,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;gBAClE,eAAe,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;aAClF;SACF;QAED,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,eAAe,iBAAA,EAAE,QAAQ,UAAA,EAAE,UAAU,YAAA,EAAC,CAAC,CAAC;KACzE;;;;;;;;;;;;;;;;;;;;;;;;;IA0BD,6BAAO,GAAP,UACI,SAAc,EAAE,eAAuE,EACvF,cAAyD;QAC3D,OAAO,IAAI,WAAW,CAAC,SAAS,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;KACpE;;;;;;;;;;;;;;;IAgBD,2BAAK,GAAL,UACI,cAAqB,EACrB,eAAuE,EACvE,cAAyD;QAH7D,iBAMC;QAFC,IAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC;QACjE,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;KACjE;;IAGD,qCAAe,GAAf,UAAgB,cAAkC;QAAlD,iBAMC;QALC,IAAM,QAAQ,GAAqC,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,UAAA,WAAW;YAC7C,QAAQ,CAAC,WAAW,CAAC,GAAG,KAAI,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;SAC1E,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;KACjB;;IAGD,oCAAc,GAAd,UAAe,aAAkB;QAC/B,IAAI,aAAa,YAAY,WAAW,IAAI,aAAa,YAAY,SAAS;YAC1E,aAAa,YAAY,SAAS,EAAE;YACtC,OAAO,aAAa,CAAC;SAEtB;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YACvC,IAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAM,SAAS,GAAgB,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAClF,IAAM,cAAc,GAAqB,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAC5F,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;SAEvD;aAAM;YACL,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;SACpC;KACF;IA3HU,WAAW;QADvB,UAAU,EAAE;OACA,WAAW,CA4HvB;IAAD,kBAAC;CA5HD;;ACjCA;;;;;;;AAQA,AAQA;;;AAGA,IAAa,OAAO,GAAG,IAAI,OAAO,CAAC,mBAAmB,CAAC;;ACnBvD;;;;;;;AAUA;;;;;;;;;;;;;;;;;AAqBA;IAAA;KACC;IADY,YAAY;QAJxB,SAAS,CAAC;YACT,QAAQ,EAAE,8CAA8C;YACxD,IAAI,EAAE,EAAC,YAAY,EAAE,EAAE,EAAC;SACzB,CAAC;OACW,YAAY,CACxB;IAAD,mBAAC;CADD;;AC/BA;;;;;;;IAgDa,sBAAsB,GAAgB;IACjD,YAAY;IACZ,cAAc;IACd,sBAAsB;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,kBAAkB;IAClB,4BAA4B;IAC5B,0BAA0B;IAC1B,kCAAkC;IAClC,yBAAyB;IACzB,eAAe;IACf,oBAAoB;IACpB,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,yBAAyB;IACzB,cAAc;CACf,CAAC;AAEF,IAAa,0BAA0B,GACnC,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAE3D,IAAa,0BAA0B,GACnC,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;;;;AAS9F;IAAA;KACC;IADY,yBAAyB;QAJrC,QAAQ,CAAC;YACR,YAAY,EAAE,sBAAsB;YACpC,OAAO,EAAE,sBAAsB;SAChC,CAAC;OACW,yBAAyB,CACrC;IAAD,gCAAC;CADD;;AClFA;;;;;;;AAcA;;;;;;;;AAaA;IAAA;KAkBC;oBAlBY,WAAW;;;;;;;;;IASf,sBAAU,GAAjB,UAAkB,IAEjB;QACC,OAAO;YACL,QAAQ,EAAE,aAAW;YACrB,SAAS,EACL,CAAC,EAAC,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,CAAC,8BAA8B,EAAC,CAAC;SACzF,CAAC;KACH;;IAjBU,WAAW;QALvB,QAAQ,CAAC;YACR,YAAY,EAAE,0BAA0B;YACxC,SAAS,EAAE,CAAC,oBAAoB,CAAC;YACjC,OAAO,EAAE,CAAC,yBAAyB,EAAE,0BAA0B,CAAC;SACjE,CAAC;OACW,WAAW,CAkBvB;IAAD,kBAAC;CAlBD,IAkBC;AAED;;;;;;;;;AAcA;IAAA;KAoBC;4BApBY,mBAAmB;;;;;;;;;IASvB,8BAAU,GAAjB,UAAkB,IAEjB;QACC,OAAO;YACL,QAAQ,EAAE,qBAAmB;YAC7B,SAAS,EAAE,CAAC;oBACV,OAAO,EAAE,kCAAkC;oBAC3C,QAAQ,EAAE,IAAI,CAAC,4BAA4B;iBAC5C,CAAC;SACH,CAAC;KACH;;IAnBU,mBAAmB;QAL/B,QAAQ,CAAC;YACR,YAAY,EAAE,CAAC,0BAA0B,CAAC;YAC1C,SAAS,EAAE,CAAC,WAAW,EAAE,oBAAoB,CAAC;YAC9C,OAAO,EAAE,CAAC,yBAAyB,EAAE,0BAA0B,CAAC;SACjE,CAAC;OACW,mBAAmB,CAoB/B;IAAD,0BAAC;CApBD;;AC7DA;;;;;;GAMG;;ACNH;;;;;;;AAQA,AAOA,0EAA0E;;ACf1E;;;;;;GAMG;;ACNH;;GAEG;;;;"}
\ No newline at end of file
+{"version":3,"file":"forms.js","sources":["../../../../../../packages/forms/src/directives/abstract_control_directive.ts","../../../../../../packages/forms/src/directives/control_container.ts","../../../../../../packages/forms/src/validators.ts","../../../../../../packages/forms/src/directives/control_value_accessor.ts","../../../../../../packages/forms/src/directives/checkbox_value_accessor.ts","../../../../../../packages/forms/src/directives/default_value_accessor.ts","../../../../../../packages/forms/src/directives/normalize_validator.ts","../../../../../../packages/forms/src/directives/number_value_accessor.ts","../../../../../../packages/forms/src/directives/ng_control.ts","../../../../../../packages/forms/src/directives/radio_control_value_accessor.ts","../../../../../../packages/forms/src/directives/range_value_accessor.ts","../../../../../../packages/forms/src/directives/error_examples.ts","../../../../../../packages/forms/src/directives/reactive_errors.ts","../../../../../../packages/forms/src/directives/select_control_value_accessor.ts","../../../../../../packages/forms/src/directives/select_multiple_control_value_accessor.ts","../../../../../../packages/forms/src/directives/shared.ts","../../../../../../packages/forms/src/directives/abstract_form_group_directive.ts","../../../../../../packages/forms/src/directives/ng_control_status.ts","../../../../../../packages/forms/src/model.ts","../../../../../../packages/forms/src/directives/ng_form.ts","../../../../../../packages/forms/src/directives/template_driven_errors.ts","../../../../../../packages/forms/src/directives/ng_form_selector_warning.ts","../../../../../../packages/forms/src/directives/ng_model_group.ts","../../../../../../packages/forms/src/directives/ng_model.ts","../../../../../../packages/forms/src/directives/reactive_directives/form_control_directive.ts","../../../../../../packages/forms/src/directives/reactive_directives/form_group_directive.ts","../../../../../../packages/forms/src/directives/reactive_directives/form_group_name.ts","../../../../../../packages/forms/src/directives/reactive_directives/form_control_name.ts","../../../../../../packages/forms/src/directives/validators.ts","../../../../../../packages/forms/src/form_builder.ts","../../../../../../packages/forms/src/version.ts","../../../../../../packages/forms/src/directives/ng_no_validate_directive.ts","../../../../../../packages/forms/src/directives.ts","../../../../../../packages/forms/src/form_providers.ts","../../../../../../packages/forms/src/forms.ts","../../../../../../packages/forms/public_api.ts","../../../../../../packages/forms/index.ts","../../../../../../packages/forms/forms.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable} from 'rxjs';\nimport {AbstractControl} from '../model';\nimport {ValidationErrors} from './validators';\n\n/**\n * @description\n * Base class for control directives.\n *\n * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.\n *\n * @publicApi\n */\nexport abstract class AbstractControlDirective {\n /**\n * @description\n * A reference to the underlying control.\n *\n * @returns the control that backs this directive. Most properties fall through to that instance.\n */\n abstract get control(): AbstractControl|null;\n\n /**\n * @description\n * Reports the value of the control if it is present, otherwise null.\n */\n get value(): any { return this.control ? this.control.value : null; }\n\n /**\n * @description\n * Reports whether the control is valid. A control is considered valid if no\n * validation errors exist with the current value.\n * If the control is not present, null is returned.\n */\n get valid(): boolean|null { return this.control ? this.control.valid : null; }\n\n /**\n * @description\n * Reports whether the control is invalid, meaning that an error exists in the input value.\n * If the control is not present, null is returned.\n */\n get invalid(): boolean|null { return this.control ? this.control.invalid : null; }\n\n /**\n * @description\n * Reports whether a control is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value. If the control is not present, null is\n * returned.\n */\n get pending(): boolean|null { return this.control ? this.control.pending : null; }\n\n /**\n * @description\n * Reports whether the control is disabled, meaning that the control is disabled\n * in the UI and is exempt from validation checks and excluded from aggregate\n * values of ancestor controls. If the control is not present, null is returned.\n */\n get disabled(): boolean|null { return this.control ? this.control.disabled : null; }\n\n /**\n * @description\n * Reports whether the control is enabled, meaning that the control is included in ancestor\n * calculations of validity or value. If the control is not present, null is returned.\n */\n get enabled(): boolean|null { return this.control ? this.control.enabled : null; }\n\n /**\n * @description\n * Reports the control's validation errors. If the control is not present, null is returned.\n */\n get errors(): ValidationErrors|null { return this.control ? this.control.errors : null; }\n\n /**\n * @description\n * Reports whether the control is pristine, meaning that the user has not yet changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get pristine(): boolean|null { return this.control ? this.control.pristine : null; }\n\n /**\n * @description\n * Reports whether the control is dirty, meaning that the user has changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get dirty(): boolean|null { return this.control ? this.control.dirty : null; }\n\n /**\n * @description\n * Reports whether the control is touched, meaning that the user has triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get touched(): boolean|null { return this.control ? this.control.touched : null; }\n\n /**\n * @description\n * Reports the validation status of the control. Possible values include:\n * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.\n * If the control is not present, null is returned.\n */\n get status(): string|null { return this.control ? this.control.status : null; }\n\n /**\n * @description\n * Reports whether the control is untouched, meaning that the user has not yet triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get untouched(): boolean|null { return this.control ? this.control.untouched : null; }\n\n /**\n * @description\n * Returns a multicasting observable that emits a validation status whenever it is\n * calculated for the control. If the control is not present, null is returned.\n */\n get statusChanges(): Observable<any>|null {\n return this.control ? this.control.statusChanges : null;\n }\n\n /**\n * @description\n * Returns a multicasting observable of value changes for the control that emits every time the\n * value of the control changes in the UI or programmatically.\n * If the control is not present, null is returned.\n */\n get valueChanges(): Observable<any>|null {\n return this.control ? this.control.valueChanges : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[]|null { return null; }\n\n /**\n * @description\n * Resets the control with the provided value if the control is present.\n */\n reset(value: any = undefined): void {\n if (this.control) this.control.reset(value);\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return this.control ? this.control.hasError(errorCode, path) : false;\n }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n return this.control ? this.control.getError(errorCode, path) : null;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {Form} from './form_interface';\n\n\n/**\n * @description\n * A base class for directives that contain multiple registered instances of `NgControl`.\n * Only used by the forms module.\n *\n * @publicApi\n */\nexport abstract class ControlContainer extends AbstractControlDirective {\n /**\n * @description\n * The name for the control\n */\n // TODO(issue/24571): remove '!'.\n name !: string;\n\n /**\n * @description\n * The top-level form directive for the control.\n */\n get formDirective(): Form|null { return null; }\n\n /**\n * @description\n * The path to this group.\n */\n get path(): string[]|null { return null; }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken, ɵisObservable as isObservable, ɵisPromise as isPromise} from '@angular/core';\nimport {Observable, forkJoin, from} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {AsyncValidatorFn, ValidationErrors, Validator, ValidatorFn} from './directives/validators';\nimport {AbstractControl, FormControl} from './model';\n\nfunction isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n}\n\n/**\n * @description\n * An `InjectionToken` for registering additional synchronous validators used with `AbstractControl`s.\n *\n * @see `NG_ASYNC_VALIDATORS`\n *\n * @usageNotes\n *\n * ### Providing a custom validator\n *\n * The following example registers a custom validator directive. Adding the validator to the\n * existing collection of validators requires the `multi: true` option.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors | null {\n * return { 'custom': true };\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport const NG_VALIDATORS = new InjectionToken<Array<Validator|Function>>('NgValidators');\n\n/**\n * @description\n * An `InjectionToken` for registering additional asynchronous validators used with `AbstractControl`s.\n *\n * @see `NG_VALIDATORS`\n *\n * @publicApi\n */\nexport const NG_ASYNC_VALIDATORS =\n new InjectionToken<Array<Validator|Function>>('NgAsyncValidators');\n\nconst EMAIL_REGEXP =\n /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n\n/**\n * @description\n * Provides a set of built-in validators that can be used by form controls.\n *\n * A validator is a function that processes a `FormControl` or collection of\n * controls and returns an error map or null. A null map means that validation has passed.\n *\n * @see [Form Validation](/guide/form-validation)\n *\n * @publicApi\n */\nexport class Validators {\n /**\n * @description\n * Validator that requires the control's value to be greater than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a minimum of 3\n *\n * ```typescript\n * const control = new FormControl(2, Validators.min(3));\n *\n * console.log(control.errors); // {min: {min: 3, actual: 2}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `min` property if the validation check fails, otherwise `null`.\n *\n */\n static min(min: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value < min ? {'min': {'min': min, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to be less than or equal to the provided number.\n * The validator exists only as a function and not as a directive.\n *\n * @usageNotes\n *\n * ### Validate against a maximum of 15\n *\n * ```typescript\n * const control = new FormControl(16, Validators.max(15));\n *\n * console.log(control.errors); // {max: {max: 15, actual: 16}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `max` property if the validation check fails, otherwise `null`.\n *\n */\n static max(max: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n return !isNaN(value) && value > max ? {'max': {'max': max, 'actual': control.value}} : null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control have a non-empty value.\n *\n * @usageNotes\n *\n * ### Validate that the field is non-empty\n *\n * ```typescript\n * const control = new FormControl('', Validators.required);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map with the `required` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static required(control: AbstractControl): ValidationErrors|null {\n return isEmptyInputValue(control.value) ? {'required': true} : null;\n }\n\n /**\n * @description\n * Validator that requires the control's value be true. This validator is commonly\n * used for required checkboxes.\n *\n * @usageNotes\n *\n * ### Validate that the field value is true\n *\n * ```typescript\n * const control = new FormControl('', Validators.requiredTrue);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map that contains the `required` property\n * set to `true` if the validation check fails, otherwise `null`.\n */\n static requiredTrue(control: AbstractControl): ValidationErrors|null {\n return control.value === true ? null : {'required': true};\n }\n\n /**\n * @description\n * Validator that requires the control's value pass an email validation test.\n *\n * @usageNotes\n *\n * ### Validate that the field matches a valid email pattern\n *\n * ```typescript\n * const control = new FormControl('bad@', Validators.email);\n *\n * console.log(control.errors); // {email: true}\n * ```\n *\n * @returns An error map with the `email` property\n * if the validation check fails, otherwise `null`.\n *\n */\n static email(control: AbstractControl): ValidationErrors|null {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n return EMAIL_REGEXP.test(control.value) ? null : {'email': true};\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be greater than or equal\n * to the provided minimum length. This validator is also provided by default if you use the\n * the HTML5 `minlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has a minimum of 3 characters\n *\n * ```typescript\n * const control = new FormControl('ng', Validators.minLength(3));\n *\n * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}\n * ```\n *\n * ```html\n * <input minlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `minlength` if the validation check fails, otherwise `null`.\n */\n static minLength(minLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const length: number = control.value ? control.value.length : 0;\n return length < minLength ?\n {'minlength': {'requiredLength': minLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the length of the control's value to be less than or equal\n * to the provided maximum length. This validator is also provided by default if you use the\n * the HTML5 `maxlength` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field has maximum of 5 characters\n *\n * ```typescript\n * const control = new FormControl('Angular', Validators.maxLength(5));\n *\n * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}\n * ```\n *\n * ```html\n * <input maxlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `maxlength` property if the validation check fails, otherwise `null`.\n */\n static maxLength(maxLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const length: number = control.value ? control.value.length : 0;\n return length > maxLength ?\n {'maxlength': {'requiredLength': maxLength, 'actualLength': length}} :\n null;\n };\n }\n\n /**\n * @description\n * Validator that requires the control's value to match a regex pattern. This validator is also\n * provided by default if you use the HTML5 `pattern` attribute.\n *\n * Note that if a Regexp is provided, the Regexp is used as is to test the values. On the other\n * hand, if a string is passed, the `^` character is prepended and the `$` character is\n * appended to the provided string (if not already present), and the resulting regular\n * expression is used to test the values.\n *\n * @usageNotes\n *\n * ### Validate that the field only contains letters or spaces\n *\n * ```typescript\n * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));\n *\n * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}\n * ```\n *\n * ```html\n * <input pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `pattern` property if the validation check fails, otherwise `null`.\n */\n static pattern(pattern: string|RegExp): ValidatorFn {\n if (!pattern) return Validators.nullValidator;\n let regex: RegExp;\n let regexStr: string;\n if (typeof pattern === 'string') {\n regexStr = '';\n\n if (pattern.charAt(0) !== '^') regexStr += '^';\n\n regexStr += pattern;\n\n if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$';\n\n regex = new RegExp(regexStr);\n } else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value: string = control.value;\n return regex.test(value) ? null :\n {'pattern': {'requiredPattern': regexStr, 'actualValue': value}};\n };\n }\n\n /**\n * @description\n * Validator that performs no operation.\n */\n static nullValidator(control: AbstractControl): ValidationErrors|null { return null; }\n\n /**\n * @description\n * Compose multiple validators into a single function that returns the union\n * of the individual error maps for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error maps of the validators if the validation check fails, otherwise `null`.\n */\n static compose(validators: null): null;\n static compose(validators: (ValidatorFn|null|undefined)[]): ValidatorFn|null;\n static compose(validators: (ValidatorFn|null|undefined)[]|null): ValidatorFn|null {\n if (!validators) return null;\n const presentValidators: ValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n return _mergeErrors(_executeValidators(control, presentValidators));\n };\n }\n\n /**\n * @description\n * Compose multiple async validators into a single function that returns the union\n * of the individual error objects for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error objects of the async validators if the validation check fails, otherwise `null`.\n */\n static composeAsync(validators: (AsyncValidatorFn|null)[]): AsyncValidatorFn|null {\n if (!validators) return null;\n const presentValidators: AsyncValidatorFn[] = validators.filter(isPresent) as any;\n if (presentValidators.length == 0) return null;\n\n return function(control: AbstractControl) {\n const observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n return forkJoin(observables).pipe(map(_mergeErrors));\n };\n }\n}\n\nfunction isPresent(o: any): boolean {\n return o != null;\n}\n\nexport function toObservable(r: any): Observable<any> {\n const obs = isPromise(r) ? from(r) : r;\n if (!(isObservable(obs))) {\n throw new Error(`Expected validator to return Promise or Observable.`);\n }\n return obs;\n}\n\nfunction _executeValidators(control: AbstractControl, validators: ValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _executeAsyncValidators(control: AbstractControl, validators: AsyncValidatorFn[]): any[] {\n return validators.map(v => v(control));\n}\n\nfunction _mergeErrors(arrayOfErrors: ValidationErrors[]): ValidationErrors|null {\n const res: {[key: string]: any} =\n arrayOfErrors.reduce((res: ValidationErrors | null, errors: ValidationErrors | null) => {\n return errors != null ? {...res !, ...errors} : res !;\n }, {});\n return Object.keys(res).length === 0 ? null : res;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * @description\n * Defines an interface that acts as a bridge between the Angular forms API and a\n * native element in the DOM.\n *\n * Implement this interface to create a custom form control directive\n * that integrates with Angular forms.\n *\n * @see DefaultValueAccessor\n *\n * @publicApi\n */\nexport interface ControlValueAccessor {\n /**\n * @description\n * Writes a new value to the element.\n *\n * This method is called by the forms API to write to the view when programmatic\n * changes from model to view are requested.\n *\n * @usageNotes\n * ### Write a value to the element\n *\n * The following example writes a value to the native DOM element.\n *\n * ```ts\n * writeValue(value: any): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'value', value);\n * }\n * ```\n *\n * @param obj The new value for the element\n */\n writeValue(obj: any): void;\n\n /**\n * @description\n * Registers a callback function that is called when the control's value\n * changes in the UI.\n *\n * This method is called by the forms API on initialization to update the form\n * model when values propagate from the view to the model.\n *\n * When implementing the `registerOnChange` method in your own value accessor,\n * save the given function so your class calls it at the appropriate time.\n *\n * @usageNotes\n * ### Store the change function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnChange(fn: (_: any) => void): void {\n * this._onChange = fn;\n * }\n * ```\n *\n * When the value changes in the UI, call the registered\n * function to allow the forms API to update itself:\n *\n * ```ts\n * host: {\n * (change): '_onChange($event.target.value)'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnChange(fn: any): void;\n\n /**\n * @description\n * Registers a callback function is called by the forms API on initialization\n * to update the form model on blur.\n *\n * When implementing `registerOnTouched` in your own value accessor, save the given\n * function so your class calls it when the control should be considered\n * blurred or \"touched\".\n *\n * @usageNotes\n * ### Store the callback function\n *\n * The following example stores the provided function as an internal method.\n *\n * ```ts\n * registerOnTouched(fn: any): void {\n * this._onTouched = fn;\n * }\n * ```\n *\n * On blur (or equivalent), your class should call the registered function to allow\n * the forms API to update itself:\n *\n * ```ts\n * host: {\n * '(blur)': '_onTouched()'\n * }\n * ```\n *\n * @param fn The callback function to register\n */\n registerOnTouched(fn: any): void;\n\n /**\n * @description\n * Function that is called by the forms API when the control status changes to\n * or from 'DISABLED'. Depending on the status, it enables or disables the\n * appropriate DOM element.\n *\n * @usageNotes\n * The following is an example of writing the disabled property to a native DOM element:\n *\n * ```ts\n * setDisabledState(isDisabled: boolean): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n * }\n * ```\n *\n * @param isDisabled The disabled status to set on the element\n */\n setDisabledState?(isDisabled: boolean): void;\n}\n\n/**\n * Used to provide a `ControlValueAccessor` for form controls.\n *\n * See `DefaultValueAccessor` for how to implement one.\n *\n * @publicApi\n */\nexport const NG_VALUE_ACCESSOR = new InjectionToken<ControlValueAccessor>('NgValueAccessor');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const CHECKBOX_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlValueAccessor),\n multi: true,\n};\n\n/**\n * @description\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\n * element.\n *\n * @usageNotes\n *\n * ### Using a checkbox with a reactive form.\n *\n * The following example shows how to use a checkbox with a reactive form.\n *\n * ```ts\n * const rememberLoginControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"checkbox\" [formControl]=\"rememberLoginControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: {'(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()'},\n providers: [CHECKBOX_VALUE_ACCESSOR]\n})\nexport class CheckboxControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"checked\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Inject, InjectionToken, Optional, Renderer2, forwardRef} from '@angular/core';\nimport {ɵgetDOM as getDOM} from '@angular/platform-browser';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const DEFAULT_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DefaultValueAccessor),\n multi: true\n};\n\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\nfunction _isAndroid(): boolean {\n const userAgent = getDOM() ? getDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n\n/**\n * @description\n * Provide this token to control if form directives buffer IME input until\n * the \"compositionend\" event occurs.\n * @publicApi\n */\nexport const COMPOSITION_BUFFER_MODE = new InjectionToken<boolean>('CompositionEventMode');\n\n/**\n * @description\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using the default value accessor\n *\n * The following example shows how to use an input element that activates the default value accessor\n * (in this case, a text field).\n *\n * ```ts\n * const firstNameControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"text\" [formControl]=\"firstNameControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n // TODO: vsavkin replace the above selector with the one below it once\n // https://github.com/angular/angular/issues/3011 is implemented\n // selector: '[ngModel],[formControl],[formControlName]',\n host: {\n '(input)': '$any(this)._handleInput($event.target.value)',\n '(blur)': 'onTouched()',\n '(compositionstart)': '$any(this)._compositionStart()',\n '(compositionend)': '$any(this)._compositionEnd($event.target.value)'\n },\n providers: [DEFAULT_VALUE_ACCESSOR]\n})\nexport class DefaultValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when an input event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /** Whether the user is creating a composition string (IME events). */\n private _composing = false;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n @Optional() @Inject(COMPOSITION_BUFFER_MODE) private _compositionMode: boolean) {\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _handleInput(value: any): void {\n if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n this.onChange(value);\n }\n }\n\n /** @internal */\n _compositionStart(): void { this._composing = true; }\n\n /** @internal */\n _compositionEnd(value: any): void {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractControl} from '../model';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport function normalizeValidator(validator: ValidatorFn | Validator): ValidatorFn {\n if ((<Validator>validator).validate) {\n return (c: AbstractControl) => (<Validator>validator).validate(c);\n } else {\n return <ValidatorFn>validator;\n }\n}\n\nexport function normalizeAsyncValidator(validator: AsyncValidatorFn | AsyncValidator):\n AsyncValidatorFn {\n if ((<AsyncValidator>validator).validate) {\n return (c: AbstractControl) => (<AsyncValidator>validator).validate(c);\n } else {\n return <AsyncValidatorFn>validator;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const NUMBER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a number value and listening to number input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a number input with a reactive form.\n *\n * The following example shows how to use a number input with a reactive form.\n *\n * ```ts\n * const totalCountControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"number\" [formControl]=\"totalCountControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [NUMBER_VALUE_ACCESSOR]\n})\nexport class NumberValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: number): void {\n // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n const normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nfunction unimplemented(): any {\n throw new Error('unimplemented');\n}\n\n/**\n * @description\n * A base class that all control `FormControl`-based directives extend. It binds a `FormControl`\n * object to a DOM element.\n *\n * @publicApi\n */\nexport abstract class NgControl extends AbstractControlDirective {\n /**\n * @description\n * The parent form for the control.\n *\n * @internal\n */\n _parent: ControlContainer|null = null;\n\n /**\n * @description\n * The name for the control\n */\n name: string|null = null;\n\n /**\n * @description\n * The value accessor for the control\n */\n valueAccessor: ControlValueAccessor|null = null;\n\n /**\n * @description\n * The uncomposed array of synchronous validators for the control\n *\n * @internal\n */\n _rawValidators: Array<Validator|ValidatorFn> = [];\n\n /**\n * @description\n * The uncomposed array of async validators for the control\n *\n * @internal\n */\n _rawAsyncValidators: Array<AsyncValidator|AsyncValidatorFn> = [];\n\n /**\n * @description\n * The registered synchronous validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get validator(): ValidatorFn|null { return <ValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The registered async validator function for the control\n *\n * @throws An exception that this method is not implemented\n */\n get asyncValidator(): AsyncValidatorFn|null { return <AsyncValidatorFn>unimplemented(); }\n\n /**\n * @description\n * The callback method to update the model from the view when requested\n *\n * @param newValue The new value for the view\n */\n abstract viewToModelUpdate(newValue: any): void;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Injectable, Injector, Input, OnDestroy, OnInit, Renderer2, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\n\nexport const RADIO_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioControlValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * Class used by Angular to track radio buttons. For internal use only.\n */\n@Injectable()\nexport class RadioControlRegistry {\n private _accessors: any[] = [];\n\n /**\n * @description\n * Adds a control to the internal registry. For internal use only.\n */\n add(control: NgControl, accessor: RadioControlValueAccessor) {\n this._accessors.push([control, accessor]);\n }\n\n /**\n * @description\n * Removes a control from the internal registry. For internal use only.\n */\n remove(accessor: RadioControlValueAccessor) {\n for (let i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n }\n\n /**\n * @description\n * Selects a radio button. For internal use only.\n */\n select(accessor: RadioControlValueAccessor) {\n this._accessors.forEach((c) => {\n if (this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n }\n\n private _isSameGroup(\n controlPair: [NgControl, RadioControlValueAccessor],\n accessor: RadioControlValueAccessor): boolean {\n if (!controlPair[0].control) return false;\n return controlPair[0]._parent === accessor._control._parent &&\n controlPair[1].name === accessor.name;\n }\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing radio control values and listening to radio control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using radio buttons with reactive form directives\n *\n * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in\n * a reactive form, radio buttons in the same group should have the same `formControlName`.\n * Providing a `name` attribute is optional.\n *\n * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n host: {'(change)': 'onChange()', '(blur)': 'onTouched()'},\n providers: [RADIO_VALUE_ACCESSOR]\n})\nexport class RadioControlValueAccessor implements ControlValueAccessor,\n OnDestroy, OnInit {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _state !: boolean;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _control !: NgControl;\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _fn !: Function;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = () => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the name of the radio input element.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input() formControlName !: string;\n\n /**\n * @description\n * Tracks the value of the radio input element\n */\n @Input() value: any;\n\n constructor(\n private _renderer: Renderer2, private _elementRef: ElementRef,\n private _registry: RadioControlRegistry, private _injector: Injector) {}\n\n /**\n * @description\n * A lifecycle method called when the directive is initialized. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnInit(): void {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnDestroy(): void { this._registry.remove(this); }\n\n /**\n * @description\n * Sets the \"checked\" property value on the radio input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._state = value === this.value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: any) => {}): void {\n this._fn = fn;\n this.onChange = () => {\n fn(this.value);\n this._registry.select(this);\n };\n }\n\n /**\n * Sets the \"value\" on the radio input element and unchecks it.\n *\n * @param value\n */\n fireUncheck(value: any): void { this.writeValue(value); }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n private _checkName(): void {\n if (this.name && this.formControlName && this.name !== this.formControlName) {\n this._throwNameError();\n }\n if (!this.name && this.formControlName) this.name = this.formControlName;\n }\n\n private _throwNameError(): void {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Renderer2, StaticProvider, forwardRef} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const RANGE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeValueAccessor),\n multi: true\n};\n\n/**\n * @description\n * The `ControlValueAccessor` for writing a range value and listening to range input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a range input with a reactive form\n *\n * The following example shows how to use a range input with a reactive form.\n *\n * ```ts\n * const ageControl = new FormControl();\n * ```\n *\n * ```\n * <input type=\"range\" [formControl]=\"ageControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector:\n 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [RANGE_VALUE_ACCESSOR]\n})\nexport class RangeValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (_: number|null) => void): void {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the range input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const FormErrorExamples = {\n formControlName: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });`,\n\n formGroupName: `\n <div [formGroup]=\"myGroup\">\n <div formGroupName=\"person\">\n <input formControlName=\"firstName\">\n </div>\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });`,\n\n formArrayName: `\n <div [formGroup]=\"myGroup\">\n <div formArrayName=\"cities\">\n <div *ngFor=\"let city of cityArray.controls; index as i\">\n <input [formControlName]=\"i\">\n </div>\n </div>\n </div>\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl('SF')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });`,\n\n ngModelGroup: `\n <form>\n <div ngModelGroup=\"person\">\n <input [(ngModel)]=\"person.name\" name=\"firstName\">\n </div>\n </form>`,\n\n ngModelWithFormGroup: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n `\n};\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class ReactiveErrors {\n static controlParentException(): void {\n throw new Error(\n `formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static ngModelGroupException(): void {\n throw new Error(\n `formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n ${Examples.formGroupName}\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n ${Examples.ngModelGroup}`);\n }\n static missingFormException(): void {\n throw new Error(`formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n ${Examples.formControlName}`);\n }\n\n static groupParentException(): void {\n throw new Error(\n `formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formGroupName}`);\n }\n\n static arrayParentException(): void {\n throw new Error(\n `formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${Examples.formArrayName}`);\n }\n\n static disabledAttrWarning(): void {\n console.warn(`\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n \n Example: \n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n `);\n }\n\n static ngModelWarning(directiveName: string): void {\n console.warn(`\n It looks like you're using ngModel on the same form field as ${directiveName}. \n Support for using the ngModel input property and ngModelChange event with \n reactive form directives has been deprecated in Angular v6 and will be removed \n in Angular v7.\n \n For more information on this, see our API docs here:\n https://angular.io/api/forms/${directiveName === 'formControl' ? 'FormControlDirective' \n : 'FormControlName'}#use-with-ngmodel\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string | null, value: any): string {\n if (id == null) return `${value}`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing select control values and listening to select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using select controls in a reactive form\n *\n * The following examples show how to use a select control in a reactive form.\n *\n * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Using select controls in a template-driven form\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * {@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * ### Customizing option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * ```ts\n * const selectedCountriesControl = new FormControl();\n * ```\n *\n * ```\n * <select [compareWith]=\"compareFn\" [formControl]=\"selectedCountriesControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{country.name}}\n * </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n * return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * **Note:** We listen to the 'change' event because 'input' events aren't fired\n * for selects in Firefox and IE:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n host: {'(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()'},\n providers: [SELECT_VALUE_ACCESSOR]\n})\nexport class SelectControlValueAccessor implements ControlValueAccessor {\n value: any;\n /** @internal */\n _optionMap: Map<string, any> = new Map<string, any>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * Sets the \"value\" property on the input element. The \"selectedIndex\"\n * property is also set if an ID is provided on the option element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this.value = value;\n const id: string|null = this._getOptionId(value);\n if (id == null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n }\n const valueString = _buildValueString(id, value);\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (valueString: string) => {\n this.value = this._getOptionValue(valueString);\n fn(this.value);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(): string { return (this._idCounter++).toString(); }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id), value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectOption implements OnDestroy {\n /**\n * @description\n * ID of the option element\n */\n // TODO(issue/24571): remove '!'.\n id !: string;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectControlValueAccessor) {\n if (this._select) this.id = this._select._registerOption();\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n this._setElementValue(value);\n if (this._select) this._select.writeValue(this._select.value);\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, Host, Input, OnDestroy, Optional, Renderer2, StaticProvider, forwardRef, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\n\nexport const SELECT_MULTIPLE_VALUE_ACCESSOR: StaticProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectMultipleControlValueAccessor),\n multi: true\n};\n\nfunction _buildValueString(id: string, value: any): string {\n if (id == null) return `${value}`;\n if (typeof value === 'string') value = `'${value}'`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n\nfunction _extractId(valueString: string): string {\n return valueString.split(':')[0];\n}\n\n/** Mock interface for HTML Options */\ninterface HTMLOption {\n value: string;\n selected: boolean;\n}\n\n/** Mock interface for HTMLCollection */\nabstract class HTMLCollection {\n // TODO(issue/24571): remove '!'.\n length !: number;\n abstract item(_: number): HTMLOption;\n}\n\n/**\n * @description\n * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n * \n * @see `SelectControlValueAccessor`\n *\n * @usageNotes\n * \n * ### Using a multi-select control\n * \n * The follow example shows you how to use a multi-select control with a reactive form.\n * \n * ```ts\n * const countryControl = new FormControl();\n * ```\n *\n * ```\n * <select multiple name=\"countries\" [formControl]=\"countryControl\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{ country.name }}\n * </option>\n * </select>\n * ```\n * \n * ### Customizing option selection\n * \n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * See the `SelectControlValueAccessor` for usage.\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n host: {'(change)': 'onChange($event.target)', '(blur)': 'onTouched()'},\n providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]\n})\nexport class SelectMultipleControlValueAccessor implements ControlValueAccessor {\n /**\n * @description\n * The current value\n */\n value: any;\n\n /** @internal */\n _optionMap: Map<string, NgSelectMultipleOption> = new Map<string, NgSelectMultipleOption>();\n /** @internal */\n _idCounter: number = 0;\n\n /**\n * @description\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * @description\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n\n private _compareWith: (o1: any, o2: any) => boolean = looseIdentical;\n\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n /**\n * @description\n * Sets the \"value\" property on one or of more\n * of the select's options.\n *\n * @param value The value\n */\n writeValue(value: any): void {\n this.value = value;\n let optionSelectedStateSetter: (opt: NgSelectMultipleOption, o: any) => void;\n if (Array.isArray(value)) {\n // convert values to ids\n const ids = value.map((v) => this._getOptionId(v));\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(ids.indexOf(o.toString()) > -1); };\n } else {\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(false); };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n }\n\n /**\n * @description\n * Registers a function called when the control value changes\n * and writes an array of the selected options.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (_: any) => {\n const selected: Array<any> = [];\n if (_.hasOwnProperty('selectedOptions')) {\n const options: HTMLCollection = _.selectedOptions;\n for (let i = 0; i < options.length; i++) {\n const opt: any = options.item(i);\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n // Degrade on IE\n else {\n const options: HTMLCollection = <HTMLCollection>_.options;\n for (let i = 0; i < options.length; i++) {\n const opt: HTMLOption = options.item(i);\n if (opt.selected) {\n const val: any = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n this.value = selected;\n fn(selected);\n };\n }\n\n /**\n * @description\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Sets the \"disabled\" property on the select input element.\n *\n * @param isDisabled The disabled value\n */\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /** @internal */\n _registerOption(value: NgSelectMultipleOption): string {\n const id: string = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n }\n\n /** @internal */\n _getOptionId(value: any): string|null {\n for (const id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id) !._value, value)) return id;\n }\n return null;\n }\n\n /** @internal */\n _getOptionValue(valueString: string): any {\n const id: string = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) !._value : valueString;\n }\n}\n\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see `SelectMultipleControlValueAccessor`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'option'})\nexport class NgSelectMultipleOption implements OnDestroy {\n // TODO(issue/24571): remove '!'.\n id !: string;\n /** @internal */\n _value: any;\n\n constructor(\n private _element: ElementRef, private _renderer: Renderer2,\n @Optional() @Host() private _select: SelectMultipleControlValueAccessor) {\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n @Input('ngValue')\n set ngValue(value: any) {\n if (this._select == null) return;\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n @Input('value')\n set value(value: any) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n } else {\n this._setElementValue(value);\n }\n }\n\n /** @internal */\n _setElementValue(value: string): void {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n\n /** @internal */\n _setSelected(selected: boolean) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {isDevMode, ɵlooseIdentical as looseIdentical} from '@angular/core';\n\nimport {FormArray, FormControl, FormGroup} from '../model';\nimport {Validators} from '../validators';\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {CheckboxControlValueAccessor} from './checkbox_value_accessor';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {DefaultValueAccessor} from './default_value_accessor';\nimport {NgControl} from './ng_control';\nimport {normalizeAsyncValidator, normalizeValidator} from './normalize_validator';\nimport {NumberValueAccessor} from './number_value_accessor';\nimport {RadioControlValueAccessor} from './radio_control_value_accessor';\nimport {RangeValueAccessor} from './range_value_accessor';\nimport {FormArrayName} from './reactive_directives/form_group_name';\nimport {ReactiveErrors} from './reactive_errors';\nimport {SelectControlValueAccessor} from './select_control_value_accessor';\nimport {SelectMultipleControlValueAccessor} from './select_multiple_control_value_accessor';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\n\nexport function controlPath(name: string, parent: ControlContainer): string[] {\n return [...parent.path !, name];\n}\n\nexport function setUpControl(control: FormControl, dir: NgControl): void {\n if (!control) _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor) _throwError(dir, 'No value accessor for form control with');\n\n control.validator = Validators.compose([control.validator !, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator !, dir.asyncValidator]);\n dir.valueAccessor !.writeValue(control.value);\n\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n\n setUpBlurPipeline(control, dir);\n\n if (dir.valueAccessor !.setDisabledState) {\n control.registerOnDisabledChange(\n (isDisabled: boolean) => { dir.valueAccessor !.setDisabledState !(isDisabled); });\n }\n\n // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n dir._rawValidators.forEach((validator: Validator | ValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n\n dir._rawAsyncValidators.forEach((validator: AsyncValidator | AsyncValidatorFn) => {\n if ((<Validator>validator).registerOnValidatorChange)\n (<Validator>validator).registerOnValidatorChange !(() => control.updateValueAndValidity());\n });\n}\n\nexport function cleanUpControl(control: FormControl, dir: NgControl) {\n dir.valueAccessor !.registerOnChange(() => _noControlError(dir));\n dir.valueAccessor !.registerOnTouched(() => _noControlError(dir));\n\n dir._rawValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n dir._rawAsyncValidators.forEach((validator: any) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n\n if (control) control._clearChangeFns();\n}\n\nfunction setUpViewChangePipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnChange((newValue: any) => {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n\n if (control.updateOn === 'change') updateControl(control, dir);\n });\n}\n\nfunction setUpBlurPipeline(control: FormControl, dir: NgControl): void {\n dir.valueAccessor !.registerOnTouched(() => {\n control._pendingTouched = true;\n\n if (control.updateOn === 'blur' && control._pendingChange) updateControl(control, dir);\n if (control.updateOn !== 'submit') control.markAsTouched();\n });\n}\n\nfunction updateControl(control: FormControl, dir: NgControl): void {\n if (control._pendingDirty) control.markAsDirty();\n control.setValue(control._pendingValue, {emitModelToViewChange: false});\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n}\n\nfunction setUpModelChangePipeline(control: FormControl, dir: NgControl): void {\n control.registerOnChange((newValue: any, emitModelEvent: boolean) => {\n // control -> view\n dir.valueAccessor !.writeValue(newValue);\n\n // control -> ngModel\n if (emitModelEvent) dir.viewToModelUpdate(newValue);\n });\n}\n\nexport function setUpFormContainer(\n control: FormGroup | FormArray, dir: AbstractFormGroupDirective | FormArrayName) {\n if (control == null) _throwError(dir, 'Cannot find control with');\n control.validator = Validators.compose([control.validator, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n}\n\nfunction _noControlError(dir: NgControl) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\n\nfunction _throwError(dir: AbstractControlDirective, message: string): void {\n let messageEnd: string;\n if (dir.path !.length > 1) {\n messageEnd = `path: '${dir.path!.join(' -> ')}'`;\n } else if (dir.path ![0]) {\n messageEnd = `name: '${dir.path}'`;\n } else {\n messageEnd = 'unspecified name attribute';\n }\n throw new Error(`${message} ${messageEnd}`);\n}\n\nexport function composeValidators(validators: Array<Validator|Function>): ValidatorFn|null {\n return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n}\n\nexport function composeAsyncValidators(validators: Array<Validator|Function>): AsyncValidatorFn|\n null {\n return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n null;\n}\n\nexport function isPropertyUpdated(changes: {[key: string]: any}, viewModel: any): boolean {\n if (!changes.hasOwnProperty('model')) return false;\n const change = changes['model'];\n\n if (change.isFirstChange()) return true;\n return !looseIdentical(viewModel, change.currentValue);\n}\n\nconst BUILTIN_ACCESSORS = [\n CheckboxControlValueAccessor,\n RangeValueAccessor,\n NumberValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n];\n\nexport function isBuiltInAccessor(valueAccessor: ControlValueAccessor): boolean {\n return BUILTIN_ACCESSORS.some(a => valueAccessor.constructor === a);\n}\n\nexport function syncPendingControls(form: FormGroup, directives: NgControl[]): void {\n form._syncPendingControls();\n directives.forEach(dir => {\n const control = dir.control as FormControl;\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n}\n\n// TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented\nexport function selectValueAccessor(\n dir: NgControl, valueAccessors: ControlValueAccessor[]): ControlValueAccessor|null {\n if (!valueAccessors) return null;\n\n if (!Array.isArray(valueAccessors))\n _throwError(dir, 'Value accessor was not provided as an array for form control with');\n\n let defaultAccessor: ControlValueAccessor|undefined = undefined;\n let builtinAccessor: ControlValueAccessor|undefined = undefined;\n let customAccessor: ControlValueAccessor|undefined = undefined;\n\n valueAccessors.forEach((v: ControlValueAccessor) => {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n\n } else if (isBuiltInAccessor(v)) {\n if (builtinAccessor)\n _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n\n } else {\n if (customAccessor)\n _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n\n if (customAccessor) return customAccessor;\n if (builtinAccessor) return builtinAccessor;\n if (defaultAccessor) return defaultAccessor;\n\n _throwError(dir, 'No valid value accessor for form control with');\n return null;\n}\n\nexport function removeDir<T>(list: T[], el: T): void {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\n\n// TODO(kara): remove after deprecation period\nexport function _ngModelWarning(\n name: string, type: {_ngModelWarningSentOnce: boolean},\n instance: {_ngModelWarningSent: boolean}, warningConfig: string | null) {\n if (!isDevMode() || warningConfig === 'never') return;\n\n if (((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce) ||\n (warningConfig === 'always' && !instance._ngModelWarningSent)) {\n ReactiveErrors.ngModelWarning(name);\n type._ngModelWarningSentOnce = true;\n instance._ngModelWarningSent = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {OnDestroy, OnInit} from '@angular/core';\n\nimport {FormGroup} from '../model';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {composeAsyncValidators, composeValidators, controlPath} from './shared';\nimport {AsyncValidatorFn, ValidatorFn} from './validators';\n\n\n\n/**\n * @description\n * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.\n *\n * @publicApi\n */\nexport class AbstractFormGroupDirective extends ControlContainer implements OnInit, OnDestroy {\n /**\n * @description\n * The parent control for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _parent !: ControlContainer;\n\n /**\n * @description\n * An array of synchronous validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _validators !: any[];\n\n /**\n * @description\n * An array of async validators for the group\n *\n * @internal\n */\n // TODO(issue/24571): remove '!'.\n _asyncValidators !: any[];\n\n /**\n * @description\n * An internal callback method triggered on the instance after the inputs are set.\n * Registers the group with its parent group.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormGroup(this);\n }\n\n /**\n * @description\n * An internal callback method triggered before the instance is destroyed.\n * Removes the group from its parent group.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormGroup(this);\n }\n }\n\n /**\n * @description\n * The `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.formDirective !.getFormGroup(this); }\n\n /**\n * @description\n * The path to this group from the top-level directive.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): Form|null { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * The synchronous validators registered with this group.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * The async validators registered with this group.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n /** @internal */\n _checkParentType(): void {}\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Self} from '@angular/core';\n\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {ControlContainer} from './control_container';\nimport {NgControl} from './ng_control';\n\nexport class AbstractControlStatus {\n private _cd: AbstractControlDirective;\n\n constructor(cd: AbstractControlDirective) { this._cd = cd; }\n\n get ngClassUntouched(): boolean { return this._cd.control ? this._cd.control.untouched : false; }\n get ngClassTouched(): boolean { return this._cd.control ? this._cd.control.touched : false; }\n get ngClassPristine(): boolean { return this._cd.control ? this._cd.control.pristine : false; }\n get ngClassDirty(): boolean { return this._cd.control ? this._cd.control.dirty : false; }\n get ngClassValid(): boolean { return this._cd.control ? this._cd.control.valid : false; }\n get ngClassInvalid(): boolean { return this._cd.control ? this._cd.control.invalid : false; }\n get ngClassPending(): boolean { return this._cd.control ? this._cd.control.pending : false; }\n}\n\nexport const ngControlStatusHost = {\n '[class.ng-untouched]': 'ngClassUntouched',\n '[class.ng-touched]': 'ngClassTouched',\n '[class.ng-pristine]': 'ngClassPristine',\n '[class.ng-dirty]': 'ngClassDirty',\n '[class.ng-valid]': 'ngClassValid',\n '[class.ng-invalid]': 'ngClassInvalid',\n '[class.ng-pending]': 'ngClassPending',\n};\n\n/**\n * @description\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status.\n *\n * @usageNotes\n *\n * ### CSS classes applied\n *\n * The following classes are applied as the properties become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost})\nexport class NgControlStatus extends AbstractControlStatus {\n constructor(@Self() cd: NgControl) { super(cd); }\n}\n\n/**\n * @description\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n * \n * @see `NgControlStatus`\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector:\n '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n host: ngControlStatusHost\n})\nexport class NgControlStatusGroup extends AbstractControlStatus {\n constructor(@Self() cd: ControlContainer) { super(cd); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {EventEmitter} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {composeAsyncValidators, composeValidators} from './directives/shared';\nimport {AsyncValidatorFn, ValidationErrors, ValidatorFn} from './directives/validators';\nimport {toObservable} from './validators';\n\n/**\n * Reports that a FormControl is valid, meaning that no errors exist in the input value.\n *\n * @see `status`\n */\nexport const VALID = 'VALID';\n\n/**\n * Reports that a FormControl is invalid, meaning that an error exists in the input value.\n *\n * @see `status`\n */\nexport const INVALID = 'INVALID';\n\n/**\n * Reports that a FormControl is pending, meaning that that async validation is occurring and\n * errors are not yet available for the input value.\n *\n * @see `markAsPending`\n * @see `status`\n */\nexport const PENDING = 'PENDING';\n\n/**\n * Reports that a FormControl is disabled, meaning that the control is exempt from ancestor\n * calculations of validity or value.\n *\n * @see `markAsDisabled`\n * @see `status`\n */\nexport const DISABLED = 'DISABLED';\n\nfunction _find(control: AbstractControl, path: Array<string|number>| string, delimiter: string) {\n if (path == null) return null;\n\n if (!(path instanceof Array)) {\n path = (<string>path).split(delimiter);\n }\n if (path instanceof Array && (path.length === 0)) return null;\n\n return (<Array<string|number>>path).reduce((v: AbstractControl, name) => {\n if (v instanceof FormGroup) {\n return v.controls.hasOwnProperty(name as string) ? v.controls[name] : null;\n }\n\n if (v instanceof FormArray) {\n return v.at(<number>name) || null;\n }\n\n return null;\n }, control);\n}\n\nfunction coerceToValidator(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): ValidatorFn|\n null {\n const validator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).validators :\n validatorOrOpts) as ValidatorFn |\n ValidatorFn[] | null;\n\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\n\nfunction coerceToAsyncValidator(\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null, validatorOrOpts?: ValidatorFn |\n ValidatorFn[] | AbstractControlOptions | null): AsyncValidatorFn|null {\n const origAsyncValidator =\n (isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).asyncValidators :\n asyncValidator) as AsyncValidatorFn |\n AsyncValidatorFn | null;\n\n return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :\n origAsyncValidator || null;\n}\n\nexport type FormHooks = 'change' | 'blur' | 'submit';\n\n/**\n * Interface for options provided to an `AbstractControl`.\n *\n * @publicApi\n */\nexport interface AbstractControlOptions {\n /**\n * @description\n * The list of validators applied to a control.\n */\n validators?: ValidatorFn|ValidatorFn[]|null;\n /**\n * @description\n * The list of async validators applied to control.\n */\n asyncValidators?: AsyncValidatorFn|AsyncValidatorFn[]|null;\n /**\n * @description\n * The event name for control to update upon.\n */\n updateOn?: 'change'|'blur'|'submit';\n}\n\n\nfunction isOptionsObj(\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): boolean {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&\n typeof validatorOrOpts === 'object';\n}\n\n\n/**\n * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * @see [Forms Guide](/guide/forms)\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n * @see [Dynamic Forms Guide](/guide/dynamic-form)\n *\n * @publicApi\n */\nexport abstract class AbstractControl {\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingDirty !: boolean;\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _pendingTouched !: boolean;\n\n /** @internal */\n _onCollectionChange = () => {};\n\n /** @internal */\n // TODO(issue/24571): remove '!'.\n _updateOn !: FormHooks;\n\n // TODO(issue/24571): remove '!'.\n private _parent !: FormGroup | FormArray;\n private _asyncValidationSubscription: any;\n\n /**\n * The current value of the control.\n *\n * * For a `FormControl`, the current value.\n * * For a `FormGroup`, the values of enabled controls as an object\n * with a key-value pair for each member of the group.\n * * For a `FormArray`, the values of enabled controls as an array.\n *\n */\n public readonly value: any;\n\n /**\n * Initialize the AbstractControl instance.\n *\n * @param validator The function that determines the synchronous validity of this control.\n * @param asyncValidator The function that determines the asynchronous validity of this\n * control.\n */\n constructor(public validator: ValidatorFn|null, public asyncValidator: AsyncValidatorFn|null) {}\n\n /**\n * The parent control.\n */\n get parent(): FormGroup|FormArray { return this._parent; }\n\n /**\n * The validation status of the control. There are four possible\n * validation status values:\n *\n * * **VALID**: This control has passed all validation checks.\n * * **INVALID**: This control has failed at least one validation check.\n * * **PENDING**: This control is in the midst of conducting a validation check.\n * * **DISABLED**: This control is exempt from validation checks.\n *\n * These status values are mutually exclusive, so a control cannot be\n * both valid AND invalid or invalid AND disabled.\n */\n // TODO(issue/24571): remove '!'.\n public readonly status !: string;\n\n /**\n * A control is `valid` when its `status` is `VALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control has passed all of its validation tests,\n * false otherwise.\n */\n get valid(): boolean { return this.status === VALID; }\n\n /**\n * A control is `invalid` when its `status` is `INVALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control has failed one or more of its validation checks,\n * false otherwise.\n */\n get invalid(): boolean { return this.status === INVALID; }\n\n /**\n * A control is `pending` when its `status` is `PENDING`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control is in the process of conducting a validation check,\n * false otherwise.\n */\n get pending(): boolean { return this.status == PENDING; }\n\n /**\n * A control is `disabled` when its `status` is `DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control is disabled, false otherwise.\n */\n get disabled(): boolean { return this.status === DISABLED; }\n\n /**\n * A control is `enabled` as long as its `status` is not `DISABLED`.\n *\n * @returns True if the control has any status other than 'DISABLED',\n * false if the status is 'DISABLED'.\n *\n * @see {@link AbstractControl.status}\n *\n */\n get enabled(): boolean { return this.status !== DISABLED; }\n\n /**\n * An object containing any errors generated by failing validation,\n * or null if there are no errors.\n */\n // TODO(issue/24571): remove '!'.\n public readonly errors !: ValidationErrors | null;\n\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * @returns True if the user has not yet changed the value in the UI; compare `dirty`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n public readonly pristine: boolean = true;\n\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * @returns True if the user has changed the value of this control in the UI; compare `pristine`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n get dirty(): boolean { return !this.pristine; }\n\n /**\n * True if the control is marked as `touched`.\n *\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n */\n public readonly touched: boolean = false;\n\n /**\n * True if the control has not been marked as touched\n *\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n */\n get untouched(): boolean { return !this.touched; }\n\n /**\n * A multicasting observable that emits an event every time the value of the control changes, in\n * the UI or programmatically.\n */\n // TODO(issue/24571): remove '!'.\n public readonly valueChanges !: Observable<any>;\n\n /**\n * A multicasting observable that emits an event every time the validation `status` of the control\n * recalculates.\n *\n * @see {@link AbstractControl.status}\n *\n */\n // TODO(issue/24571): remove '!'.\n public readonly statusChanges !: Observable<any>;\n\n /**\n * Reports the update strategy of the `AbstractControl` (meaning\n * the event on which the control updates itself).\n * Possible values: `'change'` | `'blur'` | `'submit'`\n * Default value: `'change'`\n */\n get updateOn(): FormHooks {\n return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');\n }\n\n /**\n * Sets the synchronous validators that are active on this control. Calling\n * this overwrites any existing sync validators.\n */\n setValidators(newValidator: ValidatorFn|ValidatorFn[]|null): void {\n this.validator = coerceToValidator(newValidator);\n }\n\n /**\n * Sets the async validators that are active on this control. Calling this\n * overwrites any existing async validators.\n */\n setAsyncValidators(newValidator: AsyncValidatorFn|AsyncValidatorFn[]|null): void {\n this.asyncValidator = coerceToAsyncValidator(newValidator);\n }\n\n /**\n * Empties out the sync validator list.\n */\n clearValidators(): void { this.validator = null; }\n\n /**\n * Empties out the async validator list.\n */\n clearAsyncValidators(): void { this.asyncValidator = null; }\n\n /**\n * Marks the control as `touched`. A control is touched by focus and\n * blur events that do not change the value.\n *\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = true;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsTouched(opts);\n }\n }\n\n /**\n * Marks the control as `untouched`.\n *\n * If the control has any children, also marks all children as `untouched`\n * and recalculates the `touched` status of all parent controls.\n *\n * @see `markAsTouched()`\n * @see `markAsDirty()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after the marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsUntouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = false;\n this._pendingTouched = false;\n\n this._forEachChild(\n (control: AbstractControl) => { control.markAsUntouched({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /**\n * Marks the control as `dirty`. A control becomes dirty when\n * the control's value is changed through the UI; compare `markAsTouched`.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsPristine()`\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n */\n markAsDirty(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = false;\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsDirty(opts);\n }\n }\n\n /**\n * Marks the control as `pristine`.\n *\n * If the control has any children, marks all children as `pristine`,\n * and recalculates the `pristine` status of all parent\n * controls.\n *\n * @see `markAsTouched()`\n * @see `markAsUntouched()`\n * @see `markAsDirty()`\n *\n * @param opts Configuration options that determine how the control emits events after\n * marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n */\n markAsPristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = true;\n this._pendingDirty = false;\n\n this._forEachChild((control: AbstractControl) => { control.markAsPristine({onlySelf: true}); });\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /**\n * Marks the control as `pending`.\n *\n * A control is pending while the control performs async validation.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates changes and\n * emits events after marking is applied.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), the `statusChanges`\n * observable emits an event with the latest status the control is marked pending.\n * When false, no events are emitted.\n *\n */\n markAsPending(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = PENDING;\n\n if (opts.emitEvent !== false) {\n (this.statusChanges as EventEmitter<any>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsPending(opts);\n }\n }\n\n /**\n * Disables the control. This means the control is exempt from validation checks and\n * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n *\n * If the control has children, all children are also disabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configuration options that determine how the control propagates\n * changes and emits events after the control is disabled.\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is disabled.\n * When false, no events are emitted.\n */\n disable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = DISABLED;\n (this as{errors: ValidationErrors | null}).errors = null;\n this._forEachChild(\n (control: AbstractControl) => { control.disable({...opts, onlySelf: true}); });\n this._updateValue();\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(true));\n }\n\n /**\n * Enables the control. This means the control is included in validation checks and\n * the aggregate value of its parent. Its status recalculates based on its value and\n * its validators.\n *\n * By default, if the control has children, all children are enabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configure options that control how the control propagates changes and\n * emits events when marked as untouched\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is enabled.\n * When false, no events are emitted.\n */\n enable(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n (this as{status: string}).status = VALID;\n this._forEachChild(\n (control: AbstractControl) => { control.enable({...opts, onlySelf: true}); });\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(false));\n }\n\n private _updateAncestors(opts: {onlySelf?: boolean, emitEvent?: boolean}) {\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n this._parent._updatePristine();\n this._parent._updateTouched();\n }\n }\n\n /**\n * @param parent Sets the parent of the control\n */\n setParent(parent: FormGroup|FormArray): void { this._parent = parent; }\n\n /**\n * Sets the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract setValue(value: any, options?: Object): void;\n\n /**\n * Patches the value of the control. Abstract method (implemented in sub-classes).\n */\n abstract patchValue(value: any, options?: Object): void;\n\n /**\n * Resets the control. Abstract method (implemented in sub-classes).\n */\n abstract reset(value?: any, options?: Object): void;\n\n /**\n * Recalculates the value and validation status of the control.\n *\n * By default, it also updates the value and validity of its ancestors.\n *\n * @param opts Configuration options determine how the control propagates changes and emits events\n * after updates and validity checks are applied.\n * * `onlySelf`: When true, only update this control. When false or not supplied,\n * update all direct ancestors. Default is false..\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is updated.\n * When false, no events are emitted.\n */\n updateValueAndValidity(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._setInitialStatus();\n this._updateValue();\n\n if (this.enabled) {\n this._cancelExistingSubscription();\n (this as{errors: ValidationErrors | null}).errors = this._runValidator();\n (this as{status: string}).status = this._calculateStatus();\n\n if (this.status === VALID || this.status === PENDING) {\n this._runAsyncValidator(opts.emitEvent);\n }\n }\n\n if (opts.emitEvent !== false) {\n (this.valueChanges as EventEmitter<any>).emit(this.value);\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n }\n }\n\n /** @internal */\n _updateTreeValidity(opts: {emitEvent?: boolean} = {emitEvent: true}) {\n this._forEachChild((ctrl: AbstractControl) => ctrl._updateTreeValidity(opts));\n this.updateValueAndValidity({onlySelf: true, emitEvent: opts.emitEvent});\n }\n\n private _setInitialStatus() {\n (this as{status: string}).status = this._allControlsDisabled() ? DISABLED : VALID;\n }\n\n private _runValidator(): ValidationErrors|null {\n return this.validator ? this.validator(this) : null;\n }\n\n private _runAsyncValidator(emitEvent?: boolean): void {\n if (this.asyncValidator) {\n (this as{status: string}).status = PENDING;\n const obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription =\n obs.subscribe((errors: ValidationErrors | null) => this.setErrors(errors, {emitEvent}));\n }\n }\n\n private _cancelExistingSubscription(): void {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n }\n }\n\n /**\n * Sets errors on a form control when running validations manually, rather than automatically.\n *\n * Calling `setErrors` also updates the validity of the parent control.\n *\n * @usageNotes\n * ### Manually set the errors for a control\n *\n * ```\n * const login = new FormControl('someLogin');\n * login.setErrors({\n * notUnique: true\n * });\n *\n * expect(login.valid).toEqual(false);\n * expect(login.errors).toEqual({ notUnique: true });\n *\n * login.setValue('someOtherLogin');\n *\n * expect(login.valid).toEqual(true);\n * ```\n */\n setErrors(errors: ValidationErrors|null, opts: {emitEvent?: boolean} = {}): void {\n (this as{errors: ValidationErrors | null}).errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false);\n }\n\n /**\n * Retrieves a child control given the control's name or path.\n *\n * @param path A dot-delimited string or array of string/number values that define the path to the\n * control.\n *\n * @usageNotes\n * ### Retrieve a nested control\n *\n * For example, to get a `name` control nested within a `person` sub-group:\n *\n * * `this.form.get('person.name');`\n *\n * -OR-\n *\n * * `this.form.get(['person', 'name']);`\n */\n get(path: Array<string|number>|string): AbstractControl|null { return _find(this, path, '.'); }\n\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode: string, path?: Array<string|number>|string): any {\n const control = path ? this.get(path) : this;\n return control && control.errors ? control.errors[errorCode] : null;\n }\n\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode: string, path?: Array<string|number>|string): boolean {\n return !!this.getError(errorCode, path);\n }\n\n /**\n * Retrieves the top-level ancestor of this control.\n */\n get root(): AbstractControl {\n let x: AbstractControl = this;\n\n while (x._parent) {\n x = x._parent;\n }\n\n return x;\n }\n\n /** @internal */\n _updateControlsErrors(emitEvent: boolean): void {\n (this as{status: string}).status = this._calculateStatus();\n\n if (emitEvent) {\n (this.statusChanges as EventEmitter<string>).emit(this.status);\n }\n\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent);\n }\n }\n\n /** @internal */\n _initObservables() {\n (this as{valueChanges: Observable<any>}).valueChanges = new EventEmitter();\n (this as{statusChanges: Observable<any>}).statusChanges = new EventEmitter();\n }\n\n\n private _calculateStatus(): string {\n if (this._allControlsDisabled()) return DISABLED;\n if (this.errors) return INVALID;\n if (this._anyControlsHaveStatus(PENDING)) return PENDING;\n if (this._anyControlsHaveStatus(INVALID)) return INVALID;\n return VALID;\n }\n\n /** @internal */\n abstract _updateValue(): void;\n\n /** @internal */\n abstract _forEachChild(cb: Function): void;\n\n /** @internal */\n abstract _anyControls(condition: Function): boolean;\n\n /** @internal */\n abstract _allControlsDisabled(): boolean;\n\n /** @internal */\n abstract _syncPendingControls(): boolean;\n\n /** @internal */\n _anyControlsHaveStatus(status: string): boolean {\n return this._anyControls((control: AbstractControl) => control.status === status);\n }\n\n /** @internal */\n _anyControlsDirty(): boolean {\n return this._anyControls((control: AbstractControl) => control.dirty);\n }\n\n /** @internal */\n _anyControlsTouched(): boolean {\n return this._anyControls((control: AbstractControl) => control.touched);\n }\n\n /** @internal */\n _updatePristine(opts: {onlySelf?: boolean} = {}): void {\n (this as{pristine: boolean}).pristine = !this._anyControlsDirty();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n\n /** @internal */\n _updateTouched(opts: {onlySelf?: boolean} = {}): void {\n (this as{touched: boolean}).touched = this._anyControlsTouched();\n\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n\n /** @internal */\n _onDisabledChange: Function[] = [];\n\n /** @internal */\n _isBoxedValue(formState: any): boolean {\n return typeof formState === 'object' && formState !== null &&\n Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n }\n\n /** @internal */\n _registerOnCollectionChange(fn: () => void): void { this._onCollectionChange = fn; }\n\n /** @internal */\n _setUpdateStrategy(opts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null): void {\n if (isOptionsObj(opts) && (opts as AbstractControlOptions).updateOn != null) {\n this._updateOn = (opts as AbstractControlOptions).updateOn !;\n }\n }\n}\n\n/**\n * Tracks the value and validation status of an individual form control.\n *\n * This is one of the three fundamental building blocks of Angular forms, along with\n * `FormGroup` and `FormArray`. It extends the `AbstractControl` class that\n * implements most of the base functionality for accessing the value, validation status,\n * user interactions and events.\n *\n * @see `AbstractControl`\n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see [Usage Notes](#usage-notes)\n *\n * @usageNotes\n *\n * ### Initializing Form Controls\n *\n * Instantiate a `FormControl`, with an initial value.\n *\n * ```ts\n * const control = new FormControl('some value');\n * console.log(control.value); // 'some value'\n *```\n *\n * The following example initializes the control with a form state object. The `value`\n * and `disabled` keys are required in this case.\n *\n * ```ts\n * const control = new FormControl({ value: 'n/a', disabled: true });\n * console.log(control.value); // 'n/a'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * The following example initializes the control with a sync validator.\n *\n * ```ts\n * const control = new FormControl('', Validators.required);\n * console.log(control.value); // ''\n * console.log(control.status); // 'INVALID'\n * ```\n *\n * The following example initializes the control using an options object.\n *\n * ```ts\n * const control = new FormControl('', {\n * validators: Validators.required,\n * asyncValidators: myAsyncValidator\n * });\n * ```\n *\n * ### Configure the control to update on a blur event\n *\n * Set the `updateOn` option to `'blur'` to update on the blur `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'blur' });\n * ```\n *\n * ### Configure the control to update on a submit event\n *\n * Set the `updateOn` option to `'submit'` to update on a submit `event`.\n *\n * ```ts\n * const control = new FormControl('', { updateOn: 'submit' });\n * ```\n *\n * ### Reset the control back to an initial value\n *\n * You reset to a specific form state by passing through a standalone\n * value or a form state object that contains both a value and a disabled state\n * (these are the only two properties that cannot be calculated).\n *\n * ```ts\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n *\n * control.reset('Drew');\n *\n * console.log(control.value); // 'Drew'\n * ```\n *\n * ### Reset the control back to an initial value and disabled\n *\n * ```\n * const control = new FormControl('Nancy');\n *\n * console.log(control.value); // 'Nancy'\n * console.log(control.status); // 'VALID'\n *\n * control.reset({ value: 'Drew', disabled: true });\n *\n * console.log(control.value); // 'Drew'\n * console.log(control.status); // 'DISABLED'\n * ```\n *\n * @publicApi\n */\nexport class FormControl extends AbstractControl {\n /** @internal */\n _onChange: Function[] = [];\n\n /** @internal */\n _pendingValue: any;\n\n /** @internal */\n _pendingChange: any;\n\n /**\n * Creates a new `FormControl` instance.\n *\n * @param formState Initializes the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n formState: any = null,\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._applyFormState(formState);\n this._setUpdateStrategy(validatorOrOpts);\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n this._initObservables();\n }\n\n /**\n * Sets a new value for the form control.\n *\n * @param value The new value for the control.\n * @param options Configuration options that determine how the control proopagates changes\n * and emits events when the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * * `emitModelToViewChange`: When true or not supplied (the default), each change triggers an\n * `onChange` event to\n * update the view.\n * * `emitViewToModelChange`: When true or not supplied (the default), each change triggers an\n * `ngModelChange`\n * event to update the model.\n *\n */\n setValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n (this as{value: any}).value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach(\n (changeFn) => changeFn(this.value, options.emitViewToModelChange !== false));\n }\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of a control.\n *\n * This function is functionally the same as {@link FormControl#setValue setValue} at this level.\n * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and\n * `FormArrays`, where it does behave differently.\n *\n * @see `setValue` for options\n */\n patchValue(value: any, options: {\n onlySelf?: boolean,\n emitEvent?: boolean,\n emitModelToViewChange?: boolean,\n emitViewToModelChange?: boolean\n } = {}): void {\n this.setValue(value, options);\n }\n\n /**\n * Resets the form control, marking it `pristine` and `untouched`, and setting\n * the value to null.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n *\n */\n reset(formState: any = null, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n this._pendingChange = false;\n }\n\n /**\n * @internal\n */\n _updateValue() {}\n\n /**\n * @internal\n */\n _anyControls(condition: Function): boolean { return false; }\n\n /**\n * @internal\n */\n _allControlsDisabled(): boolean { return this.disabled; }\n\n /**\n * Register a listener for change events.\n *\n * @param fn The method that is called when the value changes\n */\n registerOnChange(fn: Function): void { this._onChange.push(fn); }\n\n /**\n * @internal\n */\n _clearChangeFns(): void {\n this._onChange = [];\n this._onDisabledChange = [];\n this._onCollectionChange = () => {};\n }\n\n /**\n * Register a listener for disabled events.\n *\n * @param fn The method that is called when the disabled status changes.\n */\n registerOnDisabledChange(fn: (isDisabled: boolean) => void): void {\n this._onDisabledChange.push(fn);\n }\n\n /**\n * @internal\n */\n _forEachChild(cb: Function): void {}\n\n /** @internal */\n _syncPendingControls(): boolean {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty) this.markAsDirty();\n if (this._pendingTouched) this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, {onlySelf: true, emitModelToViewChange: false});\n return true;\n }\n }\n return false;\n }\n\n private _applyFormState(formState: any) {\n if (this._isBoxedValue(formState)) {\n (this as{value: any}).value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({onlySelf: true, emitEvent: false}) :\n this.enable({onlySelf: true, emitEvent: false});\n } else {\n (this as{value: any}).value = this._pendingValue = formState;\n }\n }\n}\n\n/**\n * Tracks the value and validity state of a group of `FormControl` instances.\n *\n * A `FormGroup` aggregates the values of each child `FormControl` into one object,\n * with each control name as the key. It calculates its status by reducing the status values\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormArray`.\n *\n * When instantiating a `FormGroup`, pass in a collection of child controls as the first\n * argument. The key for each child registers the name for the control.\n *\n * @usageNotes\n *\n * ### Create a form group with 2 controls\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('Nancy', Validators.minLength(2)),\n * last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value); // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status); // 'VALID'\n * ```\n *\n * ### Create a form group with a group-level validator\n *\n * You include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('', Validators.minLength(2)),\n * passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n * return g.get('password').value === g.get('passwordConfirm').value\n * ? null : {'mismatch': true};\n * }\n * ```\n *\n * Like `FormControl` instances, you choose to pass in\n * validators and async validators as part of an options object.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('')\n * passwordConfirm: new FormControl('')\n * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });\n * ```\n *\n * ### Set the updateOn property for all controls in a form group\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * group level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormGroup({\n * one: new FormControl()\n * }, { updateOn: 'blur' });\n * ```\n *\n * @publicApi\n */\nexport class FormGroup extends AbstractControl {\n /**\n * Creates a new `FormGroup` instance.\n *\n * @param controls A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: {[key: string]: AbstractControl},\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Registers a control with the group's list of controls.\n *\n * This method does not update the value or validity of the control.\n * Use {@link FormGroup#addControl addControl} instead.\n *\n * @param name The control name to register in the collection\n * @param control Provides the control for the given name\n */\n registerControl(name: string, control: AbstractControl): AbstractControl {\n if (this.controls[name]) return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n }\n\n /**\n * Add a control to this group.\n *\n * This method also updates the value and validity of the control.\n *\n * @param name The control name to add to the collection\n * @param control Provides the control for the given name\n */\n addControl(name: string, control: AbstractControl): void {\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Remove a control from this group.\n *\n * @param name The control name to remove from the collection\n */\n removeControl(name: string): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Replace an existing control.\n *\n * @param name The control name to replace in the collection\n * @param control Provides the control for the given name\n */\n setControl(name: string, control: AbstractControl): void {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete (this.controls[name]);\n if (control) this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Check whether there is an enabled control with the given name in the group.\n *\n * Reports false for disabled controls. If you'd like to check for existence in the group\n * only, use {@link AbstractControl#get get} instead.\n *\n * @param name The control name to check for existence in the collection\n *\n * @returns false for disabled controls, true otherwise.\n */\n contains(controlName: string): boolean {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n }\n\n /**\n * Sets the value of the `FormGroup`. It accepts an object that matches\n * the structure of the group, with control names as keys.\n *\n * @usageNotes\n * ### Set the complete value for the form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n *\n * console.log(form.value); // {first: null, last: null}\n *\n * form.setValue({first: 'Nancy', last: 'Drew'});\n * console.log(form.value); // {first: 'Nancy', last: 'Drew'}\n * ```\n *\n * @throws When strict checks fail, such as setting the value of a control\n * that doesn't exist or if you excluding the value of a control.\n *\n * @param value The new value for the control that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n */\n setValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n this._checkAllValuesPresent(value);\n Object.keys(value).forEach(name => {\n this._throwIfControlMissing(name);\n this.controls[name].setValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormGroup`. It accepts an object with control\n * names as keys, and does its best to match the values to the correct controls\n * in the group.\n *\n * It accepts both super-sets and sub-sets of the group without throwing an error.\n *\n * @usageNotes\n * ### Patch the value for a form group\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n * console.log(form.value); // {first: null, last: null}\n *\n * form.patchValue({first: 'Nancy'});\n * console.log(form.value); // {first: 'Nancy', last: null}\n * ```\n *\n * @param value The object that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes and\n * emits events after the value is patched.\n * * `onlySelf`: When true, each change only affects this control and not its parent. Default is\n * true.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: {[key: string]: any}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}):\n void {\n Object.keys(value).forEach(name => {\n if (this.controls[name]) {\n this.controls[name].patchValue(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormGroup`, marks all descendants are marked `pristine` and `untouched`, and\n * the value of all descendants to null.\n *\n * You reset to a specific form state by passing in a map of states\n * that matches the structure of your form, with control names as keys. The state\n * is a standalone value or a form state object with both a value and a disabled\n * status.\n *\n * @param formState Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events when the group is reset.\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * @usageNotes\n *\n * ### Reset the form group values\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * console.log(form.value); // {first: 'first name', last: 'last name'}\n *\n * form.reset({ first: 'name', last: 'last name' });\n *\n * console.log(form.value); // {first: 'name', last: 'last name'}\n * ```\n *\n * ### Reset the form group values and disabled status\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * form.reset({\n * first: {value: 'name', disabled: true},\n * last: 'last'\n * });\n *\n * console.log(this.form.value); // {first: 'name', last: 'last name'}\n * console.log(this.form.get('first').status); // 'DISABLED'\n * ```\n */\n reset(value: any = {}, options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n control.reset(value[name], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the `FormGroup`, including any disabled controls.\n *\n * Retrieves all values regardless of disabled status.\n * The `value` property is the best way to get the value of the group, because\n * it excludes disabled controls in the `FormGroup`.\n */\n getRawValue(): any {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n acc[name] = control instanceof FormControl ? control.value : (<any>control).getRawValue();\n return acc;\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this._reduceChildren(false, (updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(name: string): void {\n if (!Object.keys(this.controls).length) {\n throw new Error(`\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.controls[name]) {\n throw new Error(`Cannot find form control with name: ${name}.`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: (v: any, k: string) => void): void {\n Object.keys(this.controls).forEach(k => cb(this.controls[k], k));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n });\n }\n\n /** @internal */\n _updateValue(): void { (this as{value: any}).value = this._reduceValue(); }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n let res = false;\n this._forEachChild((control: AbstractControl, name: string) => {\n res = res || (this.contains(name) && condition(control));\n });\n return res;\n }\n\n /** @internal */\n _reduceValue() {\n return this._reduceChildren(\n {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n if (control.enabled || this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n }\n\n /** @internal */\n _reduceChildren(initValue: any, fn: Function) {\n let res = initValue;\n this._forEachChild(\n (control: AbstractControl, name: string) => { res = fn(res, control, name); });\n return res;\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const controlName of Object.keys(this.controls)) {\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, name: string) => {\n if (value[name] === undefined) {\n throw new Error(`Must supply a value for form control with name: '${name}'.`);\n }\n });\n }\n}\n\n/**\n * Tracks the value and validity state of an array of `FormControl`,\n * `FormGroup` or `FormArray` instances.\n *\n * A `FormArray` aggregates the values of each child `FormControl` into an array.\n * It calculates its status by reducing the status values of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with `FormControl` and `FormGroup`.\n *\n * @usageNotes\n *\n * ### Create an array of form controls\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy', Validators.minLength(2)),\n * new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value); // ['Nancy', 'Drew']\n * console.log(arr.status); // 'VALID'\n * ```\n *\n * ### Create a form array with array-level validators\n *\n * You include array-level validators and async validators. These come in handy\n * when you want to perform validation that considers the value of more than one child\n * control.\n *\n * The two types of validators are passed in separately as the second and third arg\n * respectively, or together as part of an options object.\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy'),\n * new FormControl('Drew')\n * ], {validators: myValidator, asyncValidators: myAsyncValidator});\n * ```\n *\n * ### Set the updateOn property for all controls in a form array\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * array level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl()\n * ], {updateOn: 'blur'});\n * ```\n *\n * ### Adding or removing controls from a form array\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that result in strange and unexpected behavior such\n * as broken change detection.\n *\n * @publicApi\n */\nexport class FormArray extends AbstractControl {\n /**\n * Creates a new `FormArray` instance.\n *\n * @param controls An array of child controls. Each child control is given an index\n * where it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(\n public controls: AbstractControl[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {\n super(\n coerceToValidator(validatorOrOpts),\n coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n /**\n * Get the `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to retrieve the control\n */\n at(index: number): AbstractControl { return this.controls[index]; }\n\n /**\n * Insert a new `AbstractControl` at the end of the array.\n *\n * @param control Form control to be inserted\n */\n push(control: AbstractControl): void {\n this.controls.push(control);\n this._registerControl(control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Insert a new `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to insert the control\n * @param control Form control to be inserted\n */\n insert(index: number, control: AbstractControl): void {\n this.controls.splice(index, 0, control);\n\n this._registerControl(control);\n this.updateValueAndValidity();\n }\n\n /**\n * Remove the control at the given `index` in the array.\n *\n * @param index Index in the array to remove the control\n */\n removeAt(index: number): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n this.updateValueAndValidity();\n }\n\n /**\n * Replace an existing control.\n *\n * @param index Index in the array to replace the control\n * @param control The `AbstractControl` control to replace the existing control\n */\n setControl(index: number, control: AbstractControl): void {\n if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});\n this.controls.splice(index, 1);\n\n if (control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n }\n\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n\n /**\n * Length of the control array.\n */\n get length(): number { return this.controls.length; }\n\n /**\n * Sets the value of the `FormArray`. It accepts an array that matches\n * the structure of the control.\n *\n * This method performs strict checks, and throws an error if you try\n * to set the value of a control that doesn't exist or if you exclude the\n * value of a control.\n *\n * @usageNotes\n * ### Set the values for the controls in the form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.setValue(['Nancy', 'Drew']);\n * console.log(arr.value); // ['Nancy', 'Drew']\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n setValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._checkAllValuesPresent(value);\n value.forEach((newValue: any, index: number) => {\n this._throwIfControlMissing(index);\n this.at(index).setValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Patches the value of the `FormArray`. It accepts an array that matches the\n * structure of the control, and does its best to match the values to the correct\n * controls in the group.\n *\n * It accepts both super-sets and sub-sets of the array without throwing an error.\n *\n * @usageNotes\n * ### Patch the values for controls in a form array\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.patchValue(['Nancy']);\n * console.log(arr.value); // ['Nancy', null]\n * ```\n *\n * @param value Array of latest values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n patchValue(value: any[], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n value.forEach((newValue: any, index: number) => {\n if (this.at(index)) {\n this.at(index).patchValue(newValue, {onlySelf: true, emitEvent: options.emitEvent});\n }\n });\n this.updateValueAndValidity(options);\n }\n\n /**\n * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the\n * value of all descendants to null or null maps.\n *\n * You reset to a specific form state by passing in an array of states\n * that matches the structure of the control. The state is a standalone value\n * or a form state object with both a value and a disabled status.\n *\n * @usageNotes\n * ### Reset the values in a form array\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * arr.reset(['name', 'last name']);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * ```\n *\n * ### Reset the values in a form array and the disabled status for the first control\n *\n * ```\n * this.arr.reset([\n * {value: 'name', disabled: true},\n * 'last'\n * ]);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * console.log(this.arr.get(0).status); // 'DISABLED'\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n reset(value: any = [], options: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n this._forEachChild((control: AbstractControl, index: number) => {\n control.reset(value[index], {onlySelf: true, emitEvent: options.emitEvent});\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n\n /**\n * The aggregate value of the array, including any disabled controls.\n *\n * Reports all values regardless of disabled status.\n * For enabled controls only, the `value` property is the best way to get the value of the array.\n */\n getRawValue(): any[] {\n return this.controls.map((control: AbstractControl) => {\n return control instanceof FormControl ? control.value : (<any>control).getRawValue();\n });\n }\n\n /** @internal */\n _syncPendingControls(): boolean {\n let subtreeUpdated = this.controls.reduce((updated: boolean, child: AbstractControl) => {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated) this.updateValueAndValidity({onlySelf: true});\n return subtreeUpdated;\n }\n\n /** @internal */\n _throwIfControlMissing(index: number): void {\n if (!this.controls.length) {\n throw new Error(`\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.at(index)) {\n throw new Error(`Cannot find form control at index ${index}`);\n }\n }\n\n /** @internal */\n _forEachChild(cb: Function): void {\n this.controls.forEach((control: AbstractControl, index: number) => { cb(control, index); });\n }\n\n /** @internal */\n _updateValue(): void {\n (this as{value: any}).value =\n this.controls.filter((control) => control.enabled || this.disabled)\n .map((control) => control.value);\n }\n\n /** @internal */\n _anyControls(condition: Function): boolean {\n return this.controls.some((control: AbstractControl) => control.enabled && condition(control));\n }\n\n /** @internal */\n _setUpControls(): void {\n this._forEachChild((control: AbstractControl) => this._registerControl(control));\n }\n\n /** @internal */\n _checkAllValuesPresent(value: any): void {\n this._forEachChild((control: AbstractControl, i: number) => {\n if (value[i] === undefined) {\n throw new Error(`Must supply a value for form control at index: ${i}.`);\n }\n });\n }\n\n /** @internal */\n _allControlsDisabled(): boolean {\n for (const control of this.controls) {\n if (control.enabled) return false;\n }\n return this.controls.length > 0 || this.disabled;\n }\n\n private _registerControl(control: AbstractControl) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AfterViewInit, Directive, EventEmitter, Inject, Input, Optional, Self, forwardRef} from '@angular/core';\n\nimport {AbstractControl, FormControl, FormGroup, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {NgControl} from './ng_control';\nimport {NgModel} from './ng_model';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from './shared';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgForm)\n};\n\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a top-level `FormGroup` instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags. You don't need to add a special selector.\n *\n * You optionally export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful. Many properties from the underlying\n * `FormGroup` instance are duplicated on the directive itself, so a reference to it\n * gives you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, use `NgModel` with a `name`\n * attribute. You may use `NgModelGroup` to create sub-groups within the form.\n *\n * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event emits the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * To import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * @usageNotes\n *\n * ### Migrating from deprecated ngForm selector\n *\n * Support for using `ngForm` element selector has been deprecated in Angular v6 and will be removed\n * in Angular v9.\n *\n * This has been deprecated to keep selectors consistent with other core Angular selectors,\n * as element selectors are typically written in kebab-case.\n *\n * Now deprecated:\n * ```html\n * <ngForm #myForm=\"ngForm\">\n * ```\n *\n * After:\n * ```html\n * <ng-form #myForm=\"ngForm\">\n * ```\n *\n * ### Listening for form submission\n *\n * The following example shows how to capture the form values from the \"ngSubmit\" event.\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Setting the update options\n *\n * The following example shows you how to change the \"updateOn\" option from its default using\n * ngFormOptions.\n *\n * ```html\n * <form [ngFormOptions]=\"{updateOn: 'blur'}\">\n * <input name=\"one\" ngModel> <!-- this ngModel will update on blur -->\n * </form>\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,ng-form,[ngForm]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n outputs: ['ngSubmit'],\n exportAs: 'ngForm'\n})\nexport class NgForm extends ControlContainer implements Form,\n AfterViewInit {\n /**\n * @description\n * Returns whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n private _directives: NgModel[] = [];\n\n /**\n * @description\n * The `FormGroup` instance created for this form.\n */\n form: FormGroup;\n\n /**\n * @description\n * Event emitter for the \"ngSubmit\" event\n */\n ngSubmit = new EventEmitter();\n\n /**\n * @description\n * Tracks options for the `NgForm` instance.\n *\n * **updateOn**: Sets the default `updateOn` value for all child `NgModels` below it\n * unless explicitly set by a child `NgModel` using `ngModelOptions`). Defaults to 'change'.\n * Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngFormOptions') options !: {updateOn?: FormHooks};\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this.form =\n new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n }\n\n /**\n * @description\n * Lifecycle method called after the view is initialized. For internal use only.\n */\n ngAfterViewInit() { this._setUpdateStrategy(); }\n\n /**\n * @description\n * The directive instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * The internal `FormGroup` instance.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it is always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Returns a map of the controls in this group.\n */\n get controls(): {[key: string]: AbstractControl} { return this.form.controls; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `NgModel` directive instance.\n */\n addControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n (dir as{control: FormControl}).control =\n <FormControl>container.registerControl(dir.name, dir.control);\n setUpControl(dir.control, dir);\n dir.control.updateValueAndValidity({emitEvent: false});\n this._directives.push(dir);\n });\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `NgModel` directive.\n *\n * @param dir The `NgModel` directive instance.\n */\n getControl(dir: NgModel): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `NgModel` instance from the internal list of directives\n *\n * @param dir The `NgModel` directive instance.\n */\n removeControl(dir: NgModel): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n removeDir<NgModel>(this._directives, dir);\n });\n }\n\n /**\n * @description\n * Adds a new `NgModelGroup` directive instance to the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n addFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n const group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({emitEvent: false});\n });\n }\n\n /**\n * @description\n * Removes the `NgModelGroup` directive instance from the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n removeFormGroup(dir: NgModelGroup): void {\n resolvedPromise.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n });\n }\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n getFormGroup(dir: NgModelGroup): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `NgControl` directive.\n *\n * @param dir The `NgControl` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: NgControl, value: any): void {\n resolvedPromise.then(() => {\n const ctrl = <FormControl>this.form.get(dir.path !);\n ctrl.setValue(value);\n });\n }\n\n /**\n * @description\n * Sets the value for this `FormGroup`.\n *\n * @param value The new value\n */\n setValue(value: {[key: string]: any}): void { this.control.setValue(value); }\n\n /**\n * @description\n * Method called when the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n private _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n }\n\n /** @internal */\n _findContainer(path: string[]): FormGroup {\n path.pop();\n return path.length ? <FormGroup>this.form.get(path) : this.form;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormErrorExamples as Examples} from './error_examples';\n\nexport class TemplateDrivenErrors {\n static modelParentException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup's partner directive \"formControlName\" instead. Example:\n\n ${Examples.formControlName}\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n ${Examples.ngModelWithFormGroup}`);\n }\n\n static formGroupNameException(): void {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static missingNameException() {\n throw new Error(\n `If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as 'standalone' in ngModelOptions.\n\n Example 1: <input [(ngModel)]=\"person.firstName\" name=\"first\">\n Example 2: <input [(ngModel)]=\"person.firstName\" [ngModelOptions]=\"{standalone: true}\">`);\n }\n\n static modelGroupParentException() {\n throw new Error(`\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n ${Examples.formGroupName}\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n ${Examples.ngModelGroup}`);\n }\n\n static ngFormWarning() {\n console.warn(`\n It looks like you're using 'ngForm'.\n\n Support for using the 'ngForm' element selector has been deprecated in Angular v6 and will be removed\n in Angular v9.\n\n Use 'ng-form' instead.\n\n Before:\n <ngForm #myForm=\"ngForm\">\n\n After:\n <ng-form #myForm=\"ngForm\">\n `);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Inject, InjectionToken, Optional} from '@angular/core';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\n/**\n * @description\n * `InjectionToken` to provide to turn off the warning when using 'ngForm' deprecated selector.\n */\nexport const NG_FORM_SELECTOR_WARNING = new InjectionToken('NgFormSelectorWarning');\n\n/**\n * This directive is solely used to display warnings when the deprecated `ngForm` selector is used.\n *\n * @deprecated in Angular v6 and will be removed in Angular v9.\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: 'ngForm'})\nexport class NgFormSelectorWarning {\n /**\n * Static property used to track whether the deprecation warning for this selector has been sent.\n * Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngFormWarning = false;\n\n constructor(@Optional() @Inject(NG_FORM_SELECTOR_WARNING) ngFormWarning: string|null) {\n if (((!ngFormWarning || ngFormWarning === 'once') && !NgFormSelectorWarning._ngFormWarning) ||\n ngFormWarning === 'always') {\n TemplateDrivenErrors.ngFormWarning();\n NgFormSelectorWarning._ngFormWarning = true;\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {NgForm} from './ng_form';\nimport {TemplateDrivenErrors} from './template_driven_errors';\n\nexport const modelGroupProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgModelGroup)\n};\n\n/**\n * @description\n * Creates and binds a `FormGroup` instance to a DOM element.\n *\n * This directive can only be used as a child of `NgForm` (within `<form>` tags).\n *\n * Use this directive to validate a sub-group of your form separately from the\n * rest of your form, or if some values in your domain model make more sense\n * to consume together in a nested object.\n *\n * Provide a name for the sub-group and it will become the key\n * for the sub-group in the form's full value. If you need direct access, export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * @usageNotes\n *\n * ### Consuming controls in a grouping\n *\n * The following example shows you how to combine controls together in a sub-group\n * of the form.\n *\n * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup'})\nexport class NgModelGroup extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `NgModelGroup` bound to the directive. The name corresponds\n * to a key in the parent `NgForm`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelGroup') name !: string;\n\n constructor(\n @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelGroupParentException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl, FormHooks} from '../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../validators';\n\nimport {AbstractFormGroupDirective} from './abstract_form_group_directive';\nimport {ControlContainer} from './control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\nimport {NgForm} from './ng_form';\nimport {NgModelGroup} from './ng_model_group';\nimport {composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor, setUpControl} from './shared';\nimport {TemplateDrivenErrors} from './template_driven_errors';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from './validators';\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => NgModel)\n};\n\n/**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have and old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel` have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\nconst resolvedPromise = Promise.resolve(null);\n\n/**\n * @description\n * Creates a `FormControl` instance from a domain model and binds it\n * to a form control element.\n *\n * The `FormControl` instance tracks the value, user interaction, and\n * validation status of the control and keeps the view synced with the model. If used\n * within a parent form, the directive also registers itself with the form as a child\n * control.\n *\n * This directive is used by itself or as part of a larger form. Use the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional `Input`. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\n * class sets the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-box syntax'), the value in the UI always syncs back to\n * the domain model in your class.\n *\n * To inspect the properties of the associated `FormControl` (like validity state), \n * export the directive into a local template variable using `ngModel` as the key (ex: `#myVar=\"ngModel\"`).\n * You then access the control using the directive's `control` property, \n * but most properties used (like `valid` and `dirty`) fall through to the control anyway for direct access. \n * See a full list of properties directly available in `AbstractControlDirective`.\n *\n * @see `RadioControlValueAccessor` \n * @see `SelectControlValueAccessor`\n * \n * @usageNotes\n * \n * ### Using ngModel on a standalone control\n *\n * The following examples show a simple standalone control using `ngModel`:\n *\n * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * In the context of a parent form, it's often unnecessary to include one-way or two-way binding, \n * as the parent form syncs the value for you. You access its properties by exporting it into a \n * local template variable using `ngForm` such as (`#f=\"ngForm\"`). Use the variable where \n * needed on form submission.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n * \n * ### Using ngModel within a form\n *\n * The following example shows controls using `ngModel` within a form:\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n * \n * ### Using a standalone ngModel within a group\n * \n * The following example shows you how to use a standalone ngModel control\n * within a form. This controls the display of the form, but doesn't contain form data.\n *\n * ```html\n * <form>\n * <input name=\"login\" ngModel placeholder=\"Login\">\n * <input type=\"checkbox\" ngModel [ngModelOptions]=\"{standalone: true}\"> Show more options?\n * </form>\n * <!-- form value: {login: ''} -->\n * ```\n * \n * ### Setting the ngModel name attribute through options\n * \n * The following example shows you an alternate way to set the name attribute. The name attribute is used\n * within a custom form component, and the name `@Input` property serves a different purpose.\n *\n * ```html\n * <form>\n * <my-person-control name=\"Nancy\" ngModel [ngModelOptions]=\"{name: 'user'}\">\n * </my-person-control>\n * </form>\n * <!-- form value: {user: ''} -->\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[ngModel]:not([formControlName]):not([formControl])',\n providers: [formControlBinding],\n exportAs: 'ngModel'\n})\nexport class NgModel extends NgControl implements OnChanges,\n OnDestroy {\n public readonly control: FormControl = new FormControl();\n /** @internal */\n _registered = false;\n\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the name bound to the directive. The parent form\n * uses this name as a key to retrieve this control's value.\n */\n // TODO(issue/24571): remove '!'.\n @Input() name !: string;\n\n /**\n * @description\n * Tracks whether the control is disabled.\n */\n // TODO(issue/24571): remove '!'.\n @Input('disabled') isDisabled !: boolean;\n\n /**\n * @description\n * Tracks the value bound to this directive.\n */\n @Input('ngModel') model: any;\n\n /**\n * @description\n * Tracks the configuration options for this `ngModel` instance.\n *\n * **name**: An alternative to setting the name attribute on the form control element. See\n * the [example](api/forms/NgModel#using-ngmodel-on-a-standalone-control) for using `NgModel`\n * as a standalone control.\n *\n * **standalone**: When set to true, the `ngModel` will not register itself with its parent form,\n * and acts as if it's not in the form. Defaults to false.\n *\n * **updateOn**: Defines the event upon which the form control value and validity update.\n * Defaults to 'change'. Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n // TODO(issue/24571): remove '!'.\n @Input('ngModelOptions')\n options !: {name?: string, standalone?: boolean, updateOn?: FormHooks};\n\n /**\n * @description\n * Event emitter for producing the `ngModelChange` event after\n * the view model updates.\n */\n @Output('ngModelChange') update = new EventEmitter();\n\n constructor(@Optional() @Host() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[]) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n this._checkForErrors();\n if (!this._registered) this._setUpControl();\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal\n * use only.\n */\n ngOnDestroy(): void { this.formDirective && this.formDirective.removeControl(this); }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] {\n return this._parent ? controlPath(this.name, this._parent) : [this.name];\n }\n\n /**\n * @description\n * The top-level directive for this control if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value emitted by `ngModelChange`.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _setUpControl(): void {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() :\n this.formDirective.addControl(this);\n this._registered = true;\n }\n\n private _setUpdateStrategy(): void {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n }\n\n private _isStandalone(): boolean {\n return !this._parent || !!(this.options && this.options.standalone);\n }\n\n private _setUpStandalone(): void {\n setUpControl(this.control, this);\n this.control.updateValueAndValidity({emitEvent: false});\n }\n\n private _checkForErrors(): void {\n if (!this._isStandalone()) {\n this._checkParentType();\n }\n this._checkName();\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof NgModelGroup) &&\n this._parent instanceof AbstractFormGroupDirective) {\n TemplateDrivenErrors.formGroupNameException();\n } else if (\n !(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelParentException();\n }\n }\n\n private _checkName(): void {\n if (this.options && this.options.name) this.name = this.options.name;\n\n if (!this._isStandalone() && !this.name) {\n TemplateDrivenErrors.missingNameException();\n }\n }\n\n private _updateValue(value: any): void {\n resolvedPromise.then(\n () => { this.control.setValue(value, {emitViewToModelChange: false}); });\n }\n\n private _updateDisabled(changes: SimpleChanges) {\n const disabledValue = changes['isDisabled'].currentValue;\n\n const isDisabled =\n disabledValue === '' || (disabledValue && disabledValue !== 'false');\n\n resolvedPromise.then(() => {\n if (isDisabled && !this.control.disabled) {\n this.control.disable();\n } else if (!isDisabled && this.control.disabled) {\n this.control.enable();\n }\n });\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, InjectionToken, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, isPropertyUpdated, selectValueAccessor, setUpControl} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\n\n/**\n * Token to provide to turn off the ngModel warning on formControl and formControlName.\n */\nexport const NG_MODEL_WITH_FORM_CONTROL_WARNING =\n new InjectionToken('NgModelWithFormControlWarning');\n\nexport const formControlBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlDirective)\n};\n\n/**\n * @description\n * * Syncs a standalone `FormControl` instance to a form control element.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Registering a single form control\n * \n * The following examples shows how to register a standalone control and set its value.\n *\n * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <input [formControl]=\"control\" [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <input [formControl]=\"control\">\n * ```\n *\n * ```ts\n * this.control.setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControl]', providers: [formControlBinding], exportAs: 'ngForm'})\n\nexport class FormControlDirective extends NgControl implements OnChanges {\n /**\n * @description\n * Internal reference to the view model value.\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControl') form !: FormControl;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlDirective. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular `FormControlDirective` instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(@Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|null) {\n super();\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._isControlChanged(changes)) {\n setUpControl(this.form, this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this.form.updateValueAndValidity({emitEvent: false});\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning(\n 'formControl', FormControlDirective, this, this._ngModelWarningConfig);\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n\n /**\n * @description\n * The `FormControl` bound to this directive.\n */\n get control(): FormControl { return this.form; }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n private _isControlChanged(changes: {[key: string]: any}): boolean {\n return changes.hasOwnProperty('form');\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Inject, Input, OnChanges, Optional, Output, Self, SimpleChanges, forwardRef} from '@angular/core';\nimport {FormArray, FormControl, FormGroup} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators} from '../../validators';\nimport {ControlContainer} from '../control_container';\nimport {Form} from '../form_interface';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {cleanUpControl, composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls} from '../shared';\n\nimport {FormControlName} from './form_control_name';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const formDirectiveProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupDirective)\n};\n\n/**\n * @description\n *\n * Binds an existing `FormGroup` to a DOM element.\n *\n * This directive accepts an existing `FormGroup` instance. It will then use this\n * `FormGroup` instance to match any child `FormControl`, `FormGroup`,\n * and `FormArray` instances to child `FormControlName`, `FormGroupName`,\n * and `FormArrayName` directives.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * ### Register Form Group\n *\n * The following example registers a `FormGroup` with first name and last name controls,\n * and listens for the *ngSubmit* event when the button is clicked.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector: '[formGroup]',\n providers: [formDirectiveProvider],\n host: {'(submit)': 'onSubmit($event)', '(reset)': 'onReset()'},\n exportAs: 'ngForm'\n})\nexport class FormGroupDirective extends ControlContainer implements Form,\n OnChanges {\n /**\n * @description\n * Reports whether the form submission has been triggered.\n */\n public readonly submitted: boolean = false;\n\n // TODO(issue/24571): remove '!'.\n private _oldForm !: FormGroup;\n\n /**\n * @description\n * Tracks the list of added `FormControlName` instances\n */\n directives: FormControlName[] = [];\n\n /**\n * @description\n * Tracks the `FormGroup` bound to this directive.\n */\n @Input('formGroup') form: FormGroup = null !;\n\n /**\n * @description\n * Emits an event when the form submission has been triggered.\n */\n @Output() ngSubmit = new EventEmitter();\n\n constructor(\n @Optional() @Self() @Inject(NG_VALIDATORS) private _validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: any[]) {\n super();\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n }\n }\n\n /**\n * @description\n * Returns this directive's instance.\n */\n get formDirective(): Form { return this; }\n\n /**\n * @description\n * Returns the `FormGroup` bound to this directive.\n */\n get control(): FormGroup { return this.form; }\n\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it always an empty array.\n */\n get path(): string[] { return []; }\n\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `FormControlName` directive instance.\n */\n addControl(dir: FormControlName): FormControl {\n const ctrl: any = this.form.get(dir.path);\n setUpControl(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n this.directives.push(dir);\n return ctrl;\n }\n\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `FormControlName` directive\n *\n * @param dir The `FormControlName` directive instance.\n */\n getControl(dir: FormControlName): FormControl { return <FormControl>this.form.get(dir.path); }\n\n /**\n * @description\n * Removes the `FormControlName` instance from the internal list of directives\n *\n * @param dir The `FormControlName` directive instance.\n */\n removeControl(dir: FormControlName): void { removeDir<FormControlName>(this.directives, dir); }\n\n /**\n * Adds a new `FormGroupName` directive instance to the form.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n addFormGroup(dir: FormGroupName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form group.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n removeFormGroup(dir: FormGroupName): void {}\n\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance\n *\n * @param dir The `FormGroupName` directive instance.\n */\n getFormGroup(dir: FormGroupName): FormGroup { return <FormGroup>this.form.get(dir.path); }\n\n /**\n * Adds a new `FormArrayName` directive instance to the form.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n addFormArray(dir: FormArrayName): void {\n const ctrl: any = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({emitEvent: false});\n }\n\n /**\n * No-op method to remove the form array.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n removeFormArray(dir: FormArrayName): void {}\n\n /**\n * @description\n * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n getFormArray(dir: FormArrayName): FormArray { return <FormArray>this.form.get(dir.path); }\n\n /**\n * Sets the new value for the provided `FormControlName` directive.\n *\n * @param dir The `FormControlName` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir: FormControlName, value: any): void {\n const ctrl  = <FormControl>this.form.get(dir.path);\n ctrl.setValue(value);\n }\n\n /**\n * @description\n * Method called with the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event: Event): boolean {\n (this as{submitted: boolean}).submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n return false;\n }\n\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset(): void { this.resetForm(); }\n\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value: any = undefined): void {\n this.form.reset(value);\n (this as{submitted: boolean}).submitted = false;\n }\n\n\n /** @internal */\n _updateDomValue() {\n this.directives.forEach(dir => {\n const newCtrl: any = this.form.get(dir.path);\n if (dir.control !== newCtrl) {\n cleanUpControl(dir.control, dir);\n if (newCtrl) setUpControl(newCtrl, dir);\n (dir as{control: FormControl}).control = newCtrl;\n }\n });\n\n this.form._updateTreeValidity({emitEvent: false});\n }\n\n private _updateRegistrations() {\n this.form._registerOnCollectionChange(() => this._updateDomValue());\n if (this._oldForm) this._oldForm._registerOnCollectionChange(() => {});\n this._oldForm = this.form;\n }\n\n private _updateValidators() {\n const sync = composeValidators(this._validators);\n this.form.validator = Validators.compose([this.form.validator !, sync !]);\n\n const async = composeAsyncValidators(this._asyncValidators);\n this.form.asyncValidator = Validators.composeAsync([this.form.asyncValidator !, async !]);\n }\n\n private _checkFormPresent() {\n if (!this.form) {\n ReactiveErrors.missingFormException();\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Host, Inject, Input, OnDestroy, OnInit, Optional, Self, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormArray} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {composeAsyncValidators, composeValidators, controlPath} from '../shared';\nimport {AsyncValidatorFn, ValidatorFn} from '../validators';\n\nimport {FormGroupDirective} from './form_group_directive';\n\nexport const formGroupNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormGroup` to a DOM element.\n *\n * This directive can only be used with a parent `FormGroupDirective`.\n *\n * It accepts the string name of the nested `FormGroup` to link, and\n * looks for a `FormGroup` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * Use nested form groups to validate a sub-group of a\n * form separately from the rest or to group the values of certain\n * controls into their own nested object.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n *\n * @usageNotes\n * \n * ### Access the group by name\n * \n * The following example uses the {@link AbstractControl#get get} method to access the \n * associated `FormGroup`\n *\n * ```ts\n * this.form.get('name');\n * ```\n * \n * ### Access individual controls in the group\n * \n * The following example uses the {@link AbstractControl#get get} method to access \n * individual controls within the group using dot syntax.\n *\n * ```ts\n * this.form.get('name.first');\n * ```\n *\n * ### Register a nested `FormGroup`.\n * \n * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,\n * and provides methods to retrieve the nested `FormGroup` and individual controls.\n *\n * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formGroupName]', providers: [formGroupNameProvider]})\nexport class FormGroupName extends AbstractFormGroupDirective implements OnInit, OnDestroy {\n /**\n * @description\n * Tracks the name of the `FormGroup` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formGroupName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /** @internal */\n _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.groupParentException();\n }\n }\n}\n\nexport const formArrayNameProvider: any = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormArrayName)\n};\n\n/**\n * @description\n *\n * Syncs a nested `FormArray` to a DOM element.\n *\n * This directive is designed to be used with a parent `FormGroupDirective` (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested `FormArray` you want to link, and\n * will look for a `FormArray` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `AbstractControl`\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formArrayName]', providers: [formArrayNameProvider]})\nexport class FormArrayName extends ControlContainer implements OnInit, OnDestroy {\n /** @internal */\n _parent: ControlContainer;\n\n /** @internal */\n _validators: any[];\n\n /** @internal */\n _asyncValidators: any[];\n\n /**\n * @description\n * Tracks the name of the `FormArray` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formArrayName') name !: string;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs are initialized. For internal use only.\n *\n * @throws If the directive does not have a valid parent.\n */\n ngOnInit(): void {\n this._checkParentType();\n this.formDirective !.addFormArray(this);\n }\n\n /**\n * @description\n * A lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeFormArray(this);\n }\n }\n\n /**\n * @description\n * The `FormArray` bound to this directive.\n */\n get control(): FormArray { return this.formDirective !.getFormArray(this); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): FormGroupDirective|null {\n return this._parent ? <FormGroupDirective>this._parent.formDirective : null;\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent); }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators registered with this\n * directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._validators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this directive.\n */\n get asyncValidator(): AsyncValidatorFn|null {\n return composeAsyncValidators(this._asyncValidators);\n }\n\n private _checkParentType(): void {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.arrayParentException();\n }\n }\n}\n\nfunction _hasInvalidParent(parent: ControlContainer): boolean {\n return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n !(parent instanceof FormArrayName);\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, EventEmitter, Host, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, SkipSelf, forwardRef} from '@angular/core';\n\nimport {FormControl} from '../../model';\nimport {NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '../../validators';\nimport {AbstractFormGroupDirective} from '../abstract_form_group_directive';\nimport {ControlContainer} from '../control_container';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '../control_value_accessor';\nimport {NgControl} from '../ng_control';\nimport {ReactiveErrors} from '../reactive_errors';\nimport {_ngModelWarning, composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor} from '../shared';\nimport {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators';\n\nimport {NG_MODEL_WITH_FORM_CONTROL_WARNING} from './form_control_directive';\nimport {FormGroupDirective} from './form_group_directive';\nimport {FormArrayName, FormGroupName} from './form_group_name';\n\nexport const controlNameBinding: any = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlName)\n};\n\n/**\n * @description\n * Syncs a `FormControl` in an existing `FormGroup` to a form control\n * element by name.\n * \n * @see [Reactive Forms Guide](guide/reactive-forms)\n * @see `FormControl`\n * @see `AbstractControl`\n *\n * @usageNotes\n * \n * ### Register `FormControl` within a group\n *\n * The following example shows how to register multiple form controls within a form group\n * and set their value.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: `RadioControlValueAccessor`\n * * Selects: `SelectControlValueAccessor`\n *\n * ### Use with ngModel\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and will be removed in Angular v7.\n *\n * Now deprecated:\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\" [(ngModel)]=\"value\">\n * </form>\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * This has been deprecated for a few reasons. First, developers have found this pattern\n * confusing. It seems like the actual `ngModel` directive is being used, but in fact it's\n * an input/output property named `ngModel` on the reactive form directive that simply\n * approximates (some of) its behavior. Specifically, it allows getting/setting the value\n * and intercepting value events. However, some of `ngModel`'s other features - like\n * delaying updates with`ngModelOptions` or exporting the directive - simply don't work,\n * which has understandably caused some confusion.\n *\n * In addition, this pattern mixes template-driven and reactive forms strategies, which\n * we generally don't recommend because it doesn't take advantage of the full benefits of\n * either strategy. Setting the value in the template violates the template-agnostic\n * principles behind reactive forms, whereas adding a `FormControl`/`FormGroup` layer in\n * the class removes the convenience of defining forms in the template.\n *\n * To update your code before v7, you'll want to decide whether to stick with reactive form\n * directives (and get/set values using reactive forms patterns) or switch over to\n * template-driven directives.\n *\n * After (choice 1 - use reactive forms):\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <input formControlName=\"first\">\n * </form>\n * ```\n *\n * ```ts\n * this.form.get('first').setValue('some value');\n * ```\n *\n * After (choice 2 - use template-driven forms):\n *\n * ```html\n * <input [(ngModel)]=\"value\">\n * ```\n *\n * ```ts\n * this.value = 'some value';\n * ```\n *\n * By default, when you use this pattern, you will see a deprecation warning once in dev\n * mode. You can choose to silence this warning by providing a config for\n * `ReactiveFormsModule` at import time:\n *\n * ```ts\n * imports: [\n * ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});\n * ]\n * ```\n *\n * Alternatively, you can choose to surface a separate warning for each instance of this\n * pattern with a config value of `\"always\"`. This may help to track down where in the code\n * the pattern is being used as the code is being updated.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({selector: '[formControlName]', providers: [controlNameBinding]})\nexport class FormControlName extends NgControl implements OnChanges, OnDestroy {\n private _added = false;\n /**\n * @description\n * Internal reference to the view model value.\n * @internal\n */\n viewModel: any;\n\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n // TODO(issue/24571): remove '!'.\n readonly control !: FormControl;\n\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n // TODO(issue/24571): remove '!'.\n @Input('formControlName') name !: string;\n\n /**\n * @description\n * Triggers a warning that this input should not be used with reactive forms.\n */\n @Input('disabled')\n set isDisabled(isDisabled: boolean) { ReactiveErrors.disabledAttrWarning(); }\n\n // TODO(kara): remove next 4 properties once deprecation period is over\n\n /** @deprecated as of v6 */\n @Input('ngModel') model: any;\n\n /** @deprecated as of v6 */\n @Output('ngModelChange') update = new EventEmitter();\n\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlName. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular FormControlName instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n\n constructor(\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: Array<Validator|ValidatorFn>,\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators:\n Array<AsyncValidator|AsyncValidatorFn>,\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR) valueAccessors: ControlValueAccessor[],\n @Optional() @Inject(NG_MODEL_WITH_FORM_CONTROL_WARNING) private _ngModelWarningConfig: string|\n null) {\n super();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges) {\n if (!this._added) this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n _ngModelWarning('formControlName', FormControlName, this, this._ngModelWarningConfig);\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n }\n\n /**\n * @description\n * Lifecycle method called before the directive's instance is destroyed. For internal use only.\n */\n ngOnDestroy(): void {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n }\n\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue: any): void {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path(): string[] { return controlPath(this.name, this._parent !); }\n\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective(): any { return this._parent ? this._parent.formDirective : null; }\n\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators\n * registered with this directive.\n */\n get validator(): ValidatorFn|null { return composeValidators(this._rawValidators); }\n\n /**\n * @description\n * Async validator function composed of all the async validators registered with this\n * directive.\n */\n get asyncValidator(): AsyncValidatorFn {\n return composeAsyncValidators(this._rawAsyncValidators) !;\n }\n\n private _checkParentType(): void {\n if (!(this._parent instanceof FormGroupName) &&\n this._parent instanceof AbstractFormGroupDirective) {\n ReactiveErrors.ngModelGroupException();\n } else if (\n !(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&\n !(this._parent instanceof FormArrayName)) {\n ReactiveErrors.controlParentException();\n }\n }\n\n private _setUpControl() {\n this._checkParentType();\n (this as{control: FormControl}).control = this.formDirective.addControl(this);\n if (this.control.disabled && this.valueAccessor !.setDisabledState) {\n this.valueAccessor !.setDisabledState !(true);\n }\n this._added = true;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, Input, OnChanges, SimpleChanges, StaticProvider, forwardRef} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {AbstractControl} from '../model';\nimport {NG_VALIDATORS, Validators} from '../validators';\n\n\n/**\n * @description\n * Defines the map of errors returned from failed validation checks.\n *\n * @publicApi\n */\nexport type ValidationErrors = {\n [key: string]: any\n};\n\n/**\n * @description\n * An interface implemented by classes that perform synchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom validator\n *\n * The following example implements the `Validator` interface to create a\n * validator directive with a custom error key.\n *\n * ```typescript\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors|null {\n * return {'custom': true};\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface Validator {\n /**\n * @description\n * Method that performs synchronous validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A map of validation errors if validation fails,\n * otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null;\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange?(fn: () => void): void;\n}\n\n/**\n * @description\n * An interface implemented by classes that perform asynchronous validation.\n *\n * @usageNotes\n *\n * ### Provide a custom async validator directive\n *\n * The following example implements the `AsyncValidator` interface to create an\n * async validator directive with a custom error key.\n *\n * ```typescript\n * import { of as observableOf } from 'rxjs';\n *\n * @Directive({\n * selector: '[customAsyncValidator]',\n * providers: [{provide: NG_ASYNC_VALIDATORS, useExisting: CustomAsyncValidatorDirective, multi:\n * true}]\n * })\n * class CustomAsyncValidatorDirective implements AsyncValidator {\n * validate(control: AbstractControl): Observable<ValidationErrors|null> {\n * return observableOf({'custom': true});\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport interface AsyncValidator extends Validator {\n /**\n * @description\n * Method that performs async validation against the provided control.\n *\n * @param control The control to validate against.\n *\n * @returns A promise or observable that resolves a map of validation errors\n * if validation fails, otherwise null.\n */\n validate(control: AbstractControl):\n Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RequiredValidator),\n multi: true\n};\n\n/**\n * @description\n * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const CHECKBOX_REQUIRED_VALIDATOR: StaticProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CheckboxRequiredValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds the `required` validator to any controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required validator using template-driven forms\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\n@Directive({\n selector:\n ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n providers: [REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class RequiredValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _required !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the required attribute bound to this directive.\n */\n @Input()\n get required(): boolean|string { return this._required; }\n\n set required(value: boolean|string) {\n this._required = value != null && value !== false && `${value}` !== 'false';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether the control is empty.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.required(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n\n/**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding a required checkbox validator using template-driven forms\n *\n * The following example shows how to add a checkbox required validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector:\n 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n providers: [CHECKBOX_REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class CheckboxRequiredValidator extends RequiredValidator {\n /**\n * @description\n * Method that validates whether or not the checkbox has been checked.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.required ? Validators.requiredTrue(control) : null;\n }\n}\n\n/**\n * @description\n * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const EMAIL_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => EmailValidator),\n multi: true\n};\n\n/**\n * A directive that adds the `email` validator to controls marked with the\n * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n * \n * ### Adding an email validator\n *\n * The following example shows how to add an email validator to an input attached to an ngModel binding.\n * \n * ```\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\n@Directive({\n selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n providers: [EMAIL_VALIDATOR]\n})\nexport class EmailValidator implements Validator {\n // TODO(issue/24571): remove '!'.\n private _enabled !: boolean;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the email attribute bound to this directive.\n */\n @Input()\n set email(value: boolean|string) {\n this._enabled = value === '' || value === true || value === 'true';\n if (this._onChange) this._onChange();\n }\n\n /**\n * @description\n * Method that validates whether an email address is valid.\n * Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this._enabled ? Validators.email(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n}\n\n/**\n * @description\n * A function that receives a control and synchronously returns a map of\n * validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface ValidatorFn { (control: AbstractControl): ValidationErrors|null; }\n\n/**\n * @description\n * A function that receives a control and returns a Promise or observable\n * that emits validation errors if present, otherwise null.\n *\n * @publicApi\n */\nexport interface AsyncValidatorFn {\n (control: AbstractControl): Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n}\n\n/**\n * @description\n * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MIN_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MinLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds minimum length validation to controls marked with the\n * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` mult-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a minimum length validator\n *\n * The following example shows how to add a minimum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel minlength=\"4\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n providers: [MIN_LENGTH_VALIDATOR],\n host: {'[attr.minlength]': 'minlength ? minlength : null'}\n})\nexport class MinLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the minimum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() minlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('minlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value meets a minimum length\n * requirement. Returns the validation result if enabled, otherwise null.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.minlength == null ? null : this._validator(control);\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.minLength(parseInt(this.minlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const MAX_LENGTH_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaxLengthValidator),\n multi: true\n};\n\n/**\n * A directive that adds max length validation to controls marked with the\n * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a maximum length validator\n *\n * The following example shows how to add a maximum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel maxlength=\"25\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n providers: [MAX_LENGTH_VALIDATOR],\n host: {'[attr.maxlength]': 'maxlength ? maxlength : null'}\n})\nexport class MaxLengthValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the the maximum length bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() maxlength !: string;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('maxlength' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value exceeds\n * the maximum length requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null {\n return this.maxlength != null ? this._validator(control) : null;\n }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void {\n this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n }\n}\n\n/**\n * @description\n * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nexport const PATTERN_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => PatternValidator),\n multi: true\n};\n\n\n/**\n * @description\n * A directive that adds regex pattern validation to controls marked with the\n * `pattern` attribute. The regex must match the entire control value.\n * The directive is provided with the `NG_VALIDATORS` multi-provider list.\n * \n * @see [Form Validation](guide/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a pattern validator\n *\n * The following example shows how to add a pattern validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel pattern=\"[a-zA-Z ]*\">\n * ```\n * \n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\n@Directive({\n selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n providers: [PATTERN_VALIDATOR],\n host: {'[attr.pattern]': 'pattern ? pattern : null'}\n})\nexport class PatternValidator implements Validator,\n OnChanges {\n // TODO(issue/24571): remove '!'.\n private _validator !: ValidatorFn;\n // TODO(issue/24571): remove '!'.\n private _onChange !: () => void;\n\n /**\n * @description\n * Tracks changes to the pattern bound to this directive.\n */\n // TODO(issue/24571): remove '!'.\n @Input() pattern !: string | RegExp;\n\n /**\n * @description\n * A lifecycle method called when the directive's inputs change. For internal use\n * only.\n *\n * @param changes A object of key/value pairs for the set of changed inputs.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if ('pattern' in changes) {\n this._createValidator();\n if (this._onChange) this._onChange();\n }\n }\n\n /**\n * @description\n * Method that validates whether the value matches the\n * the pattern requirement.\n */\n validate(control: AbstractControl): ValidationErrors|null { return this._validator(control); }\n\n /**\n * @description\n * Registers a callback function to call when the validator inputs change.\n *\n * @param fn The callback function\n */\n registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }\n\n private _createValidator(): void { this._validator = Validators.pattern(this.pattern); }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\n\nimport {AsyncValidatorFn, ValidatorFn} from './directives/validators';\nimport {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup, FormHooks} from './model';\n\nfunction isAbstractControlOptions(options: AbstractControlOptions | {[key: string]: any}):\n options is AbstractControlOptions {\n return (<AbstractControlOptions>options).asyncValidators !== undefined ||\n (<AbstractControlOptions>options).validators !== undefined ||\n (<AbstractControlOptions>options).updateOn !== undefined;\n}\n\n/**\n * @description\n * Creates an `AbstractControl` from a user-specified configuration.\n *\n * The `FormBuilder` provides syntactic sugar that shortens creating instances of a `FormControl`,\n * `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to build complex\n * forms.\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@Injectable()\nexport class FormBuilder {\n /**\n * @description\n * Construct a new `FormGroup` instance.\n *\n * @param controlsConfig A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param options Configuration options object for the `FormGroup`. The object can\n * have two shapes:\n *\n * 1) `AbstractControlOptions` object (preferred), which consists of:\n * * `validators`: A synchronous validator function, or an array of validator functions\n * * `asyncValidators`: A single async validator or array of async validator functions\n * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur' |\n * submit')\n *\n * 2) Legacy configuration object, which consists of:\n * * `validator`: A synchronous validator function, or an array of validator functions\n * * `asyncValidator`: A single async validator or array of async validator functions\n *\n */\n group(\n controlsConfig: {[key: string]: any},\n options: AbstractControlOptions|{[key: string]: any}|null = null): FormGroup {\n const controls = this._reduceControls(controlsConfig);\n\n let validators: ValidatorFn|ValidatorFn[]|null = null;\n let asyncValidators: AsyncValidatorFn|AsyncValidatorFn[]|null = null;\n let updateOn: FormHooks|undefined = undefined;\n\n if (options != null) {\n if (isAbstractControlOptions(options)) {\n // `options` are `AbstractControlOptions`\n validators = options.validators != null ? options.validators : null;\n asyncValidators = options.asyncValidators != null ? options.asyncValidators : null;\n updateOn = options.updateOn != null ? options.updateOn : undefined;\n } else {\n // `options` are legacy form group options\n validators = options['validator'] != null ? options['validator'] : null;\n asyncValidators = options['asyncValidator'] != null ? options['asyncValidator'] : null;\n }\n }\n\n return new FormGroup(controls, {asyncValidators, updateOn, validators});\n }\n\n /**\n * @description\n * Construct a new `FormControl` with the given state, validators and options.\n *\n * @param formState Initializes the control with an initial state value, or\n * with an object that contains both a value and a disabled status.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n *\n * @usageNotes\n *\n * ### Initialize a control as disabled\n *\n * The following example returns a control with an initial value in a disabled state.\n *\n * <code-example path=\"forms/ts/formBuilder/form_builder_example.ts\"\n * linenums=\"false\" region=\"disabled-control\">\n * </code-example>\n */\n control(\n formState: any, validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormControl {\n return new FormControl(formState, validatorOrOpts, asyncValidator);\n }\n\n /**\n * Constructs a new `FormArray` from the given array of configurations,\n * validators and options.\n *\n * @param controlsConfig An array of child controls or control configs. Each\n * child control is given an index when it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n */\n array(\n controlsConfig: any[],\n validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,\n asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null): FormArray {\n const controls = controlsConfig.map(c => this._createControl(c));\n return new FormArray(controls, validatorOrOpts, asyncValidator);\n }\n\n /** @internal */\n _reduceControls(controlsConfig: {[k: string]: any}): {[key: string]: AbstractControl} {\n const controls: {[key: string]: AbstractControl} = {};\n Object.keys(controlsConfig).forEach(controlName => {\n controls[controlName] = this._createControl(controlsConfig[controlName]);\n });\n return controls;\n }\n\n /** @internal */\n _createControl(controlConfig: any): AbstractControl {\n if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n controlConfig instanceof FormArray) {\n return controlConfig;\n\n } else if (Array.isArray(controlConfig)) {\n const value = controlConfig[0];\n const validator: ValidatorFn = controlConfig.length > 1 ? controlConfig[1] : null;\n const asyncValidator: AsyncValidatorFn = controlConfig.length > 2 ? controlConfig[2] : null;\n return this.control(value, validator, asyncValidator);\n\n } else {\n return this.control(controlConfig);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = new Version('7.2.8');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive} from '@angular/core';\n\n/**\n * @description\n *\n * Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```\n * <form ngNativeValidate></form>\n * ```\n *\n * @publicApi\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\n@Directive({\n selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n host: {'novalidate': ''},\n})\nexport class NgNoValidate {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule, Type} from '@angular/core';\n\nimport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nimport {DefaultValueAccessor} from './directives/default_value_accessor';\nimport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nimport {NgForm} from './directives/ng_form';\nimport {NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nimport {NgModel} from './directives/ng_model';\nimport {NgModelGroup} from './directives/ng_model_group';\nimport {NgNoValidate} from './directives/ng_no_validate_directive';\nimport {NumberValueAccessor} from './directives/number_value_accessor';\nimport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nimport {RangeValueAccessor} from './directives/range_value_accessor';\nimport {FormControlDirective} from './directives/reactive_directives/form_control_directive';\nimport {FormControlName} from './directives/reactive_directives/form_control_name';\nimport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nimport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nimport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nimport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\nimport {CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator} from './directives/validators';\n\nexport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nexport {ControlValueAccessor} from './directives/control_value_accessor';\nexport {DefaultValueAccessor} from './directives/default_value_accessor';\nexport {NgControl} from './directives/ng_control';\nexport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nexport {NgForm} from './directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING, NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nexport {NgModel} from './directives/ng_model';\nexport {NgModelGroup} from './directives/ng_model_group';\nexport {NumberValueAccessor} from './directives/number_value_accessor';\nexport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nexport {RangeValueAccessor} from './directives/range_value_accessor';\nexport {FormControlDirective, NG_MODEL_WITH_FORM_CONTROL_WARNING} from './directives/reactive_directives/form_control_directive';\nexport {FormControlName} from './directives/reactive_directives/form_control_name';\nexport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nexport {FormArrayName, FormGroupName} from './directives/reactive_directives/form_group_name';\nexport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nexport {NgSelectMultipleOption, SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\n\nexport const SHARED_FORM_DIRECTIVES: Type<any>[] = [\n NgNoValidate,\n NgSelectOption,\n NgSelectMultipleOption,\n DefaultValueAccessor,\n NumberValueAccessor,\n RangeValueAccessor,\n CheckboxControlValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n NgControlStatus,\n NgControlStatusGroup,\n RequiredValidator,\n MinLengthValidator,\n MaxLengthValidator,\n PatternValidator,\n CheckboxRequiredValidator,\n EmailValidator,\n];\n\nexport const TEMPLATE_DRIVEN_DIRECTIVES: Type<any>[] =\n [NgModel, NgModelGroup, NgForm, NgFormSelectorWarning];\n\nexport const REACTIVE_DRIVEN_DIRECTIVES: Type<any>[] =\n [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n\n/**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\n@NgModule({\n declarations: SHARED_FORM_DIRECTIVES,\n exports: SHARED_FORM_DIRECTIVES,\n})\nexport class InternalFormsSharedModule {\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModuleWithProviders, NgModule} from '@angular/core';\n\nimport {InternalFormsSharedModule, NG_FORM_SELECTOR_WARNING, NG_MODEL_WITH_FORM_CONTROL_WARNING, REACTIVE_DRIVEN_DIRECTIVES, TEMPLATE_DRIVEN_DIRECTIVES} from './directives';\nimport {RadioControlRegistry} from './directives/radio_control_value_accessor';\nimport {FormBuilder} from './form_builder';\n\n/**\n * Exports the required providers and directives for template-driven forms,\n * making them available for import by NgModules that import this module.\n *\n * @see [Forms Guide](/guide/forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n providers: [RadioControlRegistry],\n exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n})\nexport class FormsModule {\n /**\n * @description\n * Provides options for configuring the template-driven forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnDeprecatedNgFormSelector` Configures when to emit a warning when the deprecated\n * `ngForm` selector is used.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnDeprecatedNgFormSelector?: 'never' | 'once' | 'always',\n }): ModuleWithProviders<FormsModule> {\n return {\n ngModule: FormsModule,\n providers:\n [{provide: NG_FORM_SELECTOR_WARNING, useValue: opts.warnOnDeprecatedNgFormSelector}]\n };\n }\n}\n\n/**\n * Exports the required infrastructure and directives for reactive forms,\n * making them available for import by NgModules that import this module.\n * @see [Forms](guide/reactive-forms)\n *\n * @see [Reactive Forms Guide](/guide/reactive-forms)\n *\n * @publicApi\n */\n@NgModule({\n declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n providers: [FormBuilder, RadioControlRegistry],\n exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n})\nexport class ReactiveFormsModule {\n /**\n * @description\n * Provides options for configuring the reactive forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`\n * binding is used with reactive form directives.\n */\n static withConfig(opts: {\n /** @deprecated as of v6 */ warnOnNgModelWithFormControl: 'never' | 'once' | 'always'\n }): ModuleWithProviders<ReactiveFormsModule> {\n return {\n ngModule: ReactiveFormsModule,\n providers: [{\n provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,\n useValue: opts.warnOnNgModelWithFormControl\n }]\n };\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * This module is used for handling user input, by defining and building a `FormGroup` that\n * consists of `FormControl` objects, and mapping them onto the DOM. `FormControl`\n * objects can then be used to read information from the form DOM elements.\n *\n * Forms providers are not included in default providers; you must import these providers\n * explicitly.\n */\n\n\nexport {AbstractControlDirective} from './directives/abstract_control_directive';\nexport {AbstractFormGroupDirective} from './directives/abstract_form_group_directive';\nexport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nexport {ControlContainer} from './directives/control_container';\nexport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './directives/control_value_accessor';\nexport {COMPOSITION_BUFFER_MODE, DefaultValueAccessor} from './directives/default_value_accessor';\nexport {Form} from './directives/form_interface';\nexport {NgControl} from './directives/ng_control';\nexport {NgControlStatus, NgControlStatusGroup} from './directives/ng_control_status';\nexport {NgForm} from './directives/ng_form';\nexport {NgFormSelectorWarning} from './directives/ng_form_selector_warning';\nexport {NgModel} from './directives/ng_model';\nexport {NgModelGroup} from './directives/ng_model_group';\nexport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nexport {FormControlDirective} from './directives/reactive_directives/form_control_directive';\nexport {FormControlName} from './directives/reactive_directives/form_control_name';\nexport {FormGroupDirective} from './directives/reactive_directives/form_group_directive';\nexport {FormArrayName} from './directives/reactive_directives/form_group_name';\nexport {FormGroupName} from './directives/reactive_directives/form_group_name';\nexport {NgSelectOption, SelectControlValueAccessor} from './directives/select_control_value_accessor';\nexport {SelectMultipleControlValueAccessor} from './directives/select_multiple_control_value_accessor';\nexport {AsyncValidator, AsyncValidatorFn, CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator, ValidationErrors, Validator, ValidatorFn} from './directives/validators';\nexport {FormBuilder} from './form_builder';\nexport {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup} from './model';\nexport {NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators} from './validators';\nexport {VERSION} from './version';\n\nexport * from './form_providers';\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\nexport * from './src/forms';\n\n// This file only reexports content of the `src` folder. Keep it that way.\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// This file is not used to build this module. It is only used during editing\n// by the TypeScript language service and during build for verification. `ngc`\n// replaces this file with production index.ts when it rewrites private symbol\n// names.\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {InternalFormsSharedModule as ɵangular_packages_forms_forms_bc,REACTIVE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_bb,SHARED_FORM_DIRECTIVES as ɵangular_packages_forms_forms_z,TEMPLATE_DRIVEN_DIRECTIVES as ɵangular_packages_forms_forms_ba} from './src/directives';\nexport {CHECKBOX_VALUE_ACCESSOR as ɵangular_packages_forms_forms_a} from './src/directives/checkbox_value_accessor';\nexport {DEFAULT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_b} from './src/directives/default_value_accessor';\nexport {AbstractControlStatus as ɵangular_packages_forms_forms_c,ngControlStatusHost as ɵangular_packages_forms_forms_d} from './src/directives/ng_control_status';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_e} from './src/directives/ng_form';\nexport {NG_FORM_SELECTOR_WARNING as ɵangular_packages_forms_forms_f} from './src/directives/ng_form_selector_warning';\nexport {formControlBinding as ɵangular_packages_forms_forms_g} from './src/directives/ng_model';\nexport {modelGroupProvider as ɵangular_packages_forms_forms_h} from './src/directives/ng_model_group';\nexport {NgNoValidate as ɵangular_packages_forms_forms_bh} from './src/directives/ng_no_validate_directive';\nexport {NUMBER_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bd,NumberValueAccessor as ɵangular_packages_forms_forms_be} from './src/directives/number_value_accessor';\nexport {RADIO_VALUE_ACCESSOR as ɵangular_packages_forms_forms_i,RadioControlRegistry as ɵangular_packages_forms_forms_j} from './src/directives/radio_control_value_accessor';\nexport {RANGE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_bf,RangeValueAccessor as ɵangular_packages_forms_forms_bg} from './src/directives/range_value_accessor';\nexport {NG_MODEL_WITH_FORM_CONTROL_WARNING as ɵangular_packages_forms_forms_k,formControlBinding as ɵangular_packages_forms_forms_l} from './src/directives/reactive_directives/form_control_directive';\nexport {controlNameBinding as ɵangular_packages_forms_forms_m} from './src/directives/reactive_directives/form_control_name';\nexport {formDirectiveProvider as ɵangular_packages_forms_forms_n} from './src/directives/reactive_directives/form_group_directive';\nexport {formArrayNameProvider as ɵangular_packages_forms_forms_p,formGroupNameProvider as ɵangular_packages_forms_forms_o} from './src/directives/reactive_directives/form_group_name';\nexport {SELECT_VALUE_ACCESSOR as ɵangular_packages_forms_forms_q} from './src/directives/select_control_value_accessor';\nexport {NgSelectMultipleOption as ɵangular_packages_forms_forms_s,SELECT_MULTIPLE_VALUE_ACCESSOR as ɵangular_packages_forms_forms_r} from './src/directives/select_multiple_control_value_accessor';\nexport {CHECKBOX_REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_u,EMAIL_VALIDATOR as ɵangular_packages_forms_forms_v,MAX_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_x,MIN_LENGTH_VALIDATOR as ɵangular_packages_forms_forms_w,PATTERN_VALIDATOR as ɵangular_packages_forms_forms_y,REQUIRED_VALIDATOR as ɵangular_packages_forms_forms_t} from './src/directives/validators';"],"names":["tslib_1.__extends","isPromise","isObservable","getDOM","tslib_1.__param","tslib_1.__decorate","Examples","looseIdentical","tslib_1.__values","_buildValueString","_extractId","resolvedPromise","formControlBinding","formDirectiveProvider"],"mappings":"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"}
\ No newline at end of file

forms.metadata.json

@@ -1 +1 @@
-{"__symbolic":"module","version":4,"metadata":{"ɵangular_packages_forms_forms_a":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"CheckboxControlValueAccessor"},"multi":true},"ɵangular_packages_forms_forms_b":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"DefaultValueAccessor"},"multi":true},"ɵangular_packages_forms_forms_c":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"AbstractControlDirective"}]}]}},"ɵangular_packages_forms_forms_d":{"[class.ng-untouched]":"ngClassUntouched","[class.ng-touched]":"ngClassTouched","[class.ng-pristine]":"ngClassPristine","[class.ng-dirty]":"ngClassDirty","[class.ng-valid]":"ngClassValid","[class.ng-invalid]":"ngClassInvalid","[class.ng-pending]":"ngClassPending","$quoted$":["[class.ng-untouched]","[class.ng-touched]","[class.ng-pristine]","[class.ng-dirty]","[class.ng-valid]","[class.ng-invalid]","[class.ng-pending]"]},"ɵangular_packages_forms_forms_e":{"provide":{"__symbolic":"reference","name":"ControlContainer"},"useExisting":{"__symbolic":"reference","name":"NgForm"}},"ɵangular_packages_forms_forms_f":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":15,"character":44},"arguments":["NgFormSelectorWarning"]},"ɵangular_packages_forms_forms_g":{"provide":{"__symbolic":"reference","name":"NgControl"},"useExisting":{"__symbolic":"reference","name":"NgModel"}},"ɵangular_packages_forms_forms_h":{"provide":{"__symbolic":"reference","name":"ControlContainer"},"useExisting":{"__symbolic":"reference","name":"NgModelGroup"}},"ɵangular_packages_forms_forms_i":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"RadioControlValueAccessor"},"multi":true},"ɵangular_packages_forms_forms_j":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":23,"character":1}}],"members":{"add":[{"__symbolic":"method"}],"remove":[{"__symbolic":"method"}],"select":[{"__symbolic":"method"}],"_isSameGroup":[{"__symbolic":"method"}]}},"ɵangular_packages_forms_forms_k":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":23,"character":8},"arguments":["NgModelWithFormControlWarning"]},"ɵangular_packages_forms_forms_l":{"provide":{"__symbolic":"reference","name":"NgControl"},"useExisting":{"__symbolic":"reference","name":"FormControlDirective"}},"ɵangular_packages_forms_forms_m":{"provide":{"__symbolic":"reference","name":"NgControl"},"useExisting":{"__symbolic":"reference","name":"FormControlName"}},"ɵangular_packages_forms_forms_n":{"provide":{"__symbolic":"reference","name":"ControlContainer"},"useExisting":{"__symbolic":"reference","name":"FormGroupDirective"}},"ɵangular_packages_forms_forms_o":{"provide":{"__symbolic":"reference","name":"ControlContainer"},"useExisting":{"__symbolic":"reference","name":"FormGroupName"}},"ɵangular_packages_forms_forms_p":{"provide":{"__symbolic":"reference","name":"ControlContainer"},"useExisting":{"__symbolic":"reference","name":"FormArrayName"}},"ɵangular_packages_forms_forms_q":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"SelectControlValueAccessor"},"multi":true},"ɵangular_packages_forms_forms_r":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"SelectMultipleControlValueAccessor"},"multi":true},"ɵangular_packages_forms_forms_s":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":227,"character":1},"arguments":[{"selector":"option"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":236,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":236,"character":19}}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":122,"character":65},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":122,"character":33},{"__symbolic":"reference","name":"SelectMultipleControlValueAccessor"}]}],"ngValue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":247,"character":3},"arguments":["ngValue"]}]}],"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":260,"character":3},"arguments":["value"]}]}],"_setElementValue":[{"__symbolic":"method"}],"_setSelected":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"ɵangular_packages_forms_forms_t":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"RequiredValidator"},"multi":true},"ɵangular_packages_forms_forms_u":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"CheckboxRequiredValidator"},"multi":true},"ɵangular_packages_forms_forms_v":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"EmailValidator"},"multi":true},"ɵangular_packages_forms_forms_w":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"MinLengthValidator"},"multi":true},"ɵangular_packages_forms_forms_x":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"MaxLengthValidator"},"multi":true},"ɵangular_packages_forms_forms_y":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"PatternValidator"},"multi":true},"AbstractControlDirective":{"__symbolic":"class","members":{"reset":[{"__symbolic":"method"}],"hasError":[{"__symbolic":"method"}],"getError":[{"__symbolic":"method"}]}},"AbstractFormGroupDirective":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ControlContainer"},"members":{"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"_checkParentType":[{"__symbolic":"method"}]}},"CheckboxControlValueAccessor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":41,"character":1},"arguments":[{"selector":"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]","host":{"(change)":"onChange($event.target.checked)","(blur)":"onTouched()","$quoted$":["(change)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_a"}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":60,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":60,"character":65}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}]}},"ControlContainer":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractControlDirective"},"members":{}},"ControlValueAccessor":{"__symbolic":"interface"},"NG_VALUE_ACCESSOR":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":140,"character":37},"arguments":["NgValueAccessor"]},"COMPOSITION_BUFFER_MODE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":33,"character":43},"arguments":["CompositionEventMode"]},"DefaultValueAccessor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":60,"character":1},"arguments":[{"selector":"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]","host":{"(input)":"$any(this)._handleInput($event.target.value)","(blur)":"onTouched()","(compositionstart)":"$any(this)._compositionStart()","(compositionend)":"$any(this)._compositionEnd($event.target.value)","$quoted$":["(input)","(blur)","(compositionstart)","(compositionend)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_b"}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":92,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":92,"character":19},"arguments":[{"__symbolic":"reference","name":"COMPOSITION_BUFFER_MODE"}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":91,"character":25},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":91,"character":57},{"__symbolic":"reference","name":"boolean"}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"_handleInput":[{"__symbolic":"method"}],"_compositionStart":[{"__symbolic":"method"}],"_compositionEnd":[{"__symbolic":"method"}]}},"Form":{"__symbolic":"interface"},"NgControl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractControlDirective"},"members":{"viewToModelUpdate":[{"__symbolic":"method"}]}},"NgControlStatus":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_c"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":61,"character":1},"arguments":[{"selector":"[formControlName],[ngModel],[formControl]","host":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_d"}}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":63,"character":15}}]],"parameters":[{"__symbolic":"reference","name":"NgControl"}]}]}},"NgControlStatusGroup":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_c"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":77,"character":1},"arguments":[{"selector":"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]","host":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_d"}}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":83,"character":15}}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"}]}]}},"NgForm":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ControlContainer"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":95,"character":1},"arguments":[{"selector":"form:not([ngNoForm]):not([formGroup]),ngForm,ng-form,[ngForm]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_e"}],"host":{"(submit)":"onSubmit($event)","(reset)":"onReset()","$quoted$":["(submit)","(reset)"]},"outputs":["ngSubmit"],"exportAs":"ngForm"}]}],"members":{"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":134,"character":3},"arguments":["ngFormOptions"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":137,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":137,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":137,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":138,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":138,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":138,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}]],"parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"addControl":[{"__symbolic":"method"}],"getControl":[{"__symbolic":"method"}],"removeControl":[{"__symbolic":"method"}],"addFormGroup":[{"__symbolic":"method"}],"removeFormGroup":[{"__symbolic":"method"}],"getFormGroup":[{"__symbolic":"method"}],"updateModel":[{"__symbolic":"method"}],"setValue":[{"__symbolic":"method"}],"onSubmit":[{"__symbolic":"method"}],"onReset":[{"__symbolic":"method"}],"resetForm":[{"__symbolic":"method"}],"_setUpdateStrategy":[{"__symbolic":"method"}],"_findContainer":[{"__symbolic":"method"}]}},"NgFormSelectorWarning":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":24,"character":1},"arguments":[{"selector":"ngForm"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":34,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":34,"character":27},"arguments":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_f"}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}]},"statics":{"_ngFormWarning":false}},"NgModel":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgControl"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":130,"character":1},"arguments":[{"selector":"[ngModel]:not([formControlName]):not([formControl])","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_g"}],"exportAs":"ngModel"}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":153,"character":3}}]}],"isDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":160,"character":3},"arguments":["disabled"]}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":166,"character":3},"arguments":["ngModel"]}]}],"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":184,"character":3},"arguments":["ngModelOptions"]}]}],"update":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":192,"character":3},"arguments":["ngModelChange"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":194,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":194,"character":27}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":195,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":195,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":195,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":196,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":196,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":196,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":197,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":197,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":197,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"}]}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"ControlValueAccessor"}]}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"viewToModelUpdate":[{"__symbolic":"method"}],"_setUpControl":[{"__symbolic":"method"}],"_setUpdateStrategy":[{"__symbolic":"method"}],"_isStandalone":[{"__symbolic":"method"}],"_setUpStandalone":[{"__symbolic":"method"}],"_checkForErrors":[{"__symbolic":"method"}],"_checkParentType":[{"__symbolic":"method"}],"_checkName":[{"__symbolic":"method"}],"_updateValue":[{"__symbolic":"method"}],"_updateDisabled":[{"__symbolic":"method"}]}},"NgModelGroup":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractFormGroupDirective"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":48,"character":1},"arguments":[{"selector":"[ngModelGroup]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_h"}],"exportAs":"ngModelGroup"}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":56,"character":3},"arguments":["ngModelGroup"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":59,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf","line":59,"character":15}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":60,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":60,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":60,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":61,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":61,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":61,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]}]}],"_checkParentType":[{"__symbolic":"method"}]}},"RadioControlValueAccessor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":89,"character":1},"arguments":[{"selector":"input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]","host":{"(change)":"onChange()","(blur)":"onTouched()","$quoted$":["(change)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_i"}]}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":124,"character":3}}]}],"formControlName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":132,"character":3}}]}],"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":138,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":141,"character":25},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":141,"character":57},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_j"},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":142,"character":66}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"fireUncheck":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"_checkName":[{"__symbolic":"method"}],"_throwNameError":[{"__symbolic":"method"}]}},"FormControlDirective":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgControl"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":116,"character":1},"arguments":[{"selector":"[formControl]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_l"}],"exportAs":"ngForm"}]}],"members":{"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":130,"character":3},"arguments":["formControl"]}]}],"isDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":136,"character":3},"arguments":["disabled"]}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":142,"character":3},"arguments":["ngModel"]}]}],"update":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":145,"character":3},"arguments":["ngModelChange"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":165,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":165,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":165,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":166,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":166,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":166,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":167,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":167,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":167,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":169,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":169,"character":27},"arguments":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_k"}]}]],"parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"ControlValueAccessor"}]},{"__symbolic":"reference","name":"string"}]}],"ngOnChanges":[{"__symbolic":"method"}],"viewToModelUpdate":[{"__symbolic":"method"}],"_isControlChanged":[{"__symbolic":"method"}]},"statics":{"_ngModelWarningSentOnce":false}},"FormControlName":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgControl"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":126,"character":1},"arguments":[{"selector":"[formControlName]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_m"}]}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":149,"character":3},"arguments":["formControlName"]}]}],"isDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":155,"character":3},"arguments":["disabled"]}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":161,"character":3},"arguments":["ngModel"]}]}],"update":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":164,"character":3},"arguments":["ngModelChange"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":185,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":185,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf","line":185,"character":27}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":186,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":186,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":186,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":187,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":187,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":187,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":189,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":189,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":189,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":190,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":190,"character":19},"arguments":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_k"}]}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"ControlValueAccessor"}]},{"__symbolic":"reference","name":"string"}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"viewToModelUpdate":[{"__symbolic":"method"}],"_checkParentType":[{"__symbolic":"method"}],"_setUpControl":[{"__symbolic":"method"}]},"statics":{"_ngModelWarningSentOnce":false}},"FormGroupDirective":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ControlContainer"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":47,"character":1},"arguments":[{"selector":"[formGroup]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_n"}],"host":{"(submit)":"onSubmit($event)","(reset)":"onReset()","$quoted$":["(submit)","(reset)"]},"exportAs":"ngForm"}]}],"members":{"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3},"arguments":["formGroup"]}]}],"ngSubmit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":80,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":83,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":83,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":83,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":84,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":84,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":84,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}]],"parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]}]}],"ngOnChanges":[{"__symbolic":"method"}],"addControl":[{"__symbolic":"method"}],"getControl":[{"__symbolic":"method"}],"removeControl":[{"__symbolic":"method"}],"addFormGroup":[{"__symbolic":"method"}],"removeFormGroup":[{"__symbolic":"method"}],"getFormGroup":[{"__symbolic":"method"}],"addFormArray":[{"__symbolic":"method"}],"removeFormArray":[{"__symbolic":"method"}],"getFormArray":[{"__symbolic":"method"}],"updateModel":[{"__symbolic":"method"}],"onSubmit":[{"__symbolic":"method"}],"onReset":[{"__symbolic":"method"}],"resetForm":[{"__symbolic":"method"}],"_updateDomValue":[{"__symbolic":"method"}],"_updateRegistrations":[{"__symbolic":"method"}],"_updateValidators":[{"__symbolic":"method"}],"_checkFormPresent":[{"__symbolic":"method"}]}},"FormArrayName":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ControlContainer"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":129,"character":1},"arguments":[{"selector":"[formArrayName]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_p"}]}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":146,"character":3},"arguments":["formArrayName"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":149,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":149,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf","line":149,"character":27}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":150,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":150,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":150,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":151,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":151,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":151,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"_checkParentType":[{"__symbolic":"method"}]}},"FormGroupName":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractFormGroupDirective"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":72,"character":1},"arguments":[{"selector":"[formGroupName]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_o"}]}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3},"arguments":["formGroupName"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":83,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":83,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf","line":83,"character":27}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":84,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":84,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":84,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":85,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":85,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":85,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]}]}],"_checkParentType":[{"__symbolic":"method"}]}},"NgSelectOption":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":201,"character":1},"arguments":[{"selector":"option"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":212,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":212,"character":19}}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":125,"character":65},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":125,"character":33},{"__symbolic":"reference","name":"SelectControlValueAccessor"}]}],"ngValue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":221,"character":3},"arguments":["ngValue"]}]}],"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":234,"character":3},"arguments":["value"]}]}],"_setElementValue":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"SelectControlValueAccessor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":85,"character":1},"arguments":[{"selector":"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]","host":{"(change)":"onChange($event.target.value)","(blur)":"onTouched()","$quoted$":["(change)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_q"}]}]}],"members":{"compareWith":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":115,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":125,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":125,"character":65}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"_registerOption":[{"__symbolic":"method"}],"_getOptionId":[{"__symbolic":"method"}],"_getOptionValue":[{"__symbolic":"method"}]}},"SelectMultipleControlValueAccessor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":77,"character":1},"arguments":[{"selector":"select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]","host":{"(change)":"onChange($event.target)","(blur)":"onTouched()","$quoted$":["(change)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_r"}]}]}],"members":{"compareWith":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":112,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":122,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":122,"character":65}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"_registerOption":[{"__symbolic":"method"}],"_getOptionId":[{"__symbolic":"method"}],"_getOptionValue":[{"__symbolic":"method"}]}},"AsyncValidator":{"__symbolic":"interface"},"AsyncValidatorFn":{"__symbolic":"interface"},"CheckboxRequiredValidator":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"RequiredValidator"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":216,"character":1},"arguments":[{"selector":"input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_u"}],"host":{"[attr.required]":"required ? \"\" : null","$quoted$":["[attr.required]"]}}]}],"members":{"validate":[{"__symbolic":"method"}]}},"EmailValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":265,"character":1},"arguments":[{"selector":"[email][formControlName],[email][formControl],[email][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_v"}]}]}],"members":{"email":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":279,"character":3}}]}],"validate":[{"__symbolic":"method"}],"registerOnValidatorChange":[{"__symbolic":"method"}]}},"MaxLengthValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":440,"character":1},"arguments":[{"selector":"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_x"}],"host":{"[attr.maxlength]":"maxlength ? maxlength : null","$quoted$":["[attr.maxlength]"]}}]}],"members":{"maxlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":457,"character":3}}]}],"ngOnChanges":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"registerOnValidatorChange":[{"__symbolic":"method"}],"_createValidator":[{"__symbolic":"method"}]}},"MinLengthValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":354,"character":1},"arguments":[{"selector":"[minlength][formControlName],[minlength][formControl],[minlength][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_w"}],"host":{"[attr.minlength]":"minlength ? minlength : null","$quoted$":["[attr.minlength]"]}}]}],"members":{"minlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":371,"character":3}}]}],"ngOnChanges":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"registerOnValidatorChange":[{"__symbolic":"method"}],"_createValidator":[{"__symbolic":"method"}]}},"PatternValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":529,"character":1},"arguments":[{"selector":"[pattern][formControlName],[pattern][formControl],[pattern][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_y"}],"host":{"[attr.pattern]":"pattern ? pattern : null","$quoted$":["[attr.pattern]"]}}]}],"members":{"pattern":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":546,"character":3}}]}],"ngOnChanges":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"registerOnValidatorChange":[{"__symbolic":"method"}],"_createValidator":[{"__symbolic":"method"}]}},"RequiredValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":153,"character":1},"arguments":[{"selector":":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_t"}],"host":{"[attr.required]":"required ? \"\" : null","$quoted$":["[attr.required]"]}}]}],"members":{"required":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":169,"character":3}}]}],"validate":[{"__symbolic":"method"}],"registerOnValidatorChange":[{"__symbolic":"method"}]}},"ValidationErrors":{"__symbolic":"interface"},"Validator":{"__symbolic":"interface"},"ValidatorFn":{"__symbolic":"interface"},"FormBuilder":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":32,"character":1}}],"members":{"group":[{"__symbolic":"method"}],"control":[{"__symbolic":"method"}],"array":[{"__symbolic":"method"}],"_reduceControls":[{"__symbolic":"method"}],"_createControl":[{"__symbolic":"method"}]}},"AbstractControl":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ValidatorFn"},{"__symbolic":"reference","name":"AsyncValidatorFn"}]}],"setValidators":[{"__symbolic":"method"}],"setAsyncValidators":[{"__symbolic":"method"}],"clearValidators":[{"__symbolic":"method"}],"clearAsyncValidators":[{"__symbolic":"method"}],"markAsTouched":[{"__symbolic":"method"}],"markAsUntouched":[{"__symbolic":"method"}],"markAsDirty":[{"__symbolic":"method"}],"markAsPristine":[{"__symbolic":"method"}],"markAsPending":[{"__symbolic":"method"}],"disable":[{"__symbolic":"method"}],"enable":[{"__symbolic":"method"}],"_updateAncestors":[{"__symbolic":"method"}],"setParent":[{"__symbolic":"method"}],"setValue":[{"__symbolic":"method"}],"patchValue":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"updateValueAndValidity":[{"__symbolic":"method"}],"_updateTreeValidity":[{"__symbolic":"method"}],"_setInitialStatus":[{"__symbolic":"method"}],"_runValidator":[{"__symbolic":"method"}],"_runAsyncValidator":[{"__symbolic":"method"}],"_cancelExistingSubscription":[{"__symbolic":"method"}],"setErrors":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}],"getError":[{"__symbolic":"method"}],"hasError":[{"__symbolic":"method"}],"_updateControlsErrors":[{"__symbolic":"method"}],"_initObservables":[{"__symbolic":"method"}],"_calculateStatus":[{"__symbolic":"method"}],"_updateValue":[{"__symbolic":"method"}],"_forEachChild":[{"__symbolic":"method"}],"_anyControls":[{"__symbolic":"method"}],"_allControlsDisabled":[{"__symbolic":"method"}],"_syncPendingControls":[{"__symbolic":"method"}],"_anyControlsHaveStatus":[{"__symbolic":"method"}],"_anyControlsDirty":[{"__symbolic":"method"}],"_anyControlsTouched":[{"__symbolic":"method"}],"_updatePristine":[{"__symbolic":"method"}],"_updateTouched":[{"__symbolic":"method"}],"_isBoxedValue":[{"__symbolic":"method"}],"_registerOnCollectionChange":[{"__symbolic":"method"}],"_setUpdateStrategy":[{"__symbolic":"method"}]}},"AbstractControlOptions":{"__symbolic":"interface"},"FormArray":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractControl"},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AbstractControl"}]},{"__symbolic":"reference","name":"ValidatorFn"},{"__symbolic":"reference","name":"AsyncValidatorFn"}]}],"at":[{"__symbolic":"method"}],"push":[{"__symbolic":"method"}],"insert":[{"__symbolic":"method"}],"removeAt":[{"__symbolic":"method"}],"setControl":[{"__symbolic":"method"}],"setValue":[{"__symbolic":"method"}],"patchValue":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"getRawValue":[{"__symbolic":"method"}],"_syncPendingControls":[{"__symbolic":"method"}],"_throwIfControlMissing":[{"__symbolic":"method"}],"_forEachChild":[{"__symbolic":"method"}],"_updateValue":[{"__symbolic":"method"}],"_anyControls":[{"__symbolic":"method"}],"_setUpControls":[{"__symbolic":"method"}],"_checkAllValuesPresent":[{"__symbolic":"method"}],"_allControlsDisabled":[{"__symbolic":"method"}],"_registerControl":[{"__symbolic":"method"}]}},"FormControl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractControl"},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"ValidatorFn"},{"__symbolic":"reference","name":"AsyncValidatorFn"}]}],"setValue":[{"__symbolic":"method"}],"patchValue":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"_updateValue":[{"__symbolic":"method"}],"_anyControls":[{"__symbolic":"method"}],"_allControlsDisabled":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"_clearChangeFns":[{"__symbolic":"method"}],"registerOnDisabledChange":[{"__symbolic":"method"}],"_forEachChild":[{"__symbolic":"method"}],"_syncPendingControls":[{"__symbolic":"method"}],"_applyFormState":[{"__symbolic":"method"}]}},"FormGroup":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractControl"},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Expression form not supported","line":1216,"character":23,"module":"./src/model"},{"__symbolic":"reference","name":"ValidatorFn"},{"__symbolic":"reference","name":"AsyncValidatorFn"}]}],"registerControl":[{"__symbolic":"method"}],"addControl":[{"__symbolic":"method"}],"removeControl":[{"__symbolic":"method"}],"setControl":[{"__symbolic":"method"}],"contains":[{"__symbolic":"method"}],"setValue":[{"__symbolic":"method"}],"patchValue":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"getRawValue":[{"__symbolic":"method"}],"_syncPendingControls":[{"__symbolic":"method"}],"_throwIfControlMissing":[{"__symbolic":"method"}],"_forEachChild":[{"__symbolic":"method"}],"_setUpControls":[{"__symbolic":"method"}],"_updateValue":[{"__symbolic":"method"}],"_anyControls":[{"__symbolic":"method"}],"_reduceValue":[{"__symbolic":"method"}],"_reduceChildren":[{"__symbolic":"method"}],"_allControlsDisabled":[{"__symbolic":"method"}],"_checkAllValuesPresent":[{"__symbolic":"method"}]}},"NG_ASYNC_VALIDATORS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":57,"character":8},"arguments":["NgAsyncValidators"]},"NG_VALIDATORS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":46,"character":33},"arguments":["NgValidators"]},"Validators":{"__symbolic":"class","members":{},"statics":{"min":{"__symbolic":"function","parameters":["min"],"value":{"__symbolic":"error","message":"Lambda not supported","line":94,"character":11,"module":"./src/validators"}},"max":{"__symbolic":"function","parameters":["max"],"value":{"__symbolic":"error","message":"Lambda not supported","line":125,"character":11,"module":"./src/validators"}},"required":{"__symbolic":"function","parameters":["control"],"value":{"__symbolic":"if","condition":{"__symbolic":"error","message":"Reference to a non-exported function","line":14,"character":9,"context":{"name":"isEmptyInputValue"},"module":"./src/validators"},"thenExpression":{"required":true,"$quoted$":["required"]},"elseExpression":null}},"requiredTrue":{"__symbolic":"function","parameters":["control"],"value":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"control"},"member":"value"},"right":true},"thenExpression":null,"elseExpression":{"required":true,"$quoted$":["required"]}}},"minLength":{"__symbolic":"function","parameters":["minLength"],"value":{"__symbolic":"error","message":"Lambda not supported","line":229,"character":11,"module":"./src/validators"}},"maxLength":{"__symbolic":"function","parameters":["maxLength"],"value":{"__symbolic":"error","message":"Lambda not supported","line":264,"character":11,"module":"./src/validators"}},"nullValidator":{"__symbolic":"function","parameters":["control"],"value":null}}},"VERSION":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"Version","line":19,"character":27},"arguments":["7.2.7"]},"FormsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":22,"character":1},"arguments":[{"declarations":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_ba"},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_j"}],"exports":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bc"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_ba"}]}]}],"members":{},"statics":{"withConfig":{"__symbolic":"function","parameters":["opts"],"value":{"ngModule":{"__symbolic":"reference","name":"FormsModule"},"providers":[{"provide":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_f"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"opts"},"member":"warnOnDeprecatedNgFormSelector"}}]}}}},"ReactiveFormsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":56,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bb"}],"providers":[{"__symbolic":"reference","name":"FormBuilder"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_j"}],"exports":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bc"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bb"}]}]}],"members":{},"statics":{"withConfig":{"__symbolic":"function","parameters":["opts"],"value":{"ngModule":{"__symbolic":"reference","name":"ReactiveFormsModule"},"providers":[{"provide":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_k"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"opts"},"member":"warnOnNgModelWithFormControl"}}]}}}},"ɵangular_packages_forms_forms_z":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bh"},{"__symbolic":"reference","name":"NgSelectOption"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_s"},{"__symbolic":"reference","name":"DefaultValueAccessor"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_be"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bg"},{"__symbolic":"reference","name":"CheckboxControlValueAccessor"},{"__symbolic":"reference","name":"SelectControlValueAccessor"},{"__symbolic":"reference","name":"SelectMultipleControlValueAccessor"},{"__symbolic":"reference","name":"RadioControlValueAccessor"},{"__symbolic":"reference","name":"NgControlStatus"},{"__symbolic":"reference","name":"NgControlStatusGroup"},{"__symbolic":"reference","name":"RequiredValidator"},{"__symbolic":"reference","name":"MinLengthValidator"},{"__symbolic":"reference","name":"MaxLengthValidator"},{"__symbolic":"reference","name":"PatternValidator"},{"__symbolic":"reference","name":"CheckboxRequiredValidator"},{"__symbolic":"reference","name":"EmailValidator"}],"ɵangular_packages_forms_forms_ba":[{"__symbolic":"reference","name":"NgModel"},{"__symbolic":"reference","name":"NgModelGroup"},{"__symbolic":"reference","name":"NgForm"},{"__symbolic":"reference","name":"NgFormSelectorWarning"}],"ɵangular_packages_forms_forms_bb":[{"__symbolic":"reference","name":"FormControlDirective"},{"__symbolic":"reference","name":"FormGroupDirective"},{"__symbolic":"reference","name":"FormControlName"},{"__symbolic":"reference","name":"FormGroupName"},{"__symbolic":"reference","name":"FormArrayName"}],"ɵangular_packages_forms_forms_bc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":78,"character":1},"arguments":[{"declarations":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_z"},"exports":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_z"}}]}],"members":{}},"ɵangular_packages_forms_forms_bd":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_be"},"multi":true},"ɵangular_packages_forms_forms_be":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":41,"character":1},"arguments":[{"selector":"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]","host":{"(change)":"onChange($event.target.value)","(input)":"onChange($event.target.value)","(blur)":"onTouched()","$quoted$":["(change)","(input)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bd"}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":65,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":65,"character":65}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}]}},"ɵangular_packages_forms_forms_bf":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bg"},"multi":true},"ɵangular_packages_forms_forms_bg":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":41,"character":1},"arguments":[{"selector":"input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]","host":{"(change)":"onChange($event.target.value)","(input)":"onChange($event.target.value)","(blur)":"onTouched()","$quoted$":["(change)","(input)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bf"}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":65,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":65,"character":65}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}]}},"ɵangular_packages_forms_forms_bh":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":27,"character":1},"arguments":[{"selector":"form:not([ngNoForm]):not([ngNativeValidate])","host":{"novalidate":"","$quoted$":["novalidate"]}}]}],"members":{}}},"origins":{"ɵangular_packages_forms_forms_a":"./src/directives/checkbox_value_accessor","ɵangular_packages_forms_forms_b":"./src/directives/default_value_accessor","ɵangular_packages_forms_forms_c":"./src/directives/ng_control_status","ɵangular_packages_forms_forms_d":"./src/directives/ng_control_status","ɵangular_packages_forms_forms_e":"./src/directives/ng_form","ɵangular_packages_forms_forms_f":"./src/directives/ng_form_selector_warning","ɵangular_packages_forms_forms_g":"./src/directives/ng_model","ɵangular_packages_forms_forms_h":"./src/directives/ng_model_group","ɵangular_packages_forms_forms_i":"./src/directives/radio_control_value_accessor","ɵangular_packages_forms_forms_j":"./src/directives/radio_control_value_accessor","ɵangular_packages_forms_forms_k":"./src/directives/reactive_directives/form_control_directive","ɵangular_packages_forms_forms_l":"./src/directives/reactive_directives/form_control_directive","ɵangular_packages_forms_forms_m":"./src/directives/reactive_directives/form_control_name","ɵangular_packages_forms_forms_n":"./src/directives/reactive_directives/form_group_directive","ɵangular_packages_forms_forms_o":"./src/directives/reactive_directives/form_group_name","ɵangular_packages_forms_forms_p":"./src/directives/reactive_directives/form_group_name","ɵangular_packages_forms_forms_q":"./src/directives/select_control_value_accessor","ɵangular_packages_forms_forms_r":"./src/directives/select_multiple_control_value_accessor","ɵangular_packages_forms_forms_s":"./src/directives/select_multiple_control_value_accessor","ɵangular_packages_forms_forms_t":"./src/directives/validators","ɵangular_packages_forms_forms_u":"./src/directives/validators","ɵangular_packages_forms_forms_v":"./src/directives/validators","ɵangular_packages_forms_forms_w":"./src/directives/validators","ɵangular_packages_forms_forms_x":"./src/directives/validators","ɵangular_packages_forms_forms_y":"./src/directives/validators","AbstractControlDirective":"./src/directives/abstract_control_directive","AbstractFormGroupDirective":"./src/directives/abstract_form_group_directive","CheckboxControlValueAccessor":"./src/directives/checkbox_value_accessor","ControlContainer":"./src/directives/control_container","ControlValueAccessor":"./src/directives/control_value_accessor","NG_VALUE_ACCESSOR":"./src/directives/control_value_accessor","COMPOSITION_BUFFER_MODE":"./src/directives/default_value_accessor","DefaultValueAccessor":"./src/directives/default_value_accessor","Form":"./src/directives/form_interface","NgControl":"./src/directives/ng_control","NgControlStatus":"./src/directives/ng_control_status","NgControlStatusGroup":"./src/directives/ng_control_status","NgForm":"./src/directives/ng_form","NgFormSelectorWarning":"./src/directives/ng_form_selector_warning","NgModel":"./src/directives/ng_model","NgModelGroup":"./src/directives/ng_model_group","RadioControlValueAccessor":"./src/directives/radio_control_value_accessor","FormControlDirective":"./src/directives/reactive_directives/form_control_directive","FormControlName":"./src/directives/reactive_directives/form_control_name","FormGroupDirective":"./src/directives/reactive_directives/form_group_directive","FormArrayName":"./src/directives/reactive_directives/form_group_name","FormGroupName":"./src/directives/reactive_directives/form_group_name","NgSelectOption":"./src/directives/select_control_value_accessor","SelectControlValueAccessor":"./src/directives/select_control_value_accessor","SelectMultipleControlValueAccessor":"./src/directives/select_multiple_control_value_accessor","AsyncValidator":"./src/directives/validators","AsyncValidatorFn":"./src/directives/validators","CheckboxRequiredValidator":"./src/directives/validators","EmailValidator":"./src/directives/validators","MaxLengthValidator":"./src/directives/validators","MinLengthValidator":"./src/directives/validators","PatternValidator":"./src/directives/validators","RequiredValidator":"./src/directives/validators","ValidationErrors":"./src/directives/validators","Validator":"./src/directives/validators","ValidatorFn":"./src/directives/validators","FormBuilder":"./src/form_builder","AbstractControl":"./src/model","AbstractControlOptions":"./src/model","FormArray":"./src/model","FormControl":"./src/model","FormGroup":"./src/model","NG_ASYNC_VALIDATORS":"./src/validators","NG_VALIDATORS":"./src/validators","Validators":"./src/validators","VERSION":"./src/version","FormsModule":"./src/form_providers","ReactiveFormsModule":"./src/form_providers","ɵangular_packages_forms_forms_z":"./src/directives","ɵangular_packages_forms_forms_ba":"./src/directives","ɵangular_packages_forms_forms_bb":"./src/directives","ɵangular_packages_forms_forms_bc":"./src/directives","ɵangular_packages_forms_forms_bd":"./src/directives/number_value_accessor","ɵangular_packages_forms_forms_be":"./src/directives/number_value_accessor","ɵangular_packages_forms_forms_bf":"./src/directives/range_value_accessor","ɵangular_packages_forms_forms_bg":"./src/directives/range_value_accessor","ɵangular_packages_forms_forms_bh":"./src/directives/ng_no_validate_directive"},"importAs":"@angular/forms"}
\ No newline at end of file
+{"__symbolic":"module","version":4,"metadata":{"ɵangular_packages_forms_forms_a":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"CheckboxControlValueAccessor"},"multi":true},"ɵangular_packages_forms_forms_b":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"DefaultValueAccessor"},"multi":true},"ɵangular_packages_forms_forms_c":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"AbstractControlDirective"}]}]}},"ɵangular_packages_forms_forms_d":{"[class.ng-untouched]":"ngClassUntouched","[class.ng-touched]":"ngClassTouched","[class.ng-pristine]":"ngClassPristine","[class.ng-dirty]":"ngClassDirty","[class.ng-valid]":"ngClassValid","[class.ng-invalid]":"ngClassInvalid","[class.ng-pending]":"ngClassPending","$quoted$":["[class.ng-untouched]","[class.ng-touched]","[class.ng-pristine]","[class.ng-dirty]","[class.ng-valid]","[class.ng-invalid]","[class.ng-pending]"]},"ɵangular_packages_forms_forms_e":{"provide":{"__symbolic":"reference","name":"ControlContainer"},"useExisting":{"__symbolic":"reference","name":"NgForm"}},"ɵangular_packages_forms_forms_f":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":15,"character":44},"arguments":["NgFormSelectorWarning"]},"ɵangular_packages_forms_forms_g":{"provide":{"__symbolic":"reference","name":"NgControl"},"useExisting":{"__symbolic":"reference","name":"NgModel"}},"ɵangular_packages_forms_forms_h":{"provide":{"__symbolic":"reference","name":"ControlContainer"},"useExisting":{"__symbolic":"reference","name":"NgModelGroup"}},"ɵangular_packages_forms_forms_i":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"RadioControlValueAccessor"},"multi":true},"ɵangular_packages_forms_forms_j":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":23,"character":1}}],"members":{"add":[{"__symbolic":"method"}],"remove":[{"__symbolic":"method"}],"select":[{"__symbolic":"method"}],"_isSameGroup":[{"__symbolic":"method"}]}},"ɵangular_packages_forms_forms_k":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":23,"character":8},"arguments":["NgModelWithFormControlWarning"]},"ɵangular_packages_forms_forms_l":{"provide":{"__symbolic":"reference","name":"NgControl"},"useExisting":{"__symbolic":"reference","name":"FormControlDirective"}},"ɵangular_packages_forms_forms_m":{"provide":{"__symbolic":"reference","name":"NgControl"},"useExisting":{"__symbolic":"reference","name":"FormControlName"}},"ɵangular_packages_forms_forms_n":{"provide":{"__symbolic":"reference","name":"ControlContainer"},"useExisting":{"__symbolic":"reference","name":"FormGroupDirective"}},"ɵangular_packages_forms_forms_o":{"provide":{"__symbolic":"reference","name":"ControlContainer"},"useExisting":{"__symbolic":"reference","name":"FormGroupName"}},"ɵangular_packages_forms_forms_p":{"provide":{"__symbolic":"reference","name":"ControlContainer"},"useExisting":{"__symbolic":"reference","name":"FormArrayName"}},"ɵangular_packages_forms_forms_q":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"SelectControlValueAccessor"},"multi":true},"ɵangular_packages_forms_forms_r":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"SelectMultipleControlValueAccessor"},"multi":true},"ɵangular_packages_forms_forms_s":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":227,"character":1},"arguments":[{"selector":"option"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":236,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":236,"character":19}}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":122,"character":65},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":122,"character":33},{"__symbolic":"reference","name":"SelectMultipleControlValueAccessor"}]}],"ngValue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":247,"character":3},"arguments":["ngValue"]}]}],"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":260,"character":3},"arguments":["value"]}]}],"_setElementValue":[{"__symbolic":"method"}],"_setSelected":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"ɵangular_packages_forms_forms_t":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"RequiredValidator"},"multi":true},"ɵangular_packages_forms_forms_u":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"CheckboxRequiredValidator"},"multi":true},"ɵangular_packages_forms_forms_v":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"EmailValidator"},"multi":true},"ɵangular_packages_forms_forms_w":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"MinLengthValidator"},"multi":true},"ɵangular_packages_forms_forms_x":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"MaxLengthValidator"},"multi":true},"ɵangular_packages_forms_forms_y":{"provide":{"__symbolic":"reference","name":"NG_VALIDATORS"},"useExisting":{"__symbolic":"reference","name":"PatternValidator"},"multi":true},"AbstractControlDirective":{"__symbolic":"class","members":{"reset":[{"__symbolic":"method"}],"hasError":[{"__symbolic":"method"}],"getError":[{"__symbolic":"method"}]}},"AbstractFormGroupDirective":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ControlContainer"},"members":{"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"_checkParentType":[{"__symbolic":"method"}]}},"CheckboxControlValueAccessor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":41,"character":1},"arguments":[{"selector":"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]","host":{"(change)":"onChange($event.target.checked)","(blur)":"onTouched()","$quoted$":["(change)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_a"}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":60,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":60,"character":65}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}]}},"ControlContainer":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractControlDirective"},"members":{}},"ControlValueAccessor":{"__symbolic":"interface"},"NG_VALUE_ACCESSOR":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":140,"character":37},"arguments":["NgValueAccessor"]},"COMPOSITION_BUFFER_MODE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":33,"character":43},"arguments":["CompositionEventMode"]},"DefaultValueAccessor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":60,"character":1},"arguments":[{"selector":"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]","host":{"(input)":"$any(this)._handleInput($event.target.value)","(blur)":"onTouched()","(compositionstart)":"$any(this)._compositionStart()","(compositionend)":"$any(this)._compositionEnd($event.target.value)","$quoted$":["(input)","(blur)","(compositionstart)","(compositionend)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_b"}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":92,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":92,"character":19},"arguments":[{"__symbolic":"reference","name":"COMPOSITION_BUFFER_MODE"}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":91,"character":25},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":91,"character":57},{"__symbolic":"reference","name":"boolean"}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"_handleInput":[{"__symbolic":"method"}],"_compositionStart":[{"__symbolic":"method"}],"_compositionEnd":[{"__symbolic":"method"}]}},"Form":{"__symbolic":"interface"},"NgControl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractControlDirective"},"members":{"viewToModelUpdate":[{"__symbolic":"method"}]}},"NgControlStatus":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_c"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":61,"character":1},"arguments":[{"selector":"[formControlName],[ngModel],[formControl]","host":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_d"}}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":63,"character":15}}]],"parameters":[{"__symbolic":"reference","name":"NgControl"}]}]}},"NgControlStatusGroup":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_c"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":77,"character":1},"arguments":[{"selector":"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]","host":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_d"}}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":83,"character":15}}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"}]}]}},"NgForm":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ControlContainer"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":95,"character":1},"arguments":[{"selector":"form:not([ngNoForm]):not([formGroup]),ngForm,ng-form,[ngForm]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_e"}],"host":{"(submit)":"onSubmit($event)","(reset)":"onReset()","$quoted$":["(submit)","(reset)"]},"outputs":["ngSubmit"],"exportAs":"ngForm"}]}],"members":{"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":134,"character":3},"arguments":["ngFormOptions"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":137,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":137,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":137,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":138,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":138,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":138,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}]],"parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"addControl":[{"__symbolic":"method"}],"getControl":[{"__symbolic":"method"}],"removeControl":[{"__symbolic":"method"}],"addFormGroup":[{"__symbolic":"method"}],"removeFormGroup":[{"__symbolic":"method"}],"getFormGroup":[{"__symbolic":"method"}],"updateModel":[{"__symbolic":"method"}],"setValue":[{"__symbolic":"method"}],"onSubmit":[{"__symbolic":"method"}],"onReset":[{"__symbolic":"method"}],"resetForm":[{"__symbolic":"method"}],"_setUpdateStrategy":[{"__symbolic":"method"}],"_findContainer":[{"__symbolic":"method"}]}},"NgFormSelectorWarning":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":24,"character":1},"arguments":[{"selector":"ngForm"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":34,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":34,"character":27},"arguments":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_f"}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}]},"statics":{"_ngFormWarning":false}},"NgModel":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgControl"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":130,"character":1},"arguments":[{"selector":"[ngModel]:not([formControlName]):not([formControl])","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_g"}],"exportAs":"ngModel"}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":153,"character":3}}]}],"isDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":160,"character":3},"arguments":["disabled"]}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":166,"character":3},"arguments":["ngModel"]}]}],"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":184,"character":3},"arguments":["ngModelOptions"]}]}],"update":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":192,"character":3},"arguments":["ngModelChange"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":194,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":194,"character":27}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":195,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":195,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":195,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":196,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":196,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":196,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":197,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":197,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":197,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"}]}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"ControlValueAccessor"}]}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"viewToModelUpdate":[{"__symbolic":"method"}],"_setUpControl":[{"__symbolic":"method"}],"_setUpdateStrategy":[{"__symbolic":"method"}],"_isStandalone":[{"__symbolic":"method"}],"_setUpStandalone":[{"__symbolic":"method"}],"_checkForErrors":[{"__symbolic":"method"}],"_checkParentType":[{"__symbolic":"method"}],"_checkName":[{"__symbolic":"method"}],"_updateValue":[{"__symbolic":"method"}],"_updateDisabled":[{"__symbolic":"method"}]}},"NgModelGroup":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractFormGroupDirective"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":48,"character":1},"arguments":[{"selector":"[ngModelGroup]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_h"}],"exportAs":"ngModelGroup"}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":56,"character":3},"arguments":["ngModelGroup"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":59,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf","line":59,"character":15}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":60,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":60,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":60,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":61,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":61,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":61,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]}]}],"_checkParentType":[{"__symbolic":"method"}]}},"RadioControlValueAccessor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":89,"character":1},"arguments":[{"selector":"input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]","host":{"(change)":"onChange()","(blur)":"onTouched()","$quoted$":["(change)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_i"}]}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":124,"character":3}}]}],"formControlName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":132,"character":3}}]}],"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":138,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":141,"character":25},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":141,"character":57},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_j"},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":142,"character":66}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"fireUncheck":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"_checkName":[{"__symbolic":"method"}],"_throwNameError":[{"__symbolic":"method"}]}},"FormControlDirective":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgControl"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":116,"character":1},"arguments":[{"selector":"[formControl]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_l"}],"exportAs":"ngForm"}]}],"members":{"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":130,"character":3},"arguments":["formControl"]}]}],"isDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":136,"character":3},"arguments":["disabled"]}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":142,"character":3},"arguments":["ngModel"]}]}],"update":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":145,"character":3},"arguments":["ngModelChange"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":165,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":165,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":165,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":166,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":166,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":166,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":167,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":167,"character":27}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":167,"character":35},"arguments":[{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":169,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":169,"character":27},"arguments":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_k"}]}]],"parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"ControlValueAccessor"}]},{"__symbolic":"reference","name":"string"}]}],"ngOnChanges":[{"__symbolic":"method"}],"viewToModelUpdate":[{"__symbolic":"method"}],"_isControlChanged":[{"__symbolic":"method"}]},"statics":{"_ngModelWarningSentOnce":false}},"FormControlName":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgControl"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":126,"character":1},"arguments":[{"selector":"[formControlName]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_m"}]}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":149,"character":3},"arguments":["formControlName"]}]}],"isDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":155,"character":3},"arguments":["disabled"]}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":161,"character":3},"arguments":["ngModel"]}]}],"update":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":164,"character":3},"arguments":["ngModelChange"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":185,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":185,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf","line":185,"character":27}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":186,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":186,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":186,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":187,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":187,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":187,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":189,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":189,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":189,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":190,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":190,"character":19},"arguments":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_k"}]}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AsyncValidator"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"ControlValueAccessor"}]},{"__symbolic":"reference","name":"string"}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"viewToModelUpdate":[{"__symbolic":"method"}],"_checkParentType":[{"__symbolic":"method"}],"_setUpControl":[{"__symbolic":"method"}]},"statics":{"_ngModelWarningSentOnce":false}},"FormGroupDirective":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ControlContainer"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":47,"character":1},"arguments":[{"selector":"[formGroup]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_n"}],"host":{"(submit)":"onSubmit($event)","(reset)":"onReset()","$quoted$":["(submit)","(reset)"]},"exportAs":"ngForm"}]}],"members":{"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3},"arguments":["formGroup"]}]}],"ngSubmit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":80,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":83,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":83,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":83,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":84,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":84,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":84,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}]],"parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]}]}],"ngOnChanges":[{"__symbolic":"method"}],"addControl":[{"__symbolic":"method"}],"getControl":[{"__symbolic":"method"}],"removeControl":[{"__symbolic":"method"}],"addFormGroup":[{"__symbolic":"method"}],"removeFormGroup":[{"__symbolic":"method"}],"getFormGroup":[{"__symbolic":"method"}],"addFormArray":[{"__symbolic":"method"}],"removeFormArray":[{"__symbolic":"method"}],"getFormArray":[{"__symbolic":"method"}],"updateModel":[{"__symbolic":"method"}],"onSubmit":[{"__symbolic":"method"}],"onReset":[{"__symbolic":"method"}],"resetForm":[{"__symbolic":"method"}],"_updateDomValue":[{"__symbolic":"method"}],"_updateRegistrations":[{"__symbolic":"method"}],"_updateValidators":[{"__symbolic":"method"}],"_checkFormPresent":[{"__symbolic":"method"}]}},"FormArrayName":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ControlContainer"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":129,"character":1},"arguments":[{"selector":"[formArrayName]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_p"}]}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":146,"character":3},"arguments":["formArrayName"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":149,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":149,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf","line":149,"character":27}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":150,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":150,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":150,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":151,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":151,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":151,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"_checkParentType":[{"__symbolic":"method"}]}},"FormGroupName":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractFormGroupDirective"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":72,"character":1},"arguments":[{"selector":"[formGroupName]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_o"}]}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3},"arguments":["formGroupName"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":83,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":83,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf","line":83,"character":27}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":84,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":84,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":84,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_VALIDATORS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":85,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Self","line":85,"character":19}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":85,"character":27},"arguments":[{"__symbolic":"reference","name":"NG_ASYNC_VALIDATORS"}]}]],"parameters":[{"__symbolic":"reference","name":"ControlContainer"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]}]}],"_checkParentType":[{"__symbolic":"method"}]}},"NgSelectOption":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":201,"character":1},"arguments":[{"selector":"option"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":212,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":212,"character":19}}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":125,"character":65},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":125,"character":33},{"__symbolic":"reference","name":"SelectControlValueAccessor"}]}],"ngValue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":221,"character":3},"arguments":["ngValue"]}]}],"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":234,"character":3},"arguments":["value"]}]}],"_setElementValue":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"SelectControlValueAccessor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":85,"character":1},"arguments":[{"selector":"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]","host":{"(change)":"onChange($event.target.value)","(blur)":"onTouched()","$quoted$":["(change)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_q"}]}]}],"members":{"compareWith":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":115,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":125,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":125,"character":65}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"_registerOption":[{"__symbolic":"method"}],"_getOptionId":[{"__symbolic":"method"}],"_getOptionValue":[{"__symbolic":"method"}]}},"SelectMultipleControlValueAccessor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":77,"character":1},"arguments":[{"selector":"select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]","host":{"(change)":"onChange($event.target)","(blur)":"onTouched()","$quoted$":["(change)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_r"}]}]}],"members":{"compareWith":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":112,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":122,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":122,"character":65}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"_registerOption":[{"__symbolic":"method"}],"_getOptionId":[{"__symbolic":"method"}],"_getOptionValue":[{"__symbolic":"method"}]}},"AsyncValidator":{"__symbolic":"interface"},"AsyncValidatorFn":{"__symbolic":"interface"},"CheckboxRequiredValidator":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"RequiredValidator"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":216,"character":1},"arguments":[{"selector":"input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_u"}],"host":{"[attr.required]":"required ? \"\" : null","$quoted$":["[attr.required]"]}}]}],"members":{"validate":[{"__symbolic":"method"}]}},"EmailValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":265,"character":1},"arguments":[{"selector":"[email][formControlName],[email][formControl],[email][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_v"}]}]}],"members":{"email":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":279,"character":3}}]}],"validate":[{"__symbolic":"method"}],"registerOnValidatorChange":[{"__symbolic":"method"}]}},"MaxLengthValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":440,"character":1},"arguments":[{"selector":"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_x"}],"host":{"[attr.maxlength]":"maxlength ? maxlength : null","$quoted$":["[attr.maxlength]"]}}]}],"members":{"maxlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":457,"character":3}}]}],"ngOnChanges":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"registerOnValidatorChange":[{"__symbolic":"method"}],"_createValidator":[{"__symbolic":"method"}]}},"MinLengthValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":354,"character":1},"arguments":[{"selector":"[minlength][formControlName],[minlength][formControl],[minlength][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_w"}],"host":{"[attr.minlength]":"minlength ? minlength : null","$quoted$":["[attr.minlength]"]}}]}],"members":{"minlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":371,"character":3}}]}],"ngOnChanges":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"registerOnValidatorChange":[{"__symbolic":"method"}],"_createValidator":[{"__symbolic":"method"}]}},"PatternValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":529,"character":1},"arguments":[{"selector":"[pattern][formControlName],[pattern][formControl],[pattern][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_y"}],"host":{"[attr.pattern]":"pattern ? pattern : null","$quoted$":["[attr.pattern]"]}}]}],"members":{"pattern":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":546,"character":3}}]}],"ngOnChanges":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"registerOnValidatorChange":[{"__symbolic":"method"}],"_createValidator":[{"__symbolic":"method"}]}},"RequiredValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":153,"character":1},"arguments":[{"selector":":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]","providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_t"}],"host":{"[attr.required]":"required ? \"\" : null","$quoted$":["[attr.required]"]}}]}],"members":{"required":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":169,"character":3}}]}],"validate":[{"__symbolic":"method"}],"registerOnValidatorChange":[{"__symbolic":"method"}]}},"ValidationErrors":{"__symbolic":"interface"},"Validator":{"__symbolic":"interface"},"ValidatorFn":{"__symbolic":"interface"},"FormBuilder":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":32,"character":1}}],"members":{"group":[{"__symbolic":"method"}],"control":[{"__symbolic":"method"}],"array":[{"__symbolic":"method"}],"_reduceControls":[{"__symbolic":"method"}],"_createControl":[{"__symbolic":"method"}]}},"AbstractControl":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ValidatorFn"},{"__symbolic":"reference","name":"AsyncValidatorFn"}]}],"setValidators":[{"__symbolic":"method"}],"setAsyncValidators":[{"__symbolic":"method"}],"clearValidators":[{"__symbolic":"method"}],"clearAsyncValidators":[{"__symbolic":"method"}],"markAsTouched":[{"__symbolic":"method"}],"markAsUntouched":[{"__symbolic":"method"}],"markAsDirty":[{"__symbolic":"method"}],"markAsPristine":[{"__symbolic":"method"}],"markAsPending":[{"__symbolic":"method"}],"disable":[{"__symbolic":"method"}],"enable":[{"__symbolic":"method"}],"_updateAncestors":[{"__symbolic":"method"}],"setParent":[{"__symbolic":"method"}],"setValue":[{"__symbolic":"method"}],"patchValue":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"updateValueAndValidity":[{"__symbolic":"method"}],"_updateTreeValidity":[{"__symbolic":"method"}],"_setInitialStatus":[{"__symbolic":"method"}],"_runValidator":[{"__symbolic":"method"}],"_runAsyncValidator":[{"__symbolic":"method"}],"_cancelExistingSubscription":[{"__symbolic":"method"}],"setErrors":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}],"getError":[{"__symbolic":"method"}],"hasError":[{"__symbolic":"method"}],"_updateControlsErrors":[{"__symbolic":"method"}],"_initObservables":[{"__symbolic":"method"}],"_calculateStatus":[{"__symbolic":"method"}],"_updateValue":[{"__symbolic":"method"}],"_forEachChild":[{"__symbolic":"method"}],"_anyControls":[{"__symbolic":"method"}],"_allControlsDisabled":[{"__symbolic":"method"}],"_syncPendingControls":[{"__symbolic":"method"}],"_anyControlsHaveStatus":[{"__symbolic":"method"}],"_anyControlsDirty":[{"__symbolic":"method"}],"_anyControlsTouched":[{"__symbolic":"method"}],"_updatePristine":[{"__symbolic":"method"}],"_updateTouched":[{"__symbolic":"method"}],"_isBoxedValue":[{"__symbolic":"method"}],"_registerOnCollectionChange":[{"__symbolic":"method"}],"_setUpdateStrategy":[{"__symbolic":"method"}]}},"AbstractControlOptions":{"__symbolic":"interface"},"FormArray":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractControl"},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"AbstractControl"}]},{"__symbolic":"reference","name":"ValidatorFn"},{"__symbolic":"reference","name":"AsyncValidatorFn"}]}],"at":[{"__symbolic":"method"}],"push":[{"__symbolic":"method"}],"insert":[{"__symbolic":"method"}],"removeAt":[{"__symbolic":"method"}],"setControl":[{"__symbolic":"method"}],"setValue":[{"__symbolic":"method"}],"patchValue":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"getRawValue":[{"__symbolic":"method"}],"_syncPendingControls":[{"__symbolic":"method"}],"_throwIfControlMissing":[{"__symbolic":"method"}],"_forEachChild":[{"__symbolic":"method"}],"_updateValue":[{"__symbolic":"method"}],"_anyControls":[{"__symbolic":"method"}],"_setUpControls":[{"__symbolic":"method"}],"_checkAllValuesPresent":[{"__symbolic":"method"}],"_allControlsDisabled":[{"__symbolic":"method"}],"_registerControl":[{"__symbolic":"method"}]}},"FormControl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractControl"},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"ValidatorFn"},{"__symbolic":"reference","name":"AsyncValidatorFn"}]}],"setValue":[{"__symbolic":"method"}],"patchValue":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"_updateValue":[{"__symbolic":"method"}],"_anyControls":[{"__symbolic":"method"}],"_allControlsDisabled":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"_clearChangeFns":[{"__symbolic":"method"}],"registerOnDisabledChange":[{"__symbolic":"method"}],"_forEachChild":[{"__symbolic":"method"}],"_syncPendingControls":[{"__symbolic":"method"}],"_applyFormState":[{"__symbolic":"method"}]}},"FormGroup":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"AbstractControl"},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Expression form not supported","line":1216,"character":23,"module":"./src/model"},{"__symbolic":"reference","name":"ValidatorFn"},{"__symbolic":"reference","name":"AsyncValidatorFn"}]}],"registerControl":[{"__symbolic":"method"}],"addControl":[{"__symbolic":"method"}],"removeControl":[{"__symbolic":"method"}],"setControl":[{"__symbolic":"method"}],"contains":[{"__symbolic":"method"}],"setValue":[{"__symbolic":"method"}],"patchValue":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"getRawValue":[{"__symbolic":"method"}],"_syncPendingControls":[{"__symbolic":"method"}],"_throwIfControlMissing":[{"__symbolic":"method"}],"_forEachChild":[{"__symbolic":"method"}],"_setUpControls":[{"__symbolic":"method"}],"_updateValue":[{"__symbolic":"method"}],"_anyControls":[{"__symbolic":"method"}],"_reduceValue":[{"__symbolic":"method"}],"_reduceChildren":[{"__symbolic":"method"}],"_allControlsDisabled":[{"__symbolic":"method"}],"_checkAllValuesPresent":[{"__symbolic":"method"}]}},"NG_ASYNC_VALIDATORS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":57,"character":8},"arguments":["NgAsyncValidators"]},"NG_VALIDATORS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":46,"character":33},"arguments":["NgValidators"]},"Validators":{"__symbolic":"class","members":{},"statics":{"min":{"__symbolic":"function","parameters":["min"],"value":{"__symbolic":"error","message":"Lambda not supported","line":94,"character":11,"module":"./src/validators"}},"max":{"__symbolic":"function","parameters":["max"],"value":{"__symbolic":"error","message":"Lambda not supported","line":125,"character":11,"module":"./src/validators"}},"required":{"__symbolic":"function","parameters":["control"],"value":{"__symbolic":"if","condition":{"__symbolic":"error","message":"Reference to a non-exported function","line":14,"character":9,"context":{"name":"isEmptyInputValue"},"module":"./src/validators"},"thenExpression":{"required":true,"$quoted$":["required"]},"elseExpression":null}},"requiredTrue":{"__symbolic":"function","parameters":["control"],"value":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"control"},"member":"value"},"right":true},"thenExpression":null,"elseExpression":{"required":true,"$quoted$":["required"]}}},"minLength":{"__symbolic":"function","parameters":["minLength"],"value":{"__symbolic":"error","message":"Lambda not supported","line":229,"character":11,"module":"./src/validators"}},"maxLength":{"__symbolic":"function","parameters":["maxLength"],"value":{"__symbolic":"error","message":"Lambda not supported","line":264,"character":11,"module":"./src/validators"}},"nullValidator":{"__symbolic":"function","parameters":["control"],"value":null}}},"VERSION":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"Version","line":19,"character":27},"arguments":["7.2.8"]},"FormsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":22,"character":1},"arguments":[{"declarations":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_ba"},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_j"}],"exports":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bc"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_ba"}]}]}],"members":{},"statics":{"withConfig":{"__symbolic":"function","parameters":["opts"],"value":{"ngModule":{"__symbolic":"reference","name":"FormsModule"},"providers":[{"provide":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_f"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"opts"},"member":"warnOnDeprecatedNgFormSelector"}}]}}}},"ReactiveFormsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":56,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bb"}],"providers":[{"__symbolic":"reference","name":"FormBuilder"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_j"}],"exports":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bc"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bb"}]}]}],"members":{},"statics":{"withConfig":{"__symbolic":"function","parameters":["opts"],"value":{"ngModule":{"__symbolic":"reference","name":"ReactiveFormsModule"},"providers":[{"provide":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_k"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"opts"},"member":"warnOnNgModelWithFormControl"}}]}}}},"ɵangular_packages_forms_forms_z":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bh"},{"__symbolic":"reference","name":"NgSelectOption"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_s"},{"__symbolic":"reference","name":"DefaultValueAccessor"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_be"},{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bg"},{"__symbolic":"reference","name":"CheckboxControlValueAccessor"},{"__symbolic":"reference","name":"SelectControlValueAccessor"},{"__symbolic":"reference","name":"SelectMultipleControlValueAccessor"},{"__symbolic":"reference","name":"RadioControlValueAccessor"},{"__symbolic":"reference","name":"NgControlStatus"},{"__symbolic":"reference","name":"NgControlStatusGroup"},{"__symbolic":"reference","name":"RequiredValidator"},{"__symbolic":"reference","name":"MinLengthValidator"},{"__symbolic":"reference","name":"MaxLengthValidator"},{"__symbolic":"reference","name":"PatternValidator"},{"__symbolic":"reference","name":"CheckboxRequiredValidator"},{"__symbolic":"reference","name":"EmailValidator"}],"ɵangular_packages_forms_forms_ba":[{"__symbolic":"reference","name":"NgModel"},{"__symbolic":"reference","name":"NgModelGroup"},{"__symbolic":"reference","name":"NgForm"},{"__symbolic":"reference","name":"NgFormSelectorWarning"}],"ɵangular_packages_forms_forms_bb":[{"__symbolic":"reference","name":"FormControlDirective"},{"__symbolic":"reference","name":"FormGroupDirective"},{"__symbolic":"reference","name":"FormControlName"},{"__symbolic":"reference","name":"FormGroupName"},{"__symbolic":"reference","name":"FormArrayName"}],"ɵangular_packages_forms_forms_bc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":78,"character":1},"arguments":[{"declarations":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_z"},"exports":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_z"}}]}],"members":{}},"ɵangular_packages_forms_forms_bd":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_be"},"multi":true},"ɵangular_packages_forms_forms_be":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":41,"character":1},"arguments":[{"selector":"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]","host":{"(change)":"onChange($event.target.value)","(input)":"onChange($event.target.value)","(blur)":"onTouched()","$quoted$":["(change)","(input)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bd"}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":65,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":65,"character":65}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}]}},"ɵangular_packages_forms_forms_bf":{"provide":{"__symbolic":"reference","name":"NG_VALUE_ACCESSOR"},"useExisting":{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bg"},"multi":true},"ɵangular_packages_forms_forms_bg":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":41,"character":1},"arguments":[{"selector":"input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]","host":{"(change)":"onChange($event.target.value)","(input)":"onChange($event.target.value)","(blur)":"onTouched()","$quoted$":["(change)","(input)","(blur)"]},"providers":[{"__symbolic":"reference","name":"ɵangular_packages_forms_forms_bf"}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":65,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":65,"character":65}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}]}},"ɵangular_packages_forms_forms_bh":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":27,"character":1},"arguments":[{"selector":"form:not([ngNoForm]):not([ngNativeValidate])","host":{"novalidate":"","$quoted$":["novalidate"]}}]}],"members":{}}},"origins":{"ɵangular_packages_forms_forms_a":"./src/directives/checkbox_value_accessor","ɵangular_packages_forms_forms_b":"./src/directives/default_value_accessor","ɵangular_packages_forms_forms_c":"./src/directives/ng_control_status","ɵangular_packages_forms_forms_d":"./src/directives/ng_control_status","ɵangular_packages_forms_forms_e":"./src/directives/ng_form","ɵangular_packages_forms_forms_f":"./src/directives/ng_form_selector_warning","ɵangular_packages_forms_forms_g":"./src/directives/ng_model","ɵangular_packages_forms_forms_h":"./src/directives/ng_model_group","ɵangular_packages_forms_forms_i":"./src/directives/radio_control_value_accessor","ɵangular_packages_forms_forms_j":"./src/directives/radio_control_value_accessor","ɵangular_packages_forms_forms_k":"./src/directives/reactive_directives/form_control_directive","ɵangular_packages_forms_forms_l":"./src/directives/reactive_directives/form_control_directive","ɵangular_packages_forms_forms_m":"./src/directives/reactive_directives/form_control_name","ɵangular_packages_forms_forms_n":"./src/directives/reactive_directives/form_group_directive","ɵangular_packages_forms_forms_o":"./src/directives/reactive_directives/form_group_name","ɵangular_packages_forms_forms_p":"./src/directives/reactive_directives/form_group_name","ɵangular_packages_forms_forms_q":"./src/directives/select_control_value_accessor","ɵangular_packages_forms_forms_r":"./src/directives/select_multiple_control_value_accessor","ɵangular_packages_forms_forms_s":"./src/directives/select_multiple_control_value_accessor","ɵangular_packages_forms_forms_t":"./src/directives/validators","ɵangular_packages_forms_forms_u":"./src/directives/validators","ɵangular_packages_forms_forms_v":"./src/directives/validators","ɵangular_packages_forms_forms_w":"./src/directives/validators","ɵangular_packages_forms_forms_x":"./src/directives/validators","ɵangular_packages_forms_forms_y":"./src/directives/validators","AbstractControlDirective":"./src/directives/abstract_control_directive","AbstractFormGroupDirective":"./src/directives/abstract_form_group_directive","CheckboxControlValueAccessor":"./src/directives/checkbox_value_accessor","ControlContainer":"./src/directives/control_container","ControlValueAccessor":"./src/directives/control_value_accessor","NG_VALUE_ACCESSOR":"./src/directives/control_value_accessor","COMPOSITION_BUFFER_MODE":"./src/directives/default_value_accessor","DefaultValueAccessor":"./src/directives/default_value_accessor","Form":"./src/directives/form_interface","NgControl":"./src/directives/ng_control","NgControlStatus":"./src/directives/ng_control_status","NgControlStatusGroup":"./src/directives/ng_control_status","NgForm":"./src/directives/ng_form","NgFormSelectorWarning":"./src/directives/ng_form_selector_warning","NgModel":"./src/directives/ng_model","NgModelGroup":"./src/directives/ng_model_group","RadioControlValueAccessor":"./src/directives/radio_control_value_accessor","FormControlDirective":"./src/directives/reactive_directives/form_control_directive","FormControlName":"./src/directives/reactive_directives/form_control_name","FormGroupDirective":"./src/directives/reactive_directives/form_group_directive","FormArrayName":"./src/directives/reactive_directives/form_group_name","FormGroupName":"./src/directives/reactive_directives/form_group_name","NgSelectOption":"./src/directives/select_control_value_accessor","SelectControlValueAccessor":"./src/directives/select_control_value_accessor","SelectMultipleControlValueAccessor":"./src/directives/select_multiple_control_value_accessor","AsyncValidator":"./src/directives/validators","AsyncValidatorFn":"./src/directives/validators","CheckboxRequiredValidator":"./src/directives/validators","EmailValidator":"./src/directives/validators","MaxLengthValidator":"./src/directives/validators","MinLengthValidator":"./src/directives/validators","PatternValidator":"./src/directives/validators","RequiredValidator":"./src/directives/validators","ValidationErrors":"./src/directives/validators","Validator":"./src/directives/validators","ValidatorFn":"./src/directives/validators","FormBuilder":"./src/form_builder","AbstractControl":"./src/model","AbstractControlOptions":"./src/model","FormArray":"./src/model","FormControl":"./src/model","FormGroup":"./src/model","NG_ASYNC_VALIDATORS":"./src/validators","NG_VALIDATORS":"./src/validators","Validators":"./src/validators","VERSION":"./src/version","FormsModule":"./src/form_providers","ReactiveFormsModule":"./src/form_providers","ɵangular_packages_forms_forms_z":"./src/directives","ɵangular_packages_forms_forms_ba":"./src/directives","ɵangular_packages_forms_forms_bb":"./src/directives","ɵangular_packages_forms_forms_bc":"./src/directives","ɵangular_packages_forms_forms_bd":"./src/directives/number_value_accessor","ɵangular_packages_forms_forms_be":"./src/directives/number_value_accessor","ɵangular_packages_forms_forms_bf":"./src/directives/range_value_accessor","ɵangular_packages_forms_forms_bg":"./src/directives/range_value_accessor","ɵangular_packages_forms_forms_bh":"./src/directives/ng_no_validate_directive"},"importAs":"@angular/forms"}
\ No newline at end of file

package.json

@@ -1,6 +1,6 @@
{
"name": "@angular/forms",
- "version": "7.2.7",
+ "version": "7.2.8",
"description": "Angular - directives and services for creating forms",
"main": "./bundles/forms.umd.js",
"module": "./fesm5/forms.js",
@@ -17,9 +17,9 @@
},
"peerDependencies": {
"rxjs": "^6.0.0",
- "@angular/core": "7.2.7",
- "@angular/common": "7.2.7",
- "@angular/platform-browser": "7.2.7"
+ "@angular/core": "7.2.8",
+ "@angular/common": "7.2.8",
+ "@angular/platform-browser": "7.2.8"
},
"repository": {
"type": "git",