{"version":3,"file":"form-field.mjs","sources":["../../../../../../src/material/form-field/error.ts","../../../../../../src/material/form-field/form-field-animations.ts","../../../../../../src/material/form-field/form-field-control.ts","../../../../../../src/material/form-field/form-field-errors.ts","../../../../../../src/material/form-field/hint.ts","../../../../../../src/material/form-field/label.ts","../../../../../../src/material/form-field/placeholder.ts","../../../../../../src/material/form-field/prefix.ts","../../../../../../src/material/form-field/suffix.ts","../../../../../../src/material/form-field/form-field.ts","../../../../../../src/material/form-field/form-field.html","../../../../../../src/material/form-field/form-field-module.ts","../../../../../../src/material/form-field/public-api.ts","../../../../../../src/material/form-field/index.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 {Attribute, Directive, ElementRef, InjectionToken, Input} from '@angular/core';\n\nlet nextUniqueId = 0;\n\n/**\n * Injection token that can be used to reference instances of `MatError`. It serves as\n * alternative token to the actual `MatError` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const MAT_ERROR = new InjectionToken<MatError>('MatError');\n\n/** Single error message to be shown underneath the form field. */\n@Directive({\n  selector: 'mat-error',\n  host: {\n    'class': 'mat-error',\n    '[attr.id]': 'id',\n    'aria-atomic': 'true',\n  },\n  providers: [{provide: MAT_ERROR, useExisting: MatError}],\n})\nexport class MatError {\n  @Input() id: string = `mat-error-${nextUniqueId++}`;\n\n  constructor(@Attribute('aria-live') ariaLive: string, elementRef: ElementRef) {\n    // If no aria-live value is set add 'polite' as a default. This is preferred over setting\n    // role='alert' so that screen readers do not interrupt the current task to read this aloud.\n    if (!ariaLive) {\n      elementRef.nativeElement.setAttribute('aria-live', 'polite');\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 */\nimport {\n  animate,\n  state,\n  style,\n  transition,\n  trigger,\n  AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the MatFormField.\n * @docs-private\n */\nexport const matFormFieldAnimations: {\n  readonly transitionMessages: AnimationTriggerMetadata\n} = {\n  /** Animation that transitions the form field's error and hint messages. */\n  transitionMessages: trigger('transitionMessages', [\n    // TODO(mmalerba): Use angular animations for label animation as well.\n    state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),\n    transition('void => enter', [\n      style({ opacity: 0, transform: 'translateY(-5px)' }),\n      animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)'),\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 {Observable} from 'rxjs';\nimport {NgControl} from '@angular/forms';\nimport {Directive} from '@angular/core';\n\n\n/** An interface which allows a control to work inside of a `MatFormField`. */\n@Directive()\nexport abstract class MatFormFieldControl<T> {\n  /** The value of the control. */\n  value: T | null;\n\n  /**\n   * Stream that emits whenever the state of the control changes such that the parent `MatFormField`\n   * needs to run change detection.\n   */\n  readonly stateChanges: Observable<void>;\n\n  /** The element ID for this control. */\n  readonly id: string;\n\n  /** The placeholder for this control. */\n  readonly placeholder: string;\n\n  /** Gets the NgControl for this control. */\n  readonly ngControl: NgControl | null;\n\n  /** Whether the control is focused. */\n  readonly focused: boolean;\n\n  /** Whether the control is empty. */\n  readonly empty: boolean;\n\n  /** Whether the `MatFormField` label should try to float. */\n  readonly shouldLabelFloat: boolean;\n\n  /** Whether the control is required. */\n  readonly required: boolean;\n\n  /** Whether the control is disabled. */\n  readonly disabled: boolean;\n\n  /** Whether the control is in an error state. */\n  readonly errorState: boolean;\n\n  /**\n   * An optional name for the control type that can be used to distinguish `mat-form-field` elements\n   * based on their control type. The form field will add a class,\n   * `mat-form-field-type-{{controlType}}` to its root element.\n   */\n  readonly controlType?: string;\n\n  /**\n   * Whether the input is currently in an autofilled state. If property is not present on the\n   * control it is assumed to be false.\n   */\n  readonly autofilled?: boolean;\n\n  /**\n   * Value of `aria-describedby` that should be merged with the described-by ids\n   * which are set by the form-field.\n   */\n  readonly userAriaDescribedBy?: string;\n\n  /** Sets the list of element IDs that currently describe this control. */\n  abstract setDescribedByIds(ids: string[]): void;\n\n  /** Handles a click on the control's container. */\n  abstract onContainerClick(event: MouseEvent): void;\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/** @docs-private */\nexport function getMatFormFieldPlaceholderConflictError(): Error {\n  return Error('Placeholder attribute and child element were both specified.');\n}\n\n/** @docs-private */\nexport function getMatFormFieldDuplicatedHintError(align: string): Error {\n  return Error(`A hint was already declared for 'align=\"${align}\"'.`);\n}\n\n/** @docs-private */\nexport function getMatFormFieldMissingControlError(): Error {\n  return Error('mat-form-field must contain a MatFormFieldControl.');\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 {Directive, InjectionToken, Input} from '@angular/core';\n\nlet nextUniqueId = 0;\n\n/**\n * Injection token that can be used to reference instances of `MatHint`. It serves as\n * alternative token to the actual `MatHint` class which could cause unnecessary\n * retention of the class and its directive metadata.\n *\n * *Note*: This is not part of the public API as the MDC-based form-field will not\n * need a lightweight token for `MatHint` and we want to reduce breaking changes.\n */\nexport const _MAT_HINT = new InjectionToken<MatHint>('MatHint');\n\n/** Hint text to be shown underneath the form field control. */\n@Directive({\n  selector: 'mat-hint',\n  host: {\n    'class': 'mat-hint',\n    '[class.mat-form-field-hint-end]': 'align === \"end\"',\n    '[attr.id]': 'id',\n    // Remove align attribute to prevent it from interfering with layout.\n    '[attr.align]': 'null',\n  },\n  providers: [{provide: _MAT_HINT, useExisting: MatHint}],\n})\nexport class MatHint {\n  /** Whether to align the hint label at the start or end of the line. */\n  @Input() align: 'start' | 'end' = 'start';\n\n  /** Unique ID for the hint. Used for the aria-describedby on the form field control. */\n  @Input() id: string = `mat-hint-${nextUniqueId++}`;\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 {Directive} from '@angular/core';\n\n\n/** The floating label for a `mat-form-field`. */\n@Directive({\n  selector: 'mat-label'\n})\nexport class MatLabel {}\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 {Directive} from '@angular/core';\n\n\n/**\n * The placeholder text for an `MatFormField`.\n * @deprecated Use `<mat-label>` to specify the label and the `placeholder` attribute to specify the\n *     placeholder.\n * @breaking-change 8.0.0\n */\n@Directive({\n  selector: 'mat-placeholder'\n})\nexport class MatPlaceholder {}\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 {Directive, InjectionToken} from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `MatPrefix`. It serves as\n * alternative token to the actual `MatPrefix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const MAT_PREFIX = new InjectionToken<MatPrefix>('MatPrefix');\n\n/** Prefix to be placed in front of the form field. */\n@Directive({\n  selector: '[matPrefix]',\n  providers: [{provide: MAT_PREFIX, useExisting: MatPrefix}],\n})\nexport class MatPrefix {}\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 {Directive, InjectionToken} from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `MatSuffix`. It serves as\n * alternative token to the actual `MatSuffix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const MAT_SUFFIX = new InjectionToken<MatSuffix>('MatSuffix');\n\n/** Suffix to be placed at the end of the form field. */\n@Directive({\n  selector: '[matSuffix]',\n  providers: [{provide: MAT_SUFFIX, useExisting: MatSuffix}],\n})\nexport class MatSuffix {}\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 {Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  AfterContentChecked,\n  AfterContentInit,\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ContentChildren,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  Optional,\n  QueryList,\n  ViewChild,\n  ViewEncapsulation,\n  OnDestroy,\n} from '@angular/core';\nimport {\n  CanColor,\n  mixinColor,\n} from '@angular/material/core';\nimport {fromEvent, merge, Subject} from 'rxjs';\nimport {startWith, take, takeUntil} from 'rxjs/operators';\nimport {MAT_ERROR, MatError} from './error';\nimport {matFormFieldAnimations} from './form-field-animations';\nimport {MatFormFieldControl} from './form-field-control';\nimport {\n  getMatFormFieldDuplicatedHintError,\n  getMatFormFieldMissingControlError,\n  getMatFormFieldPlaceholderConflictError,\n} from './form-field-errors';\nimport {_MAT_HINT, MatHint} from './hint';\nimport {MatLabel} from './label';\nimport {MatPlaceholder} from './placeholder';\nimport {MAT_PREFIX, MatPrefix} from './prefix';\nimport {MAT_SUFFIX, MatSuffix} from './suffix';\nimport {Platform} from '@angular/cdk/platform';\nimport {NgControl} from '@angular/forms';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\nlet nextUniqueId = 0;\nconst floatingLabelScale = 0.75;\nconst outlineGapPadding = 5;\n\n\n/**\n * Boilerplate for applying mixins to MatFormField.\n * @docs-private\n */\nconst _MatFormFieldBase = mixinColor(class {\n  constructor(public _elementRef: ElementRef) {}\n}, 'primary');\n\n/** Possible appearance styles for the form field. */\nexport type MatFormFieldAppearance = 'legacy' | 'standard' | 'fill' | 'outline';\n\n/** Possible values for the \"floatLabel\" form-field input. */\nexport type FloatLabelType = 'always' | 'never' | 'auto';\n\n/**\n * Represents the default options for the form field that can be configured\n * using the `MAT_FORM_FIELD_DEFAULT_OPTIONS` injection token.\n */\nexport interface MatFormFieldDefaultOptions {\n  appearance?: MatFormFieldAppearance;\n  hideRequiredMarker?: boolean;\n  /**\n   * Whether the label for form-fields should by default float `always`,\n   * `never`, or `auto` (only when necessary).\n   */\n  floatLabel?: FloatLabelType;\n}\n\n/**\n * Injection token that can be used to configure the\n * default options for all form field within an app.\n */\nexport const MAT_FORM_FIELD_DEFAULT_OPTIONS =\n    new InjectionToken<MatFormFieldDefaultOptions>('MAT_FORM_FIELD_DEFAULT_OPTIONS');\n\n/**\n * Injection token that can be used to inject an instances of `MatFormField`. It serves\n * as alternative token to the actual `MatFormField` class which would cause unnecessary\n * retention of the `MatFormField` class and its component metadata.\n */\nexport const MAT_FORM_FIELD = new InjectionToken<MatFormField>('MatFormField');\n\n/** Container for form controls that applies Material Design styling and behavior. */\n@Component({\n  selector: 'mat-form-field',\n  exportAs: 'matFormField',\n  templateUrl: 'form-field.html',\n  // MatInput is a directive and can't have styles, so we need to include its styles here\n  // in form-field-input.css. The MatInput styles are fairly minimal so it shouldn't be a\n  // big deal for people who aren't using MatInput.\n  styleUrls: [\n    'form-field.css',\n    'form-field-fill.css',\n    'form-field-input.css',\n    'form-field-legacy.css',\n    'form-field-outline.css',\n    'form-field-standard.css',\n  ],\n  animations: [matFormFieldAnimations.transitionMessages],\n  host: {\n    'class': 'mat-form-field',\n    '[class.mat-form-field-appearance-standard]': 'appearance == \"standard\"',\n    '[class.mat-form-field-appearance-fill]': 'appearance == \"fill\"',\n    '[class.mat-form-field-appearance-outline]': 'appearance == \"outline\"',\n    '[class.mat-form-field-appearance-legacy]': 'appearance == \"legacy\"',\n    '[class.mat-form-field-invalid]': '_control.errorState',\n    '[class.mat-form-field-can-float]': '_canLabelFloat()',\n    '[class.mat-form-field-should-float]': '_shouldLabelFloat()',\n    '[class.mat-form-field-has-label]': '_hasFloatingLabel()',\n    '[class.mat-form-field-hide-placeholder]': '_hideControlPlaceholder()',\n    '[class.mat-form-field-disabled]': '_control.disabled',\n    '[class.mat-form-field-autofilled]': '_control.autofilled',\n    '[class.mat-focused]': '_control.focused',\n    '[class.ng-untouched]': '_shouldForward(\"untouched\")',\n    '[class.ng-touched]': '_shouldForward(\"touched\")',\n    '[class.ng-pristine]': '_shouldForward(\"pristine\")',\n    '[class.ng-dirty]': '_shouldForward(\"dirty\")',\n    '[class.ng-valid]': '_shouldForward(\"valid\")',\n    '[class.ng-invalid]': '_shouldForward(\"invalid\")',\n    '[class.ng-pending]': '_shouldForward(\"pending\")',\n    '[class._mat-animation-noopable]': '!_animationsEnabled',\n  },\n  inputs: ['color'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {provide: MAT_FORM_FIELD, useExisting: MatFormField},\n  ]\n})\n\nexport class MatFormField extends _MatFormFieldBase\n    implements AfterContentInit, AfterContentChecked, AfterViewInit, OnDestroy, CanColor {\n\n  /**\n   * Whether the outline gap needs to be calculated\n   * immediately on the next change detection run.\n   */\n  private _outlineGapCalculationNeededImmediately = false;\n\n  /** Whether the outline gap needs to be calculated next time the zone has stabilized. */\n  private _outlineGapCalculationNeededOnStable = false;\n\n  private readonly _destroyed = new Subject<void>();\n\n  /** The form-field appearance style. */\n  @Input()\n  get appearance(): MatFormFieldAppearance { return this._appearance; }\n  set appearance(value: MatFormFieldAppearance) {\n    const oldValue = this._appearance;\n\n    this._appearance = value || (this._defaults && this._defaults.appearance) || 'legacy';\n\n    if (this._appearance === 'outline' && oldValue !== value) {\n      this._outlineGapCalculationNeededOnStable = true;\n    }\n  }\n  _appearance: MatFormFieldAppearance;\n\n  /** Whether the required marker should be hidden. */\n  @Input()\n  get hideRequiredMarker(): boolean { return this._hideRequiredMarker; }\n  set hideRequiredMarker(value: boolean) {\n    this._hideRequiredMarker = coerceBooleanProperty(value);\n  }\n  private _hideRequiredMarker: boolean;\n\n  /** Override for the logic that disables the label animation in certain cases. */\n  private _showAlwaysAnimate = false;\n\n  /** Whether the floating label should always float or not. */\n  _shouldAlwaysFloat(): boolean {\n    return this.floatLabel === 'always' && !this._showAlwaysAnimate;\n  }\n\n  /** Whether the label can float or not. */\n  _canLabelFloat(): boolean { return this.floatLabel !== 'never'; }\n\n  /** State of the mat-hint and mat-error animations. */\n  _subscriptAnimationState: string = '';\n\n  /** Text for the form field hint. */\n  @Input()\n  get hintLabel(): string { return this._hintLabel; }\n  set hintLabel(value: string) {\n    this._hintLabel = value;\n    this._processHints();\n  }\n  private _hintLabel = '';\n\n  // Unique id for the hint label.\n  readonly _hintLabelId: string = `mat-hint-${nextUniqueId++}`;\n\n  // Unique id for the label element.\n  readonly _labelId = `mat-form-field-label-${nextUniqueId++}`;\n\n  /**\n   * Whether the label should always float, never float or float as the user types.\n   *\n   * Note: only the legacy appearance supports the `never` option. `never` was originally added as a\n   * way to make the floating label emulate the behavior of a standard input placeholder. However\n   * the form field now supports both floating labels and placeholders. Therefore in the non-legacy\n   * appearances the `never` option has been disabled in favor of just using the placeholder.\n   */\n  @Input()\n  get floatLabel(): FloatLabelType {\n    return this.appearance !== 'legacy' && this._floatLabel === 'never' ? 'auto' : this._floatLabel;\n  }\n  set floatLabel(value: FloatLabelType) {\n    if (value !== this._floatLabel) {\n      this._floatLabel = value || this._getDefaultFloatLabelState();\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n  private _floatLabel: FloatLabelType;\n\n  /** Whether the Angular animations are enabled. */\n  _animationsEnabled: boolean;\n\n  @ViewChild('connectionContainer', {static: true}) _connectionContainerRef: ElementRef;\n  @ViewChild('inputContainer') _inputContainerRef: ElementRef;\n  @ViewChild('label') private _label: ElementRef<HTMLElement>;\n\n  @ContentChild(MatFormFieldControl) _controlNonStatic: MatFormFieldControl<any>;\n  @ContentChild(MatFormFieldControl, {static: true}) _controlStatic: MatFormFieldControl<any>;\n  get _control() {\n    // TODO(crisbeto): we need this workaround in order to support both Ivy and ViewEngine.\n    //  We should clean this up once Ivy is the default renderer.\n    return this._explicitFormFieldControl || this._controlNonStatic || this._controlStatic;\n  }\n  set _control(value) {\n    this._explicitFormFieldControl = value;\n  }\n  private _explicitFormFieldControl: MatFormFieldControl<any>;\n\n  @ContentChild(MatLabel) _labelChildNonStatic: MatLabel;\n  @ContentChild(MatLabel, {static: true}) _labelChildStatic: MatLabel;\n  @ContentChild(MatPlaceholder) _placeholderChild: MatPlaceholder;\n\n  @ContentChildren(MAT_ERROR, {descendants: true}) _errorChildren: QueryList<MatError>;\n  @ContentChildren(_MAT_HINT, {descendants: true}) _hintChildren: QueryList<MatHint>;\n  @ContentChildren(MAT_PREFIX, {descendants: true}) _prefixChildren: QueryList<MatPrefix>;\n  @ContentChildren(MAT_SUFFIX, {descendants: true}) _suffixChildren: QueryList<MatSuffix>;\n\n  constructor(\n      elementRef: ElementRef, private _changeDetectorRef: ChangeDetectorRef,\n      @Optional() private _dir: Directionality,\n      @Optional() @Inject(MAT_FORM_FIELD_DEFAULT_OPTIONS) private _defaults:\n          MatFormFieldDefaultOptions, private _platform: Platform, private _ngZone: NgZone,\n      @Optional() @Inject(ANIMATION_MODULE_TYPE) _animationMode: string) {\n    super(elementRef);\n\n    this.floatLabel = this._getDefaultFloatLabelState();\n    this._animationsEnabled = _animationMode !== 'NoopAnimations';\n\n    // Set the default through here so we invoke the setter on the first run.\n    this.appearance = (_defaults && _defaults.appearance) ? _defaults.appearance : 'legacy';\n    this._hideRequiredMarker = (_defaults && _defaults.hideRequiredMarker != null) ?\n        _defaults.hideRequiredMarker : false;\n  }\n\n  /**\n   * Gets the id of the label element. If no label is present, returns `null`.\n   */\n  getLabelId(): string|null {\n    return this._hasFloatingLabel() ? this._labelId : null;\n  }\n\n  /**\n   * Gets an ElementRef for the element that a overlay attached to the form-field should be\n   * positioned relative to.\n   */\n  getConnectedOverlayOrigin(): ElementRef {\n    return this._connectionContainerRef || this._elementRef;\n  }\n\n  ngAfterContentInit() {\n    this._validateControlChild();\n\n    const control = this._control;\n\n    if (control.controlType) {\n      this._elementRef.nativeElement.classList.add(`mat-form-field-type-${control.controlType}`);\n    }\n\n    // Subscribe to changes in the child control state in order to update the form field UI.\n    control.stateChanges.pipe(startWith(null)).subscribe(() => {\n      this._validatePlaceholders();\n      this._syncDescribedByIds();\n      this._changeDetectorRef.markForCheck();\n    });\n\n    // Run change detection if the value changes.\n    if (control.ngControl && control.ngControl.valueChanges) {\n      control.ngControl.valueChanges\n        .pipe(takeUntil(this._destroyed))\n        .subscribe(() => this._changeDetectorRef.markForCheck());\n    }\n\n    // Note that we have to run outside of the `NgZone` explicitly,\n    // in order to avoid throwing users into an infinite loop\n    // if `zone-patch-rxjs` is included.\n    this._ngZone.runOutsideAngular(() => {\n      this._ngZone.onStable.pipe(takeUntil(this._destroyed)).subscribe(() => {\n        if (this._outlineGapCalculationNeededOnStable) {\n          this.updateOutlineGap();\n        }\n      });\n    });\n\n    // Run change detection and update the outline if the suffix or prefix changes.\n    merge(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(() => {\n      this._outlineGapCalculationNeededOnStable = true;\n      this._changeDetectorRef.markForCheck();\n    });\n\n    // Re-validate when the number of hints changes.\n    this._hintChildren.changes.pipe(startWith(null)).subscribe(() => {\n      this._processHints();\n      this._changeDetectorRef.markForCheck();\n    });\n\n    // Update the aria-described by when the number of errors changes.\n    this._errorChildren.changes.pipe(startWith(null)).subscribe(() => {\n      this._syncDescribedByIds();\n      this._changeDetectorRef.markForCheck();\n    });\n\n    if (this._dir) {\n      this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n        if (typeof requestAnimationFrame === 'function') {\n          this._ngZone.runOutsideAngular(() => {\n            requestAnimationFrame(() => this.updateOutlineGap());\n          });\n        } else {\n          this.updateOutlineGap();\n        }\n      });\n    }\n  }\n\n  ngAfterContentChecked() {\n    this._validateControlChild();\n    if (this._outlineGapCalculationNeededImmediately) {\n      this.updateOutlineGap();\n    }\n  }\n\n  ngAfterViewInit() {\n    // Avoid animations on load.\n    this._subscriptAnimationState = 'enter';\n    this._changeDetectorRef.detectChanges();\n  }\n\n  ngOnDestroy() {\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  /** Determines whether a class from the NgControl should be forwarded to the host element. */\n  _shouldForward(prop: keyof NgControl): boolean {\n    const ngControl = this._control ? this._control.ngControl : null;\n    return ngControl && ngControl[prop];\n  }\n\n  _hasPlaceholder() {\n    return !!(this._control && this._control.placeholder || this._placeholderChild);\n  }\n\n  _hasLabel() {\n    return !!(this._labelChildNonStatic || this._labelChildStatic);\n  }\n\n  _shouldLabelFloat() {\n    return this._canLabelFloat() &&\n        ((this._control && this._control.shouldLabelFloat) || this._shouldAlwaysFloat());\n  }\n\n  _hideControlPlaceholder() {\n    // In the legacy appearance the placeholder is promoted to a label if no label is given.\n    return this.appearance === 'legacy' && !this._hasLabel() ||\n        this._hasLabel() && !this._shouldLabelFloat();\n  }\n\n  _hasFloatingLabel() {\n    // In the legacy appearance the placeholder is promoted to a label if no label is given.\n    return this._hasLabel() || this.appearance === 'legacy' && this._hasPlaceholder();\n  }\n\n  /** Determines whether to display hints or errors. */\n  _getDisplayedMessages(): 'error' | 'hint' {\n    return (this._errorChildren && this._errorChildren.length > 0 &&\n        this._control.errorState) ? 'error' : 'hint';\n  }\n\n  /** Animates the placeholder up and locks it in position. */\n  _animateAndLockLabel(): void {\n    if (this._hasFloatingLabel() && this._canLabelFloat()) {\n      // If animations are disabled, we shouldn't go in here,\n      // because the `transitionend` will never fire.\n      if (this._animationsEnabled && this._label) {\n        this._showAlwaysAnimate = true;\n\n        fromEvent(this._label.nativeElement, 'transitionend').pipe(take(1)).subscribe(() => {\n          this._showAlwaysAnimate = false;\n        });\n      }\n\n      this.floatLabel = 'always';\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * Ensure that there is only one placeholder (either `placeholder` attribute on the child control\n   * or child element with the `mat-placeholder` directive).\n   */\n  private _validatePlaceholders() {\n    if (this._control.placeholder && this._placeholderChild &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatFormFieldPlaceholderConflictError();\n    }\n  }\n\n  /** Does any extra processing that is required when handling the hints. */\n  private _processHints() {\n    this._validateHints();\n    this._syncDescribedByIds();\n  }\n\n  /**\n   * Ensure that there is a maximum of one of each `<mat-hint>` alignment specified, with the\n   * attribute being considered as `align=\"start\"`.\n   */\n  private _validateHints() {\n    if (this._hintChildren && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      let startHint: MatHint;\n      let endHint: MatHint;\n      this._hintChildren.forEach((hint: MatHint) => {\n        if (hint.align === 'start') {\n          if (startHint || this.hintLabel) {\n            throw getMatFormFieldDuplicatedHintError('start');\n          }\n          startHint = hint;\n        } else if (hint.align === 'end') {\n          if (endHint) {\n            throw getMatFormFieldDuplicatedHintError('end');\n          }\n          endHint = hint;\n        }\n      });\n    }\n  }\n\n  /** Gets the default float label state. */\n  private _getDefaultFloatLabelState(): FloatLabelType {\n    return (this._defaults && this._defaults.floatLabel) || 'auto';\n  }\n\n  /**\n   * Sets the list of element IDs that describe the child control. This allows the control to update\n   * its `aria-describedby` attribute accordingly.\n   */\n  private _syncDescribedByIds() {\n    if (this._control) {\n      let ids: string[] = [];\n\n      // TODO(wagnermaciel): Remove the type check when we find the root cause of this bug.\n      if (this._control.userAriaDescribedBy &&\n        typeof this._control.userAriaDescribedBy === 'string') {\n        ids.push(...this._control.userAriaDescribedBy.split(' '));\n      }\n\n      if (this._getDisplayedMessages() === 'hint') {\n        const startHint = this._hintChildren ?\n            this._hintChildren.find(hint => hint.align === 'start') : null;\n        const endHint = this._hintChildren ?\n            this._hintChildren.find(hint => hint.align === 'end') : null;\n\n        if (startHint) {\n          ids.push(startHint.id);\n        } else if (this._hintLabel) {\n          ids.push(this._hintLabelId);\n        }\n\n        if (endHint) {\n          ids.push(endHint.id);\n        }\n      } else if (this._errorChildren) {\n        ids.push(...this._errorChildren.map(error => error.id));\n      }\n\n      this._control.setDescribedByIds(ids);\n    }\n  }\n\n  /** Throws an error if the form field's control is missing. */\n  protected _validateControlChild() {\n    if (!this._control && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatFormFieldMissingControlError();\n    }\n  }\n\n  /**\n   * Updates the width and position of the gap in the outline. Only relevant for the outline\n   * appearance.\n   */\n  updateOutlineGap() {\n    const labelEl = this._label ? this._label.nativeElement : null;\n\n    if (this.appearance !== 'outline' || !labelEl || !labelEl.children.length ||\n        !labelEl.textContent!.trim()) {\n      return;\n    }\n\n    if (!this._platform.isBrowser) {\n      // getBoundingClientRect isn't available on the server.\n      return;\n    }\n    // If the element is not present in the DOM, the outline gap will need to be calculated\n    // the next time it is checked and in the DOM.\n    if (!this._isAttachedToDOM()) {\n      this._outlineGapCalculationNeededImmediately = true;\n      return;\n    }\n\n    let startWidth = 0;\n    let gapWidth = 0;\n\n    const container = this._connectionContainerRef.nativeElement;\n    const startEls = container.querySelectorAll('.mat-form-field-outline-start');\n    const gapEls = container.querySelectorAll('.mat-form-field-outline-gap');\n\n    if (this._label && this._label.nativeElement.children.length) {\n      const containerRect = container.getBoundingClientRect();\n\n      // If the container's width and height are zero, it means that the element is\n      // invisible and we can't calculate the outline gap. Mark the element as needing\n      // to be checked the next time the zone stabilizes. We can't do this immediately\n      // on the next change detection, because even if the element becomes visible,\n      // the `ClientRect` won't be reclaculated immediately. We reset the\n      // `_outlineGapCalculationNeededImmediately` flag some we don't run the checks twice.\n      if (containerRect.width === 0 && containerRect.height === 0) {\n        this._outlineGapCalculationNeededOnStable = true;\n        this._outlineGapCalculationNeededImmediately = false;\n        return;\n      }\n\n      const containerStart = this._getStartEnd(containerRect);\n      const labelChildren = labelEl.children;\n      const labelStart = this._getStartEnd(labelChildren[0].getBoundingClientRect());\n      let labelWidth = 0;\n\n      for (let i = 0; i < labelChildren.length; i++) {\n        labelWidth += (labelChildren[i] as HTMLElement).offsetWidth;\n      }\n      startWidth = Math.abs(labelStart - containerStart) - outlineGapPadding;\n      gapWidth = labelWidth > 0 ? labelWidth * floatingLabelScale + outlineGapPadding * 2 : 0;\n    }\n\n    for (let i = 0; i < startEls.length; i++) {\n      startEls[i].style.width = `${startWidth}px`;\n    }\n    for (let i = 0; i < gapEls.length; i++) {\n      gapEls[i].style.width = `${gapWidth}px`;\n    }\n\n    this._outlineGapCalculationNeededOnStable =\n        this._outlineGapCalculationNeededImmediately = false;\n  }\n\n  /** Gets the start end of the rect considering the current directionality. */\n  private _getStartEnd(rect: ClientRect): number {\n    return (this._dir && this._dir.value === 'rtl') ? rect.right : rect.left;\n  }\n\n  /** Checks whether the form field is attached to the DOM. */\n  private _isAttachedToDOM(): boolean {\n    const element: HTMLElement = this._elementRef.nativeElement;\n\n    if (element.getRootNode) {\n      const rootNode = element.getRootNode();\n      // If the element is inside the DOM the root node will be either the document\n      // or the closest shadow root, otherwise it'll be the element itself.\n      return rootNode && rootNode !== element;\n    }\n\n    // Otherwise fall back to checking if it's in the document. This doesn't account for\n    // shadow DOM, however browser that support shadow DOM should support `getRootNode` as well.\n    return document.documentElement!.contains(element);\n  }\n\n  static ngAcceptInputType_hideRequiredMarker: BooleanInput;\n}\n","<div class=\"mat-form-field-wrapper\">\n  <div class=\"mat-form-field-flex\" #connectionContainer\n       (click)=\"_control.onContainerClick && _control.onContainerClick($event)\">\n\n    <!-- Outline used for outline appearance. -->\n    <ng-container *ngIf=\"appearance == 'outline'\">\n      <div class=\"mat-form-field-outline\">\n        <div class=\"mat-form-field-outline-start\"></div>\n        <div class=\"mat-form-field-outline-gap\"></div>\n        <div class=\"mat-form-field-outline-end\"></div>\n      </div>\n      <div class=\"mat-form-field-outline mat-form-field-outline-thick\">\n        <div class=\"mat-form-field-outline-start\"></div>\n        <div class=\"mat-form-field-outline-gap\"></div>\n        <div class=\"mat-form-field-outline-end\"></div>\n      </div>\n    </ng-container>\n\n    <div class=\"mat-form-field-prefix\" *ngIf=\"_prefixChildren.length\">\n      <ng-content select=\"[matPrefix]\"></ng-content>\n    </div>\n\n    <div class=\"mat-form-field-infix\" #inputContainer>\n      <ng-content></ng-content>\n\n      <span class=\"mat-form-field-label-wrapper\">\n        <!-- We add aria-owns as a workaround for an issue in JAWS & NVDA where the label isn't\n             read if it comes before the control in the DOM. -->\n        <label class=\"mat-form-field-label\"\n               (cdkObserveContent)=\"updateOutlineGap()\"\n               [cdkObserveContentDisabled]=\"appearance != 'outline'\"\n               [id]=\"_labelId\"\n               [attr.for]=\"_control.id\"\n               [attr.aria-owns]=\"_control.id\"\n               [class.mat-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n               [class.mat-form-field-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n               [class.mat-accent]=\"color == 'accent'\"\n               [class.mat-warn]=\"color == 'warn'\"\n               #label\n               *ngIf=\"_hasFloatingLabel()\"\n               [ngSwitch]=\"_hasLabel()\">\n\n          <!-- @breaking-change 8.0.0 remove in favor of mat-label element an placeholder attr. -->\n          <ng-container *ngSwitchCase=\"false\">\n            <ng-content select=\"mat-placeholder\"></ng-content>\n            <span>{{_control.placeholder}}</span>\n          </ng-container>\n\n          <ng-content select=\"mat-label\" *ngSwitchCase=\"true\"></ng-content>\n\n          <!-- @breaking-change 8.0.0 remove `mat-placeholder-required` class -->\n          <span\n            class=\"mat-placeholder-required mat-form-field-required-marker\"\n            aria-hidden=\"true\"\n            *ngIf=\"!hideRequiredMarker && _control.required && !_control.disabled\">&#32;*</span>\n        </label>\n      </span>\n    </div>\n\n    <div class=\"mat-form-field-suffix\" *ngIf=\"_suffixChildren.length\">\n      <ng-content select=\"[matSuffix]\"></ng-content>\n    </div>\n  </div>\n\n  <!-- Underline used for legacy, standard, and box appearances. -->\n  <div class=\"mat-form-field-underline\"\n       *ngIf=\"appearance != 'outline'\">\n    <span class=\"mat-form-field-ripple\"\n          [class.mat-accent]=\"color == 'accent'\"\n          [class.mat-warn]=\"color == 'warn'\"></span>\n  </div>\n\n  <div class=\"mat-form-field-subscript-wrapper\"\n       [ngSwitch]=\"_getDisplayedMessages()\">\n    <div *ngSwitchCase=\"'error'\" [@transitionMessages]=\"_subscriptAnimationState\">\n      <ng-content select=\"mat-error\"></ng-content>\n    </div>\n\n    <div class=\"mat-form-field-hint-wrapper\" *ngSwitchCase=\"'hint'\"\n      [@transitionMessages]=\"_subscriptAnimationState\">\n      <!-- TODO(mmalerba): use an actual <mat-hint> once all selectors are switched to mat-* -->\n      <div *ngIf=\"hintLabel\" [id]=\"_hintLabelId\" class=\"mat-hint\">{{hintLabel}}</div>\n      <ng-content select=\"mat-hint:not([align='end'])\"></ng-content>\n      <div class=\"mat-form-field-hint-spacer\"></div>\n      <ng-content select=\"mat-hint[align='end']\"></ng-content>\n    </div>\n  </div>\n</div>\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 {ObserversModule} from '@angular/cdk/observers';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatError} from './error';\nimport {MatFormField} from './form-field';\nimport {MatHint} from './hint';\nimport {MatLabel} from './label';\nimport {MatPlaceholder} from './placeholder';\nimport {MatPrefix} from './prefix';\nimport {MatSuffix} from './suffix';\n\n@NgModule({\n  declarations: [\n    MatError,\n    MatFormField,\n    MatHint,\n    MatLabel,\n    MatPlaceholder,\n    MatPrefix,\n    MatSuffix,\n  ],\n  imports: [\n    CommonModule,\n    MatCommonModule,\n    ObserversModule,\n  ],\n  exports: [\n    MatCommonModule,\n    MatError,\n    MatFormField,\n    MatHint,\n    MatLabel,\n    MatPlaceholder,\n    MatPrefix,\n    MatSuffix,\n  ],\n})\nexport class MatFormFieldModule {}\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\nexport * from './form-field-module';\nexport * from './error';\nexport * from './form-field';\nexport {MatFormFieldControl} from './form-field-control';\nexport * from './form-field-errors';\nexport * from './hint';\nexport * from './placeholder';\nexport * from './prefix';\nexport * from './suffix';\nexport * from './label';\nexport * from './form-field-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextUniqueId"],"mappings":"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"}