{"version":3,"file":"text-field.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/text-field/text-field-style-loader.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/text-field/autofill.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/text-field/autosize.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/text-field/text-field-module.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.dev/license\n */\n\nimport {Component, ViewEncapsulation} from '@angular/core';\n\n/** Component used to load the structural styles of the text field. */\n@Component({\n  template: '',\n  encapsulation: ViewEncapsulation.None,\n  styleUrl: 'text-field-prebuilt.css',\n  host: {'cdk-text-field-style-loader': ''},\n})\nexport class _CdkTextFieldStyleLoader {}\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.dev/license\n */\n\nimport {Platform} from '../platform';\nimport {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Service,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  RendererFactory2,\n} from '@angular/core';\nimport {_CdkPrivateStyleLoader} from '../private';\nimport {coerceElement} from '../coercion';\nimport {EMPTY, Observable, Subject} from 'rxjs';\nimport {_CdkTextFieldStyleLoader} from './text-field-style-loader';\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/** Used to track info about currently monitored elements. */\ntype MonitoredElementInfo = {\n  readonly subject: Subject<AutofillEvent>;\n  unlisten: () => void;\n};\n\n/** Options to pass to the animationstart listener. */\nconst listenerOptions = {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@Service()\nexport class AutofillMonitor implements OnDestroy {\n  private _platform = inject(Platform);\n  private _ngZone = inject(NgZone);\n  private _renderer = inject(RendererFactory2).createRenderer(null, null);\n\n  private _styleLoader = inject(_CdkPrivateStyleLoader);\n  private _monitoredElements = new Map<Element, MonitoredElementInfo>();\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    this._styleLoader.load(_CdkTextFieldStyleLoader);\n\n    const element = coerceElement(elementOrRef);\n    const info = this._monitoredElements.get(element);\n\n    if (info) {\n      return info.subject;\n    }\n\n    const subject = 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 (\n        event.animationName === 'cdk-text-field-autofill-start' &&\n        !element.classList.contains(cssClass)\n      ) {\n        element.classList.add(cssClass);\n        this._ngZone.run(() => subject.next({target: event.target as Element, isAutofilled: true}));\n      } else if (\n        event.animationName === 'cdk-text-field-autofill-end' &&\n        element.classList.contains(cssClass)\n      ) {\n        element.classList.remove(cssClass);\n        this._ngZone.run(() =>\n          subject.next({target: event.target as Element, isAutofilled: false}),\n        );\n      }\n    };\n\n    const unlisten = this._ngZone.runOutsideAngular(() => {\n      element.classList.add('cdk-text-field-autofill-monitored');\n      return this._renderer.listen(element, 'animationstart', listener, listenerOptions);\n    });\n\n    this._monitoredElements.set(element, {subject, unlisten});\n    return subject;\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/** 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  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _autofillMonitor = inject(AutofillMonitor);\n\n  /** Emits when the autofill state of the element changes. */\n  @Output() readonly cdkAutofill = new EventEmitter<AutofillEvent>();\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","/**\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.dev/license\n */\n\nimport {NumberInput, coerceNumberProperty} from '../coercion';\nimport {\n  Directive,\n  ElementRef,\n  Input,\n  AfterViewInit,\n  DoCheck,\n  OnDestroy,\n  NgZone,\n  booleanAttribute,\n  inject,\n  Renderer2,\n  DOCUMENT,\n} from '@angular/core';\n\nimport {Platform} from '../platform';\nimport {_CdkPrivateStyleLoader} from '../private';\nimport {auditTime} from 'rxjs/operators';\nimport {Subject} from 'rxjs';\nimport {_CdkTextFieldStyleLoader} from './text-field-style-loader';\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  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _platform = inject(Platform);\n  private _ngZone = inject(NgZone);\n  private _renderer = inject(Renderer2);\n  private _resizeEvents = new Subject<void>();\n\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 | undefined;\n  private readonly _destroyed = new Subject<void>();\n  private _listenerCleanups: (() => void)[] | undefined;\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 {\n    return this._minRows;\n  }\n  set minRows(value: NumberInput) {\n    this._minRows = coerceNumberProperty(value);\n    this._setMinHeight();\n  }\n\n  /** Maximum amount of rows in the textarea. */\n  @Input('cdkAutosizeMaxRows')\n  get maxRows(): number {\n    return this._maxRows;\n  }\n  set maxRows(value: NumberInput) {\n    this._maxRows = coerceNumberProperty(value);\n    this._setMaxHeight();\n  }\n\n  /** Whether autosizing is enabled or not */\n  @Input({alias: 'cdkTextareaAutosize', transform: booleanAttribute})\n  get enabled(): boolean {\n    return this._enabled;\n  }\n  set enabled(value: boolean) {\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  @Input()\n  get placeholder(): string {\n    return this._textareaElement.placeholder;\n  }\n  set placeholder(value: string) {\n    this._cachedPlaceholderHeight = undefined;\n\n    if (value) {\n      this._textareaElement.setAttribute('placeholder', value);\n    } else {\n      this._textareaElement.removeAttribute('placeholder');\n    }\n\n    this._cacheTextareaPlaceholderHeight();\n  }\n\n  /** Cached height of a textarea with a single row. */\n  private _cachedLineHeight?: number;\n  /** Cached height of a textarea with only the placeholder. */\n  private _cachedPlaceholderHeight?: number;\n\n  /** Used to reference correct document/window */\n  protected _document = inject(DOCUMENT);\n\n  private _hasFocus = false;\n\n  private _isViewInited = false;\n\n  constructor() {\n    const styleLoader = inject(_CdkPrivateStyleLoader);\n    styleLoader.load(_CdkTextFieldStyleLoader);\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 =\n      this.minRows && this._cachedLineHeight ? `${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 =\n      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        this._listenerCleanups = [\n          this._renderer.listen('window', 'resize', () => this._resizeEvents.next()),\n          this._renderer.listen(this._textareaElement, 'focus', this._handleFocusEvent),\n          this._renderer.listen(this._textareaElement, 'blur', this._handleFocusEvent),\n        ];\n        this._resizeEvents.pipe(auditTime(16)).subscribe(() => {\n          // Clear the cached heights since the styles can change\n          // when the window is resized (e.g. by media queries).\n          this._cachedLineHeight = this._cachedPlaceholderHeight = undefined;\n          this.resizeToFitContent(true);\n        });\n      });\n\n      this._isViewInited = true;\n      this.resizeToFitContent(true);\n    }\n  }\n\n  ngOnDestroy() {\n    this._listenerCleanups?.forEach(cleanup => cleanup());\n    this._resizeEvents.complete();\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    const textareaClone = this._textareaElement.cloneNode(false) as HTMLTextAreaElement;\n    const cloneStyles = textareaClone.style;\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    cloneStyles.position = 'absolute';\n    cloneStyles.visibility = 'hidden';\n    cloneStyles.border = 'none';\n    cloneStyles.padding = '0';\n    cloneStyles.height = '';\n    cloneStyles.minHeight = '';\n    cloneStyles.maxHeight = '';\n\n    // App styles might be messing with the height through the positioning properties.\n    cloneStyles.top = cloneStyles.bottom = cloneStyles.left = cloneStyles.right = 'auto';\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    cloneStyles.overflow = 'hidden';\n\n    this._textareaElement.parentNode!.appendChild(textareaClone);\n    this._cachedLineHeight = textareaClone.clientHeight;\n    textareaClone.remove();\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  private _measureScrollHeight(): number {\n    const element = this._textareaElement;\n    const previousMargin = element.style.marginBottom || '';\n    const isFirefox = this._platform.FIREFOX;\n    const needsMarginFiller = this._hasFocus;\n    const measuringClass = isFirefox\n      ? 'cdk-textarea-autosize-measuring-firefox'\n      : 'cdk-textarea-autosize-measuring';\n\n    // In some cases the page might move around while we're measuring the `textarea`. 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 and #23834.\n    if (needsMarginFiller) {\n      element.style.marginBottom = `${element.clientHeight}px`;\n    }\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\n    if (needsMarginFiller) {\n      element.style.marginBottom = previousMargin;\n    }\n\n    return scrollHeight;\n  }\n\n  private _cacheTextareaPlaceholderHeight(): void {\n    if (!this._isViewInited || this._cachedPlaceholderHeight != undefined) {\n      return;\n    }\n    if (!this.placeholder) {\n      this._cachedPlaceholderHeight = 0;\n      return;\n    }\n\n    const value = this._textareaElement.value;\n\n    this._textareaElement.value = this._textareaElement.placeholder;\n    this._cachedPlaceholderHeight = this._measureScrollHeight();\n    this._textareaElement.value = value;\n  }\n\n  /** Handles `focus` and `blur` events. */\n  private _handleFocusEvent = (event: FocusEvent) => {\n    this._hasFocus = event.type === 'focus';\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    this._cacheTextareaPlaceholderHeight();\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 scrollHeight = this._measureScrollHeight();\n    const height = Math.max(scrollHeight, this._cachedPlaceholderHeight || 0);\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\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 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\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 && this._hasFocus) {\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.dev/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CdkAutofill} from './autofill';\nimport {CdkTextareaAutosize} from './autosize';\n\n@NgModule({\n  imports: [CdkAutofill, CdkTextareaAutosize],\n  exports: [CdkAutofill, CdkTextareaAutosize],\n})\nexport class TextFieldModule {}\n"],"names":[],"mappings":"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"}