{"version":3,"file":"input.js","sources":["../../packages/material/input/autosize.js","../../packages/material/input/input-errors.js","../../packages/material/input/input.js","../../packages/material/input/input-module.js","../../packages/material/input/index.js"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, ElementRef, Input } from '@angular/core';\nimport { Platform } from '@angular/cdk/platform';\n/**\n * Directive to automatically resize a textarea to fit its content.\n */\nexport class MatTextareaAutosize {\n /**\n * @param {?} _elementRef\n * @param {?} _platform\n */\n constructor(_elementRef, _platform) {\n this._elementRef = _elementRef;\n this._platform = _platform;\n }\n /**\n * @return {?}\n */\n get minRows() { return this._minRows; }\n /**\n * @param {?} value\n * @return {?}\n */\n set minRows(value) {\n this._minRows = value;\n this._setMinHeight();\n }\n /**\n * @return {?}\n */\n get maxRows() { return this._maxRows; }\n /**\n * @param {?} value\n * @return {?}\n */\n set maxRows(value) {\n this._maxRows = value;\n this._setMaxHeight();\n }\n /**\n * Sets the minimum height of the textarea as determined by minRows.\n * @return {?}\n */\n _setMinHeight() {\n const /** @type {?} */ minHeight = this.minRows && this._cachedLineHeight ?\n `${this.minRows * this._cachedLineHeight}px` : null;\n if (minHeight) {\n this._setTextareaStyle('minHeight', minHeight);\n }\n }\n /**\n * Sets the maximum height of the textarea as determined by maxRows.\n * @return {?}\n */\n _setMaxHeight() {\n const /** @type {?} */ maxHeight = this.maxRows && this._cachedLineHeight ?\n `${this.maxRows * this._cachedLineHeight}px` : null;\n if (maxHeight) {\n this._setTextareaStyle('maxHeight', maxHeight);\n }\n }\n /**\n * @return {?}\n */\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this.resizeToFitContent();\n }\n }\n /**\n * Sets a style property on the textarea element.\n * @param {?} property\n * @param {?} value\n * @return {?}\n */\n _setTextareaStyle(property, value) {\n const /** @type {?} */ textarea = (this._elementRef.nativeElement);\n textarea.style[property] = value;\n }\n /**\n * Cache the height of a single-row textarea if it has not already been cached.\n *\n * We need to know how large a single \"row\" of a textarea is in order to apply minRows and\n * maxRows. For the initial version, we will assume that the height of a single line in the\n * textarea does not ever change.\n * @return {?}\n */\n _cacheTextareaLineHeight() {\n if (this._cachedLineHeight) {\n return;\n }\n let /** @type {?} */ textarea = (this._elementRef.nativeElement);\n // Use a clone element because we have to override some styles.\n let /** @type {?} */ textareaClone = (textarea.cloneNode(false));\n textareaClone.rows = 1;\n // Use `position: absolute` so that this doesn't cause a browser layout and use\n // `visibility: hidden` so that nothing is rendered. Clear any other styles that\n // would affect the height.\n textareaClone.style.position = 'absolute';\n textareaClone.style.visibility = 'hidden';\n textareaClone.style.border = 'none';\n textareaClone.style.padding = '0';\n textareaClone.style.height = '';\n textareaClone.style.minHeight = '';\n textareaClone.style.maxHeight = '';\n // In Firefox it happens that textarea elements are always bigger than the specified amount\n // of rows. This is because Firefox tries to add extra space for the horizontal scrollbar.\n // As a workaround that removes the extra space for the scrollbar, we can just set overflow\n // to hidden. This ensures that there is no invalid calculation of the line height.\n // See Firefox bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=33654\n textareaClone.style.overflow = 'hidden'; /** @type {?} */\n ((textarea.parentNode)).appendChild(textareaClone);\n this._cachedLineHeight = textareaClone.clientHeight; /** @type {?} */\n ((textarea.parentNode)).removeChild(textareaClone);\n // Min and max heights have to be re-calculated if the cached line height changes\n this._setMinHeight();\n this._setMaxHeight();\n }\n /**\n * @return {?}\n */\n ngDoCheck() {\n if (this._platform.isBrowser) {\n this.resizeToFitContent();\n }\n }\n /**\n * Resize the textarea to fit its content.\n * @return {?}\n */\n resizeToFitContent() {\n this._cacheTextareaLineHeight();\n // If we haven't determined the line-height yet, we know we're still hidden and there's no point\n // in checking the height of the textarea.\n if (!this._cachedLineHeight) {\n return;\n }\n const /** @type {?} */ textarea = (this._elementRef.nativeElement);\n const /** @type {?} */ value = textarea.value;\n // Only resize of the value changed since these calculations can be expensive.\n if (value === this._previousValue) {\n return;\n }\n // Reset the textarea height to auto in order to shrink back to its default size.\n // Also temporarily force overflow:hidden, so scroll bars do not interfere with calculations.\n textarea.style.height = 'auto';\n textarea.style.overflow = 'hidden';\n // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.\n textarea.style.height = `${textarea.scrollHeight}px`;\n textarea.style.overflow = '';\n this._previousValue = value;\n }\n}\nMatTextareaAutosize.decorators = [\n { type: Directive, args: [{\n selector: `textarea[mat-autosize], textarea[matTextareaAutosize]`,\n exportAs: 'matTextareaAutosize',\n host: {\n // Textarea elements that have the directive applied should have a single row by default.\n // Browsers normally show two rows by default and therefore this limits the minRows binding.\n 'rows': '1',\n },\n },] },\n];\n/**\n * @nocollapse\n */\nMatTextareaAutosize.ctorParameters = () => [\n { type: ElementRef, },\n { type: Platform, },\n];\nMatTextareaAutosize.propDecorators = {\n 'minRows': [{ type: Input, args: ['matAutosizeMinRows',] },],\n 'maxRows': [{ type: Input, args: ['matAutosizeMaxRows',] },],\n};\nfunction MatTextareaAutosize_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTextareaAutosize.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatTextareaAutosize.ctorParameters;\n /** @type {?} */\n MatTextareaAutosize.propDecorators;\n /**\n * Keep track of the previous textarea value to avoid resizing when the value hasn't changed.\n * @type {?}\n */\n MatTextareaAutosize.prototype._previousValue;\n /** @type {?} */\n MatTextareaAutosize.prototype._minRows;\n /** @type {?} */\n MatTextareaAutosize.prototype._maxRows;\n /**\n * Cached height of a textarea with a single row.\n * @type {?}\n */\n MatTextareaAutosize.prototype._cachedLineHeight;\n /** @type {?} */\n MatTextareaAutosize.prototype._elementRef;\n /** @type {?} */\n MatTextareaAutosize.prototype._platform;\n}\n//# sourceMappingURL=autosize.js.map","/**\n * \\@docs-private\n * @param {?} type\n * @return {?}\n */\nexport function getMatInputUnsupportedTypeError(type) {\n return Error(`Input type \"${type}\" isn't supported by matInput.`);\n}\n//# sourceMappingURL=input-errors.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this 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, Input, Optional, Renderer2, Self, } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { Platform, getSupportedInputTypes } from '@angular/cdk/platform';\nimport { getMatInputUnsupportedTypeError } from './input-errors';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { Subject } from 'rxjs/Subject';\nimport { MatFormFieldControl } from '@angular/material/form-field';\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst /** @type {?} */ MAT_INPUT_INVALID_TYPES = [\n 'button',\n 'checkbox',\n 'color',\n 'file',\n 'hidden',\n 'image',\n 'radio',\n 'range',\n 'reset',\n 'submit'\n];\nlet /** @type {?} */ nextUniqueId = 0;\n/**\n * Directive that allows a native input to work inside a `MatFormField`.\n */\nexport class MatInput {\n /**\n * @param {?} _elementRef\n * @param {?} _renderer\n * @param {?} _platform\n * @param {?} ngControl\n * @param {?} _parentForm\n * @param {?} _parentFormGroup\n * @param {?} _defaultErrorStateMatcher\n */\n constructor(_elementRef, _renderer, _platform, ngControl, _parentForm, _parentFormGroup, _defaultErrorStateMatcher) {\n this._elementRef = _elementRef;\n this._renderer = _renderer;\n this._platform = _platform;\n this.ngControl = ngControl;\n this._parentForm = _parentForm;\n this._parentFormGroup = _parentFormGroup;\n this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n /**\n * Variables used as cache for getters and setters.\n */\n this._type = 'text';\n this._disabled = false;\n this._required = false;\n this._uid = `mat-input-${nextUniqueId++}`;\n this._previousNativeValue = this.value;\n this._readonly = false;\n /**\n * Whether the input is focused.\n */\n this.focused = false;\n /**\n * Whether the input is in an error state.\n */\n this.errorState = false;\n /**\n * Stream that emits whenever the state of the input changes such that the wrapping `MatFormField`\n * needs to run change detection.\n */\n this.stateChanges = new Subject();\n /**\n * A name for this control that can be used by `mat-form-field`.\n */\n this.controlType = 'mat-input';\n /**\n * Placeholder attribute of the element.\n */\n this.placeholder = '';\n this._neverEmptyInputTypes = [\n 'date',\n 'datetime',\n 'datetime-local',\n 'month',\n 'time',\n 'week'\n ].filter(t => getSupportedInputTypes().has(t));\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n // exists on iOS, we only bother to install the listener on iOS.\n if (_platform.IOS) {\n _renderer.listen(_elementRef.nativeElement, 'keyup', (event) => {\n let el = event.target;\n if (!el.value && !el.selectionStart && !el.selectionEnd) {\n // Note: Just setting `0, 0` doesn't fix the issue. Setting `1, 1` fixes it for the first\n // time that you type text and then hold delete. Toggling to `1, 1` and then back to\n // `0, 0` seems to completely fix it.\n el.setSelectionRange(1, 1);\n el.setSelectionRange(0, 0);\n }\n });\n }\n }\n /**\n * Whether the element is disabled.\n * @return {?}\n */\n get disabled() { return this.ngControl ? this.ngControl.disabled : this._disabled; }\n /**\n * @param {?} value\n * @return {?}\n */\n set disabled(value) { this._disabled = coerceBooleanProperty(value); }\n /**\n * Unique id of the element.\n * @return {?}\n */\n get id() { return this._id; }\n /**\n * @param {?} value\n * @return {?}\n */\n set id(value) { this._id = value || this._uid; }\n /**\n * Whether the element is required.\n * @return {?}\n */\n get required() { return this._required; }\n /**\n * @param {?} value\n * @return {?}\n */\n set required(value) { this._required = coerceBooleanProperty(value); }\n /**\n * Input type of the element.\n * @return {?}\n */\n get type() { return this._type; }\n /**\n * @param {?} value\n * @return {?}\n */\n set type(value) {\n this._type = value || 'text';\n this._validateType();\n // When using Angular inputs, developers are no longer able to set the properties on the native\n // input element. To ensure that bindings for `type` work, we need to sync the setter\n // with the native property. Textarea elements don't support the type property or attribute.\n if (!this._isTextarea() && getSupportedInputTypes().has(this._type)) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'type', this._type);\n }\n }\n /**\n * The input element's value.\n * @return {?}\n */\n get value() { return this._elementRef.nativeElement.value; }\n /**\n * @param {?} value\n * @return {?}\n */\n set value(value) {\n if (value !== this.value) {\n this._elementRef.nativeElement.value = value;\n this.stateChanges.next();\n }\n }\n /**\n * Whether the element is readonly.\n * @return {?}\n */\n get readonly() { return this._readonly; }\n /**\n * @param {?} value\n * @return {?}\n */\n set readonly(value) { this._readonly = coerceBooleanProperty(value); }\n /**\n * @return {?}\n */\n ngOnChanges() {\n this.stateChanges.next();\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this.stateChanges.complete();\n }\n /**\n * @return {?}\n */\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this._updateErrorState();\n }\n else {\n // When the input isn't used together with `@angular/forms`, we need to check manually for\n // changes to the native `value` property in order to update the floating label.\n this._dirtyCheckNativeValue();\n }\n }\n /**\n * @return {?}\n */\n focus() { this._elementRef.nativeElement.focus(); }\n /**\n * Callback for the cases where the focused state of the input changes.\n * @param {?} isFocused\n * @return {?}\n */\n _focusChanged(isFocused) {\n if (isFocused !== this.focused && !this.readonly) {\n this.focused = isFocused;\n this.stateChanges.next();\n }\n }\n /**\n * @return {?}\n */\n _onInput() {\n // This is a noop function and is used to let Angular know whenever the value changes.\n // Angular will run a new change detection each time the `input` event has been dispatched.\n // It's necessary that Angular recognizes the value change, because when floatingLabel\n // is set to false and Angular forms aren't used, the placeholder won't recognize the\n // value changes and will not disappear.\n // Listening to the input event wouldn't be necessary when the input is using the\n // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n }\n /**\n * Re-evaluates the error state. This is only relevant with \\@angular/forms.\n * @return {?}\n */\n _updateErrorState() {\n const /** @type {?} */ oldState = this.errorState;\n const /** @type {?} */ parent = this._parentFormGroup || this._parentForm;\n const /** @type {?} */ matcher = this.errorStateMatcher || this._defaultErrorStateMatcher;\n const /** @type {?} */ control = this.ngControl ? (this.ngControl.control) : null;\n const /** @type {?} */ newState = matcher.isErrorState(control, parent);\n if (newState !== oldState) {\n this.errorState = newState;\n this.stateChanges.next();\n }\n }\n /**\n * Does some manual dirty checking on the native input `value` property.\n * @return {?}\n */\n _dirtyCheckNativeValue() {\n const /** @type {?} */ newValue = this.value;\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n /**\n * Make sure the input is a supported type.\n * @return {?}\n */\n _validateType() {\n if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1) {\n throw getMatInputUnsupportedTypeError(this._type);\n }\n }\n /**\n * Checks whether the input type is one of the types that are never empty.\n * @return {?}\n */\n _isNeverEmpty() {\n return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n }\n /**\n * Checks whether the input is invalid based on the native validation.\n * @return {?}\n */\n _isBadInput() {\n // The `validity` property won't be present on platform-server.\n let /** @type {?} */ validity = ((this._elementRef.nativeElement)).validity;\n return validity && validity.badInput;\n }\n /**\n * Determines if the component host is a textarea. If not recognizable it returns false.\n * @return {?}\n */\n _isTextarea() {\n let /** @type {?} */ nativeElement = this._elementRef.nativeElement;\n // In Universal, we don't have access to `nodeName`, but the same can be achieved with `name`.\n // Note that this shouldn't be necessary once Angular switches to an API that resembles the\n // DOM closer.\n let /** @type {?} */ nodeName = this._platform.isBrowser ? nativeElement.nodeName : nativeElement.name;\n return nodeName ? nodeName.toLowerCase() === 'textarea' : false;\n }\n /**\n * @return {?}\n */\n get empty() {\n return !this._isNeverEmpty() &&\n (this.value == null || this.value === '') &&\n // Check if the input contains bad input. If so, we know that it only appears empty because\n // the value failed to parse. From the user's perspective it is not empty.\n // TODO(mmalerba): Add e2e test for bad input case.\n !this._isBadInput();\n }\n /**\n * @return {?}\n */\n get shouldPlaceholderFloat() { return this.focused || !this.empty; }\n /**\n * @param {?} ids\n * @return {?}\n */\n setDescribedByIds(ids) { this._ariaDescribedby = ids.join(' '); }\n /**\n * @return {?}\n */\n onContainerClick() { this.focus(); }\n}\nMatInput.decorators = [\n { type: Directive, args: [{\n selector: `input[matInput], textarea[matInput]`,\n exportAs: 'matInput',\n host: {\n 'class': 'mat-input-element mat-form-field-autofill-control',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[attr.id]': 'id',\n '[placeholder]': 'placeholder',\n '[disabled]': 'disabled',\n '[required]': 'required',\n '[readonly]': 'readonly',\n '[attr.aria-describedby]': '_ariaDescribedby || null',\n '[attr.aria-invalid]': 'errorState',\n '(blur)': '_focusChanged(false)',\n '(focus)': '_focusChanged(true)',\n '(input)': '_onInput()',\n },\n providers: [{ provide: MatFormFieldControl, useExisting: MatInput }],\n },] },\n];\n/**\n * @nocollapse\n */\nMatInput.ctorParameters = () => [\n { type: ElementRef, },\n { type: Renderer2, },\n { type: Platform, },\n { type: NgControl, decorators: [{ type: Optional }, { type: Self },] },\n { type: NgForm, decorators: [{ type: Optional },] },\n { type: FormGroupDirective, decorators: [{ type: Optional },] },\n { type: ErrorStateMatcher, },\n];\nMatInput.propDecorators = {\n 'disabled': [{ type: Input },],\n 'id': [{ type: Input },],\n 'placeholder': [{ type: Input },],\n 'required': [{ type: Input },],\n 'type': [{ type: Input },],\n 'errorStateMatcher': [{ type: Input },],\n 'value': [{ type: Input },],\n 'readonly': [{ type: Input },],\n};\nfunction MatInput_tsickle_Closure_declarations() {\n /** @type {?} */\n MatInput.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatInput.ctorParameters;\n /** @type {?} */\n MatInput.propDecorators;\n /**\n * Variables used as cache for getters and setters.\n * @type {?}\n */\n MatInput.prototype._type;\n /** @type {?} */\n MatInput.prototype._disabled;\n /** @type {?} */\n MatInput.prototype._required;\n /** @type {?} */\n MatInput.prototype._id;\n /** @type {?} */\n MatInput.prototype._uid;\n /** @type {?} */\n MatInput.prototype._previousNativeValue;\n /** @type {?} */\n MatInput.prototype._readonly;\n /**\n * Whether the input is focused.\n * @type {?}\n */\n MatInput.prototype.focused;\n /**\n * Whether the input is in an error state.\n * @type {?}\n */\n MatInput.prototype.errorState;\n /**\n * The aria-describedby attribute on the input for improved a11y.\n * @type {?}\n */\n MatInput.prototype._ariaDescribedby;\n /**\n * Stream that emits whenever the state of the input changes such that the wrapping `MatFormField`\n * needs to run change detection.\n * @type {?}\n */\n MatInput.prototype.stateChanges;\n /**\n * A name for this control that can be used by `mat-form-field`.\n * @type {?}\n */\n MatInput.prototype.controlType;\n /**\n * Placeholder attribute of the element.\n * @type {?}\n */\n MatInput.prototype.placeholder;\n /**\n * An object used to control when error messages are shown.\n * @type {?}\n */\n MatInput.prototype.errorStateMatcher;\n /** @type {?} */\n MatInput.prototype._neverEmptyInputTypes;\n /** @type {?} */\n MatInput.prototype._elementRef;\n /** @type {?} */\n MatInput.prototype._renderer;\n /** @type {?} */\n MatInput.prototype._platform;\n /** @type {?} */\n MatInput.prototype.ngControl;\n /** @type {?} */\n MatInput.prototype._parentForm;\n /** @type {?} */\n MatInput.prototype._parentFormGroup;\n /** @type {?} */\n MatInput.prototype._defaultErrorStateMatcher;\n}\n//# sourceMappingURL=input.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this 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 { PlatformModule } from '@angular/cdk/platform';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatTextareaAutosize } from './autosize';\nimport { MatInput } from './input';\nimport { ErrorStateMatcher } from '@angular/material/core';\nexport class MatInputModule {\n}\nMatInputModule.decorators = [\n { type: NgModule, args: [{\n declarations: [\n MatInput,\n MatTextareaAutosize,\n ],\n imports: [\n CommonModule,\n MatFormFieldModule,\n PlatformModule,\n ],\n exports: [\n // We re-export the `MatFormFieldModule` since `MatInput` will almost always\n // be used together with `MatFormField`.\n MatFormFieldModule,\n MatInput,\n MatTextareaAutosize,\n ],\n providers: [ErrorStateMatcher],\n },] },\n];\n/**\n * @nocollapse\n */\nMatInputModule.ctorParameters = () => [];\nfunction MatInputModule_tsickle_Closure_declarations() {\n /** @type {?} */\n MatInputModule.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatInputModule.ctorParameters;\n}\n//# sourceMappingURL=input-module.js.map","/**\n * Generated bundle index. Do not edit.\n */\nexport { MatInputModule, MatTextareaAutosize, MatInput, getMatInputUnsupportedTypeError } from './public-api';\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":"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"}