{"version":3,"file":"text-field.es5.js","sources":["../../../src/cdk/text-field/text-field-module.ts","../../../src/cdk/text-field/autosize.ts","../../../src/cdk/text-field/autofill.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {CdkAutofill} from './autofill';\nimport {CdkTextareaAutosize} from './autosize';\n\n\n@NgModule({\n  declarations: [CdkAutofill, CdkTextareaAutosize],\n  imports: [PlatformModule],\n  exports: [CdkAutofill, CdkTextareaAutosize],\n})\nexport class TextFieldModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  ElementRef,\n  Input,\n  AfterViewInit,\n  DoCheck,\n  OnDestroy,\n  NgZone,\n} from '@angular/core';\nimport {Platform} from '@angular/cdk/platform';\nimport {auditTime, takeUntil} from 'rxjs/operators';\nimport {fromEvent, Subject} from 'rxjs';\n\n\n/** Directive to automatically resize a textarea to fit its content. */\n@Directive({\n  selector: 'textarea[cdkTextareaAutosize]',\n  exportAs: 'cdkTextareaAutosize',\n  host: {\n    'class': 'cdk-textarea-autosize',\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    '(input)': '_noopInputHandler()',\n  },\n})\nexport class CdkTextareaAutosize implements AfterViewInit, DoCheck, OnDestroy {\n  /** Keep track of the previous textarea value to avoid resizing when the value hasn't changed. */\n  private _previousValue?: string;\n  private _initialHeight: string | null;\n  private readonly _destroyed = new Subject<void>();\n\n  private _minRows: number;\n  private _maxRows: number;\n  private _enabled: boolean = true;\n\n  /**\n   * Value of minRows as of last resize. If the minRows has decreased, the\n   * height of the textarea needs to be recomputed to reflect the new minimum. The maxHeight\n   * does not have the same problem because it does not affect the textarea's scrollHeight.\n   */\n  private _previousMinRows: number = -1;\n\n  private _textareaElement: HTMLTextAreaElement;\n\n  /** Minimum amount of rows in the textarea. */\n  @Input('cdkAutosizeMinRows')\n  get minRows(): number { return this._minRows; }\n  set minRows(value: number) {\n    this._minRows = value;\n    this._setMinHeight();\n  }\n\n  /** Maximum amount of rows in the textarea. */\n  @Input('cdkAutosizeMaxRows')\n  get maxRows(): number { return this._maxRows; }\n  set maxRows(value: number) {\n    this._maxRows = value;\n    this._setMaxHeight();\n  }\n\n  /** Whether autosizing is enabled or not */\n  @Input('cdkTextareaAutosize')\n  get enabled(): boolean { return this._enabled; }\n  set enabled(value: boolean) {\n    value = coerceBooleanProperty(value);\n\n    // Only act if the actual value changed. This specifically helps to not run\n    // resizeToFitContent too early (i.e. before ngAfterViewInit)\n    if (this._enabled !== value) {\n      (this._enabled = value) ? this.resizeToFitContent(true) : this.reset();\n    }\n  }\n\n  /** Cached height of a textarea with a single row. */\n  private _cachedLineHeight: number;\n\n  constructor(\n    private _elementRef: ElementRef<HTMLElement>,\n    private _platform: Platform,\n    private _ngZone: NgZone) {\n    this._textareaElement = this._elementRef.nativeElement as HTMLTextAreaElement;\n  }\n\n  /** Sets the minimum height of the textarea as determined by minRows. */\n  _setMinHeight(): void {\n    const minHeight = this.minRows && this._cachedLineHeight ?\n        `${this.minRows * this._cachedLineHeight}px` : null;\n\n    if (minHeight)  {\n      this._textareaElement.style.minHeight = minHeight;\n    }\n  }\n\n  /** Sets the maximum height of the textarea as determined by maxRows. */\n  _setMaxHeight(): void {\n    const maxHeight = this.maxRows && this._cachedLineHeight ?\n        `${this.maxRows * this._cachedLineHeight}px` : null;\n\n    if (maxHeight) {\n      this._textareaElement.style.maxHeight = maxHeight;\n    }\n  }\n\n  ngAfterViewInit() {\n    if (this._platform.isBrowser) {\n      // Remember the height which we started with in case autosizing is disabled\n      this._initialHeight = this._textareaElement.style.height;\n\n      this.resizeToFitContent();\n\n      this._ngZone.runOutsideAngular(() => {\n        fromEvent(window, 'resize')\n          .pipe(auditTime(16), takeUntil(this._destroyed))\n          .subscribe(() => this.resizeToFitContent(true));\n      });\n    }\n  }\n\n  ngOnDestroy() {\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\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   */\n  private _cacheTextareaLineHeight(): void {\n    if (this._cachedLineHeight) {\n      return;\n    }\n\n    // Use a clone element because we have to override some styles.\n    let textareaClone = this._textareaElement.cloneNode(false) as HTMLTextAreaElement;\n    textareaClone.rows = 1;\n\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\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';\n\n    this._textareaElement.parentNode!.appendChild(textareaClone);\n    this._cachedLineHeight = textareaClone.clientHeight;\n    this._textareaElement.parentNode!.removeChild(textareaClone);\n\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  ngDoCheck() {\n    if (this._platform.isBrowser) {\n      this.resizeToFitContent();\n    }\n  }\n\n  /**\n   * Resize the textarea to fit its content.\n   * @param force Whether to force a height recalculation. By default the height will be\n   *    recalculated only if the value changed since the last call.\n   */\n  resizeToFitContent(force: boolean = false) {\n    // If autosizing is disabled, just skip everything else\n    if (!this._enabled) {\n      return;\n    }\n\n    this._cacheTextareaLineHeight();\n\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\n    const textarea = this._elementRef.nativeElement as HTMLTextAreaElement;\n    const value = textarea.value;\n\n    // Only resize if the value or minRows have changed since these calculations can be expensive.\n    if (!force && this._minRows === this._previousMinRows && value === this._previousValue) {\n      return;\n    }\n\n    const placeholderText = textarea.placeholder;\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    // Long placeholders that are wider than the textarea width may lead to a bigger scrollHeight\n    // value. To ensure that the scrollHeight is not bigger than the content, the placeholders\n    // need to be removed temporarily.\n    textarea.classList.add('cdk-textarea-autosize-measuring');\n    textarea.placeholder = '';\n\n    // The cdk-textarea-autosize-measuring class includes a 2px padding to workaround an issue with\n    // Chrome, so we account for that extra space here by subtracting 4 (2px top + 2px bottom).\n    const height = textarea.scrollHeight - 4;\n\n    // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.\n    textarea.style.height = `${height}px`;\n    textarea.classList.remove('cdk-textarea-autosize-measuring');\n    textarea.placeholder = placeholderText;\n\n    this._ngZone.runOutsideAngular(() => {\n      if (typeof requestAnimationFrame !== 'undefined') {\n        requestAnimationFrame(() => this._scrollToCaretPosition(textarea));\n      } else {\n        setTimeout(() => this._scrollToCaretPosition(textarea));\n      }\n    });\n\n    this._previousValue = value;\n    this._previousMinRows = this._minRows;\n  }\n\n  /**\n   * Resets the textarea to it's original size\n   */\n  reset() {\n    // Do not try to change the textarea, if the initialHeight has not been determined yet\n    // This might potentially remove styles when reset() is called before ngAfterViewInit\n    if (this._initialHeight === undefined) {\n      return;\n    }\n    this._textareaElement.style.height = this._initialHeight;\n  }\n\n  _noopInputHandler() {\n    // no-op handler that ensures we're running change detection on input events.\n  }\n\n  /**\n   * Scrolls a textarea to the caret position. On Firefox resizing the textarea will\n   * prevent it from scrolling to the caret position. We need to re-set the selection\n   * in order for it to scroll to the proper position.\n   */\n  private _scrollToCaretPosition(textarea: HTMLTextAreaElement) {\n    const {selectionStart, selectionEnd} = textarea;\n\n    // IE will throw an \"Unspecified error\" if we try to set the selection range after the\n    // element has been removed from the DOM. Assert that the directive hasn't been destroyed\n    // between the time we requested the animation frame and when it was executed.\n    // Also note that we have to assert that the textarea is focused before we set the\n    // selection range. Setting the selection range on a non-focused textarea will cause\n    // it to receive focus on IE and Edge.\n    if (!this._destroyed.isStopped && document.activeElement === textarea) {\n      textarea.setSelectionRange(selectionStart, selectionEnd);\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Injectable,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {EMPTY, Observable, Subject} from 'rxjs';\n\n\n/** An event that is emitted when the autofill state of an input changes. */\nexport type AutofillEvent = {\n  /** The element whose autofill state changes. */\n  target: Element;\n  /** Whether the element is currently autofilled. */\n  isAutofilled: boolean;\n};\n\n\n/** Used to track info about currently monitored elements. */\ntype MonitoredElementInfo = {\n  subject: Subject<AutofillEvent>;\n  unlisten: () => void;\n};\n\n\n/** Options to pass to the animationstart listener. */\nconst listenerOptions = normalizePassiveListenerOptions({passive: true});\n\n\n/**\n * An injectable service that can be used to monitor the autofill state of an input.\n * Based on the following blog post:\n * https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\n */\n@Injectable({providedIn: 'root'})\nexport class AutofillMonitor implements OnDestroy {\n  private _monitoredElements = new Map<Element, MonitoredElementInfo>();\n\n  constructor(private _platform: Platform, private _ngZone: NgZone) {}\n\n  /**\n   * Monitor for changes in the autofill state of the given input element.\n   * @param element The element to monitor.\n   * @return A stream of autofill state changes.\n   */\n  monitor(element: Element): Observable<AutofillEvent>;\n\n  /**\n   * Monitor for changes in the autofill state of the given input element.\n   * @param element The element to monitor.\n   * @return A stream of autofill state changes.\n   */\n  monitor(element: ElementRef<Element>): Observable<AutofillEvent>;\n\n  monitor(elementOrRef: Element | ElementRef<Element>): Observable<AutofillEvent> {\n    if (!this._platform.isBrowser) {\n      return EMPTY;\n    }\n\n    const element = coerceElement(elementOrRef);\n    const info = this._monitoredElements.get(element);\n\n    if (info) {\n      return info.subject.asObservable();\n    }\n\n    const result = new Subject<AutofillEvent>();\n    const cssClass = 'cdk-text-field-autofilled';\n    const listener = ((event: AnimationEvent) => {\n      // Animation events fire on initial element render, we check for the presence of the autofill\n      // CSS class to make sure this is a real change in state, not just the initial render before\n      // we fire off events.\n      if (event.animationName === 'cdk-text-field-autofill-start' &&\n          !element.classList.contains(cssClass)) {\n        element.classList.add(cssClass);\n        this._ngZone.run(() => result.next({target: event.target as Element, isAutofilled: true}));\n      } else if (event.animationName === 'cdk-text-field-autofill-end' &&\n          element.classList.contains(cssClass)) {\n        element.classList.remove(cssClass);\n        this._ngZone.run(() => result.next({target: event.target as Element, isAutofilled: false}));\n      }\n    }) as EventListenerOrEventListenerObject;\n\n    this._ngZone.runOutsideAngular(() => {\n      element.addEventListener('animationstart', listener, listenerOptions);\n      element.classList.add('cdk-text-field-autofill-monitored');\n    });\n\n    this._monitoredElements.set(element, {\n      subject: result,\n      unlisten: () => {\n        element.removeEventListener('animationstart', listener, listenerOptions);\n      }\n    });\n\n    return result.asObservable();\n  }\n\n  /**\n   * Stop monitoring the autofill state of the given input element.\n   * @param element The element to stop monitoring.\n   */\n  stopMonitoring(element: Element): void;\n\n  /**\n   * Stop monitoring the autofill state of the given input element.\n   * @param element The element to stop monitoring.\n   */\n  stopMonitoring(element: ElementRef<Element>): void;\n\n  stopMonitoring(elementOrRef: Element | ElementRef<Element>): void {\n    const element = coerceElement(elementOrRef);\n    const info = this._monitoredElements.get(element);\n\n    if (info) {\n      info.unlisten();\n      info.subject.complete();\n      element.classList.remove('cdk-text-field-autofill-monitored');\n      element.classList.remove('cdk-text-field-autofilled');\n      this._monitoredElements.delete(element);\n    }\n  }\n\n  ngOnDestroy() {\n    this._monitoredElements.forEach((_info, element) => this.stopMonitoring(element));\n  }\n}\n\n\n/** A directive that can be used to monitor the autofill state of an input. */\n@Directive({\n  selector: '[cdkAutofill]',\n})\nexport class CdkAutofill implements OnDestroy, OnInit {\n  /** Emits when the autofill state of the element changes. */\n  @Output() cdkAutofill: EventEmitter<AutofillEvent> = new EventEmitter<AutofillEvent>();\n\n  constructor(private _elementRef: ElementRef<HTMLElement>,\n              private _autofillMonitor: AutofillMonitor) {}\n\n  ngOnInit() {\n    this._autofillMonitor\n      .monitor(this._elementRef)\n      .subscribe(event => this.cdkAutofill.emit(event));\n  }\n\n  ngOnDestroy() {\n    this._autofillMonitor.stopMonitoring(this._elementRef);\n  }\n}\n"],"names":[],"mappings":"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"}