{"ast":null,"code":"import * as i1 from '@angular/cdk/platform';\nimport { normalizePassiveListenerOptions, PlatformModule } from '@angular/cdk/platform';\nimport * as i0 from '@angular/core';\nimport { Injectable, EventEmitter, Directive, Output, Optional, Inject, Input, NgModule } from '@angular/core';\nimport { coerceElement, coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { EMPTY, Subject, fromEvent } from 'rxjs';\nimport { auditTime, takeUntil } from 'rxjs/operators';\nimport { DOCUMENT } from '@angular/common';\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\n/** Options to pass to the animationstart listener. */\n\nconst listenerOptions = normalizePassiveListenerOptions({\n  passive: true\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\nclass AutofillMonitor {\n  constructor(_platform, _ngZone) {\n    this._platform = _platform;\n    this._ngZone = _ngZone;\n    this._monitoredElements = new Map();\n  }\n\n  monitor(elementOrRef) {\n    if (!this._platform.isBrowser) {\n      return EMPTY;\n    }\n\n    const element = coerceElement(elementOrRef);\n\n    const info = this._monitoredElements.get(element);\n\n    if (info) {\n      return info.subject;\n    }\n\n    const result = new Subject();\n    const cssClass = 'cdk-text-field-autofilled';\n\n    const listener = event => {\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' && !element.classList.contains(cssClass)) {\n        element.classList.add(cssClass);\n\n        this._ngZone.run(() => result.next({\n          target: event.target,\n          isAutofilled: true\n        }));\n      } else if (event.animationName === 'cdk-text-field-autofill-end' && element.classList.contains(cssClass)) {\n        element.classList.remove(cssClass);\n\n        this._ngZone.run(() => result.next({\n          target: event.target,\n          isAutofilled: false\n        }));\n      }\n    };\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;\n  }\n\n  stopMonitoring(elementOrRef) {\n    const element = coerceElement(elementOrRef);\n\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\n      this._monitoredElements.delete(element);\n    }\n  }\n\n  ngOnDestroy() {\n    this._monitoredElements.forEach((_info, element) => this.stopMonitoring(element));\n  }\n\n}\n\nAutofillMonitor.ɵfac = function AutofillMonitor_Factory(t) {\n  return new (t || AutofillMonitor)(i0.ɵɵinject(i1.Platform), i0.ɵɵinject(i0.NgZone));\n};\n\nAutofillMonitor.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n  token: AutofillMonitor,\n  factory: AutofillMonitor.ɵfac,\n  providedIn: 'root'\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(AutofillMonitor, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], function () {\n    return [{\n      type: i1.Platform\n    }, {\n      type: i0.NgZone\n    }];\n  }, null);\n})();\n/** A directive that can be used to monitor the autofill state of an input. */\n\n\nclass CdkAutofill {\n  constructor(_elementRef, _autofillMonitor) {\n    this._elementRef = _elementRef;\n    this._autofillMonitor = _autofillMonitor;\n    /** Emits when the autofill state of the element changes. */\n\n    this.cdkAutofill = new EventEmitter();\n  }\n\n  ngOnInit() {\n    this._autofillMonitor.monitor(this._elementRef).subscribe(event => this.cdkAutofill.emit(event));\n  }\n\n  ngOnDestroy() {\n    this._autofillMonitor.stopMonitoring(this._elementRef);\n  }\n\n}\n\nCdkAutofill.ɵfac = function CdkAutofill_Factory(t) {\n  return new (t || CdkAutofill)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(AutofillMonitor));\n};\n\nCdkAutofill.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkAutofill,\n  selectors: [[\"\", \"cdkAutofill\", \"\"]],\n  outputs: {\n    cdkAutofill: \"cdkAutofill\"\n  }\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkAutofill, [{\n    type: Directive,\n    args: [{\n      selector: '[cdkAutofill]'\n    }]\n  }], function () {\n    return [{\n      type: i0.ElementRef\n    }, {\n      type: AutofillMonitor\n    }];\n  }, {\n    cdkAutofill: [{\n      type: Output\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\n/** Directive to automatically resize a textarea to fit its content. */\n\n\nclass CdkTextareaAutosize {\n  constructor(_elementRef, _platform, _ngZone,\n  /** @breaking-change 11.0.0 make document required */\n  document) {\n    this._elementRef = _elementRef;\n    this._platform = _platform;\n    this._ngZone = _ngZone;\n    this._destroyed = new Subject();\n    this._enabled = true;\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\n    this._previousMinRows = -1;\n    this._isViewInited = false;\n    /** Handles `focus` and `blur` events. */\n\n    this._handleFocusEvent = event => {\n      this._hasFocus = event.type === 'focus';\n    };\n\n    this._document = document;\n    this._textareaElement = this._elementRef.nativeElement;\n  }\n  /** Minimum amount of rows in the textarea. */\n\n\n  get minRows() {\n    return this._minRows;\n  }\n\n  set minRows(value) {\n    this._minRows = coerceNumberProperty(value);\n\n    this._setMinHeight();\n  }\n  /** Maximum amount of rows in the textarea. */\n\n\n  get maxRows() {\n    return this._maxRows;\n  }\n\n  set maxRows(value) {\n    this._maxRows = coerceNumberProperty(value);\n\n    this._setMaxHeight();\n  }\n  /** Whether autosizing is enabled or not */\n\n\n  get enabled() {\n    return this._enabled;\n  }\n\n  set enabled(value) {\n    value = coerceBooleanProperty(value); // Only act if the actual value changed. This specifically helps to not run\n    // resizeToFitContent too early (i.e. before ngAfterViewInit)\n\n    if (this._enabled !== value) {\n      (this._enabled = value) ? this.resizeToFitContent(true) : this.reset();\n    }\n  }\n\n  get placeholder() {\n    return this._textareaElement.placeholder;\n  }\n\n  set placeholder(value) {\n    this._cachedPlaceholderHeight = undefined;\n    this._textareaElement.placeholder = value;\n\n    this._cacheTextareaPlaceholderHeight();\n  }\n  /** Sets the minimum height of the textarea as determined by minRows. */\n\n\n  _setMinHeight() {\n    const minHeight = this.minRows && this._cachedLineHeight ? `${this.minRows * this._cachedLineHeight}px` : null;\n\n    if (minHeight) {\n      this._textareaElement.style.minHeight = minHeight;\n    }\n  }\n  /** Sets the maximum height of the textarea as determined by maxRows. */\n\n\n  _setMaxHeight() {\n    const maxHeight = this.maxRows && this._cachedLineHeight ? `${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      this.resizeToFitContent();\n\n      this._ngZone.runOutsideAngular(() => {\n        const window = this._getWindow();\n\n        fromEvent(window, 'resize').pipe(auditTime(16), takeUntil(this._destroyed)).subscribe(() => this.resizeToFitContent(true));\n\n        this._textareaElement.addEventListener('focus', this._handleFocusEvent);\n\n        this._textareaElement.addEventListener('blur', this._handleFocusEvent);\n      });\n\n      this._isViewInited = true;\n      this.resizeToFitContent(true);\n    }\n  }\n\n  ngOnDestroy() {\n    this._textareaElement.removeEventListener('focus', this._handleFocusEvent);\n\n    this._textareaElement.removeEventListener('blur', this._handleFocusEvent);\n\n    this._destroyed.next();\n\n    this._destroyed.complete();\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\n\n  _cacheTextareaLineHeight() {\n    if (this._cachedLineHeight) {\n      return;\n    } // Use a clone element because we have to override some styles.\n\n\n    let textareaClone = this._textareaElement.cloneNode(false);\n\n    textareaClone.rows = 1; // 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\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 = ''; // 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\n    textareaClone.style.overflow = 'hidden';\n\n    this._textareaElement.parentNode.appendChild(textareaClone);\n\n    this._cachedLineHeight = textareaClone.clientHeight;\n    textareaClone.remove(); // Min and max heights have to be re-calculated if the cached line height changes\n\n    this._setMinHeight();\n\n    this._setMaxHeight();\n  }\n\n  _measureScrollHeight() {\n    const element = this._textareaElement;\n    const previousMargin = element.style.marginBottom || '';\n    const isFirefox = this._platform.FIREFOX;\n    const needsMarginFiller = isFirefox && this._hasFocus;\n    const measuringClass = isFirefox ? 'cdk-textarea-autosize-measuring-firefox' : 'cdk-textarea-autosize-measuring'; // In some cases the page might move around while we're measuring the `textarea` on Firefox. We\n    // work around it by assigning a temporary margin with the same height as the `textarea` so that\n    // it occupies the same amount of space. See #23233.\n\n    if (needsMarginFiller) {\n      element.style.marginBottom = `${element.clientHeight}px`;\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\n\n    element.classList.add(measuringClass); // The measuring class includes a 2px padding to workaround an issue with Chrome,\n    // so we account for that extra space here by subtracting 4 (2px top + 2px bottom).\n\n    const scrollHeight = element.scrollHeight - 4;\n    element.classList.remove(measuringClass);\n\n    if (needsMarginFiller) {\n      element.style.marginBottom = previousMargin;\n    }\n\n    return scrollHeight;\n  }\n\n  _cacheTextareaPlaceholderHeight() {\n    if (!this._isViewInited || this._cachedPlaceholderHeight != undefined) {\n      return;\n    }\n\n    if (!this.placeholder) {\n      this._cachedPlaceholderHeight = 0;\n      return;\n    }\n\n    const value = this._textareaElement.value;\n    this._textareaElement.value = this._textareaElement.placeholder;\n    this._cachedPlaceholderHeight = this._measureScrollHeight();\n    this._textareaElement.value = value;\n  }\n\n  ngDoCheck() {\n    if (this._platform.isBrowser) {\n      this.resizeToFitContent();\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\n\n  resizeToFitContent(force = false) {\n    // If autosizing is disabled, just skip everything else\n    if (!this._enabled) {\n      return;\n    }\n\n    this._cacheTextareaLineHeight();\n\n    this._cacheTextareaPlaceholderHeight(); // 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\n\n    if (!this._cachedLineHeight) {\n      return;\n    }\n\n    const textarea = this._elementRef.nativeElement;\n    const value = textarea.value; // Only resize if the value or minRows have changed since these calculations can be expensive.\n\n    if (!force && this._minRows === this._previousMinRows && value === this._previousValue) {\n      return;\n    }\n\n    const scrollHeight = this._measureScrollHeight();\n\n    const height = Math.max(scrollHeight, this._cachedPlaceholderHeight || 0); // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.\n\n    textarea.style.height = `${height}px`;\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   * Resets the textarea to its original size\n   */\n\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      this._textareaElement.style.height = this._initialHeight;\n    }\n  }\n\n  _noopInputHandler() {// no-op handler that ensures we're running change detection on input events.\n  }\n  /** Access injected document if available or fallback to global document reference */\n\n\n  _getDocument() {\n    return this._document || document;\n  }\n  /** Use defaultView of injected document if available or fallback to global window reference */\n\n\n  _getWindow() {\n    const doc = this._getDocument();\n\n    return doc.defaultView || window;\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\n\n  _scrollToCaretPosition(textarea) {\n    const {\n      selectionStart,\n      selectionEnd\n    } = textarea; // 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\n    if (!this._destroyed.isStopped && this._hasFocus) {\n      textarea.setSelectionRange(selectionStart, selectionEnd);\n    }\n  }\n\n}\n\nCdkTextareaAutosize.ɵfac = function CdkTextareaAutosize_Factory(t) {\n  return new (t || CdkTextareaAutosize)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.Platform), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(DOCUMENT, 8));\n};\n\nCdkTextareaAutosize.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkTextareaAutosize,\n  selectors: [[\"textarea\", \"cdkTextareaAutosize\", \"\"]],\n  hostAttrs: [\"rows\", \"1\", 1, \"cdk-textarea-autosize\"],\n  hostBindings: function CdkTextareaAutosize_HostBindings(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵlistener(\"input\", function CdkTextareaAutosize_input_HostBindingHandler() {\n        return ctx._noopInputHandler();\n      });\n    }\n  },\n  inputs: {\n    minRows: [\"cdkAutosizeMinRows\", \"minRows\"],\n    maxRows: [\"cdkAutosizeMaxRows\", \"maxRows\"],\n    enabled: [\"cdkTextareaAutosize\", \"enabled\"],\n    placeholder: \"placeholder\"\n  },\n  exportAs: [\"cdkTextareaAutosize\"]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkTextareaAutosize, [{\n    type: Directive,\n    args: [{\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    }]\n  }], function () {\n    return [{\n      type: i0.ElementRef\n    }, {\n      type: i1.Platform\n    }, {\n      type: i0.NgZone\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Optional\n      }, {\n        type: Inject,\n        args: [DOCUMENT]\n      }]\n    }];\n  }, {\n    minRows: [{\n      type: Input,\n      args: ['cdkAutosizeMinRows']\n    }],\n    maxRows: [{\n      type: Input,\n      args: ['cdkAutosizeMaxRows']\n    }],\n    enabled: [{\n      type: Input,\n      args: ['cdkTextareaAutosize']\n    }],\n    placeholder: [{\n      type: Input\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\n\nclass TextFieldModule {}\n\nTextFieldModule.ɵfac = function TextFieldModule_Factory(t) {\n  return new (t || TextFieldModule)();\n};\n\nTextFieldModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n  type: TextFieldModule\n});\nTextFieldModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n  imports: [[PlatformModule]]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TextFieldModule, [{\n    type: NgModule,\n    args: [{\n      declarations: [CdkAutofill, CdkTextareaAutosize],\n      imports: [PlatformModule],\n      exports: [CdkAutofill, CdkTextareaAutosize]\n    }]\n  }], null, null);\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\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\n/**\n * Generated bundle index. Do not edit.\n */\n\n\nexport { AutofillMonitor, CdkAutofill, CdkTextareaAutosize, TextFieldModule };","map":{"version":3,"sources":["D:/Development/Work/CENOS/cenos-ui/node_modules/@angular/cdk/fesm2015/text-field.mjs"],"names":["i1","normalizePassiveListenerOptions","PlatformModule","i0","Injectable","EventEmitter","Directive","Output","Optional","Inject","Input","NgModule","coerceElement","coerceNumberProperty","coerceBooleanProperty","EMPTY","Subject","fromEvent","auditTime","takeUntil","DOCUMENT","listenerOptions","passive","AutofillMonitor","constructor","_platform","_ngZone","_monitoredElements","Map","monitor","elementOrRef","isBrowser","element","info","get","subject","result","cssClass","listener","event","animationName","classList","contains","add","run","next","target","isAutofilled","remove","runOutsideAngular","addEventListener","set","unlisten","removeEventListener","stopMonitoring","complete","delete","ngOnDestroy","forEach","_info","ɵfac","Platform","NgZone","ɵprov","type","args","providedIn","CdkAutofill","_elementRef","_autofillMonitor","cdkAutofill","ngOnInit","subscribe","emit","ElementRef","ɵdir","selector","CdkTextareaAutosize","document","_destroyed","_enabled","_previousMinRows","_isViewInited","_handleFocusEvent","_hasFocus","_document","_textareaElement","nativeElement","minRows","_minRows","value","_setMinHeight","maxRows","_maxRows","_setMaxHeight","enabled","resizeToFitContent","reset","placeholder","_cachedPlaceholderHeight","undefined","_cacheTextareaPlaceholderHeight","minHeight","_cachedLineHeight","style","maxHeight","ngAfterViewInit","_initialHeight","height","window","_getWindow","pipe","_cacheTextareaLineHeight","textareaClone","cloneNode","rows","position","visibility","border","padding","overflow","parentNode","appendChild","clientHeight","_measureScrollHeight","previousMargin","marginBottom","isFirefox","FIREFOX","needsMarginFiller","measuringClass","scrollHeight","ngDoCheck","force","textarea","_previousValue","Math","max","requestAnimationFrame","_scrollToCaretPosition","setTimeout","_noopInputHandler","_getDocument","doc","defaultView","selectionStart","selectionEnd","isStopped","setSelectionRange","exportAs","host","decorators","TextFieldModule","ɵmod","ɵinj","declarations","imports","exports"],"mappings":"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","sourcesContent":["import * as i1 from '@angular/cdk/platform';\nimport { normalizePassiveListenerOptions, PlatformModule } from '@angular/cdk/platform';\nimport * as i0 from '@angular/core';\nimport { Injectable, EventEmitter, Directive, Output, Optional, Inject, Input, NgModule } from '@angular/core';\nimport { coerceElement, coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { EMPTY, Subject, fromEvent } from 'rxjs';\nimport { auditTime, takeUntil } from 'rxjs/operators';\nimport { DOCUMENT } from '@angular/common';\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/** Options to pass to the animationstart listener. */\nconst listenerOptions = normalizePassiveListenerOptions({ passive: true });\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 */\nclass AutofillMonitor {\n    constructor(_platform, _ngZone) {\n        this._platform = _platform;\n        this._ngZone = _ngZone;\n        this._monitoredElements = new Map();\n    }\n    monitor(elementOrRef) {\n        if (!this._platform.isBrowser) {\n            return EMPTY;\n        }\n        const element = coerceElement(elementOrRef);\n        const info = this._monitoredElements.get(element);\n        if (info) {\n            return info.subject;\n        }\n        const result = new Subject();\n        const cssClass = 'cdk-text-field-autofilled';\n        const listener = ((event) => {\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, isAutofilled: true }));\n            }\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, isAutofilled: false }));\n            }\n        });\n        this._ngZone.runOutsideAngular(() => {\n            element.addEventListener('animationstart', listener, listenerOptions);\n            element.classList.add('cdk-text-field-autofill-monitored');\n        });\n        this._monitoredElements.set(element, {\n            subject: result,\n            unlisten: () => {\n                element.removeEventListener('animationstart', listener, listenerOptions);\n            },\n        });\n        return result;\n    }\n    stopMonitoring(elementOrRef) {\n        const element = coerceElement(elementOrRef);\n        const info = this._monitoredElements.get(element);\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    ngOnDestroy() {\n        this._monitoredElements.forEach((_info, element) => this.stopMonitoring(element));\n    }\n}\nAutofillMonitor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: AutofillMonitor, deps: [{ token: i1.Platform }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nAutofillMonitor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: AutofillMonitor, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: AutofillMonitor, decorators: [{\n            type: Injectable,\n            args: [{ providedIn: 'root' }]\n        }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i0.NgZone }]; } });\n/** A directive that can be used to monitor the autofill state of an input. */\nclass CdkAutofill {\n    constructor(_elementRef, _autofillMonitor) {\n        this._elementRef = _elementRef;\n        this._autofillMonitor = _autofillMonitor;\n        /** Emits when the autofill state of the element changes. */\n        this.cdkAutofill = new EventEmitter();\n    }\n    ngOnInit() {\n        this._autofillMonitor\n            .monitor(this._elementRef)\n            .subscribe(event => this.cdkAutofill.emit(event));\n    }\n    ngOnDestroy() {\n        this._autofillMonitor.stopMonitoring(this._elementRef);\n    }\n}\nCdkAutofill.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkAutofill, deps: [{ token: i0.ElementRef }, { token: AutofillMonitor }], target: i0.ɵɵFactoryTarget.Directive });\nCdkAutofill.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkAutofill, selector: \"[cdkAutofill]\", outputs: { cdkAutofill: \"cdkAutofill\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkAutofill, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkAutofill]',\n                }]\n        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: AutofillMonitor }]; }, propDecorators: { cdkAutofill: [{\n                type: Output\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/** Directive to automatically resize a textarea to fit its content. */\nclass CdkTextareaAutosize {\n    constructor(_elementRef, _platform, _ngZone, \n    /** @breaking-change 11.0.0 make document required */\n    document) {\n        this._elementRef = _elementRef;\n        this._platform = _platform;\n        this._ngZone = _ngZone;\n        this._destroyed = new Subject();\n        this._enabled = true;\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        this._previousMinRows = -1;\n        this._isViewInited = false;\n        /** Handles `focus` and `blur` events. */\n        this._handleFocusEvent = (event) => {\n            this._hasFocus = event.type === 'focus';\n        };\n        this._document = document;\n        this._textareaElement = this._elementRef.nativeElement;\n    }\n    /** Minimum amount of rows in the textarea. */\n    get minRows() {\n        return this._minRows;\n    }\n    set minRows(value) {\n        this._minRows = coerceNumberProperty(value);\n        this._setMinHeight();\n    }\n    /** Maximum amount of rows in the textarea. */\n    get maxRows() {\n        return this._maxRows;\n    }\n    set maxRows(value) {\n        this._maxRows = coerceNumberProperty(value);\n        this._setMaxHeight();\n    }\n    /** Whether autosizing is enabled or not */\n    get enabled() {\n        return this._enabled;\n    }\n    set enabled(value) {\n        value = coerceBooleanProperty(value);\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    get placeholder() {\n        return this._textareaElement.placeholder;\n    }\n    set placeholder(value) {\n        this._cachedPlaceholderHeight = undefined;\n        this._textareaElement.placeholder = value;\n        this._cacheTextareaPlaceholderHeight();\n    }\n    /** Sets the minimum height of the textarea as determined by minRows. */\n    _setMinHeight() {\n        const minHeight = this.minRows && this._cachedLineHeight ? `${this.minRows * this._cachedLineHeight}px` : null;\n        if (minHeight) {\n            this._textareaElement.style.minHeight = minHeight;\n        }\n    }\n    /** Sets the maximum height of the textarea as determined by maxRows. */\n    _setMaxHeight() {\n        const maxHeight = this.maxRows && this._cachedLineHeight ? `${this.maxRows * this._cachedLineHeight}px` : null;\n        if (maxHeight) {\n            this._textareaElement.style.maxHeight = maxHeight;\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            this.resizeToFitContent();\n            this._ngZone.runOutsideAngular(() => {\n                const window = this._getWindow();\n                fromEvent(window, 'resize')\n                    .pipe(auditTime(16), takeUntil(this._destroyed))\n                    .subscribe(() => this.resizeToFitContent(true));\n                this._textareaElement.addEventListener('focus', this._handleFocusEvent);\n                this._textareaElement.addEventListener('blur', this._handleFocusEvent);\n            });\n            this._isViewInited = true;\n            this.resizeToFitContent(true);\n        }\n    }\n    ngOnDestroy() {\n        this._textareaElement.removeEventListener('focus', this._handleFocusEvent);\n        this._textareaElement.removeEventListener('blur', this._handleFocusEvent);\n        this._destroyed.next();\n        this._destroyed.complete();\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    _cacheTextareaLineHeight() {\n        if (this._cachedLineHeight) {\n            return;\n        }\n        // Use a clone element because we have to override some styles.\n        let textareaClone = this._textareaElement.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';\n        this._textareaElement.parentNode.appendChild(textareaClone);\n        this._cachedLineHeight = textareaClone.clientHeight;\n        textareaClone.remove();\n        // Min and max heights have to be re-calculated if the cached line height changes\n        this._setMinHeight();\n        this._setMaxHeight();\n    }\n    _measureScrollHeight() {\n        const element = this._textareaElement;\n        const previousMargin = element.style.marginBottom || '';\n        const isFirefox = this._platform.FIREFOX;\n        const needsMarginFiller = isFirefox && this._hasFocus;\n        const measuringClass = isFirefox\n            ? 'cdk-textarea-autosize-measuring-firefox'\n            : 'cdk-textarea-autosize-measuring';\n        // In some cases the page might move around while we're measuring the `textarea` on Firefox. We\n        // work around it by assigning a temporary margin with the same height as the `textarea` so that\n        // it occupies the same amount of space. See #23233.\n        if (needsMarginFiller) {\n            element.style.marginBottom = `${element.clientHeight}px`;\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        element.classList.add(measuringClass);\n        // The measuring class includes a 2px padding to workaround an issue with Chrome,\n        // so we account for that extra space here by subtracting 4 (2px top + 2px bottom).\n        const scrollHeight = element.scrollHeight - 4;\n        element.classList.remove(measuringClass);\n        if (needsMarginFiller) {\n            element.style.marginBottom = previousMargin;\n        }\n        return scrollHeight;\n    }\n    _cacheTextareaPlaceholderHeight() {\n        if (!this._isViewInited || this._cachedPlaceholderHeight != undefined) {\n            return;\n        }\n        if (!this.placeholder) {\n            this._cachedPlaceholderHeight = 0;\n            return;\n        }\n        const value = this._textareaElement.value;\n        this._textareaElement.value = this._textareaElement.placeholder;\n        this._cachedPlaceholderHeight = this._measureScrollHeight();\n        this._textareaElement.value = value;\n    }\n    ngDoCheck() {\n        if (this._platform.isBrowser) {\n            this.resizeToFitContent();\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 = false) {\n        // If autosizing is disabled, just skip everything else\n        if (!this._enabled) {\n            return;\n        }\n        this._cacheTextareaLineHeight();\n        this._cacheTextareaPlaceholderHeight();\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 textarea = this._elementRef.nativeElement;\n        const value = textarea.value;\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        const scrollHeight = this._measureScrollHeight();\n        const height = Math.max(scrollHeight, this._cachedPlaceholderHeight || 0);\n        // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.\n        textarea.style.height = `${height}px`;\n        this._ngZone.runOutsideAngular(() => {\n            if (typeof requestAnimationFrame !== 'undefined') {\n                requestAnimationFrame(() => this._scrollToCaretPosition(textarea));\n            }\n            else {\n                setTimeout(() => this._scrollToCaretPosition(textarea));\n            }\n        });\n        this._previousValue = value;\n        this._previousMinRows = this._minRows;\n    }\n    /**\n     * Resets the textarea to its 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            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    /** Access injected document if available or fallback to global document reference */\n    _getDocument() {\n        return this._document || document;\n    }\n    /** Use defaultView of injected document if available or fallback to global window reference */\n    _getWindow() {\n        const doc = this._getDocument();\n        return doc.defaultView || window;\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    _scrollToCaretPosition(textarea) {\n        const { selectionStart, selectionEnd } = textarea;\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 && this._hasFocus) {\n            textarea.setSelectionRange(selectionStart, selectionEnd);\n        }\n    }\n}\nCdkTextareaAutosize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkTextareaAutosize, deps: [{ token: i0.ElementRef }, { token: i1.Platform }, { token: i0.NgZone }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkTextareaAutosize.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkTextareaAutosize, selector: \"textarea[cdkTextareaAutosize]\", inputs: { minRows: [\"cdkAutosizeMinRows\", \"minRows\"], maxRows: [\"cdkAutosizeMaxRows\", \"maxRows\"], enabled: [\"cdkTextareaAutosize\", \"enabled\"], placeholder: \"placeholder\" }, host: { attributes: { \"rows\": \"1\" }, listeners: { \"input\": \"_noopInputHandler()\" }, classAttribute: \"cdk-textarea-autosize\" }, exportAs: [\"cdkTextareaAutosize\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkTextareaAutosize, decorators: [{\n            type: Directive,\n            args: [{\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                }]\n        }], ctorParameters: function () {\n        return [{ type: i0.ElementRef }, { type: i1.Platform }, { type: i0.NgZone }, { type: undefined, decorators: [{\n                        type: Optional\n                    }, {\n                        type: Inject,\n                        args: [DOCUMENT]\n                    }] }];\n    }, propDecorators: { minRows: [{\n                type: Input,\n                args: ['cdkAutosizeMinRows']\n            }], maxRows: [{\n                type: Input,\n                args: ['cdkAutosizeMaxRows']\n            }], enabled: [{\n                type: Input,\n                args: ['cdkTextareaAutosize']\n            }], placeholder: [{\n                type: Input\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 */\nclass TextFieldModule {\n}\nTextFieldModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: TextFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nTextFieldModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: TextFieldModule, declarations: [CdkAutofill, CdkTextareaAutosize], imports: [PlatformModule], exports: [CdkAutofill, CdkTextareaAutosize] });\nTextFieldModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: TextFieldModule, imports: [[PlatformModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: TextFieldModule, decorators: [{\n            type: NgModule,\n            args: [{\n                    declarations: [CdkAutofill, CdkTextareaAutosize],\n                    imports: [PlatformModule],\n                    exports: [CdkAutofill, CdkTextareaAutosize],\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\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\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AutofillMonitor, CdkAutofill, CdkTextareaAutosize, TextFieldModule };\n"]},"metadata":{},"sourceType":"module"}