blob: 417368137132cf07c0f64f5a3b074b127dac41f1 [file] [log] [blame]
{"version":3,"file":"forms.js","sources":["../../../packages/forms/src/directives/abstract_control_directive.js","../../../packages/forms/src/directives/control_container.js","../../../packages/forms/src/validators.js","../../../packages/forms/src/directives/control_value_accessor.js","../../../packages/forms/src/directives/checkbox_value_accessor.js","../../../packages/forms/src/directives/default_value_accessor.js","../../../packages/forms/src/directives/normalize_validator.js","../../../packages/forms/src/directives/number_value_accessor.js","../../../packages/forms/src/directives/ng_control.js","../../../packages/forms/src/directives/radio_control_value_accessor.js","../../../packages/forms/src/directives/range_value_accessor.js","../../../packages/forms/src/directives/select_control_value_accessor.js","../../../packages/forms/src/directives/select_multiple_control_value_accessor.js","../../../packages/forms/src/directives/shared.js","../../../packages/forms/src/directives/abstract_form_group_directive.js","../../../packages/forms/src/directives/ng_control_status.js","../../../packages/forms/src/model.js","../../../packages/forms/src/directives/ng_form.js","../../../packages/forms/src/directives/error_examples.js","../../../packages/forms/src/directives/template_driven_errors.js","../../../packages/forms/src/directives/ng_model_group.js","../../../packages/forms/src/directives/ng_model.js","../../../packages/forms/src/directives/reactive_errors.js","../../../packages/forms/src/directives/reactive_directives/form_control_directive.js","../../../packages/forms/src/directives/reactive_directives/form_group_directive.js","../../../packages/forms/src/directives/reactive_directives/form_group_name.js","../../../packages/forms/src/directives/reactive_directives/form_control_name.js","../../../packages/forms/src/directives/validators.js","../../../packages/forms/src/form_builder.js","../../../packages/forms/src/version.js","../../../packages/forms/src/directives/ng_no_validate_directive.js","../../../packages/forms/src/directives.js","../../../packages/forms/src/form_providers.js","../../../packages/forms/src/forms.js","../../../packages/forms/public_api.js","../../../packages/forms/forms.js"],"sourcesContent":["/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source 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 * Base class for control directives.\n *\n * Only used internally in the forms module.\n *\n * \\@stable\n * @abstract\n */\nexport class AbstractControlDirective {\n /**\n * The value of the control.\n * @return {?}\n */\n get value() { return this.control ? this.control.value : null; }\n /**\n * A control is `valid` when its `status === VALID`.\n *\n * In order to have this status, the control must have passed all its\n * validation checks.\n * @return {?}\n */\n get valid() { return this.control ? this.control.valid : null; }\n /**\n * A control is `invalid` when its `status === INVALID`.\n *\n * In order to have this status, the control must have failed\n * at least one of its validation checks.\n * @return {?}\n */\n get invalid() { return this.control ? this.control.invalid : null; }\n /**\n * A control is `pending` when its `status === PENDING`.\n *\n * In order to have this status, the control must be in the\n * middle of conducting a validation check.\n * @return {?}\n */\n get pending() { return this.control ? this.control.pending : null; }\n /**\n * A control is `disabled` when its `status === 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 * @return {?}\n */\n get disabled() { return this.control ? this.control.disabled : null; }\n /**\n * A control is `enabled` as long as its `status !== DISABLED`.\n *\n * In other words, it has a status of `VALID`, `INVALID`, or\n * `PENDING`.\n * @return {?}\n */\n get enabled() { return this.control ? this.control.enabled : null; }\n /**\n * Returns any errors generated by failing validation. If there\n * are no errors, it will return null.\n * @return {?}\n */\n get errors() { return this.control ? this.control.errors : null; }\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * Note that programmatic changes to a control's value will\n * *not* mark it dirty.\n * @return {?}\n */\n get pristine() { return this.control ? this.control.pristine : null; }\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * Note that programmatic changes to a control's value will\n * *not* mark it dirty.\n * @return {?}\n */\n get dirty() { return this.control ? this.control.dirty : null; }\n /**\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n * @return {?}\n */\n get touched() { return this.control ? this.control.touched : null; }\n /**\n * @return {?}\n */\n get status() { return this.control ? this.control.status : null; }\n /**\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n * @return {?}\n */\n get untouched() { return this.control ? this.control.untouched : null; }\n /**\n * Emits an event every time the validation status of the control\n * is re-calculated.\n * @return {?}\n */\n get statusChanges() {\n return this.control ? this.control.statusChanges : null;\n }\n /**\n * Emits an event every time the value of the control changes, in\n * the UI or programmatically.\n * @return {?}\n */\n get valueChanges() {\n return this.control ? this.control.valueChanges : null;\n }\n /**\n * Returns an array that represents the path from the top-level form\n * to this control. Each index is the string name of the control on\n * that level.\n * @return {?}\n */\n get path() { return null; }\n /**\n * Resets the form control. This means by default:\n *\n * * it is marked as `pristine`\n * * it is marked as `untouched`\n * * value is set to null\n *\n * For more information, see {\\@link AbstractControl}.\n * @param {?=} value\n * @return {?}\n */\n reset(value = undefined) {\n if (this.control)\n this.control.reset(value);\n }\n /**\n * Returns true if the control with the given path has the error specified. Otherwise\n * returns false.\n *\n * If no path is given, it checks for the error on the present control.\n * @param {?} errorCode\n * @param {?=} path\n * @return {?}\n */\n hasError(errorCode, path) {\n return this.control ? this.control.hasError(errorCode, path) : false;\n }\n /**\n * Returns error data if the control with the given path has the error specified. Otherwise\n * returns null or undefined.\n *\n * If no path is given, it checks for the error on the present control.\n * @param {?} errorCode\n * @param {?=} path\n * @return {?}\n */\n getError(errorCode, path) {\n return this.control ? this.control.getError(errorCode, path) : null;\n }\n}\nfunction AbstractControlDirective_tsickle_Closure_declarations() {\n /**\n * The {\\@link FormControl}, {\\@link FormGroup}, or {\\@link FormArray}\n * that backs this directive. Most properties fall through to that\n * instance.\n * @abstract\n * @return {?}\n */\n AbstractControlDirective.prototype.control = function () { };\n}\n//# sourceMappingURL=abstract_control_directive.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { AbstractControlDirective } from './abstract_control_directive';\n/**\n * A directive that contains multiple {\\@link NgControl}s.\n *\n * Only used by the forms module.\n *\n * \\@stable\n * @abstract\n */\nexport class ControlContainer extends AbstractControlDirective {\n /**\n * Get the form to which this container belongs.\n * @return {?}\n */\n get formDirective() { return null; }\n /**\n * Get the path to this container.\n * @return {?}\n */\n get path() { return null; }\n}\nfunction ControlContainer_tsickle_Closure_declarations() {\n /** @type {?} */\n ControlContainer.prototype.name;\n}\n//# sourceMappingURL=control_container.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { InjectionToken, ɵisObservable as isObservable, ɵisPromise as isPromise } from '@angular/core';\nimport { forkJoin } from 'rxjs/observable/forkJoin';\nimport { fromPromise } from 'rxjs/observable/fromPromise';\nimport { map } from 'rxjs/operator/map';\n/**\n * @param {?} value\n * @return {?}\n */\nfunction 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 * Providers for validators to be used for {\\@link FormControl}s in a form.\n *\n * Provide this using `multi: true` to add validators.\n *\n * ### Example\n *\n * ```typescript\n * \\@Directive({\n * selector: '[custom-validator]',\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 * \\@stable\n */\nexport const /** @type {?} */ NG_VALIDATORS = new InjectionToken('NgValidators');\n/**\n * Providers for asynchronous validators to be used for {\\@link FormControl}s\n * in a form.\n *\n * Provide this using `multi: true` to add validators.\n *\n * See {\\@link NG_VALIDATORS} for more details.\n *\n * \\@stable\n */\nexport const /** @type {?} */ NG_ASYNC_VALIDATORS = new InjectionToken('NgAsyncValidators');\nconst /** @type {?} */ 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 * Provides a set of validators used by form controls.\n *\n * A validator is a function that processes a {\\@link FormControl} or collection of\n * controls and returns a map of errors. A null map means that validation has passed.\n *\n * ### Example\n *\n * ```typescript\n * var loginControl = new FormControl(\"\", Validators.required)\n * ```\n *\n * \\@stable\n */\nexport class Validators {\n /**\n * Validator that requires controls to have a value greater than a number.\n * `min()` exists only as a function, not as a directive. For example,\n * `control = new FormControl('', Validators.min(3));`.\n * @param {?} min\n * @return {?}\n */\n static min(min) {\n return (control) => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n const /** @type {?} */ 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 * Validator that requires controls to have a value less than a number.\n * `max()` exists only as a function, not as a directive. For example,\n * `control = new FormControl('', Validators.max(15));`.\n * @param {?} max\n * @return {?}\n */\n static max(max) {\n return (control) => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n return null; // don't validate empty values to allow optional controls\n }\n const /** @type {?} */ 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 * Validator that requires controls to have a non-empty value.\n * @param {?} control\n * @return {?}\n */\n static required(control) {\n return isEmptyInputValue(control.value) ? { 'required': true } : null;\n }\n /**\n * Validator that requires control value to be true.\n * @param {?} control\n * @return {?}\n */\n static requiredTrue(control) {\n return control.value === true ? null : { 'required': true };\n }\n /**\n * Validator that performs email validation.\n * @param {?} control\n * @return {?}\n */\n static email(control) {\n return EMAIL_REGEXP.test(control.value) ? null : { 'email': true };\n }\n /**\n * Validator that requires controls to have a value of a minimum length.\n * @param {?} minLength\n * @return {?}\n */\n static minLength(minLength) {\n return (control) => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const /** @type {?} */ length = control.value ? control.value.length : 0;\n return length < minLength ?\n { 'minlength': { 'requiredLength': minLength, 'actualLength': length } } :\n null;\n };\n }\n /**\n * Validator that requires controls to have a value of a maximum length.\n * @param {?} maxLength\n * @return {?}\n */\n static maxLength(maxLength) {\n return (control) => {\n const /** @type {?} */ length = control.value ? control.value.length : 0;\n return length > maxLength ?\n { 'maxlength': { 'requiredLength': maxLength, 'actualLength': length } } :\n null;\n };\n }\n /**\n * Validator that requires a control to match a regex to its value.\n * @param {?} pattern\n * @return {?}\n */\n static pattern(pattern) {\n if (!pattern)\n return Validators.nullValidator;\n let /** @type {?} */ regex;\n let /** @type {?} */ regexStr;\n if (typeof pattern === 'string') {\n regexStr = `^${pattern}$`;\n regex = new RegExp(regexStr);\n }\n else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return (control) => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const /** @type {?} */ value = control.value;\n return regex.test(value) ? null :\n { 'pattern': { 'requiredPattern': regexStr, 'actualValue': value } };\n };\n }\n /**\n * No-op validator.\n * @param {?} c\n * @return {?}\n */\n static nullValidator(c) { return null; }\n /**\n * @param {?} validators\n * @return {?}\n */\n static compose(validators) {\n if (!validators)\n return null;\n const /** @type {?} */ presentValidators = /** @type {?} */ (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 * @param {?} validators\n * @return {?}\n */\n static composeAsync(validators) {\n if (!validators)\n return null;\n const /** @type {?} */ presentValidators = /** @type {?} */ (validators.filter(isPresent));\n if (presentValidators.length == 0)\n return null;\n return function (control) {\n const /** @type {?} */ observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n return map.call(forkJoin(observables), _mergeErrors);\n };\n }\n}\n/**\n * @param {?} o\n * @return {?}\n */\nfunction isPresent(o) {\n return o != null;\n}\n/**\n * @param {?} r\n * @return {?}\n */\nexport function toObservable(r) {\n const /** @type {?} */ obs = isPromise(r) ? fromPromise(r) : r;\n if (!(isObservable(obs))) {\n throw new Error(`Expected validator to return Promise or Observable.`);\n }\n return obs;\n}\n/**\n * @param {?} control\n * @param {?} validators\n * @return {?}\n */\nfunction _executeValidators(control, validators) {\n return validators.map(v => v(control));\n}\n/**\n * @param {?} control\n * @param {?} validators\n * @return {?}\n */\nfunction _executeAsyncValidators(control, validators) {\n return validators.map(v => v(control));\n}\n/**\n * @param {?} arrayOfErrors\n * @return {?}\n */\nfunction _mergeErrors(arrayOfErrors) {\n const /** @type {?} */ res = arrayOfErrors.reduce((res, errors) => {\n return errors != null ? Object.assign({}, /** @type {?} */ ((res)), errors) : /** @type {?} */ ((res));\n }, {});\n return Object.keys(res).length === 0 ? null : res;\n}\n//# sourceMappingURL=validators.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { InjectionToken } from '@angular/core';\n/**\n * A `ControlValueAccessor` acts as a bridge between the Angular forms API and a\n * native element in the DOM.\n *\n * Implement this interface if you want to create a custom form control directive\n * that integrates with Angular forms.\n *\n * \\@stable\n * @record\n */\nexport function ControlValueAccessor() { }\nfunction ControlValueAccessor_tsickle_Closure_declarations() {\n /**\n * Writes a new value to the element.\n *\n * This method will be called by the forms API to write to the view when programmatic\n * (model -> view) changes are requested.\n *\n * Example implementation of `writeValue`:\n *\n * ```ts\n * writeValue(value: any): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'value', value);\n * }\n * ```\n * @type {?}\n */\n ControlValueAccessor.prototype.writeValue;\n /**\n * Registers a callback function that should be called when the control's value\n * changes in the UI.\n *\n * This is called by the forms API on initialization so it can update the form\n * model when values propagate from the view (view -> model).\n *\n * If you are implementing `registerOnChange` in your own value accessor, you\n * will typically want to save the given function so your class can call it\n * at the appropriate time.\n *\n * ```ts\n * registerOnChange(fn: (_: any) => void): void {\n * this._onChange = fn;\n * }\n * ```\n *\n * When the value changes in the UI, your class should 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 * @type {?}\n */\n ControlValueAccessor.prototype.registerOnChange;\n /**\n * Registers a callback function that should be called when the control receives\n * a blur event.\n *\n * This is called by the forms API on initialization so it can update the form model\n * on blur.\n *\n * If you are implementing `registerOnTouched` in your own value accessor, you\n * will typically want to save the given function so your class can call it\n * when the control should be considered blurred (a.k.a. \"touched\").\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 * @type {?}\n */\n ControlValueAccessor.prototype.registerOnTouched;\n /**\n * This function is called by the forms API when the control status changes to\n * or from \"DISABLED\". Depending on the value, it should enable or disable the\n * appropriate DOM element.\n *\n * Example implementation of `setDisabledState`:\n *\n * ```ts\n * setDisabledState(isDisabled: boolean): void {\n * this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n * }\n * ```\n *\n * \\@param isDisabled\n * @type {?|undefined}\n */\n ControlValueAccessor.prototype.setDisabledState;\n}\n/**\n * Used to provide a {\\@link ControlValueAccessor} for form controls.\n *\n * See {\\@link DefaultValueAccessor} for how to implement one.\n * \\@stable\n */\nexport const /** @type {?} */ NG_VALUE_ACCESSOR = new InjectionToken('NgValueAccessor');\n//# sourceMappingURL=control_value_accessor.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, ElementRef, Renderer2, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from './control_value_accessor';\nexport const /** @type {?} */ CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlValueAccessor),\n multi: true,\n};\n/**\n * The accessor for writing a value and listening to changes on a checkbox input element.\n *\n * ### Example\n * ```\n * <input type=\"checkbox\" name=\"rememberLogin\" ngModel>\n * ```\n *\n * \\@stable\n */\nexport class CheckboxControlValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) { this.onChange = fn; }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\nCheckboxControlValueAccessor.decorators = [\n { type: Directive, args: [{\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];\n/** @nocollapse */\nCheckboxControlValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n];\nfunction CheckboxControlValueAccessor_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n CheckboxControlValueAccessor.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n CheckboxControlValueAccessor.ctorParameters;\n /** @type {?} */\n CheckboxControlValueAccessor.prototype.onChange;\n /** @type {?} */\n CheckboxControlValueAccessor.prototype.onTouched;\n /** @type {?} */\n CheckboxControlValueAccessor.prototype._renderer;\n /** @type {?} */\n CheckboxControlValueAccessor.prototype._elementRef;\n}\n//# sourceMappingURL=checkbox_value_accessor.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, ElementRef, Inject, InjectionToken, Optional, Renderer2, forwardRef } from '@angular/core';\nimport { ɵgetDOM as getDOM } from '@angular/platform-browser';\nimport { NG_VALUE_ACCESSOR } from './control_value_accessor';\nexport const /** @type {?} */ DEFAULT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => 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 * @return {?}\n */\nfunction _isAndroid() {\n const /** @type {?} */ userAgent = getDOM() ? getDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n/**\n * Turn this mode on if you want form directives to buffer IME input until compositionend\n * \\@experimental\n */\nexport const /** @type {?} */ COMPOSITION_BUFFER_MODE = new InjectionToken('CompositionEventMode');\n/**\n * The default accessor for writing a value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n * ### Example\n * ```\n * <input type=\"text\" name=\"searchQuery\" ngModel>\n * ```\n *\n * \\@stable\n */\nexport class DefaultValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n * @param {?} _compositionMode\n */\n constructor(_renderer, _elementRef, _compositionMode) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this._compositionMode = _compositionMode;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n /**\n * Whether the user is creating a composition string (IME events).\n */\n this._composing = false;\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n const /** @type {?} */ normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) { this.onChange = fn; }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _handleInput(value) {\n if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n this.onChange(value);\n }\n }\n /**\n * \\@internal\n * @return {?}\n */\n _compositionStart() { this._composing = true; }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _compositionEnd(value) {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n }\n}\nDefaultValueAccessor.decorators = [\n { type: Directive, args: [{\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];\n/** @nocollapse */\nDefaultValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [COMPOSITION_BUFFER_MODE,] },] },\n];\nfunction DefaultValueAccessor_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n DefaultValueAccessor.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n DefaultValueAccessor.ctorParameters;\n /** @type {?} */\n DefaultValueAccessor.prototype.onChange;\n /** @type {?} */\n DefaultValueAccessor.prototype.onTouched;\n /**\n * Whether the user is creating a composition string (IME events).\n * @type {?}\n */\n DefaultValueAccessor.prototype._composing;\n /** @type {?} */\n DefaultValueAccessor.prototype._renderer;\n /** @type {?} */\n DefaultValueAccessor.prototype._elementRef;\n /** @type {?} */\n DefaultValueAccessor.prototype._compositionMode;\n}\n//# sourceMappingURL=default_value_accessor.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source 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 * @param {?} validator\n * @return {?}\n */\nexport function normalizeValidator(validator) {\n if ((/** @type {?} */ (validator)).validate) {\n return (c) => (/** @type {?} */ (validator)).validate(c);\n }\n else {\n return /** @type {?} */ (validator);\n }\n}\n/**\n * @param {?} validator\n * @return {?}\n */\nexport function normalizeAsyncValidator(validator) {\n if ((/** @type {?} */ (validator)).validate) {\n return (c) => (/** @type {?} */ (validator)).validate(c);\n }\n else {\n return /** @type {?} */ (validator);\n }\n}\n//# sourceMappingURL=normalize_validator.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, ElementRef, Renderer2, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from './control_value_accessor';\nexport const /** @type {?} */ NUMBER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberValueAccessor),\n multi: true\n};\n/**\n * The accessor for writing a number value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n * ### Example\n * ```\n * <input type=\"number\" [(ngModel)]=\"age\">\n * ```\n */\nexport class NumberValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n const /** @type {?} */ normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\nNumberValueAccessor.decorators = [\n { type: Directive, args: [{\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];\n/** @nocollapse */\nNumberValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n];\nfunction NumberValueAccessor_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n NumberValueAccessor.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n NumberValueAccessor.ctorParameters;\n /** @type {?} */\n NumberValueAccessor.prototype.onChange;\n /** @type {?} */\n NumberValueAccessor.prototype.onTouched;\n /** @type {?} */\n NumberValueAccessor.prototype._renderer;\n /** @type {?} */\n NumberValueAccessor.prototype._elementRef;\n}\n//# sourceMappingURL=number_value_accessor.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { AbstractControlDirective } from './abstract_control_directive';\n/**\n * @return {?}\n */\nfunction unimplemented() {\n throw new Error('unimplemented');\n}\n/**\n * A base class that all control directive extend.\n * It binds a {\\@link FormControl} object to a DOM element.\n *\n * Used internally by Angular forms.\n *\n * \\@stable\n * @abstract\n */\nexport class NgControl extends AbstractControlDirective {\n constructor() {\n super(...arguments);\n /**\n * \\@internal\n */\n this._parent = null;\n this.name = null;\n this.valueAccessor = null;\n /**\n * \\@internal\n */\n this._rawValidators = [];\n /**\n * \\@internal\n */\n this._rawAsyncValidators = [];\n }\n /**\n * @return {?}\n */\n get validator() { return /** @type {?} */ (unimplemented()); }\n /**\n * @return {?}\n */\n get asyncValidator() { return /** @type {?} */ (unimplemented()); }\n}\nfunction NgControl_tsickle_Closure_declarations() {\n /**\n * \\@internal\n * @type {?}\n */\n NgControl.prototype._parent;\n /** @type {?} */\n NgControl.prototype.name;\n /** @type {?} */\n NgControl.prototype.valueAccessor;\n /**\n * \\@internal\n * @type {?}\n */\n NgControl.prototype._rawValidators;\n /**\n * \\@internal\n * @type {?}\n */\n NgControl.prototype._rawAsyncValidators;\n /**\n * @abstract\n * @param {?} newValue\n * @return {?}\n */\n NgControl.prototype.viewToModelUpdate = function (newValue) { };\n}\n//# sourceMappingURL=ng_control.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, ElementRef, Injectable, Injector, Input, Renderer2, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from './control_value_accessor';\nimport { NgControl } from './ng_control';\nexport const /** @type {?} */ RADIO_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioControlValueAccessor),\n multi: true\n};\n/**\n * Internal class used by Angular to uncheck radio buttons with the matching name.\n */\nexport class RadioControlRegistry {\n constructor() {\n this._accessors = [];\n }\n /**\n * @param {?} control\n * @param {?} accessor\n * @return {?}\n */\n add(control, accessor) {\n this._accessors.push([control, accessor]);\n }\n /**\n * @param {?} accessor\n * @return {?}\n */\n remove(accessor) {\n for (let /** @type {?} */ 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 * @param {?} accessor\n * @return {?}\n */\n select(accessor) {\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 * @param {?} controlPair\n * @param {?} accessor\n * @return {?}\n */\n _isSameGroup(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}\nRadioControlRegistry.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nRadioControlRegistry.ctorParameters = () => [];\nfunction RadioControlRegistry_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n RadioControlRegistry.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n RadioControlRegistry.ctorParameters;\n /** @type {?} */\n RadioControlRegistry.prototype._accessors;\n}\n/**\n * \\@whatItDoes Writes radio control values and listens to radio control changes.\n *\n * Used by {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName}\n * to keep the view synced with the {\\@link FormControl} model.\n *\n * \\@howToUse\n *\n * If you have imported the {\\@link FormsModule} or the {\\@link ReactiveFormsModule}, this\n * value accessor will be active on any radio control that has a form directive. You do\n * **not** need to add a special selector to activate it.\n *\n * ### How to use radio buttons with form directives\n *\n * To use radio buttons in a template-driven form, you'll want to ensure that radio buttons\n * in the same group have the same `name` attribute. Radio buttons with different `name`\n * attributes do not affect each other.\n *\n * {\\@example forms/ts/radioButtons/radio_button_example.ts region='TemplateDriven'}\n *\n * When using radio buttons in a reactive form, radio buttons in the same group should have the\n * same `formControlName`. You can also add a `name` attribute, but it's optional.\n *\n * {\\@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nexport class RadioControlValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n * @param {?} _registry\n * @param {?} _injector\n */\n constructor(_renderer, _elementRef, _registry, _injector) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this._registry = _registry;\n this._injector = _injector;\n this.onChange = () => { };\n this.onTouched = () => { };\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() { this._registry.remove(this); }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this._state = value === this.value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) {\n this._fn = fn;\n this.onChange = () => {\n fn(this.value);\n this._registry.select(this);\n };\n }\n /**\n * @param {?} value\n * @return {?}\n */\n fireUncheck(value) { this.writeValue(value); }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n /**\n * @return {?}\n */\n _checkName() {\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 /**\n * @return {?}\n */\n _throwNameError() {\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}\nRadioControlValueAccessor.decorators = [\n { type: Directive, args: [{\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];\n/** @nocollapse */\nRadioControlValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n { type: RadioControlRegistry, },\n { type: Injector, },\n];\nRadioControlValueAccessor.propDecorators = {\n \"name\": [{ type: Input },],\n \"formControlName\": [{ type: Input },],\n \"value\": [{ type: Input },],\n};\nfunction RadioControlValueAccessor_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n RadioControlValueAccessor.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n RadioControlValueAccessor.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n RadioControlValueAccessor.propDecorators;\n /**\n * \\@internal\n * @type {?}\n */\n RadioControlValueAccessor.prototype._state;\n /**\n * \\@internal\n * @type {?}\n */\n RadioControlValueAccessor.prototype._control;\n /**\n * \\@internal\n * @type {?}\n */\n RadioControlValueAccessor.prototype._fn;\n /** @type {?} */\n RadioControlValueAccessor.prototype.onChange;\n /** @type {?} */\n RadioControlValueAccessor.prototype.onTouched;\n /** @type {?} */\n RadioControlValueAccessor.prototype.name;\n /** @type {?} */\n RadioControlValueAccessor.prototype.formControlName;\n /** @type {?} */\n RadioControlValueAccessor.prototype.value;\n /** @type {?} */\n RadioControlValueAccessor.prototype._renderer;\n /** @type {?} */\n RadioControlValueAccessor.prototype._elementRef;\n /** @type {?} */\n RadioControlValueAccessor.prototype._registry;\n /** @type {?} */\n RadioControlValueAccessor.prototype._injector;\n}\n//# sourceMappingURL=radio_control_value_accessor.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, ElementRef, Renderer2, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from './control_value_accessor';\nexport const /** @type {?} */ RANGE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeValueAccessor),\n multi: true\n};\n/**\n * The accessor for writing a range value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n * ### Example\n * ```\n * <input type=\"range\" [(ngModel)]=\"age\" >\n * ```\n */\nexport class RangeValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\nRangeValueAccessor.decorators = [\n { type: Directive, args: [{\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];\n/** @nocollapse */\nRangeValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n];\nfunction RangeValueAccessor_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n RangeValueAccessor.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n RangeValueAccessor.ctorParameters;\n /** @type {?} */\n RangeValueAccessor.prototype.onChange;\n /** @type {?} */\n RangeValueAccessor.prototype.onTouched;\n /** @type {?} */\n RangeValueAccessor.prototype._renderer;\n /** @type {?} */\n RangeValueAccessor.prototype._elementRef;\n}\n//# sourceMappingURL=range_value_accessor.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, ElementRef, Host, Input, Optional, Renderer2, forwardRef, ɵlooseIdentical as looseIdentical } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from './control_value_accessor';\nexport const /** @type {?} */ SELECT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectControlValueAccessor),\n multi: true\n};\n/**\n * @param {?} id\n * @param {?} value\n * @return {?}\n */\nfunction _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/**\n * @param {?} valueString\n * @return {?}\n */\nfunction _extractId(valueString) {\n return valueString.split(':')[0];\n}\n/**\n * \\@whatItDoes Writes values and listens to changes on a select element.\n *\n * Used by {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName}\n * to keep the view synced with the {\\@link FormControl} model.\n *\n * \\@howToUse\n *\n * If you have imported the {\\@link FormsModule} or the {\\@link ReactiveFormsModule}, this\n * value accessor will be active on any select control that has a form directive. You do\n * **not** need to add a special selector to activate it.\n *\n * ### How to use select controls with form directives\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 * If your option values are simple strings, you can bind to the normal `value` property\n * on the option. If your option values happen to be objects (and you'd like to save the\n * selection in your form as an object), use `ngValue` instead:\n *\n * {\\@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * In reactive forms, you'll also want to add your form directive (`formControlName` or\n * `formControl`) on the main `<select>` tag. Like in the former example, you have the\n * choice of binding to the `value` or `ngValue` property on the select's options.\n *\n * {\\@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Caveat: 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 * #### Syntax\n *\n * ```\n * <select [compareWith]=\"compareFn\" [(ngModel)]=\"selectedCountries\">\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 * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nexport class SelectControlValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * \\@internal\n */\n this._optionMap = new Map();\n /**\n * \\@internal\n */\n this._idCounter = 0;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n this._compareWith = looseIdentical;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n set compareWith(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 /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this.value = value;\n const /** @type {?} */ id = this._getOptionId(value);\n if (id == null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n }\n const /** @type {?} */ valueString = _buildValueString(id, value);\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) {\n this.onChange = (valueString) => {\n this.value = this._getOptionValue(valueString);\n fn(this.value);\n };\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n /**\n * \\@internal\n * @return {?}\n */\n _registerOption() { return (this._idCounter++).toString(); }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _getOptionId(value) {\n for (const /** @type {?} */ id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id), value))\n return id;\n }\n return null;\n }\n /**\n * \\@internal\n * @param {?} valueString\n * @return {?}\n */\n _getOptionValue(valueString) {\n const /** @type {?} */ id = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n }\n}\nSelectControlValueAccessor.decorators = [\n { type: Directive, args: [{\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];\n/** @nocollapse */\nSelectControlValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n];\nSelectControlValueAccessor.propDecorators = {\n \"compareWith\": [{ type: Input },],\n};\nfunction SelectControlValueAccessor_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n SelectControlValueAccessor.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n SelectControlValueAccessor.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n SelectControlValueAccessor.propDecorators;\n /** @type {?} */\n SelectControlValueAccessor.prototype.value;\n /**\n * \\@internal\n * @type {?}\n */\n SelectControlValueAccessor.prototype._optionMap;\n /**\n * \\@internal\n * @type {?}\n */\n SelectControlValueAccessor.prototype._idCounter;\n /** @type {?} */\n SelectControlValueAccessor.prototype.onChange;\n /** @type {?} */\n SelectControlValueAccessor.prototype.onTouched;\n /** @type {?} */\n SelectControlValueAccessor.prototype._compareWith;\n /** @type {?} */\n SelectControlValueAccessor.prototype._renderer;\n /** @type {?} */\n SelectControlValueAccessor.prototype._elementRef;\n}\n/**\n * \\@whatItDoes Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * \\@howToUse\n *\n * See docs for {\\@link SelectControlValueAccessor} for usage examples.\n *\n * \\@stable\n */\nexport class NgSelectOption {\n /**\n * @param {?} _element\n * @param {?} _renderer\n * @param {?} _select\n */\n constructor(_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 /**\n * @param {?} value\n * @return {?}\n */\n set ngValue(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 /**\n * @param {?} value\n * @return {?}\n */\n set value(value) {\n this._setElementValue(value);\n if (this._select)\n this._select.writeValue(this._select.value);\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _setElementValue(value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\nNgSelectOption.decorators = [\n { type: Directive, args: [{ selector: 'option' },] },\n];\n/** @nocollapse */\nNgSelectOption.ctorParameters = () => [\n { type: ElementRef, },\n { type: Renderer2, },\n { type: SelectControlValueAccessor, decorators: [{ type: Optional }, { type: Host },] },\n];\nNgSelectOption.propDecorators = {\n \"ngValue\": [{ type: Input, args: ['ngValue',] },],\n \"value\": [{ type: Input, args: ['value',] },],\n};\nfunction NgSelectOption_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n NgSelectOption.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n NgSelectOption.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n NgSelectOption.propDecorators;\n /** @type {?} */\n NgSelectOption.prototype.id;\n /** @type {?} */\n NgSelectOption.prototype._element;\n /** @type {?} */\n NgSelectOption.prototype._renderer;\n /** @type {?} */\n NgSelectOption.prototype._select;\n}\n//# sourceMappingURL=select_control_value_accessor.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, ElementRef, Host, Input, Optional, Renderer2, forwardRef, ɵlooseIdentical as looseIdentical } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from './control_value_accessor';\nexport const /** @type {?} */ SELECT_MULTIPLE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectMultipleControlValueAccessor),\n multi: true\n};\n/**\n * @param {?} id\n * @param {?} value\n * @return {?}\n */\nfunction _buildValueString(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/**\n * @param {?} valueString\n * @return {?}\n */\nfunction _extractId(valueString) {\n return valueString.split(':')[0];\n}\n/**\n * Mock interface for HTML Options\n * @record\n */\nfunction HTMLOption() { }\nfunction HTMLOption_tsickle_Closure_declarations() {\n /** @type {?} */\n HTMLOption.prototype.value;\n /** @type {?} */\n HTMLOption.prototype.selected;\n}\n/**\n * Mock interface for HTMLCollection\n * @abstract\n */\nclass HTMLCollection {\n}\nfunction HTMLCollection_tsickle_Closure_declarations() {\n /** @type {?} */\n HTMLCollection.prototype.length;\n /**\n * @abstract\n * @param {?} _\n * @return {?}\n */\n HTMLCollection.prototype.item = function (_) { };\n}\n/**\n * The accessor for writing a value and listening to changes on a select element.\n *\n * ### Caveat: Options selection\n *\n * Angular uses object identity to select options. 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 multiple>` supports `compareWith`\n * input. `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects options by the return value of the function.\n *\n * #### Syntax\n *\n * ```\n * <select multiple [compareWith]=\"compareFn\" [(ngModel)]=\"selectedCountries\">\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 * \\@stable\n */\nexport class SelectMultipleControlValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * \\@internal\n */\n this._optionMap = new Map();\n /**\n * \\@internal\n */\n this._idCounter = 0;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n this._compareWith = looseIdentical;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n set compareWith(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 /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this.value = value;\n let /** @type {?} */ optionSelectedStateSetter;\n if (Array.isArray(value)) {\n // convert values to ids\n const /** @type {?} */ ids = value.map((v) => this._getOptionId(v));\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(ids.indexOf(o.toString()) > -1); };\n }\n else {\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(false); };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) {\n this.onChange = (_) => {\n const /** @type {?} */ selected = [];\n if (_.hasOwnProperty('selectedOptions')) {\n const /** @type {?} */ options = _.selectedOptions;\n for (let /** @type {?} */ i = 0; i < options.length; i++) {\n const /** @type {?} */ opt = options.item(i);\n const /** @type {?} */ val = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n else {\n const /** @type {?} */ options = /** @type {?} */ (_.options);\n for (let /** @type {?} */ i = 0; i < options.length; i++) {\n const /** @type {?} */ opt = options.item(i);\n if (opt.selected) {\n const /** @type {?} */ val = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n this.value = selected;\n fn(selected);\n };\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _registerOption(value) {\n const /** @type {?} */ id = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _getOptionId(value) {\n for (const /** @type {?} */ id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(/** @type {?} */ ((this._optionMap.get(id)))._value, value))\n return id;\n }\n return null;\n }\n /**\n * \\@internal\n * @param {?} valueString\n * @return {?}\n */\n _getOptionValue(valueString) {\n const /** @type {?} */ id = _extractId(valueString);\n return this._optionMap.has(id) ? /** @type {?} */ ((this._optionMap.get(id)))._value : valueString;\n }\n}\nSelectMultipleControlValueAccessor.decorators = [\n { type: Directive, args: [{\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];\n/** @nocollapse */\nSelectMultipleControlValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n];\nSelectMultipleControlValueAccessor.propDecorators = {\n \"compareWith\": [{ type: Input },],\n};\nfunction SelectMultipleControlValueAccessor_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n SelectMultipleControlValueAccessor.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n SelectMultipleControlValueAccessor.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n SelectMultipleControlValueAccessor.propDecorators;\n /** @type {?} */\n SelectMultipleControlValueAccessor.prototype.value;\n /**\n * \\@internal\n * @type {?}\n */\n SelectMultipleControlValueAccessor.prototype._optionMap;\n /**\n * \\@internal\n * @type {?}\n */\n SelectMultipleControlValueAccessor.prototype._idCounter;\n /** @type {?} */\n SelectMultipleControlValueAccessor.prototype.onChange;\n /** @type {?} */\n SelectMultipleControlValueAccessor.prototype.onTouched;\n /** @type {?} */\n SelectMultipleControlValueAccessor.prototype._compareWith;\n /** @type {?} */\n SelectMultipleControlValueAccessor.prototype._renderer;\n /** @type {?} */\n SelectMultipleControlValueAccessor.prototype._elementRef;\n}\n/**\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * ### Example\n *\n * ```\n * <select multiple name=\"city\" ngModel>\n * <option *ngFor=\"let c of cities\" [value]=\"c\"></option>\n * </select>\n * ```\n */\nexport class NgSelectMultipleOption {\n /**\n * @param {?} _element\n * @param {?} _renderer\n * @param {?} _select\n */\n constructor(_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 /**\n * @param {?} value\n * @return {?}\n */\n set ngValue(value) {\n if (this._select == null)\n return;\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n /**\n * @param {?} value\n * @return {?}\n */\n set value(value) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n else {\n this._setElementValue(value);\n }\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _setElementValue(value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n /**\n * \\@internal\n * @param {?} selected\n * @return {?}\n */\n _setSelected(selected) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\nNgSelectMultipleOption.decorators = [\n { type: Directive, args: [{ selector: 'option' },] },\n];\n/** @nocollapse */\nNgSelectMultipleOption.ctorParameters = () => [\n { type: ElementRef, },\n { type: Renderer2, },\n { type: SelectMultipleControlValueAccessor, decorators: [{ type: Optional }, { type: Host },] },\n];\nNgSelectMultipleOption.propDecorators = {\n \"ngValue\": [{ type: Input, args: ['ngValue',] },],\n \"value\": [{ type: Input, args: ['value',] },],\n};\nfunction NgSelectMultipleOption_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n NgSelectMultipleOption.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n NgSelectMultipleOption.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n NgSelectMultipleOption.propDecorators;\n /** @type {?} */\n NgSelectMultipleOption.prototype.id;\n /**\n * \\@internal\n * @type {?}\n */\n NgSelectMultipleOption.prototype._value;\n /** @type {?} */\n NgSelectMultipleOption.prototype._element;\n /** @type {?} */\n NgSelectMultipleOption.prototype._renderer;\n /** @type {?} */\n NgSelectMultipleOption.prototype._select;\n}\n//# sourceMappingURL=select_multiple_control_value_accessor.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { ɵlooseIdentical as looseIdentical } from '@angular/core';\nimport { Validators } from '../validators';\nimport { CheckboxControlValueAccessor } from './checkbox_value_accessor';\nimport { DefaultValueAccessor } from './default_value_accessor';\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 { SelectControlValueAccessor } from './select_control_value_accessor';\nimport { SelectMultipleControlValueAccessor } from './select_multiple_control_value_accessor';\n/**\n * @param {?} name\n * @param {?} parent\n * @return {?}\n */\nexport function controlPath(name, parent) {\n return [.../** @type {?} */ ((parent.path)), name];\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nexport 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([/** @type {?} */ ((control.validator)), dir.validator]);\n control.asyncValidator = Validators.composeAsync([/** @type {?} */ ((control.asyncValidator)), dir.asyncValidator]); /** @type {?} */\n ((dir.valueAccessor)).writeValue(control.value);\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n setUpBlurPipeline(control, dir);\n if (/** @type {?} */ ((dir.valueAccessor)).setDisabledState) {\n control.registerOnDisabledChange((isDisabled) => { /** @type {?} */ ((/** @type {?} */ ((dir.valueAccessor)).setDisabledState))(isDisabled); });\n }\n // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n dir._rawValidators.forEach((validator) => {\n if ((/** @type {?} */ (validator)).registerOnValidatorChange)\n /** @type {?} */ (((/** @type {?} */ (validator)).registerOnValidatorChange))(() => control.updateValueAndValidity());\n });\n dir._rawAsyncValidators.forEach((validator) => {\n if ((/** @type {?} */ (validator)).registerOnValidatorChange)\n /** @type {?} */ (((/** @type {?} */ (validator)).registerOnValidatorChange))(() => control.updateValueAndValidity());\n });\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nexport function cleanUpControl(control, dir) {\n /** @type {?} */ ((dir.valueAccessor)).registerOnChange(() => _noControlError(dir)); /** @type {?} */\n ((dir.valueAccessor)).registerOnTouched(() => _noControlError(dir));\n dir._rawValidators.forEach((validator) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n dir._rawAsyncValidators.forEach((validator) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n if (control)\n control._clearChangeFns();\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpViewChangePipeline(control, dir) {\n /** @type {?} */ ((dir.valueAccessor)).registerOnChange((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/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpBlurPipeline(control, dir) {\n /** @type {?} */ ((dir.valueAccessor)).registerOnTouched(() => {\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/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction updateControl(control, dir) {\n dir.viewToModelUpdate(control._pendingValue);\n if (control._pendingDirty)\n control.markAsDirty();\n control.setValue(control._pendingValue, { emitModelToViewChange: false });\n control._pendingChange = false;\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpModelChangePipeline(control, dir) {\n control.registerOnChange((newValue, emitModelEvent) => {\n /** @type {?} */ ((\n // control -> view\n dir.valueAccessor)).writeValue(newValue);\n // control -> ngModel\n if (emitModelEvent)\n dir.viewToModelUpdate(newValue);\n });\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nexport 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/**\n * @param {?} dir\n * @return {?}\n */\nfunction _noControlError(dir) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\n/**\n * @param {?} dir\n * @param {?} message\n * @return {?}\n */\nfunction _throwError(dir, message) {\n let /** @type {?} */ messageEnd;\n if (/** @type {?} */ ((dir.path)).length > 1) {\n messageEnd = `path: '${(/** @type {?} */ ((dir.path))).join(' -> ')}'`;\n }\n else if (/** @type {?} */ ((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/**\n * @param {?} validators\n * @return {?}\n */\nexport function composeValidators(validators) {\n return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n}\n/**\n * @param {?} validators\n * @return {?}\n */\nexport function composeAsyncValidators(validators) {\n return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n null;\n}\n/**\n * @param {?} changes\n * @param {?} viewModel\n * @return {?}\n */\nexport function isPropertyUpdated(changes, viewModel) {\n if (!changes.hasOwnProperty('model'))\n return false;\n const /** @type {?} */ change = changes['model'];\n if (change.isFirstChange())\n return true;\n return !looseIdentical(viewModel, change.currentValue);\n}\nconst /** @type {?} */ BUILTIN_ACCESSORS = [\n CheckboxControlValueAccessor,\n RangeValueAccessor,\n NumberValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n];\n/**\n * @param {?} valueAccessor\n * @return {?}\n */\nexport function isBuiltInAccessor(valueAccessor) {\n return BUILTIN_ACCESSORS.some(a => valueAccessor.constructor === a);\n}\n/**\n * @param {?} form\n * @param {?} directives\n * @return {?}\n */\nexport function syncPendingControls(form, directives) {\n form._syncPendingControls();\n directives.forEach(dir => {\n const /** @type {?} */ control = /** @type {?} */ (dir.control);\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n}\n/**\n * @param {?} dir\n * @param {?} valueAccessors\n * @return {?}\n */\nexport function selectValueAccessor(dir, valueAccessors) {\n if (!valueAccessors)\n return null;\n let /** @type {?} */ defaultAccessor = undefined;\n let /** @type {?} */ builtinAccessor = undefined;\n let /** @type {?} */ customAccessor = undefined;\n valueAccessors.forEach((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/**\n * @template T\n * @param {?} list\n * @param {?} el\n * @return {?}\n */\nexport function removeDir(list, el) {\n const /** @type {?} */ index = list.indexOf(el);\n if (index > -1)\n list.splice(index, 1);\n}\n//# sourceMappingURL=shared.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { ControlContainer } from './control_container';\nimport { composeAsyncValidators, composeValidators, controlPath } from './shared';\n/**\n * This is a base class for code shared between {\\@link NgModelGroup} and {\\@link FormGroupName}.\n *\n * \\@stable\n */\nexport class AbstractFormGroupDirective extends ControlContainer {\n /**\n * @return {?}\n */\n ngOnInit() {\n this._checkParentType(); /** @type {?} */\n ((this.formDirective)).addFormGroup(this);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this.formDirective) {\n this.formDirective.removeFormGroup(this);\n }\n }\n /**\n * Get the {\\@link FormGroup} backing this binding.\n * @return {?}\n */\n get control() { return /** @type {?} */ ((this.formDirective)).getFormGroup(this); }\n /**\n * Get the path to this control group.\n * @return {?}\n */\n get path() { return controlPath(this.name, this._parent); }\n /**\n * Get the {\\@link Form} to which this group belongs.\n * @return {?}\n */\n get formDirective() { return this._parent ? this._parent.formDirective : null; }\n /**\n * @return {?}\n */\n get validator() { return composeValidators(this._validators); }\n /**\n * @return {?}\n */\n get asyncValidator() {\n return composeAsyncValidators(this._asyncValidators);\n }\n /**\n * \\@internal\n * @return {?}\n */\n _checkParentType() { }\n}\nfunction AbstractFormGroupDirective_tsickle_Closure_declarations() {\n /**\n * \\@internal\n * @type {?}\n */\n AbstractFormGroupDirective.prototype._parent;\n /**\n * \\@internal\n * @type {?}\n */\n AbstractFormGroupDirective.prototype._validators;\n /**\n * \\@internal\n * @type {?}\n */\n AbstractFormGroupDirective.prototype._asyncValidators;\n}\n//# sourceMappingURL=abstract_form_group_directive.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, Self } from '@angular/core';\nimport { ControlContainer } from './control_container';\nimport { NgControl } from './ng_control';\nexport class AbstractControlStatus {\n /**\n * @param {?} cd\n */\n constructor(cd) { this._cd = cd; }\n /**\n * @return {?}\n */\n get ngClassUntouched() { return this._cd.control ? this._cd.control.untouched : false; }\n /**\n * @return {?}\n */\n get ngClassTouched() { return this._cd.control ? this._cd.control.touched : false; }\n /**\n * @return {?}\n */\n get ngClassPristine() { return this._cd.control ? this._cd.control.pristine : false; }\n /**\n * @return {?}\n */\n get ngClassDirty() { return this._cd.control ? this._cd.control.dirty : false; }\n /**\n * @return {?}\n */\n get ngClassValid() { return this._cd.control ? this._cd.control.valid : false; }\n /**\n * @return {?}\n */\n get ngClassInvalid() { return this._cd.control ? this._cd.control.invalid : false; }\n /**\n * @return {?}\n */\n get ngClassPending() { return this._cd.control ? this._cd.control.pending : false; }\n}\nfunction AbstractControlStatus_tsickle_Closure_declarations() {\n /** @type {?} */\n AbstractControlStatus.prototype._cd;\n}\nexport const /** @type {?} */ 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 * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status. The following classes are applied as the properties\n * 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 * \\@stable\n */\nexport class NgControlStatus extends AbstractControlStatus {\n /**\n * @param {?} cd\n */\n constructor(cd) { super(cd); }\n}\nNgControlStatus.decorators = [\n { type: Directive, args: [{ selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost },] },\n];\n/** @nocollapse */\nNgControlStatus.ctorParameters = () => [\n { type: NgControl, decorators: [{ type: Self },] },\n];\nfunction NgControlStatus_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n NgControlStatus.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n NgControlStatus.ctorParameters;\n}\n/**\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n *\n * \\@stable\n */\nexport class NgControlStatusGroup extends AbstractControlStatus {\n /**\n * @param {?} cd\n */\n constructor(cd) { super(cd); }\n}\nNgControlStatusGroup.decorators = [\n { type: Directive, args: [{\n selector: '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n host: ngControlStatusHost\n },] },\n];\n/** @nocollapse */\nNgControlStatusGroup.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Self },] },\n];\nfunction NgControlStatusGroup_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n NgControlStatusGroup.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n NgControlStatusGroup.ctorParameters;\n}\n//# sourceMappingURL=ng_control_status.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { EventEmitter } from '@angular/core';\nimport { composeAsyncValidators, composeValidators } from './directives/shared';\nimport { toObservable } from './validators';\n/**\n * Indicates that a FormControl is valid, i.e. that no errors exist in the input value.\n */\nexport const /** @type {?} */ VALID = 'VALID';\n/**\n * Indicates that a FormControl is invalid, i.e. that an error exists in the input value.\n */\nexport const /** @type {?} */ INVALID = 'INVALID';\n/**\n * Indicates that a FormControl is pending, i.e. that async validation is occurring and\n * errors are not yet available for the input value.\n */\nexport const /** @type {?} */ PENDING = 'PENDING';\n/**\n * Indicates that a FormControl is disabled, i.e. that the control is exempt from ancestor\n * calculations of validity or value.\n */\nexport const /** @type {?} */ DISABLED = 'DISABLED';\n/**\n * @param {?} control\n * @param {?} path\n * @param {?} delimiter\n * @return {?}\n */\nfunction _find(control, path, delimiter) {\n if (path == null)\n return null;\n if (!(path instanceof Array)) {\n path = (/** @type {?} */ (path)).split(delimiter);\n }\n if (path instanceof Array && (path.length === 0))\n return null;\n return (/** @type {?} */ (path)).reduce((v, name) => {\n if (v instanceof FormGroup) {\n return v.controls[name] || null;\n }\n if (v instanceof FormArray) {\n return v.at(/** @type {?} */ (name)) || null;\n }\n return null;\n }, control);\n}\n/**\n * @param {?=} validatorOrOpts\n * @return {?}\n */\nfunction coerceToValidator(validatorOrOpts) {\n const /** @type {?} */ validator = /** @type {?} */ ((isOptionsObj(validatorOrOpts) ? (/** @type {?} */ (validatorOrOpts)).validators :\n validatorOrOpts));\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\n/**\n * @param {?=} asyncValidator\n * @param {?=} validatorOrOpts\n * @return {?}\n */\nfunction coerceToAsyncValidator(asyncValidator, validatorOrOpts) {\n const /** @type {?} */ origAsyncValidator = /** @type {?} */ ((isOptionsObj(validatorOrOpts) ? (/** @type {?} */ (validatorOrOpts)).asyncValidators :\n asyncValidator));\n return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :\n origAsyncValidator || null;\n}\n/**\n * @record\n */\nexport function AbstractControlOptions() { }\nfunction AbstractControlOptions_tsickle_Closure_declarations() {\n /** @type {?|undefined} */\n AbstractControlOptions.prototype.validators;\n /** @type {?|undefined} */\n AbstractControlOptions.prototype.asyncValidators;\n /** @type {?|undefined} */\n AbstractControlOptions.prototype.updateOn;\n}\n/**\n * @param {?=} validatorOrOpts\n * @return {?}\n */\nfunction isOptionsObj(validatorOrOpts) {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&\n typeof validatorOrOpts === 'object';\n}\n/**\n * \\@whatItDoes This is the base class for {\\@link FormControl}, {\\@link FormGroup}, and\n * {\\@link 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 * \\@stable\n * @abstract\n */\nexport class AbstractControl {\n /**\n * @param {?} validator\n * @param {?} asyncValidator\n */\n constructor(validator, asyncValidator) {\n this.validator = validator;\n this.asyncValidator = asyncValidator;\n /**\n * \\@internal\n */\n this._onCollectionChange = () => { };\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * Note that programmatic changes to a control's value will\n * *not* mark it dirty.\n */\n this.pristine = true;\n /**\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n */\n this.touched = false;\n /**\n * \\@internal\n */\n this._onDisabledChange = [];\n }\n /**\n * The parent control.\n * @return {?}\n */\n get parent() { return this._parent; }\n /**\n * A control is `valid` when its `status === VALID`.\n *\n * In order to have this status, the control must have passed all its\n * validation checks.\n * @return {?}\n */\n get valid() { return this.status === VALID; }\n /**\n * A control is `invalid` when its `status === INVALID`.\n *\n * In order to have this status, the control must have failed\n * at least one of its validation checks.\n * @return {?}\n */\n get invalid() { return this.status === INVALID; }\n /**\n * A control is `pending` when its `status === PENDING`.\n *\n * In order to have this status, the control must be in the\n * middle of conducting a validation check.\n * @return {?}\n */\n get pending() { return this.status == PENDING; }\n /**\n * A control is `disabled` when its `status === 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 * @return {?}\n */\n get disabled() { return this.status === DISABLED; }\n /**\n * A control is `enabled` as long as its `status !== DISABLED`.\n *\n * In other words, it has a status of `VALID`, `INVALID`, or\n * `PENDING`.\n * @return {?}\n */\n get enabled() { return this.status !== DISABLED; }\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * Note that programmatic changes to a control's value will\n * *not* mark it dirty.\n * @return {?}\n */\n get dirty() { return !this.pristine; }\n /**\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n * @return {?}\n */\n get untouched() { return !this.touched; }\n /**\n * Returns the update strategy of the `AbstractControl` (i.e.\n * the event on which the control will update itself).\n * Possible values: `'change'` (default) | `'blur'` | `'submit'`\n * @return {?}\n */\n get updateOn() {\n return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');\n }\n /**\n * Sets the synchronous validators that are active on this control. Calling\n * this will overwrite any existing sync validators.\n * @param {?} newValidator\n * @return {?}\n */\n setValidators(newValidator) {\n this.validator = coerceToValidator(newValidator);\n }\n /**\n * Sets the async validators that are active on this control. Calling this\n * will overwrite any existing async validators.\n * @param {?} newValidator\n * @return {?}\n */\n setAsyncValidators(newValidator) {\n this.asyncValidator = coerceToAsyncValidator(newValidator);\n }\n /**\n * Empties out the sync validator list.\n * @return {?}\n */\n clearValidators() { this.validator = null; }\n /**\n * Empties out the async validator list.\n * @return {?}\n */\n clearAsyncValidators() { this.asyncValidator = null; }\n /**\n * Marks the control as `touched`.\n *\n * This will also mark all direct ancestors as `touched` to maintain\n * the model.\n * @param {?=} opts\n * @return {?}\n */\n markAsTouched(opts = {}) {\n (/** @type {?} */ (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, it will also mark all children as `untouched`\n * to maintain the model, and re-calculate the `touched` status of all parent\n * controls.\n * @param {?=} opts\n * @return {?}\n */\n markAsUntouched(opts = {}) {\n (/** @type {?} */ (this)).touched = false;\n this._pendingTouched = false;\n this._forEachChild((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`.\n *\n * This will also mark all direct ancestors as `dirty` to maintain\n * the model.\n * @param {?=} opts\n * @return {?}\n */\n markAsDirty(opts = {}) {\n (/** @type {?} */ (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, it will also mark all children as `pristine`\n * to maintain the model, and re-calculate the `pristine` status of all parent\n * controls.\n * @param {?=} opts\n * @return {?}\n */\n markAsPristine(opts = {}) {\n (/** @type {?} */ (this)).pristine = true;\n this._pendingDirty = false;\n this._forEachChild((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 * @param {?=} opts\n * @return {?}\n */\n markAsPending(opts = {}) {\n (/** @type {?} */ (this)).status = PENDING;\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsPending(opts);\n }\n }\n /**\n * Disables the control. This means the control will be 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 will be disabled to maintain the model.\n * @param {?=} opts\n * @return {?}\n */\n disable(opts = {}) {\n (/** @type {?} */ (this)).status = DISABLED;\n (/** @type {?} */ (this)).errors = null;\n this._forEachChild((control) => { control.disable({ onlySelf: true }); });\n this._updateValue();\n if (opts.emitEvent !== false) {\n (/** @type {?} */ (this.valueChanges)).emit(this.value);\n (/** @type {?} */ (this.statusChanges)).emit(this.status);\n }\n this._updateAncestors(!!opts.onlySelf);\n this._onDisabledChange.forEach((changeFn) => changeFn(true));\n }\n /**\n * Enables the control. This means the control will be included in validation checks and\n * the aggregate value of its parent. Its status is re-calculated based on its value and\n * its validators.\n *\n * If the control has children, all children will be enabled.\n * @param {?=} opts\n * @return {?}\n */\n enable(opts = {}) {\n (/** @type {?} */ (this)).status = VALID;\n this._forEachChild((control) => { control.enable({ onlySelf: true }); });\n this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n this._updateAncestors(!!opts.onlySelf);\n this._onDisabledChange.forEach((changeFn) => changeFn(false));\n }\n /**\n * @param {?} onlySelf\n * @return {?}\n */\n _updateAncestors(onlySelf) {\n if (this._parent && !onlySelf) {\n this._parent.updateValueAndValidity();\n this._parent._updatePristine();\n this._parent._updateTouched();\n }\n }\n /**\n * @param {?} parent\n * @return {?}\n */\n setParent(parent) { this._parent = parent; }\n /**\n * Re-calculates the value and validation status of the control.\n *\n * By default, it will also update the value and validity of its ancestors.\n * @param {?=} opts\n * @return {?}\n */\n updateValueAndValidity(opts = {}) {\n this._setInitialStatus();\n this._updateValue();\n if (this.enabled) {\n this._cancelExistingSubscription();\n (/** @type {?} */ (this)).errors = this._runValidator();\n (/** @type {?} */ (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 (/** @type {?} */ (this.valueChanges)).emit(this.value);\n (/** @type {?} */ (this.statusChanges)).emit(this.status);\n }\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n }\n }\n /**\n * \\@internal\n * @param {?=} opts\n * @return {?}\n */\n _updateTreeValidity(opts = { emitEvent: true }) {\n this._forEachChild((ctrl) => ctrl._updateTreeValidity(opts));\n this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n }\n /**\n * @return {?}\n */\n _setInitialStatus() {\n (/** @type {?} */ (this)).status = this._allControlsDisabled() ? DISABLED : VALID;\n }\n /**\n * @return {?}\n */\n _runValidator() {\n return this.validator ? this.validator(this) : null;\n }\n /**\n * @param {?=} emitEvent\n * @return {?}\n */\n _runAsyncValidator(emitEvent) {\n if (this.asyncValidator) {\n (/** @type {?} */ (this)).status = PENDING;\n const /** @type {?} */ obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription =\n obs.subscribe((errors) => this.setErrors(errors, { emitEvent }));\n }\n }\n /**\n * @return {?}\n */\n _cancelExistingSubscription() {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n }\n }\n /**\n * Sets errors on a form control.\n *\n * This is used when validations are run manually by the user, rather than automatically.\n *\n * Calling `setErrors` will also update the validity of the parent control.\n *\n * ### Example\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 * @param {?} errors\n * @param {?=} opts\n * @return {?}\n */\n setErrors(errors, opts = {}) {\n (/** @type {?} */ (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 * Paths can be passed in as an array or a string delimited by a dot.\n *\n * To get a 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 * @param {?} path\n * @return {?}\n */\n get(path) { return _find(this, path, '.'); }\n /**\n * Returns error data if the control with the given path has the error specified. Otherwise\n * returns null or undefined.\n *\n * If no path is given, it checks for the error on the present control.\n * @param {?} errorCode\n * @param {?=} path\n * @return {?}\n */\n getError(errorCode, path) {\n const /** @type {?} */ control = path ? this.get(path) : this;\n return control && control.errors ? control.errors[errorCode] : null;\n }\n /**\n * Returns true if the control with the given path has the error specified. Otherwise\n * returns false.\n *\n * If no path is given, it checks for the error on the present control.\n * @param {?} errorCode\n * @param {?=} path\n * @return {?}\n */\n hasError(errorCode, path) { return !!this.getError(errorCode, path); }\n /**\n * Retrieves the top-level ancestor of this control.\n * @return {?}\n */\n get root() {\n let /** @type {?} */ x = this;\n while (x._parent) {\n x = x._parent;\n }\n return x;\n }\n /**\n * \\@internal\n * @param {?} emitEvent\n * @return {?}\n */\n _updateControlsErrors(emitEvent) {\n (/** @type {?} */ (this)).status = this._calculateStatus();\n if (emitEvent) {\n (/** @type {?} */ (this.statusChanges)).emit(this.status);\n }\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent);\n }\n }\n /**\n * \\@internal\n * @return {?}\n */\n _initObservables() {\n (/** @type {?} */ (this)).valueChanges = new EventEmitter();\n (/** @type {?} */ (this)).statusChanges = new EventEmitter();\n }\n /**\n * @return {?}\n */\n _calculateStatus() {\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 /**\n * \\@internal\n * @param {?} status\n * @return {?}\n */\n _anyControlsHaveStatus(status) {\n return this._anyControls((control) => control.status === status);\n }\n /**\n * \\@internal\n * @return {?}\n */\n _anyControlsDirty() {\n return this._anyControls((control) => control.dirty);\n }\n /**\n * \\@internal\n * @return {?}\n */\n _anyControlsTouched() {\n return this._anyControls((control) => control.touched);\n }\n /**\n * \\@internal\n * @param {?=} opts\n * @return {?}\n */\n _updatePristine(opts = {}) {\n (/** @type {?} */ (this)).pristine = !this._anyControlsDirty();\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n /**\n * \\@internal\n * @param {?=} opts\n * @return {?}\n */\n _updateTouched(opts = {}) {\n (/** @type {?} */ (this)).touched = this._anyControlsTouched();\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n /**\n * \\@internal\n * @param {?} formState\n * @return {?}\n */\n _isBoxedValue(formState) {\n return typeof formState === 'object' && formState !== null &&\n Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n }\n /**\n * \\@internal\n * @param {?} fn\n * @return {?}\n */\n _registerOnCollectionChange(fn) { this._onCollectionChange = fn; }\n /**\n * \\@internal\n * @param {?=} opts\n * @return {?}\n */\n _setUpdateStrategy(opts) {\n if (isOptionsObj(opts) && (/** @type {?} */ (opts)).updateOn != null) {\n this._updateOn = /** @type {?} */ (((/** @type {?} */ (opts)).updateOn));\n }\n }\n}\nfunction AbstractControl_tsickle_Closure_declarations() {\n /**\n * \\@internal\n * @type {?}\n */\n AbstractControl.prototype._pendingDirty;\n /**\n * \\@internal\n * @type {?}\n */\n AbstractControl.prototype._pendingTouched;\n /**\n * \\@internal\n * @type {?}\n */\n AbstractControl.prototype._onCollectionChange;\n /**\n * \\@internal\n * @type {?}\n */\n AbstractControl.prototype._updateOn;\n /** @type {?} */\n AbstractControl.prototype._parent;\n /** @type {?} */\n AbstractControl.prototype._asyncValidationSubscription;\n /** @type {?} */\n AbstractControl.prototype.value;\n /**\n * The validation status of the control. There are four possible\n * validation statuses:\n *\n * * **VALID**: control has passed all validation checks\n * * **INVALID**: control has failed at least one validation check\n * * **PENDING**: control is in the midst of conducting a validation check\n * * **DISABLED**: control is exempt from validation checks\n *\n * These statuses are mutually exclusive, so a control cannot be\n * both valid AND invalid or invalid AND disabled.\n * @type {?}\n */\n AbstractControl.prototype.status;\n /**\n * Returns any errors generated by failing validation. If there\n * are no errors, it will return null.\n * @type {?}\n */\n AbstractControl.prototype.errors;\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * Note that programmatic changes to a control's value will\n * *not* mark it dirty.\n * @type {?}\n */\n AbstractControl.prototype.pristine;\n /**\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n * @type {?}\n */\n AbstractControl.prototype.touched;\n /**\n * Emits an event every time the value of the control changes, in\n * the UI or programmatically.\n * @type {?}\n */\n AbstractControl.prototype.valueChanges;\n /**\n * Emits an event every time the validation status of the control\n * is re-calculated.\n * @type {?}\n */\n AbstractControl.prototype.statusChanges;\n /**\n * \\@internal\n * @type {?}\n */\n AbstractControl.prototype._onDisabledChange;\n /** @type {?} */\n AbstractControl.prototype.validator;\n /** @type {?} */\n AbstractControl.prototype.asyncValidator;\n /**\n * Sets the value of the control. Abstract method (implemented in sub-classes).\n * @abstract\n * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n AbstractControl.prototype.setValue = function (value, options) { };\n /**\n * Patches the value of the control. Abstract method (implemented in sub-classes).\n * @abstract\n * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n AbstractControl.prototype.patchValue = function (value, options) { };\n /**\n * Resets the control. Abstract method (implemented in sub-classes).\n * @abstract\n * @param {?=} value\n * @param {?=} options\n * @return {?}\n */\n AbstractControl.prototype.reset = function (value, options) { };\n /**\n * \\@internal\n * @abstract\n * @return {?}\n */\n AbstractControl.prototype._updateValue = function () { };\n /**\n * \\@internal\n * @abstract\n * @param {?} cb\n * @return {?}\n */\n AbstractControl.prototype._forEachChild = function (cb) { };\n /**\n * \\@internal\n * @abstract\n * @param {?} condition\n * @return {?}\n */\n AbstractControl.prototype._anyControls = function (condition) { };\n /**\n * \\@internal\n * @abstract\n * @return {?}\n */\n AbstractControl.prototype._allControlsDisabled = function () { };\n /**\n * \\@internal\n * @abstract\n * @return {?}\n */\n AbstractControl.prototype._syncPendingControls = function () { };\n}\n/**\n * \\@whatItDoes Tracks the value and validation status of an individual form control.\n *\n * It is one of the three fundamental building blocks of Angular forms, along with\n * {\\@link FormGroup} and {\\@link FormArray}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormControl}, you can pass in an initial value as the\n * first argument. Example:\n *\n * ```ts\n * const ctrl = new FormControl('some value');\n * console.log(ctrl.value); // 'some value'\n * ```\n *\n * You can also initialize the control with a form state object on instantiation,\n * which includes both the value and whether or not the control is disabled.\n * You can't use the value key without the disabled key; both are required\n * to use this way of initialization.\n *\n * ```ts\n * const ctrl = new FormControl({value: 'n/a', disabled: true});\n * console.log(ctrl.value); // 'n/a'\n * console.log(ctrl.status); // 'DISABLED'\n * ```\n *\n * The second {\\@link FormControl} argument can accept one of three things:\n * * a sync validator function\n * * an array of sync validator functions\n * * an options object containing validator and/or async validator functions\n *\n * Example of a single sync validator function:\n *\n * ```ts\n * const ctrl = new FormControl('', Validators.required);\n * console.log(ctrl.value); // ''\n * console.log(ctrl.status); // 'INVALID'\n * ```\n *\n * Example using options object:\n *\n * ```ts\n * const ctrl = new FormControl('', {\n * validators: Validators.required,\n * asyncValidators: myAsyncValidator\n * });\n * ```\n *\n * The options object can also be used to define when the control should update.\n * By default, the value and validity of a control updates whenever the value\n * changes. You can configure it to update on the blur event instead by setting\n * the `updateOn` option to `'blur'`.\n *\n * ```ts\n * const c = new FormControl('', { updateOn: 'blur' });\n * ```\n *\n * You can also set `updateOn` to `'submit'`, which will delay value and validity\n * updates until the parent form of the control fires a submit event.\n *\n * See its superclass, {\\@link AbstractControl}, for more properties and methods.\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nexport class FormControl extends AbstractControl {\n /**\n * @param {?=} formState\n * @param {?=} validatorOrOpts\n * @param {?=} asyncValidator\n */\n constructor(formState = null, validatorOrOpts, asyncValidator) {\n super(coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n /**\n * \\@internal\n */\n this._onChange = [];\n this._applyFormState(formState);\n this._setUpdateStrategy(validatorOrOpts);\n this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n this._initObservables();\n }\n /**\n * Set the value of the form control to `value`.\n *\n * If `onlySelf` is `true`, this change will only affect the validation of this `FormControl`\n * and not its parent component. This defaults to false.\n *\n * If `emitEvent` is `true`, this\n * change will cause a `valueChanges` event on the `FormControl` to be emitted. This defaults\n * to true (as it falls through to `updateValueAndValidity`).\n *\n * If `emitModelToViewChange` is `true`, the view will be notified about the new value\n * via an `onChange` event. This is the default behavior if `emitModelToViewChange` is not\n * specified.\n *\n * If `emitViewToModelChange` is `true`, an ngModelChange event will be fired to update the\n * model. This is the default behavior if `emitViewToModelChange` is not specified.\n * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n setValue(value, options = {}) {\n (/** @type {?} */ (this)).value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach((changeFn) => 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 * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n patchValue(value, options = {}) {\n this.setValue(value, options);\n }\n /**\n * Resets the form control. This means by default:\n *\n * * it is marked as `pristine`\n * * it is marked as `untouched`\n * * value is set to null\n *\n * You can also 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 * Ex:\n *\n * ```ts\n * this.control.reset('Nancy');\n *\n * console.log(this.control.value); // 'Nancy'\n * ```\n *\n * OR\n *\n * ```\n * this.control.reset({value: 'Nancy', disabled: true});\n *\n * console.log(this.control.value); // 'Nancy'\n * console.log(this.control.status); // 'DISABLED'\n * ```\n * @param {?=} formState\n * @param {?=} options\n * @return {?}\n */\n reset(formState = null, 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 * @return {?}\n */\n _updateValue() { }\n /**\n * \\@internal\n * @param {?} condition\n * @return {?}\n */\n _anyControls(condition) { return false; }\n /**\n * \\@internal\n * @return {?}\n */\n _allControlsDisabled() { return this.disabled; }\n /**\n * Register a listener for change events.\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) { this._onChange.push(fn); }\n /**\n * \\@internal\n * @return {?}\n */\n _clearChangeFns() {\n this._onChange = [];\n this._onDisabledChange = [];\n this._onCollectionChange = () => { };\n }\n /**\n * Register a listener for disabled events.\n * @param {?} fn\n * @return {?}\n */\n registerOnDisabledChange(fn) {\n this._onDisabledChange.push(fn);\n }\n /**\n * \\@internal\n * @param {?} cb\n * @return {?}\n */\n _forEachChild(cb) { }\n /**\n * \\@internal\n * @return {?}\n */\n _syncPendingControls() {\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 /**\n * @param {?} formState\n * @return {?}\n */\n _applyFormState(formState) {\n if (this._isBoxedValue(formState)) {\n (/** @type {?} */ (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 (/** @type {?} */ (this)).value = this._pendingValue = formState;\n }\n }\n}\nfunction FormControl_tsickle_Closure_declarations() {\n /**\n * \\@internal\n * @type {?}\n */\n FormControl.prototype._onChange;\n /**\n * \\@internal\n * @type {?}\n */\n FormControl.prototype._pendingValue;\n /**\n * \\@internal\n * @type {?}\n */\n FormControl.prototype._pendingChange;\n}\n/**\n * \\@whatItDoes Tracks the value and validity state of a group of {\\@link FormControl}\n * instances.\n *\n * A `FormGroup` aggregates the values of each child {\\@link FormControl} into one object,\n * with each control name as the key. It calculates its status by reducing the statuses\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 {\\@link FormControl} and {\\@link FormArray}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormGroup}, pass in a collection of child controls as the first\n * argument. The key for each child will be the name under which it is registered.\n *\n * ### Example\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 * You can also 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 * ### Example\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 {\\@link FormControl} instances, you can alternatively 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 * The options object can also be 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 will 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 * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nexport class FormGroup extends AbstractControl {\n /**\n * @param {?} controls\n * @param {?=} validatorOrOpts\n * @param {?=} asyncValidator\n */\n constructor(controls, validatorOrOpts, asyncValidator) {\n super(coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this.controls = controls;\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\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, so for most cases you'll want\n * to use {\\@link FormGroup#addControl addControl} instead.\n * @param {?} name\n * @param {?} control\n * @return {?}\n */\n registerControl(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 * @param {?} name\n * @param {?} control\n * @return {?}\n */\n addControl(name, control) {\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n /**\n * Remove a control from this group.\n * @param {?} name\n * @return {?}\n */\n removeControl(name) {\n if (this.controls[name])\n this.controls[name]._registerOnCollectionChange(() => { });\n delete (this.controls[name]);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n /**\n * Replace an existing control.\n * @param {?} name\n * @param {?} control\n * @return {?}\n */\n setControl(name, control) {\n if (this.controls[name])\n this.controls[name]._registerOnCollectionChange(() => { });\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 * It will return false for disabled controls. If you'd like to check for existence in the group\n * only, use {\\@link AbstractControl#get get} instead.\n * @param {?} controlName\n * @return {?}\n */\n contains(controlName) {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n }\n /**\n * Sets the value of the {\\@link FormGroup}. It accepts an object that matches\n * the structure of the group, with control names as keys.\n *\n * This method performs strict checks, so it will throw 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 * ### Example\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.setValue({first: 'Nancy', last: 'Drew'});\n * console.log(form.value); // {first: 'Nancy', last: 'Drew'}\n *\n * ```\n * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n setValue(value, options = {}) {\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 * Patches the value of the {\\@link FormGroup}. It accepts an object with control\n * names as keys, and will do 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 * ### Example\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\n * @param {?=} options\n * @return {?}\n */\n patchValue(value, options = {}) {\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 * Resets the {\\@link FormGroup}. This means by default:\n *\n * * The group and all descendants are marked `pristine`\n * * The group and all descendants are marked `untouched`\n * * The value of all descendants will be null or null maps\n *\n * You can also 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 * can be a standalone value or a form state object with both a value and a disabled\n * status.\n *\n * ### Example\n *\n * ```ts\n * this.form.reset({first: 'name', last: 'last name'});\n *\n * console.log(this.form.value); // {first: 'name', last: 'last name'}\n * ```\n *\n * - OR -\n *\n * ```\n * this.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 * @param {?=} value\n * @param {?=} options\n * @return {?}\n */\n reset(value = {}, options = {}) {\n this._forEachChild((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 {\\@link FormGroup}, including any disabled controls.\n *\n * If you'd like to include all values regardless of disabled status, use this method.\n * Otherwise, the `value` property is the best way to get the value of the group.\n * @return {?}\n */\n getRawValue() {\n return this._reduceChildren({}, (acc, control, name) => {\n acc[name] = control instanceof FormControl ? control.value : (/** @type {?} */ (control)).getRawValue();\n return acc;\n });\n }\n /**\n * \\@internal\n * @return {?}\n */\n _syncPendingControls() {\n let /** @type {?} */ subtreeUpdated = this._reduceChildren(false, (updated, child) => {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated)\n this.updateValueAndValidity({ onlySelf: true });\n return subtreeUpdated;\n }\n /**\n * \\@internal\n * @param {?} name\n * @return {?}\n */\n _throwIfControlMissing(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 /**\n * \\@internal\n * @param {?} cb\n * @return {?}\n */\n _forEachChild(cb) {\n Object.keys(this.controls).forEach(k => cb(this.controls[k], k));\n }\n /**\n * \\@internal\n * @return {?}\n */\n _setUpControls() {\n this._forEachChild((control) => {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n });\n }\n /**\n * \\@internal\n * @return {?}\n */\n _updateValue() { (/** @type {?} */ (this)).value = this._reduceValue(); }\n /**\n * \\@internal\n * @param {?} condition\n * @return {?}\n */\n _anyControls(condition) {\n let /** @type {?} */ res = false;\n this._forEachChild((control, name) => {\n res = res || (this.contains(name) && condition(control));\n });\n return res;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _reduceValue() {\n return this._reduceChildren({}, (acc, control, name) => {\n if (control.enabled || this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n }\n /**\n * \\@internal\n * @param {?} initValue\n * @param {?} fn\n * @return {?}\n */\n _reduceChildren(initValue, fn) {\n let /** @type {?} */ res = initValue;\n this._forEachChild((control, name) => { res = fn(res, control, name); });\n return res;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _allControlsDisabled() {\n for (const /** @type {?} */ 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 * @param {?} value\n * @return {?}\n */\n _checkAllValuesPresent(value) {\n this._forEachChild((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}\nfunction FormGroup_tsickle_Closure_declarations() {\n /** @type {?} */\n FormGroup.prototype.controls;\n}\n/**\n * \\@whatItDoes Tracks the value and validity state of an array of {\\@link FormControl},\n * {\\@link FormGroup} or {\\@link FormArray} instances.\n *\n * A `FormArray` aggregates the values of each child {\\@link FormControl} into an array.\n * It calculates its status by reducing the statuses 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 {\\@link FormControl} and {\\@link FormGroup}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormArray}, pass in an array of child controls as the first\n * argument.\n *\n * ### Example\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 * You can also 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 can be 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 * The options object can also be 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 will default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormArray([\n * new FormControl()\n * ], {updateOn: 'blur'});\n * ```\n *\n * ### Adding or removing controls\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 will result in strange and unexpected behavior such\n * as broken change detection.\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nexport class FormArray extends AbstractControl {\n /**\n * @param {?} controls\n * @param {?=} validatorOrOpts\n * @param {?=} asyncValidator\n */\n constructor(controls, validatorOrOpts, asyncValidator) {\n super(coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this.controls = controls;\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n }\n /**\n * Get the {\\@link AbstractControl} at the given `index` in the array.\n * @param {?} index\n * @return {?}\n */\n at(index) { return this.controls[index]; }\n /**\n * Insert a new {\\@link AbstractControl} at the end of the array.\n * @param {?} control\n * @return {?}\n */\n push(control) {\n this.controls.push(control);\n this._registerControl(control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n /**\n * Insert a new {\\@link AbstractControl} at the given `index` in the array.\n * @param {?} index\n * @param {?} control\n * @return {?}\n */\n insert(index, control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n /**\n * Remove the control at the given `index` in the array.\n * @param {?} index\n * @return {?}\n */\n removeAt(index) {\n if (this.controls[index])\n this.controls[index]._registerOnCollectionChange(() => { });\n this.controls.splice(index, 1);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n /**\n * Replace an existing control.\n * @param {?} index\n * @param {?} control\n * @return {?}\n */\n setControl(index, control) {\n if (this.controls[index])\n this.controls[index]._registerOnCollectionChange(() => { });\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 /**\n * Length of the control array.\n * @return {?}\n */\n get length() { return this.controls.length; }\n /**\n * Sets the value of the {\\@link FormArray}. It accepts an array that matches\n * the structure of the control.\n *\n * This method performs strict checks, so it will throw 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 * ### Example\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 * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n setValue(value, options = {}) {\n this._checkAllValuesPresent(value);\n value.forEach((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 {\\@link FormArray}. It accepts an array that matches the\n * structure of the control, and will do 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 * ### Example\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 * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n patchValue(value, options = {}) {\n value.forEach((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 {\\@link FormArray}. This means by default:\n *\n * * The array and all descendants are marked `pristine`\n * * The array and all descendants are marked `untouched`\n * * The value of all descendants will be null or null maps\n *\n * You can also reset to a specific form state by passing in an array of states\n * that matches the structure of the control. The state can be a standalone value\n * or a form state object with both a value and a disabled status.\n *\n * ### Example\n *\n * ```ts\n * this.arr.reset(['name', 'last name']);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * ```\n *\n * - OR -\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 * @param {?=} value\n * @param {?=} options\n * @return {?}\n */\n reset(value = [], options = {}) {\n this._forEachChild((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 * If you'd like to include all values regardless of disabled status, use this method.\n * Otherwise, the `value` property is the best way to get the value of the array.\n * @return {?}\n */\n getRawValue() {\n return this.controls.map((control) => {\n return control instanceof FormControl ? control.value : (/** @type {?} */ (control)).getRawValue();\n });\n }\n /**\n * \\@internal\n * @return {?}\n */\n _syncPendingControls() {\n let /** @type {?} */ subtreeUpdated = this.controls.reduce((updated, child) => {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated)\n this.updateValueAndValidity({ onlySelf: true });\n return subtreeUpdated;\n }\n /**\n * \\@internal\n * @param {?} index\n * @return {?}\n */\n _throwIfControlMissing(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 /**\n * \\@internal\n * @param {?} cb\n * @return {?}\n */\n _forEachChild(cb) {\n this.controls.forEach((control, index) => { cb(control, index); });\n }\n /**\n * \\@internal\n * @return {?}\n */\n _updateValue() {\n (/** @type {?} */ (this)).value =\n this.controls.filter((control) => control.enabled || this.disabled)\n .map((control) => control.value);\n }\n /**\n * \\@internal\n * @param {?} condition\n * @return {?}\n */\n _anyControls(condition) {\n return this.controls.some((control) => control.enabled && condition(control));\n }\n /**\n * \\@internal\n * @return {?}\n */\n _setUpControls() {\n this._forEachChild((control) => this._registerControl(control));\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _checkAllValuesPresent(value) {\n this._forEachChild((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 /**\n * \\@internal\n * @return {?}\n */\n _allControlsDisabled() {\n for (const /** @type {?} */ control of this.controls) {\n if (control.enabled)\n return false;\n }\n return this.controls.length > 0 || this.disabled;\n }\n /**\n * @param {?} control\n * @return {?}\n */\n _registerControl(control) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n }\n}\nfunction FormArray_tsickle_Closure_declarations() {\n /** @type {?} */\n FormArray.prototype.controls;\n}\n//# sourceMappingURL=model.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, EventEmitter, Inject, Input, Optional, Self, forwardRef } from '@angular/core';\nimport { FormGroup } from '../model';\nimport { NG_ASYNC_VALIDATORS, NG_VALIDATORS } from '../validators';\nimport { ControlContainer } from './control_container';\nimport { composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls } from './shared';\nexport const /** @type {?} */ formDirectiveProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgForm)\n};\nconst /** @type {?} */ resolvedPromise = Promise.resolve(null);\n/**\n * \\@whatItDoes Creates a top-level {\\@link FormGroup} instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * \\@howToUse\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 can 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 * {\\@link FormGroup} instance are duplicated on the directive itself, so a reference to it\n * will give 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, you'll want to use {\\@link NgModel} with a\n * `name` attribute. You can also use {\\@link NgModelGroup} if you'd like to create\n * sub-groups within the form.\n *\n * You can listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event will be emitted with the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * If you want to import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, you can add `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 * {\\@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `FormsModule`\n *\n * \\@stable\n */\nexport class NgForm extends ControlContainer {\n /**\n * @param {?} validators\n * @param {?} asyncValidators\n */\n constructor(validators, asyncValidators) {\n super();\n this.submitted = false;\n this._directives = [];\n this.ngSubmit = new EventEmitter();\n this.form =\n new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n }\n /**\n * @return {?}\n */\n ngAfterViewInit() { this._setUpdateStrategy(); }\n /**\n * @return {?}\n */\n get formDirective() { return this; }\n /**\n * @return {?}\n */\n get control() { return this.form; }\n /**\n * @return {?}\n */\n get path() { return []; }\n /**\n * @return {?}\n */\n get controls() { return this.form.controls; }\n /**\n * @param {?} dir\n * @return {?}\n */\n addControl(dir) {\n resolvedPromise.then(() => {\n const /** @type {?} */ container = this._findContainer(dir.path);\n (/** @type {?} */ (dir)).control = /** @type {?} */ (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 * @param {?} dir\n * @return {?}\n */\n getControl(dir) { return /** @type {?} */ (this.form.get(dir.path)); }\n /**\n * @param {?} dir\n * @return {?}\n */\n removeControl(dir) {\n resolvedPromise.then(() => {\n const /** @type {?} */ container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n removeDir(this._directives, dir);\n });\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n addFormGroup(dir) {\n resolvedPromise.then(() => {\n const /** @type {?} */ container = this._findContainer(dir.path);\n const /** @type {?} */ group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({ emitEvent: false });\n });\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n removeFormGroup(dir) {\n resolvedPromise.then(() => {\n const /** @type {?} */ container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n });\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n getFormGroup(dir) { return /** @type {?} */ (this.form.get(dir.path)); }\n /**\n * @param {?} dir\n * @param {?} value\n * @return {?}\n */\n updateModel(dir, value) {\n resolvedPromise.then(() => {\n const /** @type {?} */ ctrl = /** @type {?} */ (this.form.get(/** @type {?} */ ((dir.path))));\n ctrl.setValue(value);\n });\n }\n /**\n * @param {?} value\n * @return {?}\n */\n setValue(value) { this.control.setValue(value); }\n /**\n * @param {?} $event\n * @return {?}\n */\n onSubmit($event) {\n (/** @type {?} */ (this)).submitted = true;\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n return false;\n }\n /**\n * @return {?}\n */\n onReset() { this.resetForm(); }\n /**\n * @param {?=} value\n * @return {?}\n */\n resetForm(value = undefined) {\n this.form.reset(value);\n (/** @type {?} */ (this)).submitted = false;\n }\n /**\n * @return {?}\n */\n _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n }\n /**\n * \\@internal\n * @param {?} path\n * @return {?}\n */\n _findContainer(path) {\n path.pop();\n return path.length ? /** @type {?} */ (this.form.get(path)) : this.form;\n }\n}\nNgForm.decorators = [\n { type: Directive, args: [{\n selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,[ngForm]',\n providers: [formDirectiveProvider],\n host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n outputs: ['ngSubmit'],\n exportAs: 'ngForm'\n },] },\n];\n/** @nocollapse */\nNgForm.ctorParameters = () => [\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n];\nNgForm.propDecorators = {\n \"options\": [{ type: Input, args: ['ngFormOptions',] },],\n};\nfunction NgForm_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n NgForm.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n NgForm.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n NgForm.propDecorators;\n /** @type {?} */\n NgForm.prototype.submitted;\n /** @type {?} */\n NgForm.prototype._directives;\n /** @type {?} */\n NgForm.prototype.form;\n /** @type {?} */\n NgForm.prototype.ngSubmit;\n /**\n * Options for the `NgForm` instance. Accepts the following properties:\n *\n * **updateOn**: Serves as the default `updateOn` value for all child `NgModels` below it\n * (unless a child has explicitly set its own value for this in `ngModelOptions`).\n * Potential values: `'change'` | `'blur'` | `'submit'`\n *\n * ```html\n * <form [ngFormOptions]=\"{updateOn: 'blur'}\">\n * <input name=\"one\" ngModel> <!-- this ngModel will update on blur -->\n * </form>\n * ```\n *\n * @type {?}\n */\n NgForm.prototype.options;\n}\n//# sourceMappingURL=ng_form.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nexport const /** @type {?} */ 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//# sourceMappingURL=error_examples.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { FormErrorExamples as Examples } from './error_examples';\nexport class TemplateDrivenErrors {\n /**\n * @return {?}\n */\n static modelParentException() {\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 * @return {?}\n */\n static formGroupNameException() {\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 * @return {?}\n */\n static missingNameException() {\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 /**\n * @return {?}\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//# sourceMappingURL=template_driven_errors.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, Host, Inject, Input, Optional, Self, SkipSelf, forwardRef } from '@angular/core';\nimport { NG_ASYNC_VALIDATORS, NG_VALIDATORS } from '../validators';\nimport { AbstractFormGroupDirective } from './abstract_form_group_directive';\nimport { ControlContainer } from './control_container';\nimport { NgForm } from './ng_form';\nimport { TemplateDrivenErrors } from './template_driven_errors';\nexport const /** @type {?} */ modelGroupProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgModelGroup)\n};\n/**\n * \\@whatItDoes Creates and binds a {\\@link FormGroup} instance to a DOM element.\n *\n * \\@howToUse\n *\n * This directive can only be used as a child of {\\@link NgForm} (or in other words,\n * within `<form>` tags).\n *\n * Use this directive if you'd like to create a sub-group within a form. This can\n * come in handy if you want to validate a sub-group of your form separately from\n * the rest of your form, or if some values in your domain model make more sense to\n * consume together in a nested object.\n *\n * Pass in the name you'd like this sub-group to have and it will become the key\n * for the sub-group in the form's full value. You can also export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * {\\@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `FormsModule`\n *\n * \\@stable\n */\nexport class NgModelGroup extends AbstractFormGroupDirective {\n /**\n * @param {?} parent\n * @param {?} validators\n * @param {?} asyncValidators\n */\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _checkParentType() {\n if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelGroupParentException();\n }\n }\n}\nNgModelGroup.decorators = [\n { type: Directive, args: [{ selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup' },] },\n];\n/** @nocollapse */\nNgModelGroup.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Host }, { type: SkipSelf },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n];\nNgModelGroup.propDecorators = {\n \"name\": [{ type: Input, args: ['ngModelGroup',] },],\n};\nfunction NgModelGroup_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n NgModelGroup.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n NgModelGroup.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n NgModelGroup.propDecorators;\n /** @type {?} */\n NgModelGroup.prototype.name;\n}\n//# sourceMappingURL=ng_model_group.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, EventEmitter, Host, Inject, Input, Optional, Output, Self, forwardRef } from '@angular/core';\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 { 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';\nexport const /** @type {?} */ formControlBinding = {\n provide: NgControl,\n useExisting: forwardRef(() => 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 */\nconst /** @type {?} */ resolvedPromise = Promise.resolve(null);\n/**\n * \\@whatItDoes Creates a {\\@link FormControl} instance from a domain model and binds it\n * to a form control element.\n *\n * The {\\@link FormControl} instance will track the value, user interaction, and\n * validation status of the control and keep the view synced with the model. If used\n * within a parent form, the directive will also register itself with the form as a child\n * control.\n *\n * \\@howToUse\n *\n * This directive can be used by itself or as part of a larger form. All you need is the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional {\\@link 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 will set 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 will always be synced back to\n * the domain model in your class as well.\n *\n * If you wish to inspect the properties of the associated {\\@link FormControl} (like\n * validity state), you can also export the directive into a local template variable using\n * `ngModel` as the key (ex: `#myVar=\"ngModel\"`). You can then access the control using the\n * directive's `control` property, but most properties you'll need (like `valid` and `dirty`)\n * will fall through to the control anyway, so you can access them directly. You can see a\n * full list of properties directly available in {\\@link AbstractControlDirective}.\n *\n * The following is an example of 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 * It's worth noting that in the context of a parent form, you often can skip one-way or\n * two-way binding because the parent form will sync the value for you. You can access\n * its properties by exporting it into a local template variable using `ngForm` (ex:\n * `#f=\"ngForm\"`). Then you can pass it where it needs to go on submit.\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 * Take a look at an example of using `ngModel` within a form:\n *\n * {\\@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * To see `ngModel` examples with different form control types, see:\n *\n * * Radio buttons: {\\@link RadioControlValueAccessor}\n * * Selects: {\\@link SelectControlValueAccessor}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: `FormsModule`\n *\n * \\@stable\n */\nexport class NgModel extends NgControl {\n /**\n * @param {?} parent\n * @param {?} validators\n * @param {?} asyncValidators\n * @param {?} valueAccessors\n */\n constructor(parent, validators, asyncValidators, valueAccessors) {\n super();\n this.control = new FormControl();\n /**\n * \\@internal\n */\n this._registered = false;\n this.update = new EventEmitter();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(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 * @return {?}\n */\n ngOnDestroy() { this.formDirective && this.formDirective.removeControl(this); }\n /**\n * @return {?}\n */\n get path() {\n return this._parent ? controlPath(this.name, this._parent) : [this.name];\n }\n /**\n * @return {?}\n */\n get formDirective() { return this._parent ? this._parent.formDirective : null; }\n /**\n * @return {?}\n */\n get validator() { return composeValidators(this._rawValidators); }\n /**\n * @return {?}\n */\n get asyncValidator() {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n /**\n * @param {?} newValue\n * @return {?}\n */\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n /**\n * @return {?}\n */\n _setUpControl() {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() :\n this.formDirective.addControl(this);\n this._registered = true;\n }\n /**\n * @return {?}\n */\n _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n }\n /**\n * @return {?}\n */\n _isStandalone() {\n return !this._parent || !!(this.options && this.options.standalone);\n }\n /**\n * @return {?}\n */\n _setUpStandalone() {\n setUpControl(this.control, this);\n this.control.updateValueAndValidity({ emitEvent: false });\n }\n /**\n * @return {?}\n */\n _checkForErrors() {\n if (!this._isStandalone()) {\n this._checkParentType();\n }\n this._checkName();\n }\n /**\n * @return {?}\n */\n _checkParentType() {\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 /**\n * @return {?}\n */\n _checkName() {\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 /**\n * @param {?} value\n * @return {?}\n */\n _updateValue(value) {\n resolvedPromise.then(() => { this.control.setValue(value, { emitViewToModelChange: false }); });\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n _updateDisabled(changes) {\n const /** @type {?} */ disabledValue = changes['isDisabled'].currentValue;\n const /** @type {?} */ isDisabled = disabledValue === '' || (disabledValue && disabledValue !== 'false');\n resolvedPromise.then(() => {\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}\nNgModel.decorators = [\n { type: Directive, args: [{\n selector: '[ngModel]:not([formControlName]):not([formControl])',\n providers: [formControlBinding],\n exportAs: 'ngModel'\n },] },\n];\n/** @nocollapse */\nNgModel.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Optional }, { type: Host },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] },] },\n];\nNgModel.propDecorators = {\n \"name\": [{ type: Input },],\n \"isDisabled\": [{ type: Input, args: ['disabled',] },],\n \"model\": [{ type: Input, args: ['ngModel',] },],\n \"options\": [{ type: Input, args: ['ngModelOptions',] },],\n \"update\": [{ type: Output, args: ['ngModelChange',] },],\n};\nfunction NgModel_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n NgModel.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n NgModel.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n NgModel.propDecorators;\n /** @type {?} */\n NgModel.prototype.control;\n /**\n * \\@internal\n * @type {?}\n */\n NgModel.prototype._registered;\n /** @type {?} */\n NgModel.prototype.viewModel;\n /** @type {?} */\n NgModel.prototype.name;\n /** @type {?} */\n NgModel.prototype.isDisabled;\n /** @type {?} */\n NgModel.prototype.model;\n /**\n * Options object for this `ngModel` instance. You can configure the following properties:\n *\n * **name**: An alternative to setting the name attribute on the form control element.\n * Sometimes, especially with custom form components, the name attribute might be used\n * as an `\\@Input` property for a different purpose. In cases like these, you can configure\n * the `ngModel` name through this option.\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 * **standalone**: Defaults to false. If this is set to true, the `ngModel` will not\n * register itself with its parent form, and will act as if it's not in the form. This\n * can be handy if you have form meta-controls, a.k.a. form elements nested in\n * the `<form>` tag that control the display of the form, but don'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 * **updateOn**: Defaults to `'change'`. Defines the event upon which the form control\n * value and validity will update. Also accepts `'blur'` and `'submit'`.\n *\n * ```html\n * <input [(ngModel)]=\"firstName\" [ngModelOptions]=\"{updateOn: 'blur'}\">\n * ```\n *\n * @type {?}\n */\n NgModel.prototype.options;\n /** @type {?} */\n NgModel.prototype.update;\n}\n//# sourceMappingURL=ng_model.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { FormErrorExamples as Examples } from './error_examples';\nexport class ReactiveErrors {\n /**\n * @return {?}\n */\n static controlParentException() {\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 ${Examples.formControlName}`);\n }\n /**\n * @return {?}\n */\n static ngModelGroupException() {\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 ${Examples.formGroupName}\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n ${Examples.ngModelGroup}`);\n }\n /**\n * @return {?}\n */\n static missingFormException() {\n throw new Error(`formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n ${Examples.formControlName}`);\n }\n /**\n * @return {?}\n */\n static groupParentException() {\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 ${Examples.formGroupName}`);\n }\n /**\n * @return {?}\n */\n static arrayParentException() {\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 ${Examples.formArrayName}`);\n }\n /**\n * @return {?}\n */\n static disabledAttrWarning() {\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//# sourceMappingURL=reactive_errors.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, EventEmitter, Inject, Input, Optional, Output, Self, forwardRef } from '@angular/core';\nimport { FormControl } from '../../model';\nimport { NG_ASYNC_VALIDATORS, NG_VALIDATORS } from '../../validators';\nimport { NG_VALUE_ACCESSOR } from '../control_value_accessor';\nimport { NgControl } from '../ng_control';\nimport { ReactiveErrors } from '../reactive_errors';\nimport { composeAsyncValidators, composeValidators, isPropertyUpdated, selectValueAccessor, setUpControl } from '../shared';\nexport const /** @type {?} */ formControlBinding = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlDirective)\n};\n/**\n * \\@whatItDoes Syncs a standalone {\\@link FormControl} instance to a form control element.\n *\n * In other words, this directive ensures that any values written to the {\\@link FormControl}\n * instance programmatically will be written to the DOM element (model -> view). Conversely,\n * any values written to the DOM element through user input will be reflected in the\n * {\\@link FormControl} instance (view -> model).\n *\n * \\@howToUse\n *\n * Use this directive if you'd like to create and manage a {\\@link FormControl} instance directly.\n * Simply create a {\\@link FormControl}, save it to your component class, and pass it into the\n * {\\@link FormControlDirective}.\n *\n * This directive is designed to be used as a standalone control. Unlike {\\@link FormControlName},\n * it does not require that your {\\@link FormControl} instance be part of any parent\n * {\\@link FormGroup}, and it won't be registered to any {\\@link FormGroupDirective} that\n * exists above it.\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormControl} instance. See a full list of available properties in\n * {\\@link AbstractControl}.\n *\n * **Set the value**: You can pass in an initial value when instantiating the {\\@link FormControl},\n * or you can set it programmatically later using {\\@link AbstractControl#setValue setValue} or\n * {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the control, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event. You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * {\\@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n * \\@stable\n */\nexport class FormControlDirective extends NgControl {\n /**\n * @param {?} validators\n * @param {?} asyncValidators\n * @param {?} valueAccessors\n */\n constructor(validators, asyncValidators, valueAccessors) {\n super();\n this.update = new EventEmitter();\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n set isDisabled(isDisabled) { ReactiveErrors.disabledAttrWarning(); }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if (this._isControlChanged(changes)) {\n setUpControl(this.form, this);\n if (this.control.disabled && /** @type {?} */ ((this.valueAccessor)).setDisabledState) {\n /** @type {?} */ ((/** @type {?} */ ((this.valueAccessor)).setDisabledState))(true);\n }\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n }\n /**\n * @return {?}\n */\n get path() { return []; }\n /**\n * @return {?}\n */\n get validator() { return composeValidators(this._rawValidators); }\n /**\n * @return {?}\n */\n get asyncValidator() {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n /**\n * @return {?}\n */\n get control() { return this.form; }\n /**\n * @param {?} newValue\n * @return {?}\n */\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n _isControlChanged(changes) {\n return changes.hasOwnProperty('form');\n }\n}\nFormControlDirective.decorators = [\n { type: Directive, args: [{ selector: '[formControl]', providers: [formControlBinding], exportAs: 'ngForm' },] },\n];\n/** @nocollapse */\nFormControlDirective.ctorParameters = () => [\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] },] },\n];\nFormControlDirective.propDecorators = {\n \"form\": [{ type: Input, args: ['formControl',] },],\n \"model\": [{ type: Input, args: ['ngModel',] },],\n \"update\": [{ type: Output, args: ['ngModelChange',] },],\n \"isDisabled\": [{ type: Input, args: ['disabled',] },],\n};\nfunction FormControlDirective_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n FormControlDirective.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n FormControlDirective.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n FormControlDirective.propDecorators;\n /** @type {?} */\n FormControlDirective.prototype.viewModel;\n /** @type {?} */\n FormControlDirective.prototype.form;\n /** @type {?} */\n FormControlDirective.prototype.model;\n /** @type {?} */\n FormControlDirective.prototype.update;\n}\n//# sourceMappingURL=form_control_directive.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, EventEmitter, Inject, Input, Optional, Output, Self, forwardRef } from '@angular/core';\nimport { FormGroup } from '../../model';\nimport { NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators } from '../../validators';\nimport { ControlContainer } from '../control_container';\nimport { ReactiveErrors } from '../reactive_errors';\nimport { cleanUpControl, composeAsyncValidators, composeValidators, removeDir, setUpControl, setUpFormContainer, syncPendingControls } from '../shared';\nexport const /** @type {?} */ formDirectiveProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupDirective)\n};\n/**\n * \\@whatItDoes Binds an existing {\\@link FormGroup} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive accepts an existing {\\@link FormGroup} instance. It will then use this\n * {\\@link FormGroup} instance to match any child {\\@link FormControl}, {\\@link FormGroup},\n * and {\\@link FormArray} instances to child {\\@link FormControlName}, {\\@link FormGroupName},\n * and {\\@link FormArrayName} directives.\n *\n * **Set value**: You can set the form's initial value when instantiating the\n * {\\@link FormGroup}, or you can set it programmatically later using the {\\@link FormGroup}'s\n * {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}\n * methods.\n *\n * **Listen to value**: If you want to listen to changes in the value of the form, you can subscribe\n * to the {\\@link FormGroup}'s {\\@link AbstractControl#valueChanges valueChanges} event. You can also\n * listen to its {\\@link AbstractControl#statusChanges statusChanges} event to be notified when the\n * validation status is re-calculated.\n *\n * Furthermore, you can listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event will be emitted with the original form\n * submission event.\n *\n * ### Example\n *\n * In this example, we create form controls for first name and last name.\n *\n * {\\@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: {\\@link ReactiveFormsModule}\n *\n * \\@stable\n */\nexport class FormGroupDirective extends ControlContainer {\n /**\n * @param {?} _validators\n * @param {?} _asyncValidators\n */\n constructor(_validators, _asyncValidators) {\n super();\n this._validators = _validators;\n this._asyncValidators = _asyncValidators;\n this.submitted = false;\n this.directives = [];\n this.form = /** @type {?} */ ((null));\n this.ngSubmit = new EventEmitter();\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n }\n }\n /**\n * @return {?}\n */\n get formDirective() { return this; }\n /**\n * @return {?}\n */\n get control() { return this.form; }\n /**\n * @return {?}\n */\n get path() { return []; }\n /**\n * @param {?} dir\n * @return {?}\n */\n addControl(dir) {\n const /** @type {?} */ 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 * @param {?} dir\n * @return {?}\n */\n getControl(dir) { return /** @type {?} */ (this.form.get(dir.path)); }\n /**\n * @param {?} dir\n * @return {?}\n */\n removeControl(dir) { removeDir(this.directives, dir); }\n /**\n * @param {?} dir\n * @return {?}\n */\n addFormGroup(dir) {\n const /** @type {?} */ ctrl = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n removeFormGroup(dir) { }\n /**\n * @param {?} dir\n * @return {?}\n */\n getFormGroup(dir) { return /** @type {?} */ (this.form.get(dir.path)); }\n /**\n * @param {?} dir\n * @return {?}\n */\n addFormArray(dir) {\n const /** @type {?} */ ctrl = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n removeFormArray(dir) { }\n /**\n * @param {?} dir\n * @return {?}\n */\n getFormArray(dir) { return /** @type {?} */ (this.form.get(dir.path)); }\n /**\n * @param {?} dir\n * @param {?} value\n * @return {?}\n */\n updateModel(dir, value) {\n const /** @type {?} */ ctrl = /** @type {?} */ (this.form.get(dir.path));\n ctrl.setValue(value);\n }\n /**\n * @param {?} $event\n * @return {?}\n */\n onSubmit($event) {\n (/** @type {?} */ (this)).submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n return false;\n }\n /**\n * @return {?}\n */\n onReset() { this.resetForm(); }\n /**\n * @param {?=} value\n * @return {?}\n */\n resetForm(value = undefined) {\n this.form.reset(value);\n (/** @type {?} */ (this)).submitted = false;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _updateDomValue() {\n this.directives.forEach(dir => {\n const /** @type {?} */ newCtrl = this.form.get(dir.path);\n if (dir.control !== newCtrl) {\n cleanUpControl(dir.control, dir);\n if (newCtrl)\n setUpControl(newCtrl, dir);\n (/** @type {?} */ (dir)).control = newCtrl;\n }\n });\n this.form._updateTreeValidity({ emitEvent: false });\n }\n /**\n * @return {?}\n */\n _updateRegistrations() {\n this.form._registerOnCollectionChange(() => this._updateDomValue());\n if (this._oldForm)\n this._oldForm._registerOnCollectionChange(() => { });\n this._oldForm = this.form;\n }\n /**\n * @return {?}\n */\n _updateValidators() {\n const /** @type {?} */ sync = composeValidators(this._validators);\n this.form.validator = Validators.compose([/** @type {?} */ ((this.form.validator)), /** @type {?} */ ((sync))]);\n const /** @type {?} */ async = composeAsyncValidators(this._asyncValidators);\n this.form.asyncValidator = Validators.composeAsync([/** @type {?} */ ((this.form.asyncValidator)), /** @type {?} */ ((async))]);\n }\n /**\n * @return {?}\n */\n _checkFormPresent() {\n if (!this.form) {\n ReactiveErrors.missingFormException();\n }\n }\n}\nFormGroupDirective.decorators = [\n { type: Directive, args: [{\n selector: '[formGroup]',\n providers: [formDirectiveProvider],\n host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n exportAs: 'ngForm'\n },] },\n];\n/** @nocollapse */\nFormGroupDirective.ctorParameters = () => [\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n];\nFormGroupDirective.propDecorators = {\n \"form\": [{ type: Input, args: ['formGroup',] },],\n \"ngSubmit\": [{ type: Output },],\n};\nfunction FormGroupDirective_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n FormGroupDirective.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n FormGroupDirective.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n FormGroupDirective.propDecorators;\n /** @type {?} */\n FormGroupDirective.prototype.submitted;\n /** @type {?} */\n FormGroupDirective.prototype._oldForm;\n /** @type {?} */\n FormGroupDirective.prototype.directives;\n /** @type {?} */\n FormGroupDirective.prototype.form;\n /** @type {?} */\n FormGroupDirective.prototype.ngSubmit;\n /** @type {?} */\n FormGroupDirective.prototype._validators;\n /** @type {?} */\n FormGroupDirective.prototype._asyncValidators;\n}\n//# sourceMappingURL=form_group_directive.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, Host, Inject, Input, Optional, Self, SkipSelf, forwardRef } from '@angular/core';\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 { FormGroupDirective } from './form_group_directive';\nexport const /** @type {?} */ formGroupNameProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupName)\n};\n/**\n * \\@whatItDoes Syncs a nested {\\@link FormGroup} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive can only be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested {\\@link FormGroup} you want to link, and\n * will look for a {\\@link FormGroup} registered with that name in the parent\n * {\\@link FormGroup} instance you passed into {\\@link FormGroupDirective}.\n *\n * Nested form groups can come in handy when you want to validate a sub-group of a\n * form separately from the rest or when you'd like to group the values of certain\n * controls into their own nested object.\n *\n * **Access the group**: You can access the associated {\\@link FormGroup} using the\n * {\\@link AbstractControl#get get} method. Ex: `this.form.get('name')`.\n *\n * You can also access individual controls within the group using dot syntax.\n * Ex: `this.form.get('name.first')`\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormGroup}. See a full list of available properties in {\\@link AbstractControl}.\n *\n * **Set the value**: You can set an initial value for each child control when instantiating\n * the {\\@link FormGroup}, or you can set it programmatically later using\n * {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the group, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event. You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * {\\@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n * \\@stable\n */\nexport class FormGroupName extends AbstractFormGroupDirective {\n /**\n * @param {?} parent\n * @param {?} validators\n * @param {?} asyncValidators\n */\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _checkParentType() {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.groupParentException();\n }\n }\n}\nFormGroupName.decorators = [\n { type: Directive, args: [{ selector: '[formGroupName]', providers: [formGroupNameProvider] },] },\n];\n/** @nocollapse */\nFormGroupName.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n];\nFormGroupName.propDecorators = {\n \"name\": [{ type: Input, args: ['formGroupName',] },],\n};\nfunction FormGroupName_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n FormGroupName.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n FormGroupName.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n FormGroupName.propDecorators;\n /** @type {?} */\n FormGroupName.prototype.name;\n}\nexport const /** @type {?} */ formArrayNameProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormArrayName)\n};\n/**\n * \\@whatItDoes Syncs a nested {\\@link FormArray} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive is designed to be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested {\\@link FormArray} you want to link, and\n * will look for a {\\@link FormArray} registered with that name in the parent\n * {\\@link FormGroup} instance you passed into {\\@link FormGroupDirective}.\n *\n * Nested form arrays can come in handy when you have a group of form controls but\n * you're not sure how many there will be. Form arrays allow you to create new\n * form controls dynamically.\n *\n * **Access the array**: You can access the associated {\\@link FormArray} using the\n * {\\@link AbstractControl#get get} method on the parent {\\@link FormGroup}.\n * Ex: `this.form.get('cities')`.\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormArray}. See a full list of available properties in {\\@link AbstractControl}.\n *\n * **Set the value**: You can set an initial value for each child control when instantiating\n * the {\\@link FormArray}, or you can set the value programmatically later using the\n * {\\@link FormArray}'s {\\@link AbstractControl#setValue setValue} or\n * {\\@link AbstractControl#patchValue patchValue} methods.\n *\n * **Listen to value**: If you want to listen to changes in the value of the array, you can\n * subscribe to the {\\@link FormArray}'s {\\@link AbstractControl#valueChanges valueChanges} event.\n * You can also listen to its {\\@link AbstractControl#statusChanges statusChanges} event to be\n * notified when the validation status is re-calculated.\n *\n * **Add new controls**: You can add new controls to the {\\@link FormArray} dynamically by calling\n * its {\\@link FormArray#push push} method.\n * Ex: `this.form.get('cities').push(new FormControl());`\n *\n * ### Example\n *\n * {\\@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n * \\@stable\n */\nexport class FormArrayName extends ControlContainer {\n /**\n * @param {?} parent\n * @param {?} validators\n * @param {?} asyncValidators\n */\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n this._checkParentType(); /** @type {?} */\n ((this.formDirective)).addFormArray(this);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this.formDirective) {\n this.formDirective.removeFormArray(this);\n }\n }\n /**\n * @return {?}\n */\n get control() { return /** @type {?} */ ((this.formDirective)).getFormArray(this); }\n /**\n * @return {?}\n */\n get formDirective() {\n return this._parent ? /** @type {?} */ (this._parent.formDirective) : null;\n }\n /**\n * @return {?}\n */\n get path() { return controlPath(this.name, this._parent); }\n /**\n * @return {?}\n */\n get validator() { return composeValidators(this._validators); }\n /**\n * @return {?}\n */\n get asyncValidator() {\n return composeAsyncValidators(this._asyncValidators);\n }\n /**\n * @return {?}\n */\n _checkParentType() {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.arrayParentException();\n }\n }\n}\nFormArrayName.decorators = [\n { type: Directive, args: [{ selector: '[formArrayName]', providers: [formArrayNameProvider] },] },\n];\n/** @nocollapse */\nFormArrayName.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n];\nFormArrayName.propDecorators = {\n \"name\": [{ type: Input, args: ['formArrayName',] },],\n};\nfunction FormArrayName_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n FormArrayName.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n FormArrayName.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n FormArrayName.propDecorators;\n /**\n * \\@internal\n * @type {?}\n */\n FormArrayName.prototype._parent;\n /**\n * \\@internal\n * @type {?}\n */\n FormArrayName.prototype._validators;\n /**\n * \\@internal\n * @type {?}\n */\n FormArrayName.prototype._asyncValidators;\n /** @type {?} */\n FormArrayName.prototype.name;\n}\n/**\n * @param {?} parent\n * @return {?}\n */\nfunction _hasInvalidParent(parent) {\n return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n !(parent instanceof FormArrayName);\n}\n//# sourceMappingURL=form_group_name.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, EventEmitter, Host, Inject, Input, Optional, Output, Self, SkipSelf, forwardRef } from '@angular/core';\nimport { NG_ASYNC_VALIDATORS, NG_VALIDATORS } from '../../validators';\nimport { AbstractFormGroupDirective } from '../abstract_form_group_directive';\nimport { ControlContainer } from '../control_container';\nimport { NG_VALUE_ACCESSOR } from '../control_value_accessor';\nimport { NgControl } from '../ng_control';\nimport { ReactiveErrors } from '../reactive_errors';\nimport { composeAsyncValidators, composeValidators, controlPath, isPropertyUpdated, selectValueAccessor } from '../shared';\nimport { FormGroupDirective } from './form_group_directive';\nimport { FormArrayName, FormGroupName } from './form_group_name';\nexport const /** @type {?} */ controlNameBinding = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlName)\n};\n/**\n * \\@whatItDoes Syncs a {\\@link FormControl} in an existing {\\@link FormGroup} to a form control\n * element by name.\n *\n * In other words, this directive ensures that any values written to the {\\@link FormControl}\n * instance programmatically will be written to the DOM element (model -> view). Conversely,\n * any values written to the DOM element through user input will be reflected in the\n * {\\@link FormControl} instance (view -> model).\n *\n * \\@howToUse\n *\n * This directive is designed to be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the {\\@link FormControl} instance you want to\n * link, and will look for a {\\@link FormControl} registered with that name in the\n * closest {\\@link FormGroup} or {\\@link FormArray} above it.\n *\n * **Access the control**: You can access the {\\@link FormControl} associated with\n * this directive by using the {\\@link AbstractControl#get get} method.\n * Ex: `this.form.get('first');`\n *\n * **Get value**: the `value` property is always synced and available on the {\\@link FormControl}.\n * See a full list of available properties in {\\@link AbstractControl}.\n *\n * **Set value**: You can set an initial value for the control when instantiating the\n * {\\@link FormControl}, or you can set it programmatically later using\n * {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the control, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event. You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * In this example, we create form controls for first name and last name.\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: {\\@link RadioControlValueAccessor}\n * * Selects: {\\@link SelectControlValueAccessor}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: {\\@link ReactiveFormsModule}\n *\n * \\@stable\n */\nexport class FormControlName extends NgControl {\n /**\n * @param {?} parent\n * @param {?} validators\n * @param {?} asyncValidators\n * @param {?} valueAccessors\n */\n constructor(parent, validators, asyncValidators, valueAccessors) {\n super();\n this._added = false;\n this.update = new EventEmitter();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n set isDisabled(isDisabled) { ReactiveErrors.disabledAttrWarning(); }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if (!this._added)\n this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n }\n /**\n * @param {?} newValue\n * @return {?}\n */\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n /**\n * @return {?}\n */\n get path() { return controlPath(this.name, /** @type {?} */ ((this._parent))); }\n /**\n * @return {?}\n */\n get formDirective() { return this._parent ? this._parent.formDirective : null; }\n /**\n * @return {?}\n */\n get validator() { return composeValidators(this._rawValidators); }\n /**\n * @return {?}\n */\n get asyncValidator() {\n return /** @type {?} */ ((composeAsyncValidators(this._rawAsyncValidators)));\n }\n /**\n * @return {?}\n */\n _checkParentType() {\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 /**\n * @return {?}\n */\n _setUpControl() {\n this._checkParentType();\n (/** @type {?} */ (this)).control = this.formDirective.addControl(this);\n if (this.control.disabled && /** @type {?} */ ((this.valueAccessor)).setDisabledState) {\n /** @type {?} */ ((/** @type {?} */ ((this.valueAccessor)).setDisabledState))(true);\n }\n this._added = true;\n }\n}\nFormControlName.decorators = [\n { type: Directive, args: [{ selector: '[formControlName]', providers: [controlNameBinding] },] },\n];\n/** @nocollapse */\nFormControlName.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] },] },\n];\nFormControlName.propDecorators = {\n \"name\": [{ type: Input, args: ['formControlName',] },],\n \"model\": [{ type: Input, args: ['ngModel',] },],\n \"update\": [{ type: Output, args: ['ngModelChange',] },],\n \"isDisabled\": [{ type: Input, args: ['disabled',] },],\n};\nfunction FormControlName_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n FormControlName.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n FormControlName.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n FormControlName.propDecorators;\n /** @type {?} */\n FormControlName.prototype._added;\n /**\n * \\@internal\n * @type {?}\n */\n FormControlName.prototype.viewModel;\n /** @type {?} */\n FormControlName.prototype.control;\n /** @type {?} */\n FormControlName.prototype.name;\n /** @type {?} */\n FormControlName.prototype.model;\n /** @type {?} */\n FormControlName.prototype.update;\n}\n//# sourceMappingURL=form_control_name.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, Input, forwardRef } from '@angular/core';\nimport { NG_VALIDATORS, Validators } from '../validators';\n/**\n * An interface that can be implemented by classes that can act as validators.\n *\n * ## Usage\n *\n * ```typescript\n * \\@Directive({\n * selector: '[custom-validator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(c: Control): {[key: string]: any} {\n * return {\"custom\": true};\n * }\n * }\n * ```\n *\n * \\@stable\n * @record\n */\nexport function Validator() { }\nfunction Validator_tsickle_Closure_declarations() {\n /** @type {?} */\n Validator.prototype.validate;\n /** @type {?|undefined} */\n Validator.prototype.registerOnValidatorChange;\n}\n/**\n * \\@experimental\n * @record\n */\nexport function AsyncValidator() { }\nfunction AsyncValidator_tsickle_Closure_declarations() {\n /** @type {?} */\n AsyncValidator.prototype.validate;\n}\nexport const /** @type {?} */ REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RequiredValidator),\n multi: true\n};\nexport const /** @type {?} */ CHECKBOX_REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CheckboxRequiredValidator),\n multi: true\n};\n/**\n * A Directive that adds the `required` validator to any controls marked with the\n * `required` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * \\@stable\n */\nexport class RequiredValidator {\n /**\n * @return {?}\n */\n get required() { return this._required; }\n /**\n * @param {?} value\n * @return {?}\n */\n set required(value) {\n this._required = value != null && value !== false && `${value}` !== 'false';\n if (this._onChange)\n this._onChange();\n }\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) {\n return this.required ? Validators.required(c) : null;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnValidatorChange(fn) { this._onChange = fn; }\n}\nRequiredValidator.decorators = [\n { type: Directive, args: [{\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];\n/** @nocollapse */\nRequiredValidator.ctorParameters = () => [];\nRequiredValidator.propDecorators = {\n \"required\": [{ type: Input },],\n};\nfunction RequiredValidator_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n RequiredValidator.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n RequiredValidator.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n RequiredValidator.propDecorators;\n /** @type {?} */\n RequiredValidator.prototype._required;\n /** @type {?} */\n RequiredValidator.prototype._onChange;\n}\n/**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * \\@experimental\n */\nexport class CheckboxRequiredValidator extends RequiredValidator {\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) {\n return this.required ? Validators.requiredTrue(c) : null;\n }\n}\nCheckboxRequiredValidator.decorators = [\n { type: Directive, args: [{\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];\n/** @nocollapse */\nCheckboxRequiredValidator.ctorParameters = () => [];\nfunction CheckboxRequiredValidator_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n CheckboxRequiredValidator.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n CheckboxRequiredValidator.ctorParameters;\n}\n/**\n * Provider which adds {\\@link EmailValidator} to {\\@link NG_VALIDATORS}.\n */\nexport const /** @type {?} */ EMAIL_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => EmailValidator),\n multi: true\n};\n/**\n * A Directive that adds the `email` validator to controls marked with the\n * `email` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\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 * \\@experimental\n */\nexport class EmailValidator {\n /**\n * @param {?} value\n * @return {?}\n */\n set email(value) {\n this._enabled = value === '' || value === true || value === 'true';\n if (this._onChange)\n this._onChange();\n }\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) {\n return this._enabled ? Validators.email(c) : null;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnValidatorChange(fn) { this._onChange = fn; }\n}\nEmailValidator.decorators = [\n { type: Directive, args: [{\n selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n providers: [EMAIL_VALIDATOR]\n },] },\n];\n/** @nocollapse */\nEmailValidator.ctorParameters = () => [];\nEmailValidator.propDecorators = {\n \"email\": [{ type: Input },],\n};\nfunction EmailValidator_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n EmailValidator.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n EmailValidator.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n EmailValidator.propDecorators;\n /** @type {?} */\n EmailValidator.prototype._enabled;\n /** @type {?} */\n EmailValidator.prototype._onChange;\n}\n/**\n * \\@stable\n * @record\n */\nexport function ValidatorFn() { }\nfunction ValidatorFn_tsickle_Closure_declarations() {\n /* TODO: handle strange member:\n (c: AbstractControl): ValidationErrors|null;\n */\n}\n/**\n * \\@stable\n * @record\n */\nexport function AsyncValidatorFn() { }\nfunction AsyncValidatorFn_tsickle_Closure_declarations() {\n /* TODO: handle strange member:\n (c: AbstractControl): Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;\n */\n}\n/**\n * Provider which adds {\\@link MinLengthValidator} to {\\@link NG_VALIDATORS}.\n *\n * ## Example:\n *\n * {\\@example common/forms/ts/validators/validators.ts region='min'}\n */\nexport const /** @type {?} */ MIN_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MinLengthValidator),\n multi: true\n};\n/**\n * A directive which installs the {\\@link MinLengthValidator} for any `formControlName`,\n * `formControl`, or control with `ngModel` that also has a `minlength` attribute.\n *\n * \\@stable\n */\nexport class MinLengthValidator {\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if ('minlength' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n }\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) {\n return this.minlength == null ? null : this._validator(c);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnValidatorChange(fn) { this._onChange = fn; }\n /**\n * @return {?}\n */\n _createValidator() {\n this._validator = Validators.minLength(parseInt(this.minlength, 10));\n }\n}\nMinLengthValidator.decorators = [\n { type: Directive, args: [{\n selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n providers: [MIN_LENGTH_VALIDATOR],\n host: { '[attr.minlength]': 'minlength ? minlength : null' }\n },] },\n];\n/** @nocollapse */\nMinLengthValidator.ctorParameters = () => [];\nMinLengthValidator.propDecorators = {\n \"minlength\": [{ type: Input },],\n};\nfunction MinLengthValidator_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n MinLengthValidator.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n MinLengthValidator.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n MinLengthValidator.propDecorators;\n /** @type {?} */\n MinLengthValidator.prototype._validator;\n /** @type {?} */\n MinLengthValidator.prototype._onChange;\n /** @type {?} */\n MinLengthValidator.prototype.minlength;\n}\n/**\n * Provider which adds {\\@link MaxLengthValidator} to {\\@link NG_VALIDATORS}.\n *\n * ## Example:\n *\n * {\\@example common/forms/ts/validators/validators.ts region='max'}\n */\nexport const /** @type {?} */ MAX_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaxLengthValidator),\n multi: true\n};\n/**\n * A directive which installs the {\\@link MaxLengthValidator} for any `formControlName,\n * `formControl`,\n * or control with `ngModel` that also has a `maxlength` attribute.\n *\n * \\@stable\n */\nexport class MaxLengthValidator {\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if ('maxlength' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n }\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) {\n return this.maxlength != null ? this._validator(c) : null;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnValidatorChange(fn) { this._onChange = fn; }\n /**\n * @return {?}\n */\n _createValidator() {\n this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n }\n}\nMaxLengthValidator.decorators = [\n { type: Directive, args: [{\n selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n providers: [MAX_LENGTH_VALIDATOR],\n host: { '[attr.maxlength]': 'maxlength ? maxlength : null' }\n },] },\n];\n/** @nocollapse */\nMaxLengthValidator.ctorParameters = () => [];\nMaxLengthValidator.propDecorators = {\n \"maxlength\": [{ type: Input },],\n};\nfunction MaxLengthValidator_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n MaxLengthValidator.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n MaxLengthValidator.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n MaxLengthValidator.propDecorators;\n /** @type {?} */\n MaxLengthValidator.prototype._validator;\n /** @type {?} */\n MaxLengthValidator.prototype._onChange;\n /** @type {?} */\n MaxLengthValidator.prototype.maxlength;\n}\nexport const /** @type {?} */ PATTERN_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => PatternValidator),\n multi: true\n};\n/**\n * A Directive that adds the `pattern` validator to any controls marked with the\n * `pattern` attribute, via the {\\@link NG_VALIDATORS} binding. Uses attribute value\n * as the regex to validate Control value against. Follows pattern attribute\n * semantics; i.e. regex must match entire Control value.\n *\n * ### Example\n *\n * ```\n * <input [name]=\"fullName\" pattern=\"[a-zA-Z ]*\" ngModel>\n * ```\n * \\@stable\n */\nexport class PatternValidator {\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if ('pattern' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n }\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) { return this._validator(c); }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnValidatorChange(fn) { this._onChange = fn; }\n /**\n * @return {?}\n */\n _createValidator() { this._validator = Validators.pattern(this.pattern); }\n}\nPatternValidator.decorators = [\n { type: Directive, args: [{\n selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n providers: [PATTERN_VALIDATOR],\n host: { '[attr.pattern]': 'pattern ? pattern : null' }\n },] },\n];\n/** @nocollapse */\nPatternValidator.ctorParameters = () => [];\nPatternValidator.propDecorators = {\n \"pattern\": [{ type: Input },],\n};\nfunction PatternValidator_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n PatternValidator.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n PatternValidator.ctorParameters;\n /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */\n PatternValidator.propDecorators;\n /** @type {?} */\n PatternValidator.prototype._validator;\n /** @type {?} */\n PatternValidator.prototype._onChange;\n /** @type {?} */\n PatternValidator.prototype.pattern;\n}\n//# sourceMappingURL=validators.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Injectable } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from './model';\n/**\n * \\@whatItDoes Creates an {\\@link AbstractControl} from a user-specified configuration.\n *\n * It is essentially syntactic sugar that shortens the `new FormGroup()`,\n * `new FormControl()`, and `new FormArray()` boilerplate that can build up in larger\n * forms.\n *\n * \\@howToUse\n *\n * To use, inject `FormBuilder` into your component class. You can then call its methods\n * directly.\n *\n * {\\@example forms/ts/formBuilder/form_builder_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: {\\@link ReactiveFormsModule}\n *\n * \\@stable\n */\nexport class FormBuilder {\n /**\n * Construct a new {\\@link FormGroup} with the given map of configuration.\n * Valid keys for the `extra` parameter map are `validator` and `asyncValidator`.\n *\n * See the {\\@link FormGroup} constructor for more details.\n * @param {?} controlsConfig\n * @param {?=} extra\n * @return {?}\n */\n group(controlsConfig, extra = null) {\n const /** @type {?} */ controls = this._reduceControls(controlsConfig);\n const /** @type {?} */ validator = extra != null ? extra['validator'] : null;\n const /** @type {?} */ asyncValidator = extra != null ? extra['asyncValidator'] : null;\n return new FormGroup(controls, validator, asyncValidator);\n }\n /**\n * Construct a new {\\@link FormControl} with the given `formState`,`validator`, and\n * `asyncValidator`.\n *\n * `formState` can either be a standalone value for the form control or an object\n * that contains both a value and a disabled status.\n *\n * @param {?} formState\n * @param {?=} validator\n * @param {?=} asyncValidator\n * @return {?}\n */\n control(formState, validator, asyncValidator) {\n return new FormControl(formState, validator, asyncValidator);\n }\n /**\n * Construct a {\\@link FormArray} from the given `controlsConfig` array of\n * configuration, with the given optional `validator` and `asyncValidator`.\n * @param {?} controlsConfig\n * @param {?=} validator\n * @param {?=} asyncValidator\n * @return {?}\n */\n array(controlsConfig, validator, asyncValidator) {\n const /** @type {?} */ controls = controlsConfig.map(c => this._createControl(c));\n return new FormArray(controls, validator, asyncValidator);\n }\n /**\n * \\@internal\n * @param {?} controlsConfig\n * @return {?}\n */\n _reduceControls(controlsConfig) {\n const /** @type {?} */ controls = {};\n Object.keys(controlsConfig).forEach(controlName => {\n controls[controlName] = this._createControl(controlsConfig[controlName]);\n });\n return controls;\n }\n /**\n * \\@internal\n * @param {?} controlConfig\n * @return {?}\n */\n _createControl(controlConfig) {\n if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n controlConfig instanceof FormArray) {\n return controlConfig;\n }\n else if (Array.isArray(controlConfig)) {\n const /** @type {?} */ value = controlConfig[0];\n const /** @type {?} */ validator = controlConfig.length > 1 ? controlConfig[1] : null;\n const /** @type {?} */ 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}\nFormBuilder.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nFormBuilder.ctorParameters = () => [];\nfunction FormBuilder_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n FormBuilder.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n FormBuilder.ctorParameters;\n}\n//# sourceMappingURL=form_builder.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Version } from '@angular/core';\n/**\n * \\@stable\n */\nexport const /** @type {?} */ VERSION = new Version('5.2.0');\n//# sourceMappingURL=version.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive } from '@angular/core';\n/**\n * \\@whatItDoes 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 * \\@experimental\n */\nexport class NgNoValidate {\n}\nNgNoValidate.decorators = [\n { type: Directive, args: [{\n selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n host: { 'novalidate': '' },\n },] },\n];\n/** @nocollapse */\nNgNoValidate.ctorParameters = () => [];\nfunction NgNoValidate_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n NgNoValidate.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n NgNoValidate.ctorParameters;\n}\n//# sourceMappingURL=ng_no_validate_directive.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { NgModule } from '@angular/core';\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 { 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';\nexport { CheckboxControlValueAccessor } from './directives/checkbox_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 { 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 } 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';\nexport const /** @type {?} */ 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];\nexport const /** @type {?} */ TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm];\nexport const /** @type {?} */ REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n/**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\nexport class InternalFormsSharedModule {\n}\nInternalFormsSharedModule.decorators = [\n { type: NgModule, args: [{\n declarations: SHARED_FORM_DIRECTIVES,\n exports: SHARED_FORM_DIRECTIVES,\n },] },\n];\n/** @nocollapse */\nInternalFormsSharedModule.ctorParameters = () => [];\nfunction InternalFormsSharedModule_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n InternalFormsSharedModule.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n InternalFormsSharedModule.ctorParameters;\n}\n//# sourceMappingURL=directives.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { NgModule } from '@angular/core';\nimport { InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES, TEMPLATE_DRIVEN_DIRECTIVES } from './directives';\nimport { RadioControlRegistry } from './directives/radio_control_value_accessor';\nimport { FormBuilder } from './form_builder';\n/**\n * The ng module for forms.\n * \\@stable\n */\nexport class FormsModule {\n}\nFormsModule.decorators = [\n { type: NgModule, args: [{\n declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n providers: [RadioControlRegistry],\n exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n },] },\n];\n/** @nocollapse */\nFormsModule.ctorParameters = () => [];\nfunction FormsModule_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n FormsModule.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n FormsModule.ctorParameters;\n}\n/**\n * The ng module for reactive forms.\n * \\@stable\n */\nexport class ReactiveFormsModule {\n}\nReactiveFormsModule.decorators = [\n { type: NgModule, args: [{\n declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n providers: [FormBuilder, RadioControlRegistry],\n exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n },] },\n];\n/** @nocollapse */\nReactiveFormsModule.ctorParameters = () => [];\nfunction ReactiveFormsModule_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n ReactiveFormsModule.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n ReactiveFormsModule.ctorParameters;\n}\n//# sourceMappingURL=form_providers.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\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 { NG_VALUE_ACCESSOR } from './directives/control_value_accessor';\nexport { COMPOSITION_BUFFER_MODE, 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 { 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 { CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator } from './directives/validators';\nexport { FormBuilder } from './form_builder';\nexport { AbstractControl, FormArray, FormControl, FormGroup } from './model';\nexport { NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators } from './validators';\nexport { VERSION } from './version';\nexport { FormsModule, ReactiveFormsModule } from './form_providers';\n//# sourceMappingURL=forms.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source 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 * @module\n * @description\n * Entry point for all public APIs of this package.\n */\nexport { AbstractControlDirective, AbstractFormGroupDirective, CheckboxControlValueAccessor, ControlContainer, NG_VALUE_ACCESSOR, COMPOSITION_BUFFER_MODE, DefaultValueAccessor, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, RadioControlValueAccessor, FormControlDirective, FormControlName, FormGroupDirective, FormArrayName, FormGroupName, NgSelectOption, SelectControlValueAccessor, SelectMultipleControlValueAccessor, CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator, FormBuilder, AbstractControl, FormArray, FormControl, FormGroup, NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators, VERSION, FormsModule, ReactiveFormsModule } from './src/forms';\n// This file only reexports content of the `src` folder. Keep it that way.\n//# sourceMappingURL=public_api.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\nexport { AbstractControlDirective, AbstractFormGroupDirective, CheckboxControlValueAccessor, ControlContainer, NG_VALUE_ACCESSOR, COMPOSITION_BUFFER_MODE, DefaultValueAccessor, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, RadioControlValueAccessor, FormControlDirective, FormControlName, FormGroupDirective, FormArrayName, FormGroupName, NgSelectOption, SelectControlValueAccessor, SelectMultipleControlValueAccessor, CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator, FormBuilder, AbstractControl, FormArray, FormControl, FormGroup, NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators, VERSION, FormsModule, ReactiveFormsModule } from './public_api';\nexport { InternalFormsSharedModule as ɵba, REACTIVE_DRIVEN_DIRECTIVES as ɵz, SHARED_FORM_DIRECTIVES as ɵx, TEMPLATE_DRIVEN_DIRECTIVES as ɵy } from './src/directives';\nexport { CHECKBOX_VALUE_ACCESSOR as ɵa } from './src/directives/checkbox_value_accessor';\nexport { DEFAULT_VALUE_ACCESSOR as ɵb } from './src/directives/default_value_accessor';\nexport { AbstractControlStatus as ɵc, ngControlStatusHost as ɵd } from './src/directives/ng_control_status';\nexport { formDirectiveProvider as ɵe } from './src/directives/ng_form';\nexport { formControlBinding as ɵf } from './src/directives/ng_model';\nexport { modelGroupProvider as ɵg } from './src/directives/ng_model_group';\nexport { NgNoValidate as ɵbf } from './src/directives/ng_no_validate_directive';\nexport { NUMBER_VALUE_ACCESSOR as ɵbb, NumberValueAccessor as ɵbc } from './src/directives/number_value_accessor';\nexport { RADIO_VALUE_ACCESSOR as ɵh, RadioControlRegistry as ɵi } from './src/directives/radio_control_value_accessor';\nexport { RANGE_VALUE_ACCESSOR as ɵbd, RangeValueAccessor as ɵbe } from './src/directives/range_value_accessor';\nexport { formControlBinding as ɵj } from './src/directives/reactive_directives/form_control_directive';\nexport { controlNameBinding as ɵk } from './src/directives/reactive_directives/form_control_name';\nexport { formDirectiveProvider as ɵl } from './src/directives/reactive_directives/form_group_directive';\nexport { formArrayNameProvider as ɵn, formGroupNameProvider as ɵm } from './src/directives/reactive_directives/form_group_name';\nexport { SELECT_VALUE_ACCESSOR as ɵo } from './src/directives/select_control_value_accessor';\nexport { NgSelectMultipleOption as ɵq, SELECT_MULTIPLE_VALUE_ACCESSOR as ɵp } from './src/directives/select_multiple_control_value_accessor';\nexport { CHECKBOX_REQUIRED_VALIDATOR as ɵs, EMAIL_VALIDATOR as ɵt, MAX_LENGTH_VALIDATOR as ɵv, MIN_LENGTH_VALIDATOR as ɵu, PATTERN_VALIDATOR as ɵw, REQUIRED_VALIDATOR as ɵr } from './src/directives/validators';\n//# sourceMappingURL=forms.js.map"],"names":["isPromise","isObservable","getDOM","looseIdentical","_buildValueString","_extractId","Examples","resolvedPromise","formControlBinding","formDirectiveProvider"],"mappings":"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"}