Index: trip-planner-front/node_modules/@angular/material/fesm2015/bottom-sheet.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/bottom-sheet.js.map	(revision fa375fed9635035b3c62cf759f42938afa14271b)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/bottom-sheet.js.map	(revision 8d391a12ef6baa3aefe9611a6f7c5b569977c946)
@@ -1,1 +1,1 @@
-{"version":3,"file":"bottom-sheet.js","sources":["../../../../../../src/material/bottom-sheet/bottom-sheet-config.ts","../../../../../../src/material/bottom-sheet/bottom-sheet-animations.ts","../../../../../../src/material/bottom-sheet/bottom-sheet-container.ts","../../../../../../src/material/bottom-sheet/bottom-sheet-module.ts","../../../../../../src/material/bottom-sheet/bottom-sheet-ref.ts","../../../../../../src/material/bottom-sheet/bottom-sheet.ts","../../../../../../src/material/bottom-sheet/public-api.ts","../../../../../../src/material/bottom-sheet/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 {Direction} from '@angular/cdk/bidi';\nimport {ScrollStrategy} from '@angular/cdk/overlay';\nimport {InjectionToken, ViewContainerRef} from '@angular/core';\n\n/** Injection token that can be used to access the data that was passed in to a bottom sheet. */\nexport const MAT_BOTTOM_SHEET_DATA = new InjectionToken<any>('MatBottomSheetData');\n\n/**\n * Configuration used when opening a bottom sheet.\n */\nexport class MatBottomSheetConfig<D = any> {\n  /** The view container to place the overlay for the bottom sheet into. */\n  viewContainerRef?: ViewContainerRef;\n\n  /** Extra CSS classes to be added to the bottom sheet container. */\n  panelClass?: string | string[];\n\n  /** Text layout direction for the bottom sheet. */\n  direction?: Direction;\n\n  /** Data being injected into the child component. */\n  data?: D | null = null;\n\n  /** Whether the bottom sheet has a backdrop. */\n  hasBackdrop?: boolean = true;\n\n  /** Custom class for the backdrop. */\n  backdropClass?: string;\n\n  /** Whether the user can use escape or clicking outside to close the bottom sheet. */\n  disableClose?: boolean = false;\n\n  /** Aria label to assign to the bottom sheet element. */\n  ariaLabel?: string | null = null;\n\n  /**\n   * Whether the bottom sheet should close when the user goes backwards/forwards in history.\n   * Note that this usually doesn't include clicking on links (unless the user is using\n   * the `HashLocationStrategy`).\n   */\n  closeOnNavigation?: boolean = true;\n\n  // Note that this is disabled by default, because while the a11y recommendations are to focus\n  // the first focusable element, doing so prevents screen readers from reading out the\n  // rest of the bottom sheet content.\n  /** Whether the bottom sheet should focus the first focusable element on open. */\n  autoFocus?: boolean = false;\n\n  /**\n   * Whether the bottom sheet should restore focus to the\n   * previously-focused element, after it's closed.\n   */\n  restoreFocus?: boolean = true;\n\n  /** Scroll strategy to be used for the bottom sheet. */\n  scrollStrategy?: ScrollStrategy;\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';\nimport {AnimationCurves, AnimationDurations} from '@angular/material/core';\n\n/** Animations used by the Material bottom sheet. */\nexport const matBottomSheetAnimations: {\n  readonly bottomSheetState: AnimationTriggerMetadata;\n} = {\n  /** Animation that shows and hides a bottom sheet. */\n  bottomSheetState: trigger('state', [\n    state('void, hidden', style({transform: 'translateY(100%)'})),\n    state('visible', style({transform: 'translateY(0%)'})),\n    transition('visible => void, visible => hidden',\n        animate(`${AnimationDurations.COMPLEX} ${AnimationCurves.ACCELERATION_CURVE}`)),\n    transition('void => visible',\n        animate(`${AnimationDurations.EXITING} ${AnimationCurves.DECELERATION_CURVE}`)),\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 {\n  Component,\n  ComponentRef,\n  EmbeddedViewRef,\n  ViewChild,\n  OnDestroy,\n  ElementRef,\n  ChangeDetectionStrategy,\n  ViewEncapsulation,\n  ChangeDetectorRef,\n  EventEmitter,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport {AnimationEvent} from '@angular/animations';\nimport {\n  BasePortalOutlet,\n  ComponentPortal,\n  TemplatePortal,\n  CdkPortalOutlet,\n  DomPortal,\n} from '@angular/cdk/portal';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {MatBottomSheetConfig} from './bottom-sheet-config';\nimport {matBottomSheetAnimations} from './bottom-sheet-animations';\nimport {Subscription} from 'rxjs';\nimport {DOCUMENT} from '@angular/common';\nimport {FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {_getFocusedElementPierceShadowDom} from '@angular/cdk/platform';\n\n// TODO(crisbeto): consolidate some logic between this, MatDialog and MatSnackBar\n\n/**\n * Internal component that wraps user-provided bottom sheet content.\n * @docs-private\n */\n@Component({\n  selector: 'mat-bottom-sheet-container',\n  templateUrl: 'bottom-sheet-container.html',\n  styleUrls: ['bottom-sheet-container.css'],\n  // In Ivy embedded views will be change detected from their declaration place, rather than where\n  // they were stamped out. This means that we can't have the bottom sheet container be OnPush,\n  // because it might cause the sheets that were opened from a template not to be out of date.\n  // tslint:disable-next-line:validate-decorators\n  changeDetection: ChangeDetectionStrategy.Default,\n  encapsulation: ViewEncapsulation.None,\n  animations: [matBottomSheetAnimations.bottomSheetState],\n  host: {\n    'class': 'mat-bottom-sheet-container',\n    'tabindex': '-1',\n    'role': 'dialog',\n    'aria-modal': 'true',\n    '[attr.aria-label]': 'bottomSheetConfig?.ariaLabel',\n    '[@state]': '_animationState',\n    '(@state.start)': '_onAnimationStart($event)',\n    '(@state.done)': '_onAnimationDone($event)'\n  },\n})\nexport class MatBottomSheetContainer extends BasePortalOutlet implements OnDestroy {\n  private _breakpointSubscription: Subscription;\n\n  /** The portal outlet inside of this container into which the content will be loaded. */\n  @ViewChild(CdkPortalOutlet, {static: true}) _portalOutlet: CdkPortalOutlet;\n\n  /** The state of the bottom sheet animations. */\n  _animationState: 'void' | 'visible' | 'hidden' = 'void';\n\n  /** Emits whenever the state of the animation changes. */\n  _animationStateChanged = new EventEmitter<AnimationEvent>();\n\n  /** The class that traps and manages focus within the bottom sheet. */\n  private _focusTrap: FocusTrap;\n\n  /** Element that was focused before the bottom sheet was opened. */\n  private _elementFocusedBeforeOpened: HTMLElement | null = null;\n\n  /** Server-side rendering-compatible reference to the global document object. */\n  private _document: Document;\n\n  /** Whether the component has been destroyed. */\n  private _destroyed: boolean;\n\n  constructor(\n    private _elementRef: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _focusTrapFactory: FocusTrapFactory,\n    breakpointObserver: BreakpointObserver,\n    @Optional() @Inject(DOCUMENT) document: any,\n    /** The bottom sheet configuration. */\n    public bottomSheetConfig: MatBottomSheetConfig) {\n    super();\n\n    this._document = document;\n    this._breakpointSubscription = breakpointObserver\n      .observe([Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n      .subscribe(() => {\n        this._toggleClass('mat-bottom-sheet-container-medium',\n            breakpointObserver.isMatched(Breakpoints.Medium));\n        this._toggleClass('mat-bottom-sheet-container-large',\n            breakpointObserver.isMatched(Breakpoints.Large));\n        this._toggleClass('mat-bottom-sheet-container-xlarge',\n            breakpointObserver.isMatched(Breakpoints.XLarge));\n      });\n  }\n\n  /** Attach a component portal as content to this bottom sheet container. */\n  attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n    this._validatePortalAttached();\n    this._setPanelClass();\n    this._savePreviouslyFocusedElement();\n    return this._portalOutlet.attachComponentPortal(portal);\n  }\n\n  /** Attach a template portal as content to this bottom sheet container. */\n  attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n    this._validatePortalAttached();\n    this._setPanelClass();\n    this._savePreviouslyFocusedElement();\n    return this._portalOutlet.attachTemplatePortal(portal);\n  }\n\n  /**\n   * Attaches a DOM portal to the bottom sheet container.\n   * @deprecated To be turned into a method.\n   * @breaking-change 10.0.0\n   */\n  override attachDomPortal = (portal: DomPortal) => {\n    this._validatePortalAttached();\n    this._setPanelClass();\n    this._savePreviouslyFocusedElement();\n    return this._portalOutlet.attachDomPortal(portal);\n  }\n\n  /** Begin animation of bottom sheet entrance into view. */\n  enter(): void {\n    if (!this._destroyed) {\n      this._animationState = 'visible';\n      this._changeDetectorRef.detectChanges();\n    }\n  }\n\n  /** Begin animation of the bottom sheet exiting from view. */\n  exit(): void {\n    if (!this._destroyed) {\n      this._animationState = 'hidden';\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  ngOnDestroy() {\n    this._breakpointSubscription.unsubscribe();\n    this._destroyed = true;\n  }\n\n  _onAnimationDone(event: AnimationEvent) {\n    if (event.toState === 'hidden') {\n      this._restoreFocus();\n    } else if (event.toState === 'visible') {\n      this._trapFocus();\n    }\n\n    this._animationStateChanged.emit(event);\n  }\n\n  _onAnimationStart(event: AnimationEvent) {\n    this._animationStateChanged.emit(event);\n  }\n\n  private _toggleClass(cssClass: string, add: boolean) {\n    const classList = this._elementRef.nativeElement.classList;\n    add ? classList.add(cssClass) : classList.remove(cssClass);\n  }\n\n  private _validatePortalAttached() {\n    if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('Attempting to attach bottom sheet content after content is already attached');\n    }\n  }\n\n  private _setPanelClass() {\n    const element: HTMLElement = this._elementRef.nativeElement;\n    const panelClass = this.bottomSheetConfig.panelClass;\n\n    if (Array.isArray(panelClass)) {\n      // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n      panelClass.forEach(cssClass => element.classList.add(cssClass));\n    } else if (panelClass) {\n      element.classList.add(panelClass);\n    }\n  }\n\n  /** Moves the focus inside the focus trap. */\n  private _trapFocus() {\n    const element = this._elementRef.nativeElement;\n\n    if (!this._focusTrap) {\n      this._focusTrap = this._focusTrapFactory.create(element);\n    }\n\n    if (this.bottomSheetConfig.autoFocus) {\n      this._focusTrap.focusInitialElementWhenReady();\n    } else {\n      const activeElement = _getFocusedElementPierceShadowDom();\n\n      // Otherwise ensure that focus is on the container. It's possible that a different\n      // component tried to move focus while the open animation was running. See:\n      // https://github.com/angular/components/issues/16215. Note that we only want to do this\n      // if the focus isn't inside the bottom sheet already, because it's possible that the\n      // consumer turned off `autoFocus` in order to move focus themselves.\n      if (activeElement !== element && !element.contains(activeElement)) {\n        element.focus();\n      }\n    }\n  }\n\n  /** Restores focus to the element that was focused before the bottom sheet was opened. */\n  private _restoreFocus() {\n    const toFocus = this._elementFocusedBeforeOpened;\n\n    // We need the extra check, because IE can set the `activeElement` to null in some cases.\n    if (this.bottomSheetConfig.restoreFocus && toFocus && typeof toFocus.focus === 'function') {\n      const activeElement = _getFocusedElementPierceShadowDom();\n      const element = this._elementRef.nativeElement;\n\n      // Make sure that focus is still inside the bottom sheet or is on the body (usually because a\n      // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n      // the consumer moved it themselves before the animation was done, in which case we shouldn't\n      // do anything.\n      if (!activeElement || activeElement === this._document.body || activeElement === element ||\n        element.contains(activeElement)) {\n        toFocus.focus();\n      }\n    }\n\n    if (this._focusTrap) {\n      this._focusTrap.destroy();\n    }\n  }\n\n  /** Saves a reference to the element that was focused before the bottom sheet was opened. */\n  private _savePreviouslyFocusedElement() {\n    this._elementFocusedBeforeOpened = _getFocusedElementPierceShadowDom();\n\n    // The `focus` method isn't available during server-side rendering.\n    if (this._elementRef.nativeElement.focus) {\n      Promise.resolve().then(() => this._elementRef.nativeElement.focus());\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 {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatBottomSheetContainer} from './bottom-sheet-container';\n\n\n@NgModule({\n  imports: [\n    OverlayModule,\n    MatCommonModule,\n    PortalModule,\n  ],\n  exports: [MatBottomSheetContainer, MatCommonModule],\n  declarations: [MatBottomSheetContainer],\n  entryComponents: [MatBottomSheetContainer],\n})\nexport class MatBottomSheetModule {}\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 {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {OverlayRef} from '@angular/cdk/overlay';\nimport {merge, Observable, Subject} from 'rxjs';\nimport {filter, take} from 'rxjs/operators';\nimport {MatBottomSheetContainer} from './bottom-sheet-container';\n\n\n/**\n * Reference to a bottom sheet dispatched from the bottom sheet service.\n */\nexport class MatBottomSheetRef<T = any, R = any> {\n  /** Instance of the component making up the content of the bottom sheet. */\n  instance: T;\n\n  /**\n   * Instance of the component into which the bottom sheet content is projected.\n   * @docs-private\n   */\n  containerInstance: MatBottomSheetContainer;\n\n  /** Whether the user is allowed to close the bottom sheet. */\n  disableClose: boolean | undefined;\n\n  /** Subject for notifying the user that the bottom sheet has been dismissed. */\n  private readonly _afterDismissed = new Subject<R | undefined>();\n\n  /** Subject for notifying the user that the bottom sheet has opened and appeared. */\n  private readonly _afterOpened = new Subject<void>();\n\n  /** Result to be passed down to the `afterDismissed` stream. */\n  private _result: R | undefined;\n\n  /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n  private _closeFallbackTimeout: any;\n\n  constructor(\n    containerInstance: MatBottomSheetContainer,\n    private _overlayRef: OverlayRef) {\n    this.containerInstance = containerInstance;\n    this.disableClose = containerInstance.bottomSheetConfig.disableClose;\n\n    // Emit when opening animation completes\n    containerInstance._animationStateChanged.pipe(\n      filter(event => event.phaseName === 'done' && event.toState === 'visible'),\n      take(1)\n    )\n    .subscribe(() => {\n      this._afterOpened.next();\n      this._afterOpened.complete();\n    });\n\n    // Dispose overlay when closing animation is complete\n    containerInstance._animationStateChanged\n        .pipe(filter(event => event.phaseName === 'done' && event.toState === 'hidden'), take(1))\n        .subscribe(() => {\n          clearTimeout(this._closeFallbackTimeout);\n          _overlayRef.dispose();\n        });\n\n    _overlayRef.detachments().pipe(take(1)).subscribe(() => {\n      this._afterDismissed.next(this._result);\n      this._afterDismissed.complete();\n    });\n\n    merge(\n      _overlayRef.backdropClick(),\n      _overlayRef.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE))\n    ).subscribe(event => {\n      if (!this.disableClose &&\n        (event.type !== 'keydown' || !hasModifierKey(event as KeyboardEvent))) {\n        event.preventDefault();\n        this.dismiss();\n      }\n    });\n  }\n\n  /**\n   * Dismisses the bottom sheet.\n   * @param result Data to be passed back to the bottom sheet opener.\n   */\n  dismiss(result?: R): void {\n    if (!this._afterDismissed.closed) {\n      // Transition the backdrop in parallel to the bottom sheet.\n      this.containerInstance._animationStateChanged.pipe(\n        filter(event => event.phaseName === 'start'),\n        take(1)\n      ).subscribe(event => {\n        // The logic that disposes of the overlay depends on the exit animation completing, however\n        // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n        // timeout which will clean everything up if the animation hasn't fired within the specified\n        // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n        // vast majority of cases the timeout will have been cleared before it has fired.\n        this._closeFallbackTimeout = setTimeout(() => {\n          this._overlayRef.dispose();\n        }, event.totalTime + 100);\n\n        this._overlayRef.detachBackdrop();\n      });\n\n      this._result = result;\n      this.containerInstance.exit();\n    }\n  }\n\n  /** Gets an observable that is notified when the bottom sheet is finished closing. */\n  afterDismissed(): Observable<R | undefined> {\n    return this._afterDismissed;\n  }\n\n  /** Gets an observable that is notified when the bottom sheet has opened and appeared. */\n  afterOpened(): Observable<void> {\n    return this._afterOpened;\n  }\n\n  /**\n   * Gets an observable that emits when the overlay's backdrop has been clicked.\n   */\n  backdropClick(): Observable<MouseEvent> {\n    return this._overlayRef.backdropClick();\n  }\n\n  /**\n   * Gets an observable that emits when keydown events are targeted on the overlay.\n   */\n  keydownEvents(): Observable<KeyboardEvent> {\n    return this._overlayRef.keydownEvents();\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 {Directionality} from '@angular/cdk/bidi';\nimport {Overlay, OverlayConfig, OverlayRef} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, TemplatePortal} from '@angular/cdk/portal';\nimport {\n  ComponentRef,\n  Injectable,\n  Injector,\n  Optional,\n  SkipSelf,\n  TemplateRef,\n  InjectionToken,\n  Inject,\n  OnDestroy,\n  StaticProvider,\n  InjectFlags,\n} from '@angular/core';\nimport {of as observableOf} from 'rxjs';\nimport {MAT_BOTTOM_SHEET_DATA, MatBottomSheetConfig} from './bottom-sheet-config';\nimport {MatBottomSheetContainer} from './bottom-sheet-container';\nimport {MatBottomSheetModule} from './bottom-sheet-module';\nimport {MatBottomSheetRef} from './bottom-sheet-ref';\n\n\n/** Injection token that can be used to specify default bottom sheet options. */\nexport const MAT_BOTTOM_SHEET_DEFAULT_OPTIONS =\n    new InjectionToken<MatBottomSheetConfig>('mat-bottom-sheet-default-options');\n\n/**\n * Service to trigger Material Design bottom sheets.\n */\n@Injectable({providedIn: MatBottomSheetModule})\nexport class MatBottomSheet implements OnDestroy {\n  private _bottomSheetRefAtThisLevel: MatBottomSheetRef<any> | null = null;\n\n  /** Reference to the currently opened bottom sheet. */\n  get _openedBottomSheetRef(): MatBottomSheetRef<any> | null {\n    const parent = this._parentBottomSheet;\n    return parent ? parent._openedBottomSheetRef : this._bottomSheetRefAtThisLevel;\n  }\n\n  set _openedBottomSheetRef(value: MatBottomSheetRef<any> | null) {\n    if (this._parentBottomSheet) {\n      this._parentBottomSheet._openedBottomSheetRef = value;\n    } else {\n      this._bottomSheetRefAtThisLevel = value;\n    }\n  }\n\n  constructor(\n      private _overlay: Overlay,\n      private _injector: Injector,\n      @Optional() @SkipSelf() private _parentBottomSheet: MatBottomSheet,\n      @Optional() @Inject(MAT_BOTTOM_SHEET_DEFAULT_OPTIONS)\n          private _defaultOptions?: MatBottomSheetConfig) {}\n\n  /**\n   * Opens a bottom sheet containing the given component.\n   * @param component Type of the component to load into the bottom sheet.\n   * @param config Extra configuration options.\n   * @returns Reference to the newly-opened bottom sheet.\n   */\n  open<T, D = any, R = any>(component: ComponentType<T>,\n                   config?: MatBottomSheetConfig<D>): MatBottomSheetRef<T, R>;\n\n  /**\n   * Opens a bottom sheet containing the given template.\n   * @param template TemplateRef to instantiate as the bottom sheet content.\n   * @param config Extra configuration options.\n   * @returns Reference to the newly-opened bottom sheet.\n   */\n  open<T, D = any, R = any>(template: TemplateRef<T>,\n                   config?: MatBottomSheetConfig<D>): MatBottomSheetRef<T, R>;\n\n  open<T, D = any, R = any>(componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n                   config?: MatBottomSheetConfig<D>): MatBottomSheetRef<T, R> {\n\n    const _config =\n        _applyConfigDefaults(this._defaultOptions || new MatBottomSheetConfig(), config);\n    const overlayRef = this._createOverlay(_config);\n    const container = this._attachContainer(overlayRef, _config);\n    const ref = new MatBottomSheetRef<T, R>(container, overlayRef);\n\n    if (componentOrTemplateRef instanceof TemplateRef) {\n      container.attachTemplatePortal(new TemplatePortal<T>(componentOrTemplateRef, null!, {\n        $implicit: _config.data,\n        bottomSheetRef: ref\n      } as any));\n    } else {\n      const portal = new ComponentPortal(componentOrTemplateRef, undefined,\n            this._createInjector(_config, ref));\n      const contentRef = container.attachComponentPortal(portal);\n      ref.instance = contentRef.instance;\n    }\n\n    // When the bottom sheet is dismissed, clear the reference to it.\n    ref.afterDismissed().subscribe(() => {\n      // Clear the bottom sheet ref if it hasn't already been replaced by a newer one.\n      if (this._openedBottomSheetRef == ref) {\n        this._openedBottomSheetRef = null;\n      }\n    });\n\n    if (this._openedBottomSheetRef) {\n      // If a bottom sheet is already in view, dismiss it and enter the\n      // new bottom sheet after exit animation is complete.\n      this._openedBottomSheetRef.afterDismissed().subscribe(() => ref.containerInstance.enter());\n      this._openedBottomSheetRef.dismiss();\n    } else {\n      // If no bottom sheet is in view, enter the new bottom sheet.\n      ref.containerInstance.enter();\n    }\n\n    this._openedBottomSheetRef = ref;\n\n    return ref;\n  }\n\n  /**\n   * Dismisses the currently-visible bottom sheet.\n   * @param result Data to pass to the bottom sheet instance.\n   */\n  dismiss<R = any>(result?: R): void {\n    if (this._openedBottomSheetRef) {\n      this._openedBottomSheetRef.dismiss(result);\n    }\n  }\n\n  ngOnDestroy() {\n    if (this._bottomSheetRefAtThisLevel) {\n      this._bottomSheetRefAtThisLevel.dismiss();\n    }\n  }\n\n  /**\n   * Attaches the bottom sheet container component to the overlay.\n   */\n  private _attachContainer(overlayRef: OverlayRef,\n                           config: MatBottomSheetConfig): MatBottomSheetContainer {\n\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n    const injector = Injector.create({\n      parent: userInjector || this._injector,\n      providers: [{provide: MatBottomSheetConfig, useValue: config}]\n    });\n\n    const containerPortal =\n        new ComponentPortal(MatBottomSheetContainer, config.viewContainerRef, injector);\n    const containerRef: ComponentRef<MatBottomSheetContainer> = overlayRef.attach(containerPortal);\n    return containerRef.instance;\n  }\n\n  /**\n   * Creates a new overlay and places it in the correct location.\n   * @param config The user-specified bottom sheet config.\n   */\n  private _createOverlay(config: MatBottomSheetConfig): OverlayRef {\n    const overlayConfig = new OverlayConfig({\n      direction: config.direction,\n      hasBackdrop: config.hasBackdrop,\n      disposeOnNavigation: config.closeOnNavigation,\n      maxWidth: '100%',\n      scrollStrategy: config.scrollStrategy || this._overlay.scrollStrategies.block(),\n      positionStrategy: this._overlay.position().global().centerHorizontally().bottom('0')\n    });\n\n    if (config.backdropClass) {\n      overlayConfig.backdropClass = config.backdropClass;\n    }\n\n    return this._overlay.create(overlayConfig);\n  }\n\n  /**\n   * Creates an injector to be used inside of a bottom sheet component.\n   * @param config Config that was used to create the bottom sheet.\n   * @param bottomSheetRef Reference to the bottom sheet.\n   */\n  private _createInjector<T>(config: MatBottomSheetConfig,\n                             bottomSheetRef: MatBottomSheetRef<T>): Injector {\n\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n    const providers: StaticProvider[] = [\n      {provide: MatBottomSheetRef, useValue: bottomSheetRef},\n      {provide: MAT_BOTTOM_SHEET_DATA, useValue: config.data}\n    ];\n\n    if (config.direction && (!userInjector ||\n      !userInjector.get<Directionality | null>(Directionality, null, InjectFlags.Optional))) {\n      providers.push({\n        provide: Directionality,\n        useValue: {value: config.direction, change: observableOf()}\n      });\n    }\n\n    return Injector.create({parent: userInjector || this._injector, providers});\n  }\n}\n\n/**\n * Applies default options to the bottom sheet config.\n * @param defaults Object containing the default values to which to fall back.\n * @param config The configuration to which the defaults will be applied.\n * @returns The new configuration object with defaults applied.\n */\nfunction _applyConfigDefaults(defaults: MatBottomSheetConfig,\n                              config?: MatBottomSheetConfig): MatBottomSheetConfig {\n  return {...defaults, ...config};\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\nexport * from './bottom-sheet-module';\nexport * from './bottom-sheet';\nexport * from './bottom-sheet-config';\nexport * from './bottom-sheet-container';\nexport * from './bottom-sheet-animations';\nexport * from './bottom-sheet-ref';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["observableOf"],"mappings":"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"}
+{"version":3,"file":"bottom-sheet.js","sources":["../../../../../../src/material/bottom-sheet/bottom-sheet-config.ts","../../../../../../src/material/bottom-sheet/bottom-sheet-animations.ts","../../../../../../src/material/bottom-sheet/bottom-sheet-container.ts","../../../../../../src/material/bottom-sheet/bottom-sheet-module.ts","../../../../../../src/material/bottom-sheet/bottom-sheet-ref.ts","../../../../../../src/material/bottom-sheet/bottom-sheet.ts","../../../../../../src/material/bottom-sheet/public-api.ts","../../../../../../src/material/bottom-sheet/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 {Direction} from '@angular/cdk/bidi';\nimport {ScrollStrategy} from '@angular/cdk/overlay';\nimport {InjectionToken, ViewContainerRef} from '@angular/core';\n\n/** Injection token that can be used to access the data that was passed in to a bottom sheet. */\nexport const MAT_BOTTOM_SHEET_DATA = new InjectionToken<any>('MatBottomSheetData');\n\n/**\n * Configuration used when opening a bottom sheet.\n */\nexport class MatBottomSheetConfig<D = any> {\n  /** The view container to place the overlay for the bottom sheet into. */\n  viewContainerRef?: ViewContainerRef;\n\n  /** Extra CSS classes to be added to the bottom sheet container. */\n  panelClass?: string | string[];\n\n  /** Text layout direction for the bottom sheet. */\n  direction?: Direction;\n\n  /** Data being injected into the child component. */\n  data?: D | null = null;\n\n  /** Whether the bottom sheet has a backdrop. */\n  hasBackdrop?: boolean = true;\n\n  /** Custom class for the backdrop. */\n  backdropClass?: string;\n\n  /** Whether the user can use escape or clicking outside to close the bottom sheet. */\n  disableClose?: boolean = false;\n\n  /** Aria label to assign to the bottom sheet element. */\n  ariaLabel?: string | null = null;\n\n  /**\n   * Whether the bottom sheet should close when the user goes backwards/forwards in history.\n   * Note that this usually doesn't include clicking on links (unless the user is using\n   * the `HashLocationStrategy`).\n   */\n  closeOnNavigation?: boolean = true;\n\n  // Note that this is disabled by default, because while the a11y recommendations are to focus\n  // the first focusable element, doing so prevents screen readers from reading out the\n  // rest of the bottom sheet content.\n  /** Whether the bottom sheet should focus the first focusable element on open. */\n  autoFocus?: boolean = false;\n\n  /**\n   * Whether the bottom sheet should restore focus to the\n   * previously-focused element, after it's closed.\n   */\n  restoreFocus?: boolean = true;\n\n  /** Scroll strategy to be used for the bottom sheet. */\n  scrollStrategy?: ScrollStrategy;\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';\nimport {AnimationCurves, AnimationDurations} from '@angular/material/core';\n\n/** Animations used by the Material bottom sheet. */\nexport const matBottomSheetAnimations: {\n  readonly bottomSheetState: AnimationTriggerMetadata;\n} = {\n  /** Animation that shows and hides a bottom sheet. */\n  bottomSheetState: trigger('state', [\n    state('void, hidden', style({transform: 'translateY(100%)'})),\n    state('visible', style({transform: 'translateY(0%)'})),\n    transition('visible => void, visible => hidden',\n        animate(`${AnimationDurations.COMPLEX} ${AnimationCurves.ACCELERATION_CURVE}`)),\n    transition('void => visible',\n        animate(`${AnimationDurations.EXITING} ${AnimationCurves.DECELERATION_CURVE}`)),\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 {\n  Component,\n  ComponentRef,\n  EmbeddedViewRef,\n  ViewChild,\n  OnDestroy,\n  ElementRef,\n  ChangeDetectionStrategy,\n  ViewEncapsulation,\n  ChangeDetectorRef,\n  EventEmitter,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport {AnimationEvent} from '@angular/animations';\nimport {\n  BasePortalOutlet,\n  ComponentPortal,\n  TemplatePortal,\n  CdkPortalOutlet,\n  DomPortal,\n} from '@angular/cdk/portal';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {MatBottomSheetConfig} from './bottom-sheet-config';\nimport {matBottomSheetAnimations} from './bottom-sheet-animations';\nimport {Subscription} from 'rxjs';\nimport {DOCUMENT} from '@angular/common';\nimport {FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {_getFocusedElementPierceShadowDom} from '@angular/cdk/platform';\n\n// TODO(crisbeto): consolidate some logic between this, MatDialog and MatSnackBar\n\n/**\n * Internal component that wraps user-provided bottom sheet content.\n * @docs-private\n */\n@Component({\n  selector: 'mat-bottom-sheet-container',\n  templateUrl: 'bottom-sheet-container.html',\n  styleUrls: ['bottom-sheet-container.css'],\n  // In Ivy embedded views will be change detected from their declaration place, rather than where\n  // they were stamped out. This means that we can't have the bottom sheet container be OnPush,\n  // because it might cause the sheets that were opened from a template not to be out of date.\n  // tslint:disable-next-line:validate-decorators\n  changeDetection: ChangeDetectionStrategy.Default,\n  encapsulation: ViewEncapsulation.None,\n  animations: [matBottomSheetAnimations.bottomSheetState],\n  host: {\n    'class': 'mat-bottom-sheet-container',\n    'tabindex': '-1',\n    'role': 'dialog',\n    'aria-modal': 'true',\n    '[attr.aria-label]': 'bottomSheetConfig?.ariaLabel',\n    '[@state]': '_animationState',\n    '(@state.start)': '_onAnimationStart($event)',\n    '(@state.done)': '_onAnimationDone($event)'\n  },\n})\nexport class MatBottomSheetContainer extends BasePortalOutlet implements OnDestroy {\n  private _breakpointSubscription: Subscription;\n\n  /** The portal outlet inside of this container into which the content will be loaded. */\n  @ViewChild(CdkPortalOutlet, {static: true}) _portalOutlet: CdkPortalOutlet;\n\n  /** The state of the bottom sheet animations. */\n  _animationState: 'void' | 'visible' | 'hidden' = 'void';\n\n  /** Emits whenever the state of the animation changes. */\n  _animationStateChanged = new EventEmitter<AnimationEvent>();\n\n  /** The class that traps and manages focus within the bottom sheet. */\n  private _focusTrap: FocusTrap;\n\n  /** Element that was focused before the bottom sheet was opened. */\n  private _elementFocusedBeforeOpened: HTMLElement | null = null;\n\n  /** Server-side rendering-compatible reference to the global document object. */\n  private _document: Document;\n\n  /** Whether the component has been destroyed. */\n  private _destroyed: boolean;\n\n  constructor(\n    private _elementRef: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _focusTrapFactory: FocusTrapFactory,\n    breakpointObserver: BreakpointObserver,\n    @Optional() @Inject(DOCUMENT) document: any,\n    /** The bottom sheet configuration. */\n    public bottomSheetConfig: MatBottomSheetConfig) {\n    super();\n\n    this._document = document;\n    this._breakpointSubscription = breakpointObserver\n      .observe([Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n      .subscribe(() => {\n        this._toggleClass('mat-bottom-sheet-container-medium',\n            breakpointObserver.isMatched(Breakpoints.Medium));\n        this._toggleClass('mat-bottom-sheet-container-large',\n            breakpointObserver.isMatched(Breakpoints.Large));\n        this._toggleClass('mat-bottom-sheet-container-xlarge',\n            breakpointObserver.isMatched(Breakpoints.XLarge));\n      });\n  }\n\n  /** Attach a component portal as content to this bottom sheet container. */\n  attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n    this._validatePortalAttached();\n    this._setPanelClass();\n    this._savePreviouslyFocusedElement();\n    return this._portalOutlet.attachComponentPortal(portal);\n  }\n\n  /** Attach a template portal as content to this bottom sheet container. */\n  attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n    this._validatePortalAttached();\n    this._setPanelClass();\n    this._savePreviouslyFocusedElement();\n    return this._portalOutlet.attachTemplatePortal(portal);\n  }\n\n  /**\n   * Attaches a DOM portal to the bottom sheet container.\n   * @deprecated To be turned into a method.\n   * @breaking-change 10.0.0\n   */\n  override attachDomPortal = (portal: DomPortal) => {\n    this._validatePortalAttached();\n    this._setPanelClass();\n    this._savePreviouslyFocusedElement();\n    return this._portalOutlet.attachDomPortal(portal);\n  }\n\n  /** Begin animation of bottom sheet entrance into view. */\n  enter(): void {\n    if (!this._destroyed) {\n      this._animationState = 'visible';\n      this._changeDetectorRef.detectChanges();\n    }\n  }\n\n  /** Begin animation of the bottom sheet exiting from view. */\n  exit(): void {\n    if (!this._destroyed) {\n      this._animationState = 'hidden';\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  ngOnDestroy() {\n    this._breakpointSubscription.unsubscribe();\n    this._destroyed = true;\n  }\n\n  _onAnimationDone(event: AnimationEvent) {\n    if (event.toState === 'hidden') {\n      this._restoreFocus();\n    } else if (event.toState === 'visible') {\n      this._trapFocus();\n    }\n\n    this._animationStateChanged.emit(event);\n  }\n\n  _onAnimationStart(event: AnimationEvent) {\n    this._animationStateChanged.emit(event);\n  }\n\n  private _toggleClass(cssClass: string, add: boolean) {\n    const classList = this._elementRef.nativeElement.classList;\n    add ? classList.add(cssClass) : classList.remove(cssClass);\n  }\n\n  private _validatePortalAttached() {\n    if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('Attempting to attach bottom sheet content after content is already attached');\n    }\n  }\n\n  private _setPanelClass() {\n    const element: HTMLElement = this._elementRef.nativeElement;\n    const panelClass = this.bottomSheetConfig.panelClass;\n\n    if (Array.isArray(panelClass)) {\n      // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n      panelClass.forEach(cssClass => element.classList.add(cssClass));\n    } else if (panelClass) {\n      element.classList.add(panelClass);\n    }\n  }\n\n  /** Moves the focus inside the focus trap. */\n  private _trapFocus() {\n    const element = this._elementRef.nativeElement;\n\n    if (!this._focusTrap) {\n      this._focusTrap = this._focusTrapFactory.create(element);\n    }\n\n    if (this.bottomSheetConfig.autoFocus) {\n      this._focusTrap.focusInitialElementWhenReady();\n    } else {\n      const activeElement = _getFocusedElementPierceShadowDom();\n\n      // Otherwise ensure that focus is on the container. It's possible that a different\n      // component tried to move focus while the open animation was running. See:\n      // https://github.com/angular/components/issues/16215. Note that we only want to do this\n      // if the focus isn't inside the bottom sheet already, because it's possible that the\n      // consumer turned off `autoFocus` in order to move focus themselves.\n      if (activeElement !== element && !element.contains(activeElement)) {\n        element.focus();\n      }\n    }\n  }\n\n  /** Restores focus to the element that was focused before the bottom sheet was opened. */\n  private _restoreFocus() {\n    const toFocus = this._elementFocusedBeforeOpened;\n\n    // We need the extra check, because IE can set the `activeElement` to null in some cases.\n    if (this.bottomSheetConfig.restoreFocus && toFocus && typeof toFocus.focus === 'function') {\n      const activeElement = _getFocusedElementPierceShadowDom();\n      const element = this._elementRef.nativeElement;\n\n      // Make sure that focus is still inside the bottom sheet or is on the body (usually because a\n      // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n      // the consumer moved it themselves before the animation was done, in which case we shouldn't\n      // do anything.\n      if (!activeElement || activeElement === this._document.body || activeElement === element ||\n        element.contains(activeElement)) {\n        toFocus.focus();\n      }\n    }\n\n    if (this._focusTrap) {\n      this._focusTrap.destroy();\n    }\n  }\n\n  /** Saves a reference to the element that was focused before the bottom sheet was opened. */\n  private _savePreviouslyFocusedElement() {\n    this._elementFocusedBeforeOpened = _getFocusedElementPierceShadowDom();\n\n    // The `focus` method isn't available during server-side rendering.\n    if (this._elementRef.nativeElement.focus) {\n      Promise.resolve().then(() => this._elementRef.nativeElement.focus());\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 {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatBottomSheetContainer} from './bottom-sheet-container';\n\n\n@NgModule({\n  imports: [\n    OverlayModule,\n    MatCommonModule,\n    PortalModule,\n  ],\n  exports: [MatBottomSheetContainer, MatCommonModule],\n  declarations: [MatBottomSheetContainer],\n  entryComponents: [MatBottomSheetContainer],\n})\nexport class MatBottomSheetModule {}\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 {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {OverlayRef} from '@angular/cdk/overlay';\nimport {merge, Observable, Subject} from 'rxjs';\nimport {filter, take} from 'rxjs/operators';\nimport {MatBottomSheetContainer} from './bottom-sheet-container';\n\n\n/**\n * Reference to a bottom sheet dispatched from the bottom sheet service.\n */\nexport class MatBottomSheetRef<T = any, R = any> {\n  /** Instance of the component making up the content of the bottom sheet. */\n  instance: T;\n\n  /**\n   * Instance of the component into which the bottom sheet content is projected.\n   * @docs-private\n   */\n  containerInstance: MatBottomSheetContainer;\n\n  /** Whether the user is allowed to close the bottom sheet. */\n  disableClose: boolean | undefined;\n\n  /** Subject for notifying the user that the bottom sheet has been dismissed. */\n  private readonly _afterDismissed = new Subject<R | undefined>();\n\n  /** Subject for notifying the user that the bottom sheet has opened and appeared. */\n  private readonly _afterOpened = new Subject<void>();\n\n  /** Result to be passed down to the `afterDismissed` stream. */\n  private _result: R | undefined;\n\n  /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n  private _closeFallbackTimeout: number;\n\n  constructor(\n    containerInstance: MatBottomSheetContainer,\n    private _overlayRef: OverlayRef) {\n    this.containerInstance = containerInstance;\n    this.disableClose = containerInstance.bottomSheetConfig.disableClose;\n\n    // Emit when opening animation completes\n    containerInstance._animationStateChanged.pipe(\n      filter(event => event.phaseName === 'done' && event.toState === 'visible'),\n      take(1)\n    )\n    .subscribe(() => {\n      this._afterOpened.next();\n      this._afterOpened.complete();\n    });\n\n    // Dispose overlay when closing animation is complete\n    containerInstance._animationStateChanged\n        .pipe(filter(event => event.phaseName === 'done' && event.toState === 'hidden'), take(1))\n        .subscribe(() => {\n          clearTimeout(this._closeFallbackTimeout);\n          _overlayRef.dispose();\n        });\n\n    _overlayRef.detachments().pipe(take(1)).subscribe(() => {\n      this._afterDismissed.next(this._result);\n      this._afterDismissed.complete();\n    });\n\n    merge(\n      _overlayRef.backdropClick(),\n      _overlayRef.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE))\n    ).subscribe(event => {\n      if (!this.disableClose &&\n        (event.type !== 'keydown' || !hasModifierKey(event as KeyboardEvent))) {\n        event.preventDefault();\n        this.dismiss();\n      }\n    });\n  }\n\n  /**\n   * Dismisses the bottom sheet.\n   * @param result Data to be passed back to the bottom sheet opener.\n   */\n  dismiss(result?: R): void {\n    if (!this._afterDismissed.closed) {\n      // Transition the backdrop in parallel to the bottom sheet.\n      this.containerInstance._animationStateChanged.pipe(\n        filter(event => event.phaseName === 'start'),\n        take(1)\n      ).subscribe(event => {\n        // The logic that disposes of the overlay depends on the exit animation completing, however\n        // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n        // timeout which will clean everything up if the animation hasn't fired within the specified\n        // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n        // vast majority of cases the timeout will have been cleared before it has fired.\n        this._closeFallbackTimeout = setTimeout(() => {\n          this._overlayRef.dispose();\n        }, event.totalTime + 100);\n\n        this._overlayRef.detachBackdrop();\n      });\n\n      this._result = result;\n      this.containerInstance.exit();\n    }\n  }\n\n  /** Gets an observable that is notified when the bottom sheet is finished closing. */\n  afterDismissed(): Observable<R | undefined> {\n    return this._afterDismissed;\n  }\n\n  /** Gets an observable that is notified when the bottom sheet has opened and appeared. */\n  afterOpened(): Observable<void> {\n    return this._afterOpened;\n  }\n\n  /**\n   * Gets an observable that emits when the overlay's backdrop has been clicked.\n   */\n  backdropClick(): Observable<MouseEvent> {\n    return this._overlayRef.backdropClick();\n  }\n\n  /**\n   * Gets an observable that emits when keydown events are targeted on the overlay.\n   */\n  keydownEvents(): Observable<KeyboardEvent> {\n    return this._overlayRef.keydownEvents();\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 {Directionality} from '@angular/cdk/bidi';\nimport {Overlay, OverlayConfig, OverlayRef} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, TemplatePortal} from '@angular/cdk/portal';\nimport {\n  ComponentRef,\n  Injectable,\n  Injector,\n  Optional,\n  SkipSelf,\n  TemplateRef,\n  InjectionToken,\n  Inject,\n  OnDestroy,\n  StaticProvider,\n  InjectFlags,\n} from '@angular/core';\nimport {of as observableOf} from 'rxjs';\nimport {MAT_BOTTOM_SHEET_DATA, MatBottomSheetConfig} from './bottom-sheet-config';\nimport {MatBottomSheetContainer} from './bottom-sheet-container';\nimport {MatBottomSheetModule} from './bottom-sheet-module';\nimport {MatBottomSheetRef} from './bottom-sheet-ref';\n\n\n/** Injection token that can be used to specify default bottom sheet options. */\nexport const MAT_BOTTOM_SHEET_DEFAULT_OPTIONS =\n    new InjectionToken<MatBottomSheetConfig>('mat-bottom-sheet-default-options');\n\n/**\n * Service to trigger Material Design bottom sheets.\n */\n@Injectable({providedIn: MatBottomSheetModule})\nexport class MatBottomSheet implements OnDestroy {\n  private _bottomSheetRefAtThisLevel: MatBottomSheetRef<any> | null = null;\n\n  /** Reference to the currently opened bottom sheet. */\n  get _openedBottomSheetRef(): MatBottomSheetRef<any> | null {\n    const parent = this._parentBottomSheet;\n    return parent ? parent._openedBottomSheetRef : this._bottomSheetRefAtThisLevel;\n  }\n\n  set _openedBottomSheetRef(value: MatBottomSheetRef<any> | null) {\n    if (this._parentBottomSheet) {\n      this._parentBottomSheet._openedBottomSheetRef = value;\n    } else {\n      this._bottomSheetRefAtThisLevel = value;\n    }\n  }\n\n  constructor(\n      private _overlay: Overlay,\n      private _injector: Injector,\n      @Optional() @SkipSelf() private _parentBottomSheet: MatBottomSheet,\n      @Optional() @Inject(MAT_BOTTOM_SHEET_DEFAULT_OPTIONS)\n          private _defaultOptions?: MatBottomSheetConfig) {}\n\n  /**\n   * Opens a bottom sheet containing the given component.\n   * @param component Type of the component to load into the bottom sheet.\n   * @param config Extra configuration options.\n   * @returns Reference to the newly-opened bottom sheet.\n   */\n  open<T, D = any, R = any>(component: ComponentType<T>,\n                   config?: MatBottomSheetConfig<D>): MatBottomSheetRef<T, R>;\n\n  /**\n   * Opens a bottom sheet containing the given template.\n   * @param template TemplateRef to instantiate as the bottom sheet content.\n   * @param config Extra configuration options.\n   * @returns Reference to the newly-opened bottom sheet.\n   */\n  open<T, D = any, R = any>(template: TemplateRef<T>,\n                   config?: MatBottomSheetConfig<D>): MatBottomSheetRef<T, R>;\n\n  open<T, D = any, R = any>(componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n                   config?: MatBottomSheetConfig<D>): MatBottomSheetRef<T, R> {\n\n    const _config =\n        _applyConfigDefaults(this._defaultOptions || new MatBottomSheetConfig(), config);\n    const overlayRef = this._createOverlay(_config);\n    const container = this._attachContainer(overlayRef, _config);\n    const ref = new MatBottomSheetRef<T, R>(container, overlayRef);\n\n    if (componentOrTemplateRef instanceof TemplateRef) {\n      container.attachTemplatePortal(new TemplatePortal<T>(componentOrTemplateRef, null!, {\n        $implicit: _config.data,\n        bottomSheetRef: ref\n      } as any));\n    } else {\n      const portal = new ComponentPortal(componentOrTemplateRef, undefined,\n            this._createInjector(_config, ref));\n      const contentRef = container.attachComponentPortal(portal);\n      ref.instance = contentRef.instance;\n    }\n\n    // When the bottom sheet is dismissed, clear the reference to it.\n    ref.afterDismissed().subscribe(() => {\n      // Clear the bottom sheet ref if it hasn't already been replaced by a newer one.\n      if (this._openedBottomSheetRef == ref) {\n        this._openedBottomSheetRef = null;\n      }\n    });\n\n    if (this._openedBottomSheetRef) {\n      // If a bottom sheet is already in view, dismiss it and enter the\n      // new bottom sheet after exit animation is complete.\n      this._openedBottomSheetRef.afterDismissed().subscribe(() => ref.containerInstance.enter());\n      this._openedBottomSheetRef.dismiss();\n    } else {\n      // If no bottom sheet is in view, enter the new bottom sheet.\n      ref.containerInstance.enter();\n    }\n\n    this._openedBottomSheetRef = ref;\n\n    return ref;\n  }\n\n  /**\n   * Dismisses the currently-visible bottom sheet.\n   * @param result Data to pass to the bottom sheet instance.\n   */\n  dismiss<R = any>(result?: R): void {\n    if (this._openedBottomSheetRef) {\n      this._openedBottomSheetRef.dismiss(result);\n    }\n  }\n\n  ngOnDestroy() {\n    if (this._bottomSheetRefAtThisLevel) {\n      this._bottomSheetRefAtThisLevel.dismiss();\n    }\n  }\n\n  /**\n   * Attaches the bottom sheet container component to the overlay.\n   */\n  private _attachContainer(overlayRef: OverlayRef,\n                           config: MatBottomSheetConfig): MatBottomSheetContainer {\n\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n    const injector = Injector.create({\n      parent: userInjector || this._injector,\n      providers: [{provide: MatBottomSheetConfig, useValue: config}]\n    });\n\n    const containerPortal =\n        new ComponentPortal(MatBottomSheetContainer, config.viewContainerRef, injector);\n    const containerRef: ComponentRef<MatBottomSheetContainer> = overlayRef.attach(containerPortal);\n    return containerRef.instance;\n  }\n\n  /**\n   * Creates a new overlay and places it in the correct location.\n   * @param config The user-specified bottom sheet config.\n   */\n  private _createOverlay(config: MatBottomSheetConfig): OverlayRef {\n    const overlayConfig = new OverlayConfig({\n      direction: config.direction,\n      hasBackdrop: config.hasBackdrop,\n      disposeOnNavigation: config.closeOnNavigation,\n      maxWidth: '100%',\n      scrollStrategy: config.scrollStrategy || this._overlay.scrollStrategies.block(),\n      positionStrategy: this._overlay.position().global().centerHorizontally().bottom('0')\n    });\n\n    if (config.backdropClass) {\n      overlayConfig.backdropClass = config.backdropClass;\n    }\n\n    return this._overlay.create(overlayConfig);\n  }\n\n  /**\n   * Creates an injector to be used inside of a bottom sheet component.\n   * @param config Config that was used to create the bottom sheet.\n   * @param bottomSheetRef Reference to the bottom sheet.\n   */\n  private _createInjector<T>(config: MatBottomSheetConfig,\n                             bottomSheetRef: MatBottomSheetRef<T>): Injector {\n\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n    const providers: StaticProvider[] = [\n      {provide: MatBottomSheetRef, useValue: bottomSheetRef},\n      {provide: MAT_BOTTOM_SHEET_DATA, useValue: config.data}\n    ];\n\n    if (config.direction && (!userInjector ||\n      !userInjector.get<Directionality | null>(Directionality, null, InjectFlags.Optional))) {\n      providers.push({\n        provide: Directionality,\n        useValue: {value: config.direction, change: observableOf()}\n      });\n    }\n\n    return Injector.create({parent: userInjector || this._injector, providers});\n  }\n}\n\n/**\n * Applies default options to the bottom sheet config.\n * @param defaults Object containing the default values to which to fall back.\n * @param config The configuration to which the defaults will be applied.\n * @returns The new configuration object with defaults applied.\n */\nfunction _applyConfigDefaults(defaults: MatBottomSheetConfig,\n                              config?: MatBottomSheetConfig): MatBottomSheetConfig {\n  return {...defaults, ...config};\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\nexport * from './bottom-sheet-module';\nexport * from './bottom-sheet';\nexport * from './bottom-sheet-config';\nexport * from './bottom-sheet-container';\nexport * from './bottom-sheet-animations';\nexport * from './bottom-sheet-ref';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["observableOf"],"mappings":"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"}
Index: trip-planner-front/node_modules/@angular/material/fesm2015/core.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/core.js	(revision fa375fed9635035b3c62cf759f42938afa14271b)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/core.js	(revision 8d391a12ef6baa3aefe9611a6f7c5b569977c946)
@@ -20,5 +20,5 @@
  */
 /** Current version of Angular Material. */
-const VERSION$1 = new Version('12.2.10');
+const VERSION$1 = new Version('12.2.13');
 
 /**
@@ -54,5 +54,5 @@
 // Can be removed once the Material primary entry-point no longer
 // re-exports all secondary entry-points
-const VERSION = new Version('12.2.10');
+const VERSION = new Version('12.2.13');
 /** @docs-private */
 function MATERIAL_SANITY_CHECKS_FACTORY() {
Index: trip-planner-front/node_modules/@angular/material/fesm2015/core.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/core.js.map	(revision fa375fed9635035b3c62cf759f42938afa14271b)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/core.js.map	(revision 8d391a12ef6baa3aefe9611a6f7c5b569977c946)
@@ -1,1 +1,1 @@
-{"version":3,"file":"core.js","sources":["../../../../../../src/material/core/version.ts","../../../../../../src/material/core/animation/animation.ts","../../../../../../src/material/core/common-behaviors/common-module.ts","../../../../../../src/material/core/common-behaviors/disabled.ts","../../../../../../src/material/core/common-behaviors/color.ts","../../../../../../src/material/core/common-behaviors/disable-ripple.ts","../../../../../../src/material/core/common-behaviors/tabindex.ts","../../../../../../src/material/core/common-behaviors/error-state.ts","../../../../../../src/material/core/common-behaviors/initialized.ts","../../../../../../src/material/core/common-behaviors/index.ts","../../../../../../src/material/core/datetime/date-adapter.ts","../../../../../../src/material/core/datetime/date-formats.ts","../../../../../../src/material/core/datetime/native-date-adapter.ts","../../../../../../src/material/core/datetime/native-date-formats.ts","../../../../../../src/material/core/datetime/index.ts","../../../../../../src/material/core/error/error-options.ts","../../../../../../src/material/core/line/line.ts","../../../../../../src/material/core/ripple/ripple-ref.ts","../../../../../../src/material/core/ripple/ripple-renderer.ts","../../../../../../src/material/core/ripple/ripple.ts","../../../../../../src/material/core/ripple/index.ts","../../../../../../src/material/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../../../../../src/material/core/selection/index.ts","../../../../../../src/material/core/option/option-parent.ts","../../../../../../src/material/core/option/optgroup.ts","../../../../../../src/material/core/option/option.ts","../../../../../../src/material/core/option/index.ts","../../../../../../src/material/core/public-api.ts","../../../../../../src/material/core/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 {Version} from '@angular/core';\n\n/** Current version of Angular Material. */\nexport const VERSION = new Version('12.2.10');\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 class AnimationCurves {\n  static STANDARD_CURVE = 'cubic-bezier(0.4,0.0,0.2,1)';\n  static DECELERATION_CURVE = 'cubic-bezier(0.0,0.0,0.2,1)';\n  static ACCELERATION_CURVE = 'cubic-bezier(0.4,0.0,1,1)';\n  static SHARP_CURVE = 'cubic-bezier(0.4,0.0,0.6,1)';\n}\n\n\n/** @docs-private */\nexport class AnimationDurations {\n  static COMPLEX = '375ms';\n  static ENTERING = '225ms';\n  static EXITING = '195ms';\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 {HighContrastModeDetector} from '@angular/cdk/a11y';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {Inject, InjectionToken, isDevMode, NgModule, Optional, Version} from '@angular/core';\nimport {VERSION as CDK_VERSION} from '@angular/cdk';\nimport {DOCUMENT} from '@angular/common';\nimport {_isTestEnvironment} from '@angular/cdk/platform';\n\n// Private version constant to circumvent test/build issues,\n// i.e. avoid core to depend on the @angular/material primary entry-point\n// Can be removed once the Material primary entry-point no longer\n// re-exports all secondary entry-points\nconst VERSION = new Version('12.2.10');\n\n/** @docs-private */\nexport function MATERIAL_SANITY_CHECKS_FACTORY(): SanityChecks {\n  return true;\n}\n\n/** Injection token that configures whether the Material sanity checks are enabled. */\nexport const MATERIAL_SANITY_CHECKS = new InjectionToken<SanityChecks>('mat-sanity-checks', {\n  providedIn: 'root',\n  factory: MATERIAL_SANITY_CHECKS_FACTORY,\n});\n\n/**\n * Possible sanity checks that can be enabled. If set to\n * true/false, all checks will be enabled/disabled.\n */\nexport type SanityChecks = boolean | GranularSanityChecks;\n\n/** Object that can be used to configure the sanity checks granularly. */\nexport interface GranularSanityChecks {\n  doctype: boolean;\n  theme: boolean;\n  version: boolean;\n}\n\n/**\n * Module that captures anything that should be loaded and/or run for *all* Angular Material\n * components. This includes Bidi, etc.\n *\n * This module should be imported to each top-level component module (e.g., MatTabsModule).\n */\n@NgModule({\n  imports: [BidiModule],\n  exports: [BidiModule],\n})\nexport class MatCommonModule {\n  /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */\n  private _hasDoneGlobalChecks = false;\n\n  /** Configured sanity checks. */\n  private _sanityChecks: SanityChecks;\n\n  /** Used to reference correct document/window */\n  protected _document: Document;\n\n  constructor(\n      highContrastModeDetector: HighContrastModeDetector,\n      @Optional() @Inject(MATERIAL_SANITY_CHECKS) sanityChecks: any,\n      @Inject(DOCUMENT) document: any) {\n    this._document = document;\n\n    // While A11yModule also does this, we repeat it here to avoid importing A11yModule\n    // in MatCommonModule.\n    highContrastModeDetector._applyBodyHighContrastModeCssClasses();\n\n    // Note that `_sanityChecks` is typed to `any`, because AoT\n    // throws an error if we use the `SanityChecks` type directly.\n    this._sanityChecks = sanityChecks;\n\n    if (!this._hasDoneGlobalChecks) {\n      this._checkDoctypeIsDefined();\n      this._checkThemeIsPresent();\n      this._checkCdkVersionMatch();\n      this._hasDoneGlobalChecks = true;\n    }\n  }\n\n  /** Gets whether a specific sanity check is enabled. */\n  private _checkIsEnabled(name: keyof GranularSanityChecks): boolean {\n    // TODO(crisbeto): we can't use `ngDevMode` here yet, because ViewEngine apps might not support\n    // it. Since these checks can have performance implications and they aren't tree shakeable\n    // in their current form, we can leave the `isDevMode` check in for now.\n    // tslint:disable-next-line:ban\n    if (!isDevMode() || _isTestEnvironment()) {\n      return false;\n    }\n\n    if (typeof this._sanityChecks === 'boolean') {\n      return this._sanityChecks;\n    }\n\n    return !!this._sanityChecks[name];\n  }\n\n  private _checkDoctypeIsDefined(): void {\n    if (this._checkIsEnabled('doctype') && !this._document.doctype) {\n      console.warn(\n        'Current document does not have a doctype. This may cause ' +\n        'some Angular Material components not to behave as expected.'\n      );\n    }\n  }\n\n  private _checkThemeIsPresent(): void {\n    // We need to assert that the `body` is defined, because these checks run very early\n    // and the `body` won't be defined if the consumer put their scripts in the `head`.\n    if (!this._checkIsEnabled('theme') || !this._document.body ||\n        typeof getComputedStyle !== 'function') {\n      return;\n    }\n\n    const testElement = this._document.createElement('div');\n\n    testElement.classList.add('mat-theme-loaded-marker');\n    this._document.body.appendChild(testElement);\n\n    const computedStyle = getComputedStyle(testElement);\n\n    // In some situations the computed style of the test element can be null. For example in\n    // Firefox, the computed style is null if an application is running inside of a hidden iframe.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    if (computedStyle && computedStyle.display !== 'none') {\n      console.warn(\n        'Could not find Angular Material core theme. Most Material ' +\n        'components may not work as expected. For more info refer ' +\n        'to the theming guide: https://material.angular.io/guide/theming'\n      );\n    }\n\n    this._document.body.removeChild(testElement);\n  }\n\n  /** Checks whether the material version matches the cdk version */\n  private _checkCdkVersionMatch(): void {\n    if (this._checkIsEnabled('version') && VERSION.full !== CDK_VERSION.full) {\n      console.warn(\n          'The Angular Material version (' + VERSION.full + ') does not match ' +\n          'the Angular CDK version (' + CDK_VERSION.full + ').\\n' +\n          'Please ensure the versions of these two packages exactly match.'\n      );\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 {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisable {\n  /** Whether the component is disabled. */\n  disabled: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableCtor = Constructor<CanDisable> & AbstractConstructor<CanDisable>;\n\n/** Mixin to augment a directive with a `disabled` property. */\nexport function mixinDisabled<T extends AbstractConstructor<{}>>(base: T): CanDisableCtor & T;\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): CanDisableCtor & T {\n  return class extends base {\n    private _disabled: boolean = false;\n\n    get disabled() { return this._disabled; }\n    set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\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 {AbstractConstructor, Constructor} from './constructor';\nimport {ElementRef} from '@angular/core';\n\n/** @docs-private */\nexport interface CanColor {\n  /** Theme color palette for the component. */\n  color: ThemePalette;\n\n  /** Default color to fall back to if no value is set. */\n  defaultColor: ThemePalette | undefined;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanColorCtor = Constructor<CanColor> & AbstractConstructor<CanColor>;\n\n/** @docs-private */\nexport interface HasElementRef {\n  _elementRef: ElementRef;\n}\n\n/** Possible color palette values. */\nexport type ThemePalette = 'primary' | 'accent' | 'warn' | undefined;\n\n/** Mixin to augment a directive with a `color` property. */\nexport function mixinColor<T extends AbstractConstructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T;\nexport function mixinColor<T extends Constructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T {\n  return class extends base {\n    private _color: ThemePalette;\n    defaultColor = defaultColor;\n\n    get color(): ThemePalette { return this._color; }\n    set color(value: ThemePalette) {\n      const colorPalette = value || this.defaultColor;\n\n      if (colorPalette !== this._color) {\n        if (this._color) {\n          this._elementRef.nativeElement.classList.remove(`mat-${this._color}`);\n        }\n        if (colorPalette) {\n          this._elementRef.nativeElement.classList.add(`mat-${colorPalette}`);\n        }\n\n        this._color = colorPalette;\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n\n      // Set the default color that can be specified from the mixin.\n      this.color = defaultColor;\n    }\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 {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisableRipple {\n  /** Whether ripples are disabled. */\n  disableRipple: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableRippleCtor = Constructor<CanDisableRipple> &\n                                   AbstractConstructor<CanDisableRipple>;\n\n/** Mixin to augment a directive with a `disableRipple` property. */\nexport function mixinDisableRipple<T extends AbstractConstructor<{}>>(base: T):\n  CanDisableRippleCtor & T;\nexport function mixinDisableRipple<T extends Constructor<{}>>(base: T): CanDisableRippleCtor & T {\n  return class extends base {\n    private _disableRipple: boolean = false;\n\n    /** Whether the ripple effect is disabled or not. */\n    get disableRipple() { return this._disableRipple; }\n    set disableRipple(value: any) { this._disableRipple = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\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 {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Constructor, AbstractConstructor} from './constructor';\nimport {CanDisable} from './disabled';\n\n\n/** @docs-private */\nexport interface HasTabIndex {\n  /** Tabindex of the component. */\n  tabIndex: number;\n\n  /** Tabindex to which to fall back to if no value is set. */\n  defaultTabIndex: number;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasTabIndexCtor = Constructor<HasTabIndex> & AbstractConstructor<HasTabIndex>;\n\n/** Mixin to augment a directive with a `tabIndex` property. */\nexport function mixinTabIndex<T extends AbstractConstructor<CanDisable>>(base: T,\n  defaultTabIndex?: number): HasTabIndexCtor & T;\nexport function mixinTabIndex<T extends Constructor<CanDisable>>(\n  base: T, defaultTabIndex = 0): HasTabIndexCtor & T {\n  return class extends base implements HasTabIndex {\n    private _tabIndex: number = defaultTabIndex;\n    defaultTabIndex = defaultTabIndex;\n\n    get tabIndex(): number { return this.disabled ? -1 : this._tabIndex; }\n    set tabIndex(value: number) {\n      // If the specified tabIndex value is null or undefined, fall back to the default value.\n      this._tabIndex = value != null ? coerceNumberProperty(value) : this.defaultTabIndex;\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\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 {FormControl, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {ErrorStateMatcher} from '../error/error-options';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n\n/** @docs-private */\nexport interface CanUpdateErrorState {\n  /** Emits whenever the component state changes. */\n  readonly stateChanges: Subject<void>;\n  /** Updates the error state based on the provided error state matcher. */\n  updateErrorState(): void;\n  /** Whether the component is in an error state. */\n  errorState: boolean;\n  /** An object used to control the error state of the component. */\n  errorStateMatcher: ErrorStateMatcher;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanUpdateErrorStateCtor = Constructor<CanUpdateErrorState> &\n                                      AbstractConstructor<CanUpdateErrorState>;\n\n/** @docs-private */\nexport interface HasErrorState {\n  _parentFormGroup: FormGroupDirective;\n  _parentForm: NgForm;\n  _defaultErrorStateMatcher: ErrorStateMatcher;\n  ngControl: NgControl;\n}\n\n/**\n * Mixin to augment a directive with updateErrorState method.\n * For component with `errorState` and need to update `errorState`.\n */\nexport function mixinErrorState<T extends AbstractConstructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T;\nexport function mixinErrorState<T extends Constructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T {\n  return class extends base {\n    // This class member exists as an interop with `MatFormFieldControl` which expects\n    // a public `stateChanges` observable to emit whenever the form field should be updated.\n    // The description is not specifically mentioning the error state, as classes using this\n    // mixin can/should emit an event in other cases too.\n    /** Emits whenever the component state changes. */\n    readonly stateChanges = new Subject<void>();\n\n    /** Whether the component is in an error state. */\n    errorState: boolean = false;\n\n    /** An object used to control the error state of the component. */\n    errorStateMatcher: ErrorStateMatcher;\n\n    /** Updates the error state based on the provided error state matcher. */\n    updateErrorState() {\n      const oldState = this.errorState;\n      const parent = this._parentFormGroup || this._parentForm;\n      const matcher = this.errorStateMatcher || this._defaultErrorStateMatcher;\n      const control = this.ngControl ? this.ngControl.control as FormControl : null;\n      const newState = matcher.isErrorState(control, parent);\n\n      if (newState !== oldState) {\n        this.errorState = newState;\n        this.stateChanges.next();\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\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, Subscriber} from 'rxjs';\nimport {Constructor} from './constructor';\n\n\n/**\n * Mixin that adds an initialized property to a directive which, when subscribed to, will emit a\n * value once markInitialized has been called, which should be done during the ngOnInit function.\n * If the subscription is made after it has already been marked as initialized, then it will trigger\n * an emit immediately.\n * @docs-private\n */\nexport interface HasInitialized {\n  /** Stream that emits once during the directive/component's ngOnInit. */\n  initialized: Observable<void>;\n\n  /**\n   * Sets the state as initialized and must be called during ngOnInit to notify subscribers that\n   * the directive has been initialized.\n   * @docs-private\n   */\n  _markInitialized: () => void;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasInitializedCtor = Constructor<HasInitialized>;\n\n/** Mixin to augment a directive with an initialized property that will emits when ngOnInit ends. */\nexport function mixinInitialized<T extends Constructor<{}>>(base: T):\n    HasInitializedCtor & T {\n  return class extends base {\n    /** Whether this directive has been marked as initialized. */\n    _isInitialized = false;\n\n    /**\n     * List of subscribers that subscribed before the directive was initialized. Should be notified\n     * during _markInitialized. Set to null after pending subscribers are notified, and should\n     * not expect to be populated after.\n     */\n    _pendingSubscribers: Subscriber<void>[] | null = [];\n\n    /**\n     * Observable stream that emits when the directive initializes. If already initialized, the\n     * subscriber is stored to be notified once _markInitialized is called.\n     */\n    initialized = new Observable<void>(subscriber => {\n      // If initialized, immediately notify the subscriber. Otherwise store the subscriber to notify\n      // when _markInitialized is called.\n      if (this._isInitialized) {\n        this._notifySubscriber(subscriber);\n      } else {\n        this._pendingSubscribers!.push(subscriber);\n      }\n    });\n\n    constructor(...args: any[]) { super(...args); }\n\n    /**\n     * Marks the state as initialized and notifies pending subscribers. Should be called at the end\n     * of ngOnInit.\n     * @docs-private\n     */\n    _markInitialized(): void {\n      if (this._isInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw Error('This directive has already been marked as initialized and ' +\n            'should not be called twice.');\n      }\n\n      this._isInitialized = true;\n\n      this._pendingSubscribers!.forEach(this._notifySubscriber);\n      this._pendingSubscribers = null;\n    }\n\n    /** Emits and completes the subscriber stream (should only emit once). */\n    _notifySubscriber(subscriber: Subscriber<void>): void {\n      subscriber.next();\n      subscriber.complete();\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\nexport {\n  MatCommonModule,\n  MATERIAL_SANITY_CHECKS,\n  SanityChecks,\n  GranularSanityChecks,\n} from './common-module';\nexport {CanDisable, CanDisableCtor, mixinDisabled} from './disabled';\nexport {CanColor, CanColorCtor, mixinColor, ThemePalette} from './color';\nexport {CanDisableRipple, CanDisableRippleCtor, mixinDisableRipple} from './disable-ripple';\nexport {HasTabIndex, HasTabIndexCtor, mixinTabIndex} from './tabindex';\nexport {CanUpdateErrorState, CanUpdateErrorStateCtor, mixinErrorState} from './error-state';\nexport {HasInitialized, HasInitializedCtor, mixinInitialized} from './initialized';\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 {inject, InjectionToken, LOCALE_ID} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n/** InjectionToken for datepicker that can be used to override default locale code. */\nexport const MAT_DATE_LOCALE = new InjectionToken<string>('MAT_DATE_LOCALE', {\n  providedIn: 'root',\n  factory: MAT_DATE_LOCALE_FACTORY,\n});\n\n/** @docs-private */\nexport function MAT_DATE_LOCALE_FACTORY(): string {\n  return inject(LOCALE_ID);\n}\n\n/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\nexport abstract class DateAdapter<D> {\n  /** The locale to use for all dates. */\n  protected locale: any;\n  protected readonly _localeChanges = new Subject<void>();\n\n  /** A stream that emits when the locale changes. */\n  readonly localeChanges: Observable<void> = this._localeChanges;\n\n  /**\n   * Gets the year component of the given date.\n   * @param date The date to extract the year from.\n   * @returns The year component.\n   */\n  abstract getYear(date: D): number;\n\n  /**\n   * Gets the month component of the given date.\n   * @param date The date to extract the month from.\n   * @returns The month component (0-indexed, 0 = January).\n   */\n  abstract getMonth(date: D): number;\n\n  /**\n   * Gets the date of the month component of the given date.\n   * @param date The date to extract the date of the month from.\n   * @returns The month component (1-indexed, 1 = first of month).\n   */\n  abstract getDate(date: D): number;\n\n  /**\n   * Gets the day of the week component of the given date.\n   * @param date The date to extract the day of the week from.\n   * @returns The month component (0-indexed, 0 = Sunday).\n   */\n  abstract getDayOfWeek(date: D): number;\n\n  /**\n   * Gets a list of names for the months.\n   * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n   * @returns An ordered list of all month names, starting with January.\n   */\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets a list of names for the dates of the month.\n   * @returns An ordered list of all date of the month names, starting with '1'.\n   */\n  abstract getDateNames(): string[];\n\n  /**\n   * Gets a list of names for the days of the week.\n   * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n   * @returns An ordered list of all weekday names, starting with Sunday.\n   */\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets the name for the year of the given date.\n   * @param date The date to get the year name for.\n   * @returns The name of the given year (e.g. '2017').\n   */\n  abstract getYearName(date: D): string;\n\n  /**\n   * Gets the first day of the week.\n   * @returns The first day of the week (0-indexed, 0 = Sunday).\n   */\n  abstract getFirstDayOfWeek(): number;\n\n  /**\n   * Gets the number of days in the month of the given date.\n   * @param date The date whose month should be checked.\n   * @returns The number of days in the month of the given date.\n   */\n  abstract getNumDaysInMonth(date: D): number;\n\n  /**\n   * Clones the given date.\n   * @param date The date to clone\n   * @returns A new date equal to the given date.\n   */\n  abstract clone(date: D): D;\n\n  /**\n   * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\n   * month and date.\n   * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\n   * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\n   * @param date The date of month of the date. Must be an integer 1 - length of the given month.\n   * @returns The new date, or null if invalid.\n   */\n  abstract createDate(year: number, month: number, date: number): D;\n\n  /**\n   * Gets today's date.\n   * @returns Today's date.\n   */\n  abstract today(): D;\n\n  /**\n   * Parses a date from a user-provided value.\n   * @param value The value to parse.\n   * @param parseFormat The expected format of the value being parsed\n   *     (type is implementation-dependent).\n   * @returns The parsed date.\n   */\n  abstract parse(value: any, parseFormat: any): D | null;\n\n  /**\n   * Formats a date as a string according to the given format.\n   * @param date The value to format.\n   * @param displayFormat The format to use to display the date as a string.\n   * @returns The formatted date string.\n   */\n  abstract format(date: D, displayFormat: any): string;\n\n  /**\n   * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n   * calendar for each year and then finding the closest date in the new month. For example when\n   * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n   * @param date The date to add years to.\n   * @param years The number of years to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of years added.\n   */\n  abstract addCalendarYears(date: D, years: number): D;\n\n  /**\n   * Adds the given number of months to the date. Months are counted as if flipping a page on the\n   * calendar for each month and then finding the closest date in the new month. For example when\n   * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n   * @param date The date to add months to.\n   * @param months The number of months to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of months added.\n   */\n  abstract addCalendarMonths(date: D, months: number): D;\n\n  /**\n   * Adds the given number of days to the date. Days are counted as if moving one cell on the\n   * calendar for each day.\n   * @param date The date to add days to.\n   * @param days The number of days to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of days added.\n   */\n  abstract addCalendarDays(date: D, days: number): D;\n\n  /**\n   * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n   * This method is used to generate date strings that are compatible with native HTML attributes\n   * such as the `min` or `max` attribute of an `<input>`.\n   * @param date The date to get the ISO date string for.\n   * @returns The ISO date string date string.\n   */\n  abstract toIso8601(date: D): string;\n\n  /**\n   * Checks whether the given object is considered a date instance by this DateAdapter.\n   * @param obj The object to check\n   * @returns Whether the object is a date instance.\n   */\n  abstract isDateInstance(obj: any): boolean;\n\n  /**\n   * Checks whether the given date is valid.\n   * @param date The date to check.\n   * @returns Whether the date is valid.\n   */\n  abstract isValid(date: D): boolean;\n\n  /**\n   * Gets date instance that is not valid.\n   * @returns An invalid date.\n   */\n  abstract invalid(): D;\n\n /**\n  * Given a potential date object, returns that same date object if it is\n  * a valid date, or `null` if it's not a valid date.\n  * @param obj The object to check.\n  * @returns A date or `null`.\n  */\n  getValidDateOrNull(obj: unknown): D | null {\n    return this.isDateInstance(obj) && this.isValid(obj as D) ? obj as D : null;\n  }\n\n  /**\n   * Attempts to deserialize a value to a valid date object. This is different from parsing in that\n   * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\n   * string). The default implementation does not allow any deserialization, it simply checks that\n   * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\n   * method on all of its `@Input()` properties that accept dates. It is therefore possible to\n   * support passing values from your backend directly to these properties by overriding this method\n   * to also deserialize the format used by your backend.\n   * @param value The value to be deserialized into a date object.\n   * @returns The deserialized date object, either a valid date, null if the value can be\n   *     deserialized into a null date (e.g. the empty string), or an invalid date.\n   */\n  deserialize(value: any): D | null {\n    if (value == null || this.isDateInstance(value) && this.isValid(value)) {\n      return value;\n    }\n    return this.invalid();\n  }\n\n  /**\n   * Sets the locale used for all dates.\n   * @param locale The new locale.\n   */\n  setLocale(locale: any) {\n    this.locale = locale;\n    this._localeChanges.next();\n  }\n\n  /**\n   * Compares two dates.\n   * @param first The first date to compare.\n   * @param second The second date to compare.\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n   *     a number greater than 0 if the first date is later.\n   */\n  compareDate(first: D, second: D): number {\n    return this.getYear(first) - this.getYear(second) ||\n        this.getMonth(first) - this.getMonth(second) ||\n        this.getDate(first) - this.getDate(second);\n  }\n\n  /**\n   * Checks if two dates are equal.\n   * @param first The first date to check.\n   * @param second The second date to check.\n   * @returns Whether the two dates are equal.\n   *     Null dates are considered equal to other null dates.\n   */\n  sameDate(first: D | null, second: D | null): boolean {\n    if (first && second) {\n      let firstValid = this.isValid(first);\n      let secondValid = this.isValid(second);\n      if (firstValid && secondValid) {\n        return !this.compareDate(first, second);\n      }\n      return firstValid == secondValid;\n    }\n    return first == second;\n  }\n\n  /**\n   * Clamp the given date between min and max dates.\n   * @param date The date to clamp.\n   * @param min The minimum value to allow. If null or omitted no min is enforced.\n   * @param max The maximum value to allow. If null or omitted no max is enforced.\n   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n   *     otherwise `date`.\n   */\n  clampDate(date: D, min?: D | null, max?: D | null): D {\n    if (min && this.compareDate(date, min) < 0) {\n      return min;\n    }\n    if (max && this.compareDate(date, max) > 0) {\n      return max;\n    }\n    return date;\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 {InjectionToken} from '@angular/core';\n\n\nexport type MatDateFormats = {\n  parse: {\n    dateInput: any\n  },\n  display: {\n    dateInput: any,\n    monthLabel?: any,\n    monthYearLabel: any,\n    dateA11yLabel: any,\n    monthYearA11yLabel: any,\n  }\n};\n\n\nexport const MAT_DATE_FORMATS = new InjectionToken<MatDateFormats>('mat-date-formats');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {DateAdapter, MAT_DATE_LOCALE} from './date-adapter';\n\n// TODO(mmalerba): Remove when we no longer support safari 9.\n/** Whether the browser supports the Intl API. */\nlet SUPPORTS_INTL_API: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n  SUPPORTS_INTL_API = typeof Intl != 'undefined';\n} catch {\n  SUPPORTS_INTL_API = false;\n}\n\n/** The default month names to use if Intl API is not available. */\nconst DEFAULT_MONTH_NAMES = {\n  'long': [\n    'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n    'October', 'November', 'December'\n  ],\n  'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\n\n\n/** The default date names to use if Intl API is not available. */\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\n\n\n/** The default day of the week names to use if Intl API is not available. */\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\n  'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\n\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n    /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n  const valuesArray = Array(length);\n  for (let i = 0; i < length; i++) {\n    valuesArray[i] = valueFunction(i);\n  }\n  return valuesArray;\n}\n\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n  /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\n  private readonly _clampDate: boolean;\n\n  /**\n   * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n   * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n   * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n   * will produce `'8/13/1800'`.\n   *\n   * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now\n   * getting the string representation of a Date object from its utc representation. We're keeping\n   * it here for sometime, just for precaution, in case we decide to revert some of these changes\n   * though.\n   */\n  useUtcForDisplay: boolean = true;\n\n  constructor(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: string, platform: Platform) {\n    super();\n    super.setLocale(matDateLocale);\n\n    // IE does its own time zone correction, so we disable this on IE.\n    this.useUtcForDisplay = !platform.TRIDENT;\n    this._clampDate = platform.TRIDENT || platform.EDGE;\n  }\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {month: style, timeZone: 'utc'});\n      return range(12, i =>\n          this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));\n    }\n    return DEFAULT_MONTH_NAMES[style];\n  }\n\n  getDateNames(): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {day: 'numeric', timeZone: 'utc'});\n      return range(31, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DATE_NAMES;\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {weekday: style, timeZone: 'utc'});\n      return range(7, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DAY_OF_WEEK_NAMES[style];\n  }\n\n  getYearName(date: Date): string {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {year: 'numeric', timeZone: 'utc'});\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return String(this.getYear(date));\n  }\n\n  getFirstDayOfWeek(): number {\n    // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\n    return 0;\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return this.getDate(this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + 1, 0));\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      // Check for invalid month and date (except upper bound on date which we have to check after\n      // creating the Date).\n      if (month < 0 || month > 11) {\n        throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n      }\n\n      if (date < 1) {\n        throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n      }\n    }\n\n    let result = this._createDateWithOverflow(year, month, date);\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n    if (result.getMonth() != month && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n    }\n\n    return result;\n  }\n\n  today(): Date {\n    return new Date();\n  }\n\n  parse(value: any): Date | null {\n    // We have no way using the native JS Date to set the parse format or locale, so we ignore these\n    // parameters.\n    if (typeof value == 'number') {\n      return new Date(value);\n    }\n    return value ? new Date(Date.parse(value)) : null;\n  }\n\n  format(date: Date, displayFormat: Object): string {\n    if (!this.isValid(date)) {\n      throw Error('NativeDateAdapter: Cannot format invalid date.');\n    }\n\n    if (SUPPORTS_INTL_API) {\n      // On IE and Edge the i18n API will throw a hard error that can crash the entire app\n      // if we attempt to format a date whose year is less than 1 or greater than 9999.\n      if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {\n        date = this.clone(date);\n        date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));\n      }\n\n      displayFormat = {...displayFormat, timeZone: 'utc'};\n\n      const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return this._stripDirectionalityCharacters(date.toDateString());\n  }\n\n  addCalendarYears(date: Date, years: number): Date {\n    return this.addCalendarMonths(date, years * 12);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    let newDate = this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n\n    // It's possible to wind up in the wrong month if the original month has more days than the new\n    // month. In this case we want to go to the last day of the desired month.\n    // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\n    // guarantee this.\n    if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\n    }\n\n    return newDate;\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    return this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n  }\n\n  toIso8601(date: Date): string {\n    return [\n      date.getUTCFullYear(),\n      this._2digit(date.getUTCMonth() + 1),\n      this._2digit(date.getUTCDate())\n    ].join('-');\n  }\n\n  /**\n   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n   * invalid date for all other values.\n   */\n  override deserialize(value: any): Date | null {\n    if (typeof value === 'string') {\n      if (!value) {\n        return null;\n      }\n      // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n      // string is the right format first.\n      if (ISO_8601_REGEX.test(value)) {\n        let date = new Date(value);\n        if (this.isValid(date)) {\n          return date;\n        }\n      }\n    }\n    return super.deserialize(value);\n  }\n\n  isDateInstance(obj: any) {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date) {\n    return !isNaN(date.getTime());\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  /** Creates a date but allows the month and date to overflow. */\n  private _createDateWithOverflow(year: number, month: number, date: number) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setFullYear` and `setHours` instead.\n    const d = new Date();\n    d.setFullYear(year, month, date);\n    d.setHours(0, 0, 0, 0);\n    return d;\n  }\n\n  /**\n   * Pads a number to make it two digits.\n   * @param n The number to pad.\n   * @returns The padded number.\n   */\n  private _2digit(n: number) {\n    return ('00' + n).slice(-2);\n  }\n\n  /**\n   * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n   * other browsers do not. We remove them to make output consistent and because they interfere with\n   * date parsing.\n   * @param str The string to strip direction characters from.\n   * @returns The stripped string.\n   */\n  private _stripDirectionalityCharacters(str: string) {\n    return str.replace(/[\\u200e\\u200f]/g, '');\n  }\n\n  /**\n   * When converting Date object to string, javascript built-in functions may return wrong\n   * results because it applies its internal DST rules. The DST rules around the world change\n   * very frequently, and the current valid rule is not always valid in previous years though.\n   * We work around this problem building a new Date object which has its internal UTC\n   * representation with the local date and time.\n   * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have\n   *    timeZone set to 'utc' to work fine.\n   * @param date Date from which we want to get the string representation according to dtf\n   * @returns A Date object with its UTC representation based on the passed in date info\n   */\n  private _format(dtf: Intl.DateTimeFormat, date: Date) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\n    const d = new Date();\n    d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    return dtf.format(d);\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 {MatDateFormats} from './date-formats';\n\n\nexport const MAT_NATIVE_DATE_FORMATS: MatDateFormats = {\n  parse: {\n    dateInput: null,\n  },\n  display: {\n    dateInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\n    monthYearLabel: {year: 'numeric', month: 'short'},\n    dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\n    monthYearA11yLabel: {year: 'numeric', month: 'long'},\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 {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {DateAdapter} from './date-adapter';\nimport {MAT_DATE_FORMATS} from './date-formats';\nimport {NativeDateAdapter} from './native-date-adapter';\nimport {MAT_NATIVE_DATE_FORMATS} from './native-date-formats';\n\nexport * from './date-adapter';\nexport * from './date-formats';\nexport * from './native-date-adapter';\nexport * from './native-date-formats';\n\n\n@NgModule({\n  imports: [PlatformModule],\n  providers: [\n    {provide: DateAdapter, useClass: NativeDateAdapter},\n  ],\n})\nexport class NativeDateModule {}\n\n\n@NgModule({\n  imports: [NativeDateModule],\n  providers: [{provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS}],\n})\nexport class MatNativeDateModule {}\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 {Injectable} from '@angular/core';\nimport {FormGroupDirective, NgForm, FormControl} from '@angular/forms';\n\n/** Error state matcher that matches when a control is invalid and dirty. */\n@Injectable()\nexport class ShowOnDirtyErrorStateMatcher implements ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.dirty || (form && form.submitted)));\n  }\n}\n\n/** Provider that defines how form controls behave with regards to displaying error messages. */\n@Injectable({providedIn: 'root'})\nexport class ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.touched || (form && form.submitted)));\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 {\n  NgModule,\n  Directive,\n  ElementRef,\n  QueryList,\n} from '@angular/core';\nimport {startWith} from 'rxjs/operators';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n/**\n * Shared directive to count lines inside a text area, such as a list item.\n * Line elements can be extracted with a @ContentChildren(MatLine) query, then\n * counted by checking the query list's length.\n */\n@Directive({\n  selector: '[mat-line], [matLine]',\n  host: {'class': 'mat-line'}\n})\nexport class MatLine {}\n\n/**\n * Helper that takes a query list of lines and sets the correct class on the host.\n * @docs-private\n */\nexport function setLines(lines: QueryList<unknown>, element: ElementRef<HTMLElement>,\n                         prefix = 'mat') {\n  // Note: doesn't need to unsubscribe, because `changes`\n  // gets completed by Angular when the view is destroyed.\n  lines.changes.pipe(startWith(lines)).subscribe(({length}) => {\n    setClass(element, `${prefix}-2-line`, false);\n    setClass(element, `${prefix}-3-line`, false);\n    setClass(element, `${prefix}-multi-line`, false);\n\n    if (length === 2 || length === 3) {\n      setClass(element, `${prefix}-${length}-line`, true);\n    } else if (length > 3) {\n      setClass(element, `${prefix}-multi-line`, true);\n    }\n  });\n}\n\n/** Adds or removes a class from an element. */\nfunction setClass(element: ElementRef<HTMLElement>, className: string, isAdd: boolean): void {\n  const classList = element.nativeElement.classList;\n  isAdd ? classList.add(className) : classList.remove(className);\n}\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatLine, MatCommonModule],\n  declarations: [MatLine],\n})\nexport class MatLineModule { }\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/** Possible states for a ripple element. */\nexport const enum RippleState {\n  FADING_IN, VISIBLE, FADING_OUT, HIDDEN\n}\n\nexport type RippleConfig = {\n  color?: string;\n  centered?: boolean;\n  radius?: number;\n  persistent?: boolean;\n  animation?: RippleAnimationConfig;\n  terminateOnPointerUp?: boolean;\n};\n\n/**\n * Interface that describes the configuration for the animation of a ripple.\n * There are two animation phases with different durations for the ripples.\n */\nexport interface RippleAnimationConfig {\n  /** Duration in milliseconds for the enter animation (expansion from point of contact). */\n  enterDuration?: number;\n  /** Duration in milliseconds for the exit animation (fade-out). */\n  exitDuration?: number;\n}\n\n/**\n * Reference to a previously launched ripple element.\n */\nexport class RippleRef {\n\n  /** Current state of the ripple. */\n  state: RippleState = RippleState.HIDDEN;\n\n  constructor(\n    private _renderer: {fadeOutRipple(ref: RippleRef): void},\n    /** Reference to the ripple HTML element. */\n    public element: HTMLElement,\n    /** Ripple configuration used for the ripple. */\n    public config: RippleConfig) {\n  }\n\n  /** Fades out the ripple element. */\n  fadeOut() {\n    this._renderer.fadeOutRipple(this);\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 {ElementRef, NgZone} from '@angular/core';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader} from '@angular/cdk/a11y';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {RippleRef, RippleState, RippleConfig} from './ripple-ref';\n\n/**\n * Interface that describes the target for launching ripples.\n * It defines the ripple configuration and disabled state for interaction ripples.\n * @docs-private\n */\nexport interface RippleTarget {\n  /** Configuration for ripples that are launched on pointer down. */\n  rippleConfig: RippleConfig;\n  /** Whether ripples on pointer down should be disabled. */\n  rippleDisabled: boolean;\n}\n\n\n// TODO: import these values from `@material/ripple` eventually.\n/**\n * Default ripple animation configuration for ripples without an explicit\n * animation config specified.\n */\nexport const defaultRippleAnimationConfig = {\n  enterDuration: 225,\n  exitDuration: 150\n};\n\n/**\n * Timeout for ignoring mouse events. Mouse events will be temporary ignored after touch\n * events to avoid synthetic mouse events.\n */\nconst ignoreMouseEventsTimeout = 800;\n\n/** Options that apply to all the event listeners that are bound by the ripple renderer. */\nconst passiveEventOptions = normalizePassiveListenerOptions({passive: true});\n\n/** Events that signal that the pointer is down. */\nconst pointerDownEvents = ['mousedown', 'touchstart'];\n\n/** Events that signal that the pointer is up. */\nconst pointerUpEvents = ['mouseup', 'mouseleave', 'touchend', 'touchcancel'];\n\n/**\n * Helper service that performs DOM manipulations. Not intended to be used outside this module.\n * The constructor takes a reference to the ripple directive's host element and a map of DOM\n * event handlers to be installed on the element that triggers ripple animations.\n * This will eventually become a custom renderer once Angular support exists.\n * @docs-private\n */\nexport class RippleRenderer implements EventListenerObject {\n  /** Element where the ripples are being added to. */\n  private _containerElement: HTMLElement;\n\n  /** Element which triggers the ripple elements on mouse events. */\n  private _triggerElement: HTMLElement | null;\n\n  /** Whether the pointer is currently down or not. */\n  private _isPointerDown = false;\n\n  /** Set of currently active ripple references. */\n  private _activeRipples = new Set<RippleRef>();\n\n  /** Latest non-persistent ripple that was triggered. */\n  private _mostRecentTransientRipple: RippleRef | null;\n\n  /** Time in milliseconds when the last touchstart event happened. */\n  private _lastTouchStartEvent: number;\n\n  /** Whether pointer-up event listeners have been registered. */\n  private _pointerUpEventsRegistered = false;\n\n  /**\n   * Cached dimensions of the ripple container. Set when the first\n   * ripple is shown and cleared once no more ripples are visible.\n   */\n  private _containerRect: ClientRect | null;\n\n  constructor(private _target: RippleTarget,\n              private _ngZone: NgZone,\n              elementOrElementRef: HTMLElement | ElementRef<HTMLElement>,\n              platform: Platform) {\n\n    // Only do anything if we're on the browser.\n    if (platform.isBrowser) {\n      this._containerElement = coerceElement(elementOrElementRef);\n    }\n  }\n\n  /**\n   * Fades in a ripple at the given coordinates.\n   * @param x Coordinate within the element, along the X axis at which to start the ripple.\n   * @param y Coordinate within the element, along the Y axis at which to start the ripple.\n   * @param config Extra ripple options.\n   */\n  fadeInRipple(x: number, y: number, config: RippleConfig = {}): RippleRef {\n    const containerRect = this._containerRect =\n                          this._containerRect || this._containerElement.getBoundingClientRect();\n    const animationConfig = {...defaultRippleAnimationConfig, ...config.animation};\n\n    if (config.centered) {\n      x = containerRect.left + containerRect.width / 2;\n      y = containerRect.top + containerRect.height / 2;\n    }\n\n    const radius = config.radius || distanceToFurthestCorner(x, y, containerRect);\n    const offsetX = x - containerRect.left;\n    const offsetY = y - containerRect.top;\n    const duration = animationConfig.enterDuration;\n\n    const ripple = document.createElement('div');\n    ripple.classList.add('mat-ripple-element');\n\n    ripple.style.left = `${offsetX - radius}px`;\n    ripple.style.top = `${offsetY - radius}px`;\n    ripple.style.height = `${radius * 2}px`;\n    ripple.style.width = `${radius * 2}px`;\n\n    // If a custom color has been specified, set it as inline style. If no color is\n    // set, the default color will be applied through the ripple theme styles.\n    if (config.color != null) {\n      ripple.style.backgroundColor = config.color;\n    }\n\n    ripple.style.transitionDuration = `${duration}ms`;\n\n    this._containerElement.appendChild(ripple);\n\n    // By default the browser does not recalculate the styles of dynamically created\n    // ripple elements. This is critical because then the `scale` would not animate properly.\n    enforceStyleRecalculation(ripple);\n\n    ripple.style.transform = 'scale(1)';\n\n    // Exposed reference to the ripple that will be returned.\n    const rippleRef = new RippleRef(this, ripple, config);\n\n    rippleRef.state = RippleState.FADING_IN;\n\n    // Add the ripple reference to the list of all active ripples.\n    this._activeRipples.add(rippleRef);\n\n    if (!config.persistent) {\n      this._mostRecentTransientRipple = rippleRef;\n    }\n\n    // Wait for the ripple element to be completely faded in.\n    // Once it's faded in, the ripple can be hidden immediately if the mouse is released.\n    this._runTimeoutOutsideZone(() => {\n      const isMostRecentTransientRipple = rippleRef === this._mostRecentTransientRipple;\n\n      rippleRef.state = RippleState.VISIBLE;\n\n      // When the timer runs out while the user has kept their pointer down, we want to\n      // keep only the persistent ripples and the latest transient ripple. We do this,\n      // because we don't want stacked transient ripples to appear after their enter\n      // animation has finished.\n      if (!config.persistent && (!isMostRecentTransientRipple || !this._isPointerDown)) {\n        rippleRef.fadeOut();\n      }\n    }, duration);\n\n    return rippleRef;\n  }\n\n  /** Fades out a ripple reference. */\n  fadeOutRipple(rippleRef: RippleRef) {\n    const wasActive = this._activeRipples.delete(rippleRef);\n\n    if (rippleRef === this._mostRecentTransientRipple) {\n      this._mostRecentTransientRipple = null;\n    }\n\n    // Clear out the cached bounding rect if we have no more ripples.\n    if (!this._activeRipples.size) {\n      this._containerRect = null;\n    }\n\n    // For ripples that are not active anymore, don't re-run the fade-out animation.\n    if (!wasActive) {\n      return;\n    }\n\n    const rippleEl = rippleRef.element;\n    const animationConfig = {...defaultRippleAnimationConfig, ...rippleRef.config.animation};\n\n    rippleEl.style.transitionDuration = `${animationConfig.exitDuration}ms`;\n    rippleEl.style.opacity = '0';\n    rippleRef.state = RippleState.FADING_OUT;\n\n    // Once the ripple faded out, the ripple can be safely removed from the DOM.\n    this._runTimeoutOutsideZone(() => {\n      rippleRef.state = RippleState.HIDDEN;\n      rippleEl.parentNode!.removeChild(rippleEl);\n    }, animationConfig.exitDuration);\n  }\n\n  /** Fades out all currently active ripples. */\n  fadeOutAll() {\n    this._activeRipples.forEach(ripple => ripple.fadeOut());\n  }\n\n  /** Fades out all currently active non-persistent ripples. */\n  fadeOutAllNonPersistent() {\n    this._activeRipples.forEach(ripple => {\n      if (!ripple.config.persistent) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Sets up the trigger event listeners */\n  setupTriggerEvents(elementOrElementRef: HTMLElement | ElementRef<HTMLElement>) {\n    const element = coerceElement(elementOrElementRef);\n\n    if (!element || element === this._triggerElement) {\n      return;\n    }\n\n    // Remove all previously registered event listeners from the trigger element.\n    this._removeTriggerEvents();\n\n    this._triggerElement = element;\n    this._registerEvents(pointerDownEvents);\n  }\n\n  /**\n   * Handles all registered events.\n   * @docs-private\n   */\n  handleEvent(event: Event) {\n    if (event.type === 'mousedown') {\n      this._onMousedown(event as MouseEvent);\n    } else if (event.type === 'touchstart') {\n      this._onTouchStart(event as TouchEvent);\n    } else {\n      this._onPointerUp();\n    }\n\n    // If pointer-up events haven't been registered yet, do so now.\n    // We do this on-demand in order to reduce the total number of event listeners\n    // registered by the ripples, which speeds up the rendering time for large UIs.\n    if (!this._pointerUpEventsRegistered) {\n      this._registerEvents(pointerUpEvents);\n      this._pointerUpEventsRegistered = true;\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using mouse. */\n  private _onMousedown(event: MouseEvent) {\n    // Screen readers will fire fake mouse events for space/enter. Skip launching a\n    // ripple in this case for consistency with the non-screen-reader experience.\n    const isFakeMousedown = isFakeMousedownFromScreenReader(event);\n    const isSyntheticEvent = this._lastTouchStartEvent &&\n        Date.now() < this._lastTouchStartEvent + ignoreMouseEventsTimeout;\n\n    if (!this._target.rippleDisabled && !isFakeMousedown && !isSyntheticEvent) {\n      this._isPointerDown = true;\n      this.fadeInRipple(event.clientX, event.clientY, this._target.rippleConfig);\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using touch. */\n  private _onTouchStart(event: TouchEvent) {\n    if (!this._target.rippleDisabled && !isFakeTouchstartFromScreenReader(event)) {\n      // Some browsers fire mouse events after a `touchstart` event. Those synthetic mouse\n      // events will launch a second ripple if we don't ignore mouse events for a specific\n      // time after a touchstart event.\n      this._lastTouchStartEvent = Date.now();\n      this._isPointerDown = true;\n\n      // Use `changedTouches` so we skip any touches where the user put\n      // their finger down, but used another finger to tap the element again.\n      const touches = event.changedTouches;\n\n      for (let i = 0; i < touches.length; i++) {\n        this.fadeInRipple(touches[i].clientX, touches[i].clientY, this._target.rippleConfig);\n      }\n    }\n  }\n\n  /** Function being called whenever the trigger is being released. */\n  private _onPointerUp() {\n    if (!this._isPointerDown) {\n      return;\n    }\n\n    this._isPointerDown = false;\n\n    // Fade-out all ripples that are visible and not persistent.\n    this._activeRipples.forEach(ripple => {\n      // By default, only ripples that are completely visible will fade out on pointer release.\n      // If the `terminateOnPointerUp` option is set, ripples that still fade in will also fade out.\n      const isVisible = ripple.state === RippleState.VISIBLE ||\n        ripple.config.terminateOnPointerUp && ripple.state === RippleState.FADING_IN;\n\n      if (!ripple.config.persistent && isVisible) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */\n  private _runTimeoutOutsideZone(fn: Function, delay = 0) {\n    this._ngZone.runOutsideAngular(() => setTimeout(fn, delay));\n  }\n\n  /** Registers event listeners for a given list of events. */\n  private _registerEvents(eventTypes: string[]) {\n    this._ngZone.runOutsideAngular(() => {\n      eventTypes.forEach((type) => {\n        this._triggerElement!.addEventListener(type, this, passiveEventOptions);\n      });\n    });\n  }\n\n  /** Removes previously registered event listeners from the trigger element. */\n  _removeTriggerEvents() {\n    if (this._triggerElement) {\n      pointerDownEvents.forEach((type) => {\n        this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n      });\n\n      if (this._pointerUpEventsRegistered) {\n        pointerUpEvents.forEach((type) => {\n          this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n        });\n      }\n    }\n  }\n}\n\n/** Enforces a style recalculation of a DOM element by computing its styles. */\nfunction enforceStyleRecalculation(element: HTMLElement) {\n  // Enforce a style recalculation by calling `getComputedStyle` and accessing any property.\n  // Calling `getPropertyValue` is important to let optimizers know that this is not a noop.\n  // See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n  window.getComputedStyle(element).getPropertyValue('opacity');\n}\n\n/**\n * Returns the distance from the point (x, y) to the furthest corner of a rectangle.\n */\nfunction distanceToFurthestCorner(x: number, y: number, rect: ClientRect) {\n  const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\n  const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\n  return Math.sqrt(distX * distX + distY * distY);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n} from '@angular/core';\nimport {RippleAnimationConfig, RippleConfig, RippleRef} from './ripple-ref';\nimport {RippleRenderer, RippleTarget} from './ripple-renderer';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/** Configurable options for `matRipple`. */\nexport interface RippleGlobalOptions {\n  /**\n   * Whether ripples should be disabled. Ripples can be still launched manually by using\n   * the `launch()` method. Therefore focus indicators will still show up.\n   */\n  disabled?: boolean;\n\n  /**\n   * Default configuration for the animation duration of the ripples. There are two phases with\n   * different durations for the ripples: `enter` and `leave`. The durations will be overwritten\n   * by the value of `matRippleAnimation` or if the `NoopAnimationsModule` is included.\n   */\n  animation?: RippleAnimationConfig;\n\n  /**\n   * Whether ripples should start fading out immediately after the mouse or touch is released. By\n   * default, ripples will wait for the enter animation to complete and for mouse or touch release.\n   */\n  terminateOnPointerUp?: boolean;\n}\n\n/** Injection token that can be used to specify the global ripple options. */\nexport const MAT_RIPPLE_GLOBAL_OPTIONS =\n    new InjectionToken<RippleGlobalOptions>('mat-ripple-global-options');\n\n@Directive({\n  selector: '[mat-ripple], [matRipple]',\n  exportAs: 'matRipple',\n  host: {\n    'class': 'mat-ripple',\n    '[class.mat-ripple-unbounded]': 'unbounded'\n  }\n})\nexport class MatRipple implements OnInit, OnDestroy, RippleTarget {\n\n  /** Custom color for all ripples. */\n  @Input('matRippleColor') color: string;\n\n  /** Whether the ripples should be visible outside the component's bounds. */\n  @Input('matRippleUnbounded') unbounded: boolean;\n\n  /**\n   * Whether the ripple always originates from the center of the host element's bounds, rather\n   * than originating from the location of the click event.\n   */\n  @Input('matRippleCentered') centered: boolean;\n\n  /**\n   * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\n   * will be the distance from the center of the ripple to the furthest corner of the host element's\n   * bounding rectangle.\n   */\n  @Input('matRippleRadius') radius: number = 0;\n\n  /**\n   * Configuration for the ripple animation. Allows modifying the enter and exit animation\n   * duration of the ripples. The animation durations will be overwritten if the\n   * `NoopAnimationsModule` is being used.\n   */\n  @Input('matRippleAnimation') animation: RippleAnimationConfig;\n\n  /**\n   * Whether click events will not trigger the ripple. Ripples can be still launched manually\n   * by using the `launch()` method.\n   */\n  @Input('matRippleDisabled')\n  get disabled() { return this._disabled; }\n  set disabled(value: boolean) {\n    if (value) {\n      this.fadeOutAllNonPersistent();\n    }\n    this._disabled = value;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _disabled: boolean = false;\n\n  /**\n   * The element that triggers the ripple when click events are received.\n   * Defaults to the directive's host element.\n   */\n  @Input('matRippleTrigger')\n  get trigger() { return this._trigger || this._elementRef.nativeElement; }\n  set trigger(trigger: HTMLElement) {\n    this._trigger = trigger;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _trigger: HTMLElement;\n\n  /** Renderer for the ripple DOM manipulations. */\n  private _rippleRenderer: RippleRenderer;\n\n  /** Options that are set globally for all ripples. */\n  private _globalOptions: RippleGlobalOptions;\n\n  /** Whether ripple directive is initialized and the input bindings are set. */\n  private _isInitialized: boolean = false;\n\n  constructor(private _elementRef: ElementRef<HTMLElement>,\n              ngZone: NgZone,\n              platform: Platform,\n              @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS) globalOptions?: RippleGlobalOptions,\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n    this._globalOptions = globalOptions || {};\n    this._rippleRenderer = new RippleRenderer(this, ngZone, _elementRef, platform);\n  }\n\n  ngOnInit() {\n    this._isInitialized = true;\n    this._setupTriggerEventsIfEnabled();\n  }\n\n  ngOnDestroy() {\n    this._rippleRenderer._removeTriggerEvents();\n  }\n\n  /** Fades out all currently showing ripple elements. */\n  fadeOutAll() {\n    this._rippleRenderer.fadeOutAll();\n  }\n\n  /** Fades out all currently showing non-persistent ripple elements. */\n  fadeOutAllNonPersistent() {\n    this._rippleRenderer.fadeOutAllNonPersistent();\n  }\n\n  /**\n   * Ripple configuration from the directive's input values.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleConfig(): RippleConfig {\n    return {\n      centered: this.centered,\n      radius: this.radius,\n      color: this.color,\n      animation: {\n        ...this._globalOptions.animation,\n        ...(this._animationMode === 'NoopAnimations' ? {enterDuration: 0, exitDuration: 0} : {}),\n        ...this.animation\n      },\n      terminateOnPointerUp: this._globalOptions.terminateOnPointerUp,\n    };\n  }\n\n  /**\n   * Whether ripples on pointer-down are disabled or not.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleDisabled(): boolean {\n    return this.disabled || !!this._globalOptions.disabled;\n  }\n\n  /** Sets up the trigger event listeners if ripples are enabled. */\n  private _setupTriggerEventsIfEnabled() {\n    if (!this.disabled && this._isInitialized) {\n      this._rippleRenderer.setupTriggerEvents(this.trigger);\n    }\n  }\n\n  /**\n   * Launches a manual ripple using the specified ripple configuration.\n   * @param config Configuration for the manual ripple.\n   */\n  launch(config: RippleConfig): RippleRef;\n\n  /**\n   * Launches a manual ripple at the specified coordinates relative to the viewport.\n   * @param x Coordinate along the X axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param y Coordinate along the Y axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param config Optional ripple configuration for the manual ripple.\n   */\n  launch(x: number, y: number, config?: RippleConfig): RippleRef;\n\n  /** Launches a manual ripple at the specified coordinated or just by the ripple config. */\n  launch(configOrX: number | RippleConfig, y: number = 0, config?: RippleConfig): RippleRef {\n    if (typeof configOrX === 'number') {\n      return this._rippleRenderer.fadeInRipple(configOrX, y, {...this.rippleConfig, ...config});\n    } else {\n      return this._rippleRenderer.fadeInRipple(0, 0, {...this.rippleConfig, ...configOrX});\n    }\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 {NgModule} from '@angular/core';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatRipple} from './ripple';\n\nexport * from './ripple';\nexport * from './ripple-ref';\nexport * from './ripple-renderer';\n\n@NgModule({\n  imports: [MatCommonModule, PlatformModule],\n  exports: [MatRipple, MatCommonModule],\n  declarations: [MatRipple],\n})\nexport class MatRippleModule {}\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 {\n  Component,\n  ViewEncapsulation,\n  Input,\n  ChangeDetectionStrategy,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/**\n * Possible states for a pseudo checkbox.\n * @docs-private\n */\nexport type MatPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate';\n\n/**\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\n * Note that theming is meant to be handled by the parent element, e.g.\n * `mat-primary .mat-pseudo-checkbox`.\n *\n * Note that this component will be completely invisible to screen-reader users. This is *not*\n * interchangeable with `<mat-checkbox>` and should *not* be used if the user would directly\n * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail\n * of more complex components that appropriately handle selected / checked state.\n * @docs-private\n */\n@Component({\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'mat-pseudo-checkbox',\n  styleUrls: ['pseudo-checkbox.css'],\n  template: '',\n  host: {\n    'class': 'mat-pseudo-checkbox',\n    '[class.mat-pseudo-checkbox-indeterminate]': 'state === \"indeterminate\"',\n    '[class.mat-pseudo-checkbox-checked]': 'state === \"checked\"',\n    '[class.mat-pseudo-checkbox-disabled]': 'disabled',\n    '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n  },\n})\nexport class MatPseudoCheckbox {\n  /** Display state of the checkbox. */\n  @Input() state: MatPseudoCheckboxState = 'unchecked';\n\n  /** Whether the checkbox is disabled. */\n  @Input() disabled: boolean = false;\n\n  constructor(@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) { }\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 {NgModule} from '@angular/core';\nimport {MatPseudoCheckbox} from './pseudo-checkbox/pseudo-checkbox';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatPseudoCheckbox],\n  declarations: [MatPseudoCheckbox]\n})\nexport class MatPseudoCheckboxModule { }\n\n\nexport * from './pseudo-checkbox/pseudo-checkbox';\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 {InjectionToken} from '@angular/core';\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n * @docs-private\n */\nexport interface MatOptionParentComponent {\n  disableRipple?: boolean;\n  multiple?: boolean;\n  inertGroups?: boolean;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const MAT_OPTION_PARENT_COMPONENT =\n    new InjectionToken<MatOptionParentComponent>('MAT_OPTION_PARENT_COMPONENT');\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 {BooleanInput} from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  InjectionToken,\n  Input,\n  ViewEncapsulation,\n  Directive, Inject, Optional\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '../common-behaviors/disabled';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n// Notes on the accessibility pattern used for `mat-optgroup`.\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\n// pointing to the label. This works for `mat-select`, but it seems to hit a bug for autocomplete\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\n// VoiceOver on Safari won't read it out.\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\n// inside an invisible element in the option. This is sub-optimal, because the screen reader will\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\n// the user enters a new group. The following alternate approaches were considered:\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\n//    when the text will be read out so sometimes it comes in too late or never if the user\n//    navigates quickly.\n// 2. `<mat-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\n//    won't read out the description at all.\n// 3. `<mat-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\n//     doesn't read out the text at all. Furthermore, on\n\n// Boilerplate for applying mixins to MatOptgroup.\n/** @docs-private */\nconst _MatOptgroupMixinBase = mixinDisabled(class {});\n\n// Counter for unique group ids.\nlet _uniqueOptgroupIdCounter = 0;\n\n@Directive()\nexport class _MatOptgroupBase extends _MatOptgroupMixinBase implements CanDisable {\n  /** Label for the option group. */\n  @Input() label: string;\n\n  /** Unique id for the underlying label. */\n  _labelId: string = `mat-optgroup-label-${_uniqueOptgroupIdCounter++}`;\n\n  /** Whether the group is in inert a11y mode. */\n  _inert: boolean;\n\n  constructor(@Inject(MAT_OPTION_PARENT_COMPONENT) @Optional() parent?: MatOptionParentComponent) {\n    super();\n    this._inert = parent?.inertGroups ?? false;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Injection token that can be used to reference instances of `MatOptgroup`. It serves as\n * alternative token to the actual `MatOptgroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_OPTGROUP = new InjectionToken<MatOptgroup>('MatOptgroup');\n\n/**\n * Component that is used to group instances of `mat-option`.\n */\n@Component({\n  selector: 'mat-optgroup',\n  exportAs: 'matOptgroup',\n  templateUrl: 'optgroup.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  styleUrls: ['optgroup.css'],\n  host: {\n    'class': 'mat-optgroup',\n    '[attr.role]': '_inert ? null : \"group\"',\n    '[attr.aria-disabled]': '_inert ? null : disabled.toString()',\n    '[attr.aria-labelledby]': '_inert ? null : _labelId',\n    '[class.mat-optgroup-disabled]': 'disabled',\n  },\n  providers: [{provide: MAT_OPTGROUP, useExisting: MatOptgroup}],\n})\nexport class MatOptgroup extends _MatOptgroupBase {\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 {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n  Directive,\n} from '@angular/core';\nimport {FocusOptions, FocusableOption, FocusOrigin} from '@angular/cdk/a11y';\nimport {Subject} from 'rxjs';\nimport {MatOptgroup, _MatOptgroupBase, MAT_OPTGROUP} from './optgroup';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n/**\n * Option IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueIdCounter = 0;\n\n/** Event object emitted by MatOption when selected or deselected. */\nexport class MatOptionSelectionChange {\n  constructor(\n    /** Reference to the option that emitted the event. */\n    public source: _MatOptionBase,\n    /** Whether the change in the option's value was a result of a user action. */\n    public isUserInput = false) { }\n}\n\n@Directive()\nexport class _MatOptionBase implements FocusableOption, AfterViewChecked, OnDestroy {\n  private _selected = false;\n  private _active = false;\n  private _disabled = false;\n  private _mostRecentViewValue = '';\n\n  /** Whether the wrapping component is in multiple selection mode. */\n  get multiple() { return this._parent && this._parent.multiple; }\n\n  /** Whether or not the option is currently selected. */\n  get selected(): boolean { return this._selected; }\n\n  /** The form value of the option. */\n  @Input() value: any;\n\n  /** The unique ID of the option. */\n  @Input() id: string = `mat-option-${_uniqueIdCounter++}`;\n\n  /** Whether the option is disabled. */\n  @Input()\n  get disabled() { return (this.group && this.group.disabled) || this._disabled; }\n  set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n  /** Whether ripples for the option are disabled. */\n  get disableRipple() { return this._parent && this._parent.disableRipple; }\n\n  /** Event emitted when the option is selected or deselected. */\n  // tslint:disable-next-line:no-output-on-prefix\n  @Output() readonly onSelectionChange = new EventEmitter<MatOptionSelectionChange>();\n\n  /** Emits when the state of the option changes and any parents have to be notified. */\n  readonly _stateChanges = new Subject<void>();\n\n  constructor(\n    private _element: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _parent: MatOptionParentComponent,\n    readonly group: _MatOptgroupBase) {}\n\n  /**\n   * Whether or not the option is currently active and ready to be selected.\n   * An active option displays styles as if it is focused, but the\n   * focus is actually retained somewhere else. This comes in handy\n   * for components like autocomplete where focus must remain on the input.\n   */\n  get active(): boolean {\n    return this._active;\n  }\n\n  /**\n   * The displayed value of the option. It is necessary to show the selected option in the\n   * select's trigger.\n   */\n  get viewValue(): string {\n    // TODO(kara): Add input property alternative for node envs.\n    return (this._getHostElement().textContent || '').trim();\n  }\n\n  /** Selects the option. */\n  select(): void {\n    if (!this._selected) {\n      this._selected = true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Deselects the option. */\n  deselect(): void {\n    if (this._selected) {\n      this._selected = false;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Sets focus onto this option. */\n  focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n    // Note that we aren't using `_origin`, but we need to keep it because some internal consumers\n    // use `MatOption` in a `FocusKeyManager` and we need it to match `FocusableOption`.\n    const element = this._getHostElement();\n\n    if (typeof element.focus === 'function') {\n      element.focus(options);\n    }\n  }\n\n  /**\n   * This method sets display styles on the option to make it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setActiveStyles(): void {\n    if (!this._active) {\n      this._active = true;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * This method removes display styles on the option that made it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setInactiveStyles(): void {\n    if (this._active) {\n      this._active = false;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /** Gets the label to be used when determining whether the option should be focused. */\n  getLabel(): string {\n    return this.viewValue;\n  }\n\n  /** Ensures the option is selected when activated from the keyboard. */\n  _handleKeydown(event: KeyboardEvent): void {\n    if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\n      this._selectViaInteraction();\n\n      // Prevent the page from scrolling down and form submits.\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * `Selects the option while indicating the selection came from the user. Used to\n   * determine if the select's view -> model callback should be invoked.`\n   */\n  _selectViaInteraction(): void {\n    if (!this.disabled) {\n      this._selected = this.multiple ? !this._selected : true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent(true);\n    }\n  }\n\n  /**\n   * Gets the `aria-selected` value for the option. We explicitly omit the `aria-selected`\n   * attribute from single-selection, unselected options. Including the `aria-selected=\"false\"`\n   * attributes adds a significant amount of noise to screen-reader users without providing useful\n   * information.\n   */\n  _getAriaSelected(): boolean|null {\n    return this.selected || (this.multiple ? false : null);\n  }\n\n  /** Returns the correct tabindex for the option depending on disabled state. */\n  _getTabIndex(): string {\n    return this.disabled ? '-1' : '0';\n  }\n\n  /** Gets the host DOM element. */\n  _getHostElement(): HTMLElement {\n    return this._element.nativeElement;\n  }\n\n  ngAfterViewChecked() {\n    // Since parent components could be using the option's label to display the selected values\n    // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed\n    // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n    // relatively cheap, however we still limit them only to selected options in order to avoid\n    // hitting the DOM too often.\n    if (this._selected) {\n      const viewValue = this.viewValue;\n\n      if (viewValue !== this._mostRecentViewValue) {\n        this._mostRecentViewValue = viewValue;\n        this._stateChanges.next();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  /** Emits the selection change event. */\n  private _emitSelectionChangeEvent(isUserInput = false): void {\n    this.onSelectionChange.emit(new MatOptionSelectionChange(this, isUserInput));\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Single option inside of a `<mat-select>` element.\n */\n@Component({\n  selector: 'mat-option',\n  exportAs: 'matOption',\n  host: {\n    'role': 'option',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[class.mat-selected]': 'selected',\n    '[class.mat-option-multiple]': 'multiple',\n    '[class.mat-active]': 'active',\n    '[id]': 'id',\n    '[attr.aria-selected]': '_getAriaSelected()',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[class.mat-option-disabled]': 'disabled',\n    '(click)': '_selectViaInteraction()',\n    '(keydown)': '_handleKeydown($event)',\n    'class': 'mat-option mat-focus-indicator',\n  },\n  styleUrls: ['option.css'],\n  templateUrl: 'option.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatOption extends _MatOptionBase {\n  constructor(\n    element: ElementRef<HTMLElement>,\n    changeDetectorRef: ChangeDetectorRef,\n    @Optional() @Inject(MAT_OPTION_PARENT_COMPONENT) parent: MatOptionParentComponent,\n    @Optional() @Inject(MAT_OPTGROUP) group: MatOptgroup) {\n    super(element, changeDetectorRef, parent, group);\n  }\n}\n\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param optionIndex Index of the option at which to start counting.\n * @param options Flat list of all of the options.\n * @param optionGroups Flat list of all of the option groups.\n * @docs-private\n */\nexport function _countGroupLabelsBeforeOption(optionIndex: number, options: QueryList<MatOption>,\n  optionGroups: QueryList<MatOptgroup>): number {\n\n  if (optionGroups.length) {\n    let optionsArray = options.toArray();\n    let groups = optionGroups.toArray();\n    let groupCounter = 0;\n\n    for (let i = 0; i < optionIndex + 1; i++) {\n      if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n        groupCounter++;\n      }\n    }\n\n    return groupCounter;\n  }\n\n  return 0;\n}\n\n/**\n * Determines the position to which to scroll a panel in order for an option to be into view.\n * @param optionOffset Offset of the option from the top of the panel.\n * @param optionHeight Height of the options.\n * @param currentScrollPosition Current scroll position of the panel.\n * @param panelHeight Height of the panel.\n * @docs-private\n */\nexport function _getOptionScrollPosition(optionOffset: number, optionHeight: number,\n    currentScrollPosition: number, panelHeight: number): number {\n  if (optionOffset < currentScrollPosition) {\n    return optionOffset;\n  }\n\n  if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\n    return Math.max(0, optionOffset - panelHeight + optionHeight);\n  }\n\n  return currentScrollPosition;\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 {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatRippleModule} from '../ripple/index';\nimport {MatPseudoCheckboxModule} from '../selection/index';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatOption} from './option';\nimport {MatOptgroup} from './optgroup';\n\n\n@NgModule({\n  imports: [MatRippleModule, CommonModule, MatCommonModule, MatPseudoCheckboxModule],\n  exports: [MatOption, MatOptgroup],\n  declarations: [MatOption, MatOptgroup]\n})\nexport class MatOptionModule {}\n\n\nexport * from './option';\nexport * from './optgroup';\nexport * from './option-parent';\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 './version';\nexport * from './animation/animation';\nexport * from './common-behaviors/index';\nexport * from './datetime/index';\nexport * from './error/error-options';\nexport * from './line/line';\nexport * from './option/index';\nexport * from './ripple/index';\nexport * from './selection/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MATERIAL_SANITY_CHECKS_FACTORY as ɵangular_material_src_material_core_core_a} from './common-behaviors/common-module';"],"names":["VERSION","CDK_VERSION"],"mappings":"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"}
+{"version":3,"file":"core.js","sources":["../../../../../../src/material/core/version.ts","../../../../../../src/material/core/animation/animation.ts","../../../../../../src/material/core/common-behaviors/common-module.ts","../../../../../../src/material/core/common-behaviors/disabled.ts","../../../../../../src/material/core/common-behaviors/color.ts","../../../../../../src/material/core/common-behaviors/disable-ripple.ts","../../../../../../src/material/core/common-behaviors/tabindex.ts","../../../../../../src/material/core/common-behaviors/error-state.ts","../../../../../../src/material/core/common-behaviors/initialized.ts","../../../../../../src/material/core/common-behaviors/index.ts","../../../../../../src/material/core/datetime/date-adapter.ts","../../../../../../src/material/core/datetime/date-formats.ts","../../../../../../src/material/core/datetime/native-date-adapter.ts","../../../../../../src/material/core/datetime/native-date-formats.ts","../../../../../../src/material/core/datetime/index.ts","../../../../../../src/material/core/error/error-options.ts","../../../../../../src/material/core/line/line.ts","../../../../../../src/material/core/ripple/ripple-ref.ts","../../../../../../src/material/core/ripple/ripple-renderer.ts","../../../../../../src/material/core/ripple/ripple.ts","../../../../../../src/material/core/ripple/index.ts","../../../../../../src/material/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../../../../../src/material/core/selection/index.ts","../../../../../../src/material/core/option/option-parent.ts","../../../../../../src/material/core/option/optgroup.ts","../../../../../../src/material/core/option/option.ts","../../../../../../src/material/core/option/index.ts","../../../../../../src/material/core/public-api.ts","../../../../../../src/material/core/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 {Version} from '@angular/core';\n\n/** Current version of Angular Material. */\nexport const VERSION = new Version('12.2.13');\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 class AnimationCurves {\n  static STANDARD_CURVE = 'cubic-bezier(0.4,0.0,0.2,1)';\n  static DECELERATION_CURVE = 'cubic-bezier(0.0,0.0,0.2,1)';\n  static ACCELERATION_CURVE = 'cubic-bezier(0.4,0.0,1,1)';\n  static SHARP_CURVE = 'cubic-bezier(0.4,0.0,0.6,1)';\n}\n\n\n/** @docs-private */\nexport class AnimationDurations {\n  static COMPLEX = '375ms';\n  static ENTERING = '225ms';\n  static EXITING = '195ms';\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 {HighContrastModeDetector} from '@angular/cdk/a11y';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {Inject, InjectionToken, isDevMode, NgModule, Optional, Version} from '@angular/core';\nimport {VERSION as CDK_VERSION} from '@angular/cdk';\nimport {DOCUMENT} from '@angular/common';\nimport {_isTestEnvironment} from '@angular/cdk/platform';\n\n// Private version constant to circumvent test/build issues,\n// i.e. avoid core to depend on the @angular/material primary entry-point\n// Can be removed once the Material primary entry-point no longer\n// re-exports all secondary entry-points\nconst VERSION = new Version('12.2.13');\n\n/** @docs-private */\nexport function MATERIAL_SANITY_CHECKS_FACTORY(): SanityChecks {\n  return true;\n}\n\n/** Injection token that configures whether the Material sanity checks are enabled. */\nexport const MATERIAL_SANITY_CHECKS = new InjectionToken<SanityChecks>('mat-sanity-checks', {\n  providedIn: 'root',\n  factory: MATERIAL_SANITY_CHECKS_FACTORY,\n});\n\n/**\n * Possible sanity checks that can be enabled. If set to\n * true/false, all checks will be enabled/disabled.\n */\nexport type SanityChecks = boolean | GranularSanityChecks;\n\n/** Object that can be used to configure the sanity checks granularly. */\nexport interface GranularSanityChecks {\n  doctype: boolean;\n  theme: boolean;\n  version: boolean;\n}\n\n/**\n * Module that captures anything that should be loaded and/or run for *all* Angular Material\n * components. This includes Bidi, etc.\n *\n * This module should be imported to each top-level component module (e.g., MatTabsModule).\n */\n@NgModule({\n  imports: [BidiModule],\n  exports: [BidiModule],\n})\nexport class MatCommonModule {\n  /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */\n  private _hasDoneGlobalChecks = false;\n\n  /** Configured sanity checks. */\n  private _sanityChecks: SanityChecks;\n\n  /** Used to reference correct document/window */\n  protected _document: Document;\n\n  constructor(\n      highContrastModeDetector: HighContrastModeDetector,\n      @Optional() @Inject(MATERIAL_SANITY_CHECKS) sanityChecks: any,\n      @Inject(DOCUMENT) document: any) {\n    this._document = document;\n\n    // While A11yModule also does this, we repeat it here to avoid importing A11yModule\n    // in MatCommonModule.\n    highContrastModeDetector._applyBodyHighContrastModeCssClasses();\n\n    // Note that `_sanityChecks` is typed to `any`, because AoT\n    // throws an error if we use the `SanityChecks` type directly.\n    this._sanityChecks = sanityChecks;\n\n    if (!this._hasDoneGlobalChecks) {\n      this._checkDoctypeIsDefined();\n      this._checkThemeIsPresent();\n      this._checkCdkVersionMatch();\n      this._hasDoneGlobalChecks = true;\n    }\n  }\n\n  /** Gets whether a specific sanity check is enabled. */\n  private _checkIsEnabled(name: keyof GranularSanityChecks): boolean {\n    // TODO(crisbeto): we can't use `ngDevMode` here yet, because ViewEngine apps might not support\n    // it. Since these checks can have performance implications and they aren't tree shakeable\n    // in their current form, we can leave the `isDevMode` check in for now.\n    // tslint:disable-next-line:ban\n    if (!isDevMode() || _isTestEnvironment()) {\n      return false;\n    }\n\n    if (typeof this._sanityChecks === 'boolean') {\n      return this._sanityChecks;\n    }\n\n    return !!this._sanityChecks[name];\n  }\n\n  private _checkDoctypeIsDefined(): void {\n    if (this._checkIsEnabled('doctype') && !this._document.doctype) {\n      console.warn(\n        'Current document does not have a doctype. This may cause ' +\n        'some Angular Material components not to behave as expected.'\n      );\n    }\n  }\n\n  private _checkThemeIsPresent(): void {\n    // We need to assert that the `body` is defined, because these checks run very early\n    // and the `body` won't be defined if the consumer put their scripts in the `head`.\n    if (!this._checkIsEnabled('theme') || !this._document.body ||\n        typeof getComputedStyle !== 'function') {\n      return;\n    }\n\n    const testElement = this._document.createElement('div');\n\n    testElement.classList.add('mat-theme-loaded-marker');\n    this._document.body.appendChild(testElement);\n\n    const computedStyle = getComputedStyle(testElement);\n\n    // In some situations the computed style of the test element can be null. For example in\n    // Firefox, the computed style is null if an application is running inside of a hidden iframe.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    if (computedStyle && computedStyle.display !== 'none') {\n      console.warn(\n        'Could not find Angular Material core theme. Most Material ' +\n        'components may not work as expected. For more info refer ' +\n        'to the theming guide: https://material.angular.io/guide/theming'\n      );\n    }\n\n    this._document.body.removeChild(testElement);\n  }\n\n  /** Checks whether the material version matches the cdk version */\n  private _checkCdkVersionMatch(): void {\n    if (this._checkIsEnabled('version') && VERSION.full !== CDK_VERSION.full) {\n      console.warn(\n          'The Angular Material version (' + VERSION.full + ') does not match ' +\n          'the Angular CDK version (' + CDK_VERSION.full + ').\\n' +\n          'Please ensure the versions of these two packages exactly match.'\n      );\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 {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisable {\n  /** Whether the component is disabled. */\n  disabled: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableCtor = Constructor<CanDisable> & AbstractConstructor<CanDisable>;\n\n/** Mixin to augment a directive with a `disabled` property. */\nexport function mixinDisabled<T extends AbstractConstructor<{}>>(base: T): CanDisableCtor & T;\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): CanDisableCtor & T {\n  return class extends base {\n    private _disabled: boolean = false;\n\n    get disabled() { return this._disabled; }\n    set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\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 {AbstractConstructor, Constructor} from './constructor';\nimport {ElementRef} from '@angular/core';\n\n/** @docs-private */\nexport interface CanColor {\n  /** Theme color palette for the component. */\n  color: ThemePalette;\n\n  /** Default color to fall back to if no value is set. */\n  defaultColor: ThemePalette | undefined;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanColorCtor = Constructor<CanColor> & AbstractConstructor<CanColor>;\n\n/** @docs-private */\nexport interface HasElementRef {\n  _elementRef: ElementRef;\n}\n\n/** Possible color palette values. */\nexport type ThemePalette = 'primary' | 'accent' | 'warn' | undefined;\n\n/** Mixin to augment a directive with a `color` property. */\nexport function mixinColor<T extends AbstractConstructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T;\nexport function mixinColor<T extends Constructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T {\n  return class extends base {\n    private _color: ThemePalette;\n    defaultColor = defaultColor;\n\n    get color(): ThemePalette { return this._color; }\n    set color(value: ThemePalette) {\n      const colorPalette = value || this.defaultColor;\n\n      if (colorPalette !== this._color) {\n        if (this._color) {\n          this._elementRef.nativeElement.classList.remove(`mat-${this._color}`);\n        }\n        if (colorPalette) {\n          this._elementRef.nativeElement.classList.add(`mat-${colorPalette}`);\n        }\n\n        this._color = colorPalette;\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n\n      // Set the default color that can be specified from the mixin.\n      this.color = defaultColor;\n    }\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 {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisableRipple {\n  /** Whether ripples are disabled. */\n  disableRipple: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableRippleCtor = Constructor<CanDisableRipple> &\n                                   AbstractConstructor<CanDisableRipple>;\n\n/** Mixin to augment a directive with a `disableRipple` property. */\nexport function mixinDisableRipple<T extends AbstractConstructor<{}>>(base: T):\n  CanDisableRippleCtor & T;\nexport function mixinDisableRipple<T extends Constructor<{}>>(base: T): CanDisableRippleCtor & T {\n  return class extends base {\n    private _disableRipple: boolean = false;\n\n    /** Whether the ripple effect is disabled or not. */\n    get disableRipple() { return this._disableRipple; }\n    set disableRipple(value: any) { this._disableRipple = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\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 {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Constructor, AbstractConstructor} from './constructor';\nimport {CanDisable} from './disabled';\n\n\n/** @docs-private */\nexport interface HasTabIndex {\n  /** Tabindex of the component. */\n  tabIndex: number;\n\n  /** Tabindex to which to fall back to if no value is set. */\n  defaultTabIndex: number;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasTabIndexCtor = Constructor<HasTabIndex> & AbstractConstructor<HasTabIndex>;\n\n/** Mixin to augment a directive with a `tabIndex` property. */\nexport function mixinTabIndex<T extends AbstractConstructor<CanDisable>>(base: T,\n  defaultTabIndex?: number): HasTabIndexCtor & T;\nexport function mixinTabIndex<T extends Constructor<CanDisable>>(\n  base: T, defaultTabIndex = 0): HasTabIndexCtor & T {\n  return class extends base implements HasTabIndex {\n    private _tabIndex: number = defaultTabIndex;\n    defaultTabIndex = defaultTabIndex;\n\n    get tabIndex(): number { return this.disabled ? -1 : this._tabIndex; }\n    set tabIndex(value: number) {\n      // If the specified tabIndex value is null or undefined, fall back to the default value.\n      this._tabIndex = value != null ? coerceNumberProperty(value) : this.defaultTabIndex;\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\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 {FormControl, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {ErrorStateMatcher} from '../error/error-options';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n\n/** @docs-private */\nexport interface CanUpdateErrorState {\n  /** Emits whenever the component state changes. */\n  readonly stateChanges: Subject<void>;\n  /** Updates the error state based on the provided error state matcher. */\n  updateErrorState(): void;\n  /** Whether the component is in an error state. */\n  errorState: boolean;\n  /** An object used to control the error state of the component. */\n  errorStateMatcher: ErrorStateMatcher;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanUpdateErrorStateCtor = Constructor<CanUpdateErrorState> &\n                                      AbstractConstructor<CanUpdateErrorState>;\n\n/** @docs-private */\nexport interface HasErrorState {\n  _parentFormGroup: FormGroupDirective;\n  _parentForm: NgForm;\n  _defaultErrorStateMatcher: ErrorStateMatcher;\n  ngControl: NgControl;\n}\n\n/**\n * Mixin to augment a directive with updateErrorState method.\n * For component with `errorState` and need to update `errorState`.\n */\nexport function mixinErrorState<T extends AbstractConstructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T;\nexport function mixinErrorState<T extends Constructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T {\n  return class extends base {\n    // This class member exists as an interop with `MatFormFieldControl` which expects\n    // a public `stateChanges` observable to emit whenever the form field should be updated.\n    // The description is not specifically mentioning the error state, as classes using this\n    // mixin can/should emit an event in other cases too.\n    /** Emits whenever the component state changes. */\n    readonly stateChanges = new Subject<void>();\n\n    /** Whether the component is in an error state. */\n    errorState: boolean = false;\n\n    /** An object used to control the error state of the component. */\n    errorStateMatcher: ErrorStateMatcher;\n\n    /** Updates the error state based on the provided error state matcher. */\n    updateErrorState() {\n      const oldState = this.errorState;\n      const parent = this._parentFormGroup || this._parentForm;\n      const matcher = this.errorStateMatcher || this._defaultErrorStateMatcher;\n      const control = this.ngControl ? this.ngControl.control as FormControl : null;\n      const newState = matcher.isErrorState(control, parent);\n\n      if (newState !== oldState) {\n        this.errorState = newState;\n        this.stateChanges.next();\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\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, Subscriber} from 'rxjs';\nimport {Constructor} from './constructor';\n\n\n/**\n * Mixin that adds an initialized property to a directive which, when subscribed to, will emit a\n * value once markInitialized has been called, which should be done during the ngOnInit function.\n * If the subscription is made after it has already been marked as initialized, then it will trigger\n * an emit immediately.\n * @docs-private\n */\nexport interface HasInitialized {\n  /** Stream that emits once during the directive/component's ngOnInit. */\n  initialized: Observable<void>;\n\n  /**\n   * Sets the state as initialized and must be called during ngOnInit to notify subscribers that\n   * the directive has been initialized.\n   * @docs-private\n   */\n  _markInitialized: () => void;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasInitializedCtor = Constructor<HasInitialized>;\n\n/** Mixin to augment a directive with an initialized property that will emits when ngOnInit ends. */\nexport function mixinInitialized<T extends Constructor<{}>>(base: T):\n    HasInitializedCtor & T {\n  return class extends base {\n    /** Whether this directive has been marked as initialized. */\n    _isInitialized = false;\n\n    /**\n     * List of subscribers that subscribed before the directive was initialized. Should be notified\n     * during _markInitialized. Set to null after pending subscribers are notified, and should\n     * not expect to be populated after.\n     */\n    _pendingSubscribers: Subscriber<void>[] | null = [];\n\n    /**\n     * Observable stream that emits when the directive initializes. If already initialized, the\n     * subscriber is stored to be notified once _markInitialized is called.\n     */\n    initialized = new Observable<void>(subscriber => {\n      // If initialized, immediately notify the subscriber. Otherwise store the subscriber to notify\n      // when _markInitialized is called.\n      if (this._isInitialized) {\n        this._notifySubscriber(subscriber);\n      } else {\n        this._pendingSubscribers!.push(subscriber);\n      }\n    });\n\n    constructor(...args: any[]) { super(...args); }\n\n    /**\n     * Marks the state as initialized and notifies pending subscribers. Should be called at the end\n     * of ngOnInit.\n     * @docs-private\n     */\n    _markInitialized(): void {\n      if (this._isInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw Error('This directive has already been marked as initialized and ' +\n            'should not be called twice.');\n      }\n\n      this._isInitialized = true;\n\n      this._pendingSubscribers!.forEach(this._notifySubscriber);\n      this._pendingSubscribers = null;\n    }\n\n    /** Emits and completes the subscriber stream (should only emit once). */\n    _notifySubscriber(subscriber: Subscriber<void>): void {\n      subscriber.next();\n      subscriber.complete();\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\nexport {\n  MatCommonModule,\n  MATERIAL_SANITY_CHECKS,\n  SanityChecks,\n  GranularSanityChecks,\n} from './common-module';\nexport {CanDisable, CanDisableCtor, mixinDisabled} from './disabled';\nexport {CanColor, CanColorCtor, mixinColor, ThemePalette} from './color';\nexport {CanDisableRipple, CanDisableRippleCtor, mixinDisableRipple} from './disable-ripple';\nexport {HasTabIndex, HasTabIndexCtor, mixinTabIndex} from './tabindex';\nexport {CanUpdateErrorState, CanUpdateErrorStateCtor, mixinErrorState} from './error-state';\nexport {HasInitialized, HasInitializedCtor, mixinInitialized} from './initialized';\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 {inject, InjectionToken, LOCALE_ID} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n/** InjectionToken for datepicker that can be used to override default locale code. */\nexport const MAT_DATE_LOCALE = new InjectionToken<string>('MAT_DATE_LOCALE', {\n  providedIn: 'root',\n  factory: MAT_DATE_LOCALE_FACTORY,\n});\n\n/** @docs-private */\nexport function MAT_DATE_LOCALE_FACTORY(): string {\n  return inject(LOCALE_ID);\n}\n\n/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\nexport abstract class DateAdapter<D> {\n  /** The locale to use for all dates. */\n  protected locale: any;\n  protected readonly _localeChanges = new Subject<void>();\n\n  /** A stream that emits when the locale changes. */\n  readonly localeChanges: Observable<void> = this._localeChanges;\n\n  /**\n   * Gets the year component of the given date.\n   * @param date The date to extract the year from.\n   * @returns The year component.\n   */\n  abstract getYear(date: D): number;\n\n  /**\n   * Gets the month component of the given date.\n   * @param date The date to extract the month from.\n   * @returns The month component (0-indexed, 0 = January).\n   */\n  abstract getMonth(date: D): number;\n\n  /**\n   * Gets the date of the month component of the given date.\n   * @param date The date to extract the date of the month from.\n   * @returns The month component (1-indexed, 1 = first of month).\n   */\n  abstract getDate(date: D): number;\n\n  /**\n   * Gets the day of the week component of the given date.\n   * @param date The date to extract the day of the week from.\n   * @returns The month component (0-indexed, 0 = Sunday).\n   */\n  abstract getDayOfWeek(date: D): number;\n\n  /**\n   * Gets a list of names for the months.\n   * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n   * @returns An ordered list of all month names, starting with January.\n   */\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets a list of names for the dates of the month.\n   * @returns An ordered list of all date of the month names, starting with '1'.\n   */\n  abstract getDateNames(): string[];\n\n  /**\n   * Gets a list of names for the days of the week.\n   * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n   * @returns An ordered list of all weekday names, starting with Sunday.\n   */\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets the name for the year of the given date.\n   * @param date The date to get the year name for.\n   * @returns The name of the given year (e.g. '2017').\n   */\n  abstract getYearName(date: D): string;\n\n  /**\n   * Gets the first day of the week.\n   * @returns The first day of the week (0-indexed, 0 = Sunday).\n   */\n  abstract getFirstDayOfWeek(): number;\n\n  /**\n   * Gets the number of days in the month of the given date.\n   * @param date The date whose month should be checked.\n   * @returns The number of days in the month of the given date.\n   */\n  abstract getNumDaysInMonth(date: D): number;\n\n  /**\n   * Clones the given date.\n   * @param date The date to clone\n   * @returns A new date equal to the given date.\n   */\n  abstract clone(date: D): D;\n\n  /**\n   * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\n   * month and date.\n   * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\n   * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\n   * @param date The date of month of the date. Must be an integer 1 - length of the given month.\n   * @returns The new date, or null if invalid.\n   */\n  abstract createDate(year: number, month: number, date: number): D;\n\n  /**\n   * Gets today's date.\n   * @returns Today's date.\n   */\n  abstract today(): D;\n\n  /**\n   * Parses a date from a user-provided value.\n   * @param value The value to parse.\n   * @param parseFormat The expected format of the value being parsed\n   *     (type is implementation-dependent).\n   * @returns The parsed date.\n   */\n  abstract parse(value: any, parseFormat: any): D | null;\n\n  /**\n   * Formats a date as a string according to the given format.\n   * @param date The value to format.\n   * @param displayFormat The format to use to display the date as a string.\n   * @returns The formatted date string.\n   */\n  abstract format(date: D, displayFormat: any): string;\n\n  /**\n   * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n   * calendar for each year and then finding the closest date in the new month. For example when\n   * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n   * @param date The date to add years to.\n   * @param years The number of years to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of years added.\n   */\n  abstract addCalendarYears(date: D, years: number): D;\n\n  /**\n   * Adds the given number of months to the date. Months are counted as if flipping a page on the\n   * calendar for each month and then finding the closest date in the new month. For example when\n   * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n   * @param date The date to add months to.\n   * @param months The number of months to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of months added.\n   */\n  abstract addCalendarMonths(date: D, months: number): D;\n\n  /**\n   * Adds the given number of days to the date. Days are counted as if moving one cell on the\n   * calendar for each day.\n   * @param date The date to add days to.\n   * @param days The number of days to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of days added.\n   */\n  abstract addCalendarDays(date: D, days: number): D;\n\n  /**\n   * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n   * This method is used to generate date strings that are compatible with native HTML attributes\n   * such as the `min` or `max` attribute of an `<input>`.\n   * @param date The date to get the ISO date string for.\n   * @returns The ISO date string date string.\n   */\n  abstract toIso8601(date: D): string;\n\n  /**\n   * Checks whether the given object is considered a date instance by this DateAdapter.\n   * @param obj The object to check\n   * @returns Whether the object is a date instance.\n   */\n  abstract isDateInstance(obj: any): boolean;\n\n  /**\n   * Checks whether the given date is valid.\n   * @param date The date to check.\n   * @returns Whether the date is valid.\n   */\n  abstract isValid(date: D): boolean;\n\n  /**\n   * Gets date instance that is not valid.\n   * @returns An invalid date.\n   */\n  abstract invalid(): D;\n\n /**\n  * Given a potential date object, returns that same date object if it is\n  * a valid date, or `null` if it's not a valid date.\n  * @param obj The object to check.\n  * @returns A date or `null`.\n  */\n  getValidDateOrNull(obj: unknown): D | null {\n    return this.isDateInstance(obj) && this.isValid(obj as D) ? obj as D : null;\n  }\n\n  /**\n   * Attempts to deserialize a value to a valid date object. This is different from parsing in that\n   * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\n   * string). The default implementation does not allow any deserialization, it simply checks that\n   * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\n   * method on all of its `@Input()` properties that accept dates. It is therefore possible to\n   * support passing values from your backend directly to these properties by overriding this method\n   * to also deserialize the format used by your backend.\n   * @param value The value to be deserialized into a date object.\n   * @returns The deserialized date object, either a valid date, null if the value can be\n   *     deserialized into a null date (e.g. the empty string), or an invalid date.\n   */\n  deserialize(value: any): D | null {\n    if (value == null || this.isDateInstance(value) && this.isValid(value)) {\n      return value;\n    }\n    return this.invalid();\n  }\n\n  /**\n   * Sets the locale used for all dates.\n   * @param locale The new locale.\n   */\n  setLocale(locale: any) {\n    this.locale = locale;\n    this._localeChanges.next();\n  }\n\n  /**\n   * Compares two dates.\n   * @param first The first date to compare.\n   * @param second The second date to compare.\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n   *     a number greater than 0 if the first date is later.\n   */\n  compareDate(first: D, second: D): number {\n    return this.getYear(first) - this.getYear(second) ||\n        this.getMonth(first) - this.getMonth(second) ||\n        this.getDate(first) - this.getDate(second);\n  }\n\n  /**\n   * Checks if two dates are equal.\n   * @param first The first date to check.\n   * @param second The second date to check.\n   * @returns Whether the two dates are equal.\n   *     Null dates are considered equal to other null dates.\n   */\n  sameDate(first: D | null, second: D | null): boolean {\n    if (first && second) {\n      let firstValid = this.isValid(first);\n      let secondValid = this.isValid(second);\n      if (firstValid && secondValid) {\n        return !this.compareDate(first, second);\n      }\n      return firstValid == secondValid;\n    }\n    return first == second;\n  }\n\n  /**\n   * Clamp the given date between min and max dates.\n   * @param date The date to clamp.\n   * @param min The minimum value to allow. If null or omitted no min is enforced.\n   * @param max The maximum value to allow. If null or omitted no max is enforced.\n   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n   *     otherwise `date`.\n   */\n  clampDate(date: D, min?: D | null, max?: D | null): D {\n    if (min && this.compareDate(date, min) < 0) {\n      return min;\n    }\n    if (max && this.compareDate(date, max) > 0) {\n      return max;\n    }\n    return date;\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 {InjectionToken} from '@angular/core';\n\n\nexport type MatDateFormats = {\n  parse: {\n    dateInput: any\n  },\n  display: {\n    dateInput: any,\n    monthLabel?: any,\n    monthYearLabel: any,\n    dateA11yLabel: any,\n    monthYearA11yLabel: any,\n  }\n};\n\n\nexport const MAT_DATE_FORMATS = new InjectionToken<MatDateFormats>('mat-date-formats');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {DateAdapter, MAT_DATE_LOCALE} from './date-adapter';\n\n// TODO(mmalerba): Remove when we no longer support safari 9.\n/** Whether the browser supports the Intl API. */\nlet SUPPORTS_INTL_API: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n  SUPPORTS_INTL_API = typeof Intl != 'undefined';\n} catch {\n  SUPPORTS_INTL_API = false;\n}\n\n/** The default month names to use if Intl API is not available. */\nconst DEFAULT_MONTH_NAMES = {\n  'long': [\n    'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n    'October', 'November', 'December'\n  ],\n  'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\n\n\n/** The default date names to use if Intl API is not available. */\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\n\n\n/** The default day of the week names to use if Intl API is not available. */\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\n  'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\n\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n    /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n  const valuesArray = Array(length);\n  for (let i = 0; i < length; i++) {\n    valuesArray[i] = valueFunction(i);\n  }\n  return valuesArray;\n}\n\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n  /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\n  private readonly _clampDate: boolean;\n\n  /**\n   * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n   * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n   * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n   * will produce `'8/13/1800'`.\n   *\n   * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now\n   * getting the string representation of a Date object from its utc representation. We're keeping\n   * it here for sometime, just for precaution, in case we decide to revert some of these changes\n   * though.\n   */\n  useUtcForDisplay: boolean = true;\n\n  constructor(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: string, platform: Platform) {\n    super();\n    super.setLocale(matDateLocale);\n\n    // IE does its own time zone correction, so we disable this on IE.\n    this.useUtcForDisplay = !platform.TRIDENT;\n    this._clampDate = platform.TRIDENT || platform.EDGE;\n  }\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {month: style, timeZone: 'utc'});\n      return range(12, i =>\n          this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));\n    }\n    return DEFAULT_MONTH_NAMES[style];\n  }\n\n  getDateNames(): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {day: 'numeric', timeZone: 'utc'});\n      return range(31, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DATE_NAMES;\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {weekday: style, timeZone: 'utc'});\n      return range(7, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DAY_OF_WEEK_NAMES[style];\n  }\n\n  getYearName(date: Date): string {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {year: 'numeric', timeZone: 'utc'});\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return String(this.getYear(date));\n  }\n\n  getFirstDayOfWeek(): number {\n    // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\n    return 0;\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return this.getDate(this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + 1, 0));\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      // Check for invalid month and date (except upper bound on date which we have to check after\n      // creating the Date).\n      if (month < 0 || month > 11) {\n        throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n      }\n\n      if (date < 1) {\n        throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n      }\n    }\n\n    let result = this._createDateWithOverflow(year, month, date);\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n    if (result.getMonth() != month && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n    }\n\n    return result;\n  }\n\n  today(): Date {\n    return new Date();\n  }\n\n  parse(value: any): Date | null {\n    // We have no way using the native JS Date to set the parse format or locale, so we ignore these\n    // parameters.\n    if (typeof value == 'number') {\n      return new Date(value);\n    }\n    return value ? new Date(Date.parse(value)) : null;\n  }\n\n  format(date: Date, displayFormat: Object): string {\n    if (!this.isValid(date)) {\n      throw Error('NativeDateAdapter: Cannot format invalid date.');\n    }\n\n    if (SUPPORTS_INTL_API) {\n      // On IE and Edge the i18n API will throw a hard error that can crash the entire app\n      // if we attempt to format a date whose year is less than 1 or greater than 9999.\n      if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {\n        date = this.clone(date);\n        date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));\n      }\n\n      displayFormat = {...displayFormat, timeZone: 'utc'};\n\n      const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return this._stripDirectionalityCharacters(date.toDateString());\n  }\n\n  addCalendarYears(date: Date, years: number): Date {\n    return this.addCalendarMonths(date, years * 12);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    let newDate = this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n\n    // It's possible to wind up in the wrong month if the original month has more days than the new\n    // month. In this case we want to go to the last day of the desired month.\n    // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\n    // guarantee this.\n    if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\n    }\n\n    return newDate;\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    return this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n  }\n\n  toIso8601(date: Date): string {\n    return [\n      date.getUTCFullYear(),\n      this._2digit(date.getUTCMonth() + 1),\n      this._2digit(date.getUTCDate())\n    ].join('-');\n  }\n\n  /**\n   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n   * invalid date for all other values.\n   */\n  override deserialize(value: any): Date | null {\n    if (typeof value === 'string') {\n      if (!value) {\n        return null;\n      }\n      // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n      // string is the right format first.\n      if (ISO_8601_REGEX.test(value)) {\n        let date = new Date(value);\n        if (this.isValid(date)) {\n          return date;\n        }\n      }\n    }\n    return super.deserialize(value);\n  }\n\n  isDateInstance(obj: any) {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date) {\n    return !isNaN(date.getTime());\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  /** Creates a date but allows the month and date to overflow. */\n  private _createDateWithOverflow(year: number, month: number, date: number) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setFullYear` and `setHours` instead.\n    const d = new Date();\n    d.setFullYear(year, month, date);\n    d.setHours(0, 0, 0, 0);\n    return d;\n  }\n\n  /**\n   * Pads a number to make it two digits.\n   * @param n The number to pad.\n   * @returns The padded number.\n   */\n  private _2digit(n: number) {\n    return ('00' + n).slice(-2);\n  }\n\n  /**\n   * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n   * other browsers do not. We remove them to make output consistent and because they interfere with\n   * date parsing.\n   * @param str The string to strip direction characters from.\n   * @returns The stripped string.\n   */\n  private _stripDirectionalityCharacters(str: string) {\n    return str.replace(/[\\u200e\\u200f]/g, '');\n  }\n\n  /**\n   * When converting Date object to string, javascript built-in functions may return wrong\n   * results because it applies its internal DST rules. The DST rules around the world change\n   * very frequently, and the current valid rule is not always valid in previous years though.\n   * We work around this problem building a new Date object which has its internal UTC\n   * representation with the local date and time.\n   * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have\n   *    timeZone set to 'utc' to work fine.\n   * @param date Date from which we want to get the string representation according to dtf\n   * @returns A Date object with its UTC representation based on the passed in date info\n   */\n  private _format(dtf: Intl.DateTimeFormat, date: Date) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\n    const d = new Date();\n    d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    return dtf.format(d);\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 {MatDateFormats} from './date-formats';\n\n\nexport const MAT_NATIVE_DATE_FORMATS: MatDateFormats = {\n  parse: {\n    dateInput: null,\n  },\n  display: {\n    dateInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\n    monthYearLabel: {year: 'numeric', month: 'short'},\n    dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\n    monthYearA11yLabel: {year: 'numeric', month: 'long'},\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 {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {DateAdapter} from './date-adapter';\nimport {MAT_DATE_FORMATS} from './date-formats';\nimport {NativeDateAdapter} from './native-date-adapter';\nimport {MAT_NATIVE_DATE_FORMATS} from './native-date-formats';\n\nexport * from './date-adapter';\nexport * from './date-formats';\nexport * from './native-date-adapter';\nexport * from './native-date-formats';\n\n\n@NgModule({\n  imports: [PlatformModule],\n  providers: [\n    {provide: DateAdapter, useClass: NativeDateAdapter},\n  ],\n})\nexport class NativeDateModule {}\n\n\n@NgModule({\n  imports: [NativeDateModule],\n  providers: [{provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS}],\n})\nexport class MatNativeDateModule {}\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 {Injectable} from '@angular/core';\nimport {FormGroupDirective, NgForm, FormControl} from '@angular/forms';\n\n/** Error state matcher that matches when a control is invalid and dirty. */\n@Injectable()\nexport class ShowOnDirtyErrorStateMatcher implements ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.dirty || (form && form.submitted)));\n  }\n}\n\n/** Provider that defines how form controls behave with regards to displaying error messages. */\n@Injectable({providedIn: 'root'})\nexport class ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.touched || (form && form.submitted)));\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 {\n  NgModule,\n  Directive,\n  ElementRef,\n  QueryList,\n} from '@angular/core';\nimport {startWith} from 'rxjs/operators';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n/**\n * Shared directive to count lines inside a text area, such as a list item.\n * Line elements can be extracted with a @ContentChildren(MatLine) query, then\n * counted by checking the query list's length.\n */\n@Directive({\n  selector: '[mat-line], [matLine]',\n  host: {'class': 'mat-line'}\n})\nexport class MatLine {}\n\n/**\n * Helper that takes a query list of lines and sets the correct class on the host.\n * @docs-private\n */\nexport function setLines(lines: QueryList<unknown>, element: ElementRef<HTMLElement>,\n                         prefix = 'mat') {\n  // Note: doesn't need to unsubscribe, because `changes`\n  // gets completed by Angular when the view is destroyed.\n  lines.changes.pipe(startWith(lines)).subscribe(({length}) => {\n    setClass(element, `${prefix}-2-line`, false);\n    setClass(element, `${prefix}-3-line`, false);\n    setClass(element, `${prefix}-multi-line`, false);\n\n    if (length === 2 || length === 3) {\n      setClass(element, `${prefix}-${length}-line`, true);\n    } else if (length > 3) {\n      setClass(element, `${prefix}-multi-line`, true);\n    }\n  });\n}\n\n/** Adds or removes a class from an element. */\nfunction setClass(element: ElementRef<HTMLElement>, className: string, isAdd: boolean): void {\n  const classList = element.nativeElement.classList;\n  isAdd ? classList.add(className) : classList.remove(className);\n}\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatLine, MatCommonModule],\n  declarations: [MatLine],\n})\nexport class MatLineModule { }\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/** Possible states for a ripple element. */\nexport const enum RippleState {\n  FADING_IN, VISIBLE, FADING_OUT, HIDDEN\n}\n\nexport type RippleConfig = {\n  color?: string;\n  centered?: boolean;\n  radius?: number;\n  persistent?: boolean;\n  animation?: RippleAnimationConfig;\n  terminateOnPointerUp?: boolean;\n};\n\n/**\n * Interface that describes the configuration for the animation of a ripple.\n * There are two animation phases with different durations for the ripples.\n */\nexport interface RippleAnimationConfig {\n  /** Duration in milliseconds for the enter animation (expansion from point of contact). */\n  enterDuration?: number;\n  /** Duration in milliseconds for the exit animation (fade-out). */\n  exitDuration?: number;\n}\n\n/**\n * Reference to a previously launched ripple element.\n */\nexport class RippleRef {\n\n  /** Current state of the ripple. */\n  state: RippleState = RippleState.HIDDEN;\n\n  constructor(\n    private _renderer: {fadeOutRipple(ref: RippleRef): void},\n    /** Reference to the ripple HTML element. */\n    public element: HTMLElement,\n    /** Ripple configuration used for the ripple. */\n    public config: RippleConfig) {\n  }\n\n  /** Fades out the ripple element. */\n  fadeOut() {\n    this._renderer.fadeOutRipple(this);\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 {ElementRef, NgZone} from '@angular/core';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader} from '@angular/cdk/a11y';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {RippleRef, RippleState, RippleConfig} from './ripple-ref';\n\n/**\n * Interface that describes the target for launching ripples.\n * It defines the ripple configuration and disabled state for interaction ripples.\n * @docs-private\n */\nexport interface RippleTarget {\n  /** Configuration for ripples that are launched on pointer down. */\n  rippleConfig: RippleConfig;\n  /** Whether ripples on pointer down should be disabled. */\n  rippleDisabled: boolean;\n}\n\n\n// TODO: import these values from `@material/ripple` eventually.\n/**\n * Default ripple animation configuration for ripples without an explicit\n * animation config specified.\n */\nexport const defaultRippleAnimationConfig = {\n  enterDuration: 225,\n  exitDuration: 150\n};\n\n/**\n * Timeout for ignoring mouse events. Mouse events will be temporary ignored after touch\n * events to avoid synthetic mouse events.\n */\nconst ignoreMouseEventsTimeout = 800;\n\n/** Options that apply to all the event listeners that are bound by the ripple renderer. */\nconst passiveEventOptions = normalizePassiveListenerOptions({passive: true});\n\n/** Events that signal that the pointer is down. */\nconst pointerDownEvents = ['mousedown', 'touchstart'];\n\n/** Events that signal that the pointer is up. */\nconst pointerUpEvents = ['mouseup', 'mouseleave', 'touchend', 'touchcancel'];\n\n/**\n * Helper service that performs DOM manipulations. Not intended to be used outside this module.\n * The constructor takes a reference to the ripple directive's host element and a map of DOM\n * event handlers to be installed on the element that triggers ripple animations.\n * This will eventually become a custom renderer once Angular support exists.\n * @docs-private\n */\nexport class RippleRenderer implements EventListenerObject {\n  /** Element where the ripples are being added to. */\n  private _containerElement: HTMLElement;\n\n  /** Element which triggers the ripple elements on mouse events. */\n  private _triggerElement: HTMLElement | null;\n\n  /** Whether the pointer is currently down or not. */\n  private _isPointerDown = false;\n\n  /** Set of currently active ripple references. */\n  private _activeRipples = new Set<RippleRef>();\n\n  /** Latest non-persistent ripple that was triggered. */\n  private _mostRecentTransientRipple: RippleRef | null;\n\n  /** Time in milliseconds when the last touchstart event happened. */\n  private _lastTouchStartEvent: number;\n\n  /** Whether pointer-up event listeners have been registered. */\n  private _pointerUpEventsRegistered = false;\n\n  /**\n   * Cached dimensions of the ripple container. Set when the first\n   * ripple is shown and cleared once no more ripples are visible.\n   */\n  private _containerRect: ClientRect | null;\n\n  constructor(private _target: RippleTarget,\n              private _ngZone: NgZone,\n              elementOrElementRef: HTMLElement | ElementRef<HTMLElement>,\n              platform: Platform) {\n\n    // Only do anything if we're on the browser.\n    if (platform.isBrowser) {\n      this._containerElement = coerceElement(elementOrElementRef);\n    }\n  }\n\n  /**\n   * Fades in a ripple at the given coordinates.\n   * @param x Coordinate within the element, along the X axis at which to start the ripple.\n   * @param y Coordinate within the element, along the Y axis at which to start the ripple.\n   * @param config Extra ripple options.\n   */\n  fadeInRipple(x: number, y: number, config: RippleConfig = {}): RippleRef {\n    const containerRect = this._containerRect =\n                          this._containerRect || this._containerElement.getBoundingClientRect();\n    const animationConfig = {...defaultRippleAnimationConfig, ...config.animation};\n\n    if (config.centered) {\n      x = containerRect.left + containerRect.width / 2;\n      y = containerRect.top + containerRect.height / 2;\n    }\n\n    const radius = config.radius || distanceToFurthestCorner(x, y, containerRect);\n    const offsetX = x - containerRect.left;\n    const offsetY = y - containerRect.top;\n    const duration = animationConfig.enterDuration;\n\n    const ripple = document.createElement('div');\n    ripple.classList.add('mat-ripple-element');\n\n    ripple.style.left = `${offsetX - radius}px`;\n    ripple.style.top = `${offsetY - radius}px`;\n    ripple.style.height = `${radius * 2}px`;\n    ripple.style.width = `${radius * 2}px`;\n\n    // If a custom color has been specified, set it as inline style. If no color is\n    // set, the default color will be applied through the ripple theme styles.\n    if (config.color != null) {\n      ripple.style.backgroundColor = config.color;\n    }\n\n    ripple.style.transitionDuration = `${duration}ms`;\n\n    this._containerElement.appendChild(ripple);\n\n    // By default the browser does not recalculate the styles of dynamically created\n    // ripple elements. This is critical because then the `scale` would not animate properly.\n    enforceStyleRecalculation(ripple);\n\n    ripple.style.transform = 'scale(1)';\n\n    // Exposed reference to the ripple that will be returned.\n    const rippleRef = new RippleRef(this, ripple, config);\n\n    rippleRef.state = RippleState.FADING_IN;\n\n    // Add the ripple reference to the list of all active ripples.\n    this._activeRipples.add(rippleRef);\n\n    if (!config.persistent) {\n      this._mostRecentTransientRipple = rippleRef;\n    }\n\n    // Wait for the ripple element to be completely faded in.\n    // Once it's faded in, the ripple can be hidden immediately if the mouse is released.\n    this._runTimeoutOutsideZone(() => {\n      const isMostRecentTransientRipple = rippleRef === this._mostRecentTransientRipple;\n\n      rippleRef.state = RippleState.VISIBLE;\n\n      // When the timer runs out while the user has kept their pointer down, we want to\n      // keep only the persistent ripples and the latest transient ripple. We do this,\n      // because we don't want stacked transient ripples to appear after their enter\n      // animation has finished.\n      if (!config.persistent && (!isMostRecentTransientRipple || !this._isPointerDown)) {\n        rippleRef.fadeOut();\n      }\n    }, duration);\n\n    return rippleRef;\n  }\n\n  /** Fades out a ripple reference. */\n  fadeOutRipple(rippleRef: RippleRef) {\n    const wasActive = this._activeRipples.delete(rippleRef);\n\n    if (rippleRef === this._mostRecentTransientRipple) {\n      this._mostRecentTransientRipple = null;\n    }\n\n    // Clear out the cached bounding rect if we have no more ripples.\n    if (!this._activeRipples.size) {\n      this._containerRect = null;\n    }\n\n    // For ripples that are not active anymore, don't re-run the fade-out animation.\n    if (!wasActive) {\n      return;\n    }\n\n    const rippleEl = rippleRef.element;\n    const animationConfig = {...defaultRippleAnimationConfig, ...rippleRef.config.animation};\n\n    rippleEl.style.transitionDuration = `${animationConfig.exitDuration}ms`;\n    rippleEl.style.opacity = '0';\n    rippleRef.state = RippleState.FADING_OUT;\n\n    // Once the ripple faded out, the ripple can be safely removed from the DOM.\n    this._runTimeoutOutsideZone(() => {\n      rippleRef.state = RippleState.HIDDEN;\n      rippleEl.parentNode!.removeChild(rippleEl);\n    }, animationConfig.exitDuration);\n  }\n\n  /** Fades out all currently active ripples. */\n  fadeOutAll() {\n    this._activeRipples.forEach(ripple => ripple.fadeOut());\n  }\n\n  /** Fades out all currently active non-persistent ripples. */\n  fadeOutAllNonPersistent() {\n    this._activeRipples.forEach(ripple => {\n      if (!ripple.config.persistent) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Sets up the trigger event listeners */\n  setupTriggerEvents(elementOrElementRef: HTMLElement | ElementRef<HTMLElement>) {\n    const element = coerceElement(elementOrElementRef);\n\n    if (!element || element === this._triggerElement) {\n      return;\n    }\n\n    // Remove all previously registered event listeners from the trigger element.\n    this._removeTriggerEvents();\n\n    this._triggerElement = element;\n    this._registerEvents(pointerDownEvents);\n  }\n\n  /**\n   * Handles all registered events.\n   * @docs-private\n   */\n  handleEvent(event: Event) {\n    if (event.type === 'mousedown') {\n      this._onMousedown(event as MouseEvent);\n    } else if (event.type === 'touchstart') {\n      this._onTouchStart(event as TouchEvent);\n    } else {\n      this._onPointerUp();\n    }\n\n    // If pointer-up events haven't been registered yet, do so now.\n    // We do this on-demand in order to reduce the total number of event listeners\n    // registered by the ripples, which speeds up the rendering time for large UIs.\n    if (!this._pointerUpEventsRegistered) {\n      this._registerEvents(pointerUpEvents);\n      this._pointerUpEventsRegistered = true;\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using mouse. */\n  private _onMousedown(event: MouseEvent) {\n    // Screen readers will fire fake mouse events for space/enter. Skip launching a\n    // ripple in this case for consistency with the non-screen-reader experience.\n    const isFakeMousedown = isFakeMousedownFromScreenReader(event);\n    const isSyntheticEvent = this._lastTouchStartEvent &&\n        Date.now() < this._lastTouchStartEvent + ignoreMouseEventsTimeout;\n\n    if (!this._target.rippleDisabled && !isFakeMousedown && !isSyntheticEvent) {\n      this._isPointerDown = true;\n      this.fadeInRipple(event.clientX, event.clientY, this._target.rippleConfig);\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using touch. */\n  private _onTouchStart(event: TouchEvent) {\n    if (!this._target.rippleDisabled && !isFakeTouchstartFromScreenReader(event)) {\n      // Some browsers fire mouse events after a `touchstart` event. Those synthetic mouse\n      // events will launch a second ripple if we don't ignore mouse events for a specific\n      // time after a touchstart event.\n      this._lastTouchStartEvent = Date.now();\n      this._isPointerDown = true;\n\n      // Use `changedTouches` so we skip any touches where the user put\n      // their finger down, but used another finger to tap the element again.\n      const touches = event.changedTouches;\n\n      for (let i = 0; i < touches.length; i++) {\n        this.fadeInRipple(touches[i].clientX, touches[i].clientY, this._target.rippleConfig);\n      }\n    }\n  }\n\n  /** Function being called whenever the trigger is being released. */\n  private _onPointerUp() {\n    if (!this._isPointerDown) {\n      return;\n    }\n\n    this._isPointerDown = false;\n\n    // Fade-out all ripples that are visible and not persistent.\n    this._activeRipples.forEach(ripple => {\n      // By default, only ripples that are completely visible will fade out on pointer release.\n      // If the `terminateOnPointerUp` option is set, ripples that still fade in will also fade out.\n      const isVisible = ripple.state === RippleState.VISIBLE ||\n        ripple.config.terminateOnPointerUp && ripple.state === RippleState.FADING_IN;\n\n      if (!ripple.config.persistent && isVisible) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */\n  private _runTimeoutOutsideZone(fn: Function, delay = 0) {\n    this._ngZone.runOutsideAngular(() => setTimeout(fn, delay));\n  }\n\n  /** Registers event listeners for a given list of events. */\n  private _registerEvents(eventTypes: string[]) {\n    this._ngZone.runOutsideAngular(() => {\n      eventTypes.forEach((type) => {\n        this._triggerElement!.addEventListener(type, this, passiveEventOptions);\n      });\n    });\n  }\n\n  /** Removes previously registered event listeners from the trigger element. */\n  _removeTriggerEvents() {\n    if (this._triggerElement) {\n      pointerDownEvents.forEach((type) => {\n        this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n      });\n\n      if (this._pointerUpEventsRegistered) {\n        pointerUpEvents.forEach((type) => {\n          this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n        });\n      }\n    }\n  }\n}\n\n/** Enforces a style recalculation of a DOM element by computing its styles. */\nfunction enforceStyleRecalculation(element: HTMLElement) {\n  // Enforce a style recalculation by calling `getComputedStyle` and accessing any property.\n  // Calling `getPropertyValue` is important to let optimizers know that this is not a noop.\n  // See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n  window.getComputedStyle(element).getPropertyValue('opacity');\n}\n\n/**\n * Returns the distance from the point (x, y) to the furthest corner of a rectangle.\n */\nfunction distanceToFurthestCorner(x: number, y: number, rect: ClientRect) {\n  const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\n  const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\n  return Math.sqrt(distX * distX + distY * distY);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n} from '@angular/core';\nimport {RippleAnimationConfig, RippleConfig, RippleRef} from './ripple-ref';\nimport {RippleRenderer, RippleTarget} from './ripple-renderer';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/** Configurable options for `matRipple`. */\nexport interface RippleGlobalOptions {\n  /**\n   * Whether ripples should be disabled. Ripples can be still launched manually by using\n   * the `launch()` method. Therefore focus indicators will still show up.\n   */\n  disabled?: boolean;\n\n  /**\n   * Default configuration for the animation duration of the ripples. There are two phases with\n   * different durations for the ripples: `enter` and `leave`. The durations will be overwritten\n   * by the value of `matRippleAnimation` or if the `NoopAnimationsModule` is included.\n   */\n  animation?: RippleAnimationConfig;\n\n  /**\n   * Whether ripples should start fading out immediately after the mouse or touch is released. By\n   * default, ripples will wait for the enter animation to complete and for mouse or touch release.\n   */\n  terminateOnPointerUp?: boolean;\n}\n\n/** Injection token that can be used to specify the global ripple options. */\nexport const MAT_RIPPLE_GLOBAL_OPTIONS =\n    new InjectionToken<RippleGlobalOptions>('mat-ripple-global-options');\n\n@Directive({\n  selector: '[mat-ripple], [matRipple]',\n  exportAs: 'matRipple',\n  host: {\n    'class': 'mat-ripple',\n    '[class.mat-ripple-unbounded]': 'unbounded'\n  }\n})\nexport class MatRipple implements OnInit, OnDestroy, RippleTarget {\n\n  /** Custom color for all ripples. */\n  @Input('matRippleColor') color: string;\n\n  /** Whether the ripples should be visible outside the component's bounds. */\n  @Input('matRippleUnbounded') unbounded: boolean;\n\n  /**\n   * Whether the ripple always originates from the center of the host element's bounds, rather\n   * than originating from the location of the click event.\n   */\n  @Input('matRippleCentered') centered: boolean;\n\n  /**\n   * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\n   * will be the distance from the center of the ripple to the furthest corner of the host element's\n   * bounding rectangle.\n   */\n  @Input('matRippleRadius') radius: number = 0;\n\n  /**\n   * Configuration for the ripple animation. Allows modifying the enter and exit animation\n   * duration of the ripples. The animation durations will be overwritten if the\n   * `NoopAnimationsModule` is being used.\n   */\n  @Input('matRippleAnimation') animation: RippleAnimationConfig;\n\n  /**\n   * Whether click events will not trigger the ripple. Ripples can be still launched manually\n   * by using the `launch()` method.\n   */\n  @Input('matRippleDisabled')\n  get disabled() { return this._disabled; }\n  set disabled(value: boolean) {\n    if (value) {\n      this.fadeOutAllNonPersistent();\n    }\n    this._disabled = value;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _disabled: boolean = false;\n\n  /**\n   * The element that triggers the ripple when click events are received.\n   * Defaults to the directive's host element.\n   */\n  @Input('matRippleTrigger')\n  get trigger() { return this._trigger || this._elementRef.nativeElement; }\n  set trigger(trigger: HTMLElement) {\n    this._trigger = trigger;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _trigger: HTMLElement;\n\n  /** Renderer for the ripple DOM manipulations. */\n  private _rippleRenderer: RippleRenderer;\n\n  /** Options that are set globally for all ripples. */\n  private _globalOptions: RippleGlobalOptions;\n\n  /** Whether ripple directive is initialized and the input bindings are set. */\n  private _isInitialized: boolean = false;\n\n  constructor(private _elementRef: ElementRef<HTMLElement>,\n              ngZone: NgZone,\n              platform: Platform,\n              @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS) globalOptions?: RippleGlobalOptions,\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n    this._globalOptions = globalOptions || {};\n    this._rippleRenderer = new RippleRenderer(this, ngZone, _elementRef, platform);\n  }\n\n  ngOnInit() {\n    this._isInitialized = true;\n    this._setupTriggerEventsIfEnabled();\n  }\n\n  ngOnDestroy() {\n    this._rippleRenderer._removeTriggerEvents();\n  }\n\n  /** Fades out all currently showing ripple elements. */\n  fadeOutAll() {\n    this._rippleRenderer.fadeOutAll();\n  }\n\n  /** Fades out all currently showing non-persistent ripple elements. */\n  fadeOutAllNonPersistent() {\n    this._rippleRenderer.fadeOutAllNonPersistent();\n  }\n\n  /**\n   * Ripple configuration from the directive's input values.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleConfig(): RippleConfig {\n    return {\n      centered: this.centered,\n      radius: this.radius,\n      color: this.color,\n      animation: {\n        ...this._globalOptions.animation,\n        ...(this._animationMode === 'NoopAnimations' ? {enterDuration: 0, exitDuration: 0} : {}),\n        ...this.animation\n      },\n      terminateOnPointerUp: this._globalOptions.terminateOnPointerUp,\n    };\n  }\n\n  /**\n   * Whether ripples on pointer-down are disabled or not.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleDisabled(): boolean {\n    return this.disabled || !!this._globalOptions.disabled;\n  }\n\n  /** Sets up the trigger event listeners if ripples are enabled. */\n  private _setupTriggerEventsIfEnabled() {\n    if (!this.disabled && this._isInitialized) {\n      this._rippleRenderer.setupTriggerEvents(this.trigger);\n    }\n  }\n\n  /**\n   * Launches a manual ripple using the specified ripple configuration.\n   * @param config Configuration for the manual ripple.\n   */\n  launch(config: RippleConfig): RippleRef;\n\n  /**\n   * Launches a manual ripple at the specified coordinates relative to the viewport.\n   * @param x Coordinate along the X axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param y Coordinate along the Y axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param config Optional ripple configuration for the manual ripple.\n   */\n  launch(x: number, y: number, config?: RippleConfig): RippleRef;\n\n  /** Launches a manual ripple at the specified coordinated or just by the ripple config. */\n  launch(configOrX: number | RippleConfig, y: number = 0, config?: RippleConfig): RippleRef {\n    if (typeof configOrX === 'number') {\n      return this._rippleRenderer.fadeInRipple(configOrX, y, {...this.rippleConfig, ...config});\n    } else {\n      return this._rippleRenderer.fadeInRipple(0, 0, {...this.rippleConfig, ...configOrX});\n    }\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 {NgModule} from '@angular/core';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatRipple} from './ripple';\n\nexport * from './ripple';\nexport * from './ripple-ref';\nexport * from './ripple-renderer';\n\n@NgModule({\n  imports: [MatCommonModule, PlatformModule],\n  exports: [MatRipple, MatCommonModule],\n  declarations: [MatRipple],\n})\nexport class MatRippleModule {}\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 {\n  Component,\n  ViewEncapsulation,\n  Input,\n  ChangeDetectionStrategy,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/**\n * Possible states for a pseudo checkbox.\n * @docs-private\n */\nexport type MatPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate';\n\n/**\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\n * Note that theming is meant to be handled by the parent element, e.g.\n * `mat-primary .mat-pseudo-checkbox`.\n *\n * Note that this component will be completely invisible to screen-reader users. This is *not*\n * interchangeable with `<mat-checkbox>` and should *not* be used if the user would directly\n * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail\n * of more complex components that appropriately handle selected / checked state.\n * @docs-private\n */\n@Component({\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'mat-pseudo-checkbox',\n  styleUrls: ['pseudo-checkbox.css'],\n  template: '',\n  host: {\n    'class': 'mat-pseudo-checkbox',\n    '[class.mat-pseudo-checkbox-indeterminate]': 'state === \"indeterminate\"',\n    '[class.mat-pseudo-checkbox-checked]': 'state === \"checked\"',\n    '[class.mat-pseudo-checkbox-disabled]': 'disabled',\n    '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n  },\n})\nexport class MatPseudoCheckbox {\n  /** Display state of the checkbox. */\n  @Input() state: MatPseudoCheckboxState = 'unchecked';\n\n  /** Whether the checkbox is disabled. */\n  @Input() disabled: boolean = false;\n\n  constructor(@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) { }\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 {NgModule} from '@angular/core';\nimport {MatPseudoCheckbox} from './pseudo-checkbox/pseudo-checkbox';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatPseudoCheckbox],\n  declarations: [MatPseudoCheckbox]\n})\nexport class MatPseudoCheckboxModule { }\n\n\nexport * from './pseudo-checkbox/pseudo-checkbox';\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 {InjectionToken} from '@angular/core';\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n * @docs-private\n */\nexport interface MatOptionParentComponent {\n  disableRipple?: boolean;\n  multiple?: boolean;\n  inertGroups?: boolean;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const MAT_OPTION_PARENT_COMPONENT =\n    new InjectionToken<MatOptionParentComponent>('MAT_OPTION_PARENT_COMPONENT');\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 {BooleanInput} from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  InjectionToken,\n  Input,\n  ViewEncapsulation,\n  Directive, Inject, Optional\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '../common-behaviors/disabled';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n// Notes on the accessibility pattern used for `mat-optgroup`.\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\n// pointing to the label. This works for `mat-select`, but it seems to hit a bug for autocomplete\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\n// VoiceOver on Safari won't read it out.\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\n// inside an invisible element in the option. This is sub-optimal, because the screen reader will\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\n// the user enters a new group. The following alternate approaches were considered:\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\n//    when the text will be read out so sometimes it comes in too late or never if the user\n//    navigates quickly.\n// 2. `<mat-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\n//    won't read out the description at all.\n// 3. `<mat-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\n//     doesn't read out the text at all. Furthermore, on\n\n// Boilerplate for applying mixins to MatOptgroup.\n/** @docs-private */\nconst _MatOptgroupMixinBase = mixinDisabled(class {});\n\n// Counter for unique group ids.\nlet _uniqueOptgroupIdCounter = 0;\n\n@Directive()\nexport class _MatOptgroupBase extends _MatOptgroupMixinBase implements CanDisable {\n  /** Label for the option group. */\n  @Input() label: string;\n\n  /** Unique id for the underlying label. */\n  _labelId: string = `mat-optgroup-label-${_uniqueOptgroupIdCounter++}`;\n\n  /** Whether the group is in inert a11y mode. */\n  _inert: boolean;\n\n  constructor(@Inject(MAT_OPTION_PARENT_COMPONENT) @Optional() parent?: MatOptionParentComponent) {\n    super();\n    this._inert = parent?.inertGroups ?? false;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Injection token that can be used to reference instances of `MatOptgroup`. It serves as\n * alternative token to the actual `MatOptgroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_OPTGROUP = new InjectionToken<MatOptgroup>('MatOptgroup');\n\n/**\n * Component that is used to group instances of `mat-option`.\n */\n@Component({\n  selector: 'mat-optgroup',\n  exportAs: 'matOptgroup',\n  templateUrl: 'optgroup.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  styleUrls: ['optgroup.css'],\n  host: {\n    'class': 'mat-optgroup',\n    '[attr.role]': '_inert ? null : \"group\"',\n    '[attr.aria-disabled]': '_inert ? null : disabled.toString()',\n    '[attr.aria-labelledby]': '_inert ? null : _labelId',\n    '[class.mat-optgroup-disabled]': 'disabled',\n  },\n  providers: [{provide: MAT_OPTGROUP, useExisting: MatOptgroup}],\n})\nexport class MatOptgroup extends _MatOptgroupBase {\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 {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n  Directive,\n} from '@angular/core';\nimport {FocusOptions, FocusableOption, FocusOrigin} from '@angular/cdk/a11y';\nimport {Subject} from 'rxjs';\nimport {MatOptgroup, _MatOptgroupBase, MAT_OPTGROUP} from './optgroup';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n/**\n * Option IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueIdCounter = 0;\n\n/** Event object emitted by MatOption when selected or deselected. */\nexport class MatOptionSelectionChange {\n  constructor(\n    /** Reference to the option that emitted the event. */\n    public source: _MatOptionBase,\n    /** Whether the change in the option's value was a result of a user action. */\n    public isUserInput = false) { }\n}\n\n@Directive()\nexport class _MatOptionBase implements FocusableOption, AfterViewChecked, OnDestroy {\n  private _selected = false;\n  private _active = false;\n  private _disabled = false;\n  private _mostRecentViewValue = '';\n\n  /** Whether the wrapping component is in multiple selection mode. */\n  get multiple() { return this._parent && this._parent.multiple; }\n\n  /** Whether or not the option is currently selected. */\n  get selected(): boolean { return this._selected; }\n\n  /** The form value of the option. */\n  @Input() value: any;\n\n  /** The unique ID of the option. */\n  @Input() id: string = `mat-option-${_uniqueIdCounter++}`;\n\n  /** Whether the option is disabled. */\n  @Input()\n  get disabled() { return (this.group && this.group.disabled) || this._disabled; }\n  set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n  /** Whether ripples for the option are disabled. */\n  get disableRipple() { return this._parent && this._parent.disableRipple; }\n\n  /** Event emitted when the option is selected or deselected. */\n  // tslint:disable-next-line:no-output-on-prefix\n  @Output() readonly onSelectionChange = new EventEmitter<MatOptionSelectionChange>();\n\n  /** Emits when the state of the option changes and any parents have to be notified. */\n  readonly _stateChanges = new Subject<void>();\n\n  constructor(\n    private _element: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _parent: MatOptionParentComponent,\n    readonly group: _MatOptgroupBase) {}\n\n  /**\n   * Whether or not the option is currently active and ready to be selected.\n   * An active option displays styles as if it is focused, but the\n   * focus is actually retained somewhere else. This comes in handy\n   * for components like autocomplete where focus must remain on the input.\n   */\n  get active(): boolean {\n    return this._active;\n  }\n\n  /**\n   * The displayed value of the option. It is necessary to show the selected option in the\n   * select's trigger.\n   */\n  get viewValue(): string {\n    // TODO(kara): Add input property alternative for node envs.\n    return (this._getHostElement().textContent || '').trim();\n  }\n\n  /** Selects the option. */\n  select(): void {\n    if (!this._selected) {\n      this._selected = true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Deselects the option. */\n  deselect(): void {\n    if (this._selected) {\n      this._selected = false;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Sets focus onto this option. */\n  focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n    // Note that we aren't using `_origin`, but we need to keep it because some internal consumers\n    // use `MatOption` in a `FocusKeyManager` and we need it to match `FocusableOption`.\n    const element = this._getHostElement();\n\n    if (typeof element.focus === 'function') {\n      element.focus(options);\n    }\n  }\n\n  /**\n   * This method sets display styles on the option to make it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setActiveStyles(): void {\n    if (!this._active) {\n      this._active = true;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * This method removes display styles on the option that made it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setInactiveStyles(): void {\n    if (this._active) {\n      this._active = false;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /** Gets the label to be used when determining whether the option should be focused. */\n  getLabel(): string {\n    return this.viewValue;\n  }\n\n  /** Ensures the option is selected when activated from the keyboard. */\n  _handleKeydown(event: KeyboardEvent): void {\n    if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\n      this._selectViaInteraction();\n\n      // Prevent the page from scrolling down and form submits.\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * `Selects the option while indicating the selection came from the user. Used to\n   * determine if the select's view -> model callback should be invoked.`\n   */\n  _selectViaInteraction(): void {\n    if (!this.disabled) {\n      this._selected = this.multiple ? !this._selected : true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent(true);\n    }\n  }\n\n  /**\n   * Gets the `aria-selected` value for the option. We explicitly omit the `aria-selected`\n   * attribute from single-selection, unselected options. Including the `aria-selected=\"false\"`\n   * attributes adds a significant amount of noise to screen-reader users without providing useful\n   * information.\n   */\n  _getAriaSelected(): boolean|null {\n    return this.selected || (this.multiple ? false : null);\n  }\n\n  /** Returns the correct tabindex for the option depending on disabled state. */\n  _getTabIndex(): string {\n    return this.disabled ? '-1' : '0';\n  }\n\n  /** Gets the host DOM element. */\n  _getHostElement(): HTMLElement {\n    return this._element.nativeElement;\n  }\n\n  ngAfterViewChecked() {\n    // Since parent components could be using the option's label to display the selected values\n    // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed\n    // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n    // relatively cheap, however we still limit them only to selected options in order to avoid\n    // hitting the DOM too often.\n    if (this._selected) {\n      const viewValue = this.viewValue;\n\n      if (viewValue !== this._mostRecentViewValue) {\n        this._mostRecentViewValue = viewValue;\n        this._stateChanges.next();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  /** Emits the selection change event. */\n  private _emitSelectionChangeEvent(isUserInput = false): void {\n    this.onSelectionChange.emit(new MatOptionSelectionChange(this, isUserInput));\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Single option inside of a `<mat-select>` element.\n */\n@Component({\n  selector: 'mat-option',\n  exportAs: 'matOption',\n  host: {\n    'role': 'option',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[class.mat-selected]': 'selected',\n    '[class.mat-option-multiple]': 'multiple',\n    '[class.mat-active]': 'active',\n    '[id]': 'id',\n    '[attr.aria-selected]': '_getAriaSelected()',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[class.mat-option-disabled]': 'disabled',\n    '(click)': '_selectViaInteraction()',\n    '(keydown)': '_handleKeydown($event)',\n    'class': 'mat-option mat-focus-indicator',\n  },\n  styleUrls: ['option.css'],\n  templateUrl: 'option.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatOption extends _MatOptionBase {\n  constructor(\n    element: ElementRef<HTMLElement>,\n    changeDetectorRef: ChangeDetectorRef,\n    @Optional() @Inject(MAT_OPTION_PARENT_COMPONENT) parent: MatOptionParentComponent,\n    @Optional() @Inject(MAT_OPTGROUP) group: MatOptgroup) {\n    super(element, changeDetectorRef, parent, group);\n  }\n}\n\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param optionIndex Index of the option at which to start counting.\n * @param options Flat list of all of the options.\n * @param optionGroups Flat list of all of the option groups.\n * @docs-private\n */\nexport function _countGroupLabelsBeforeOption(optionIndex: number, options: QueryList<MatOption>,\n  optionGroups: QueryList<MatOptgroup>): number {\n\n  if (optionGroups.length) {\n    let optionsArray = options.toArray();\n    let groups = optionGroups.toArray();\n    let groupCounter = 0;\n\n    for (let i = 0; i < optionIndex + 1; i++) {\n      if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n        groupCounter++;\n      }\n    }\n\n    return groupCounter;\n  }\n\n  return 0;\n}\n\n/**\n * Determines the position to which to scroll a panel in order for an option to be into view.\n * @param optionOffset Offset of the option from the top of the panel.\n * @param optionHeight Height of the options.\n * @param currentScrollPosition Current scroll position of the panel.\n * @param panelHeight Height of the panel.\n * @docs-private\n */\nexport function _getOptionScrollPosition(optionOffset: number, optionHeight: number,\n    currentScrollPosition: number, panelHeight: number): number {\n  if (optionOffset < currentScrollPosition) {\n    return optionOffset;\n  }\n\n  if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\n    return Math.max(0, optionOffset - panelHeight + optionHeight);\n  }\n\n  return currentScrollPosition;\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 {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatRippleModule} from '../ripple/index';\nimport {MatPseudoCheckboxModule} from '../selection/index';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatOption} from './option';\nimport {MatOptgroup} from './optgroup';\n\n\n@NgModule({\n  imports: [MatRippleModule, CommonModule, MatCommonModule, MatPseudoCheckboxModule],\n  exports: [MatOption, MatOptgroup],\n  declarations: [MatOption, MatOptgroup]\n})\nexport class MatOptionModule {}\n\n\nexport * from './option';\nexport * from './optgroup';\nexport * from './option-parent';\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 './version';\nexport * from './animation/animation';\nexport * from './common-behaviors/index';\nexport * from './datetime/index';\nexport * from './error/error-options';\nexport * from './line/line';\nexport * from './option/index';\nexport * from './ripple/index';\nexport * from './selection/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MATERIAL_SANITY_CHECKS_FACTORY as ɵangular_material_src_material_core_core_a} from './common-behaviors/common-module';"],"names":["VERSION","CDK_VERSION"],"mappings":"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"}
Index: trip-planner-front/node_modules/@angular/material/fesm2015/datepicker.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/datepicker.js	(revision fa375fed9635035b3c62cf759f42938afa14271b)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/datepicker.js	(revision 8d391a12ef6baa3aefe9611a6f7c5b569977c946)
@@ -1579,5 +1579,5 @@
     { type: Component, args: [{
                 selector: 'mat-calendar-header',
-                template: "<div class=\"mat-calendar-header\">\n  <div class=\"mat-calendar-controls\">\n    <button mat-button type=\"button\" class=\"mat-calendar-period-button\"\n            (click)=\"currentPeriodClicked()\" [attr.aria-label]=\"periodButtonLabel\"\n            [attr.aria-describedby]=\"_buttonDescriptionId\"\n            cdkAriaLive=\"polite\">\n      <span [attr.id]=\"_buttonDescriptionId\">{{periodButtonText}}</span>\n      <svg class=\"mat-calendar-arrow\" [class.mat-calendar-invert]=\"calendar.currentView !== 'month'\"\n           viewBox=\"0 0 10 5\" focusable=\"false\">\n           <polygon points=\"0,0 5,5 10,0\"/>\n      </svg>\n    </button>\n\n    <div class=\"mat-calendar-spacer\"></div>\n\n    <ng-content></ng-content>\n\n    <button mat-icon-button type=\"button\" class=\"mat-calendar-previous-button\"\n            [disabled]=\"!previousEnabled()\" (click)=\"previousClicked()\"\n            [attr.aria-label]=\"prevButtonLabel\">\n    </button>\n\n    <button mat-icon-button type=\"button\" class=\"mat-calendar-next-button\"\n            [disabled]=\"!nextEnabled()\" (click)=\"nextClicked()\"\n            [attr.aria-label]=\"nextButtonLabel\">\n    </button>\n  </div>\n</div>\n",
+                template: "<div class=\"mat-calendar-header\">\n  <div class=\"mat-calendar-controls\">\n    <button mat-button type=\"button\" class=\"mat-calendar-period-button\"\n            (click)=\"currentPeriodClicked()\" [attr.aria-label]=\"periodButtonLabel\"\n            [attr.aria-describedby]=\"_buttonDescriptionId\"\n            cdkAriaLive=\"polite\">\n      <span [attr.id]=\"_buttonDescriptionId\">{{periodButtonText}}</span>\n      <div class=\"mat-calendar-arrow\"\n           [class.mat-calendar-invert]=\"calendar.currentView !== 'month'\"></div>\n    </button>\n\n    <div class=\"mat-calendar-spacer\"></div>\n\n    <ng-content></ng-content>\n\n    <button mat-icon-button type=\"button\" class=\"mat-calendar-previous-button\"\n            [disabled]=\"!previousEnabled()\" (click)=\"previousClicked()\"\n            [attr.aria-label]=\"prevButtonLabel\">\n    </button>\n\n    <button mat-icon-button type=\"button\" class=\"mat-calendar-next-button\"\n            [disabled]=\"!nextEnabled()\" (click)=\"nextClicked()\"\n            [attr.aria-label]=\"nextButtonLabel\">\n    </button>\n  </div>\n</div>\n",
                 exportAs: 'matCalendarHeader',
                 encapsulation: ViewEncapsulation.None,
@@ -1765,5 +1765,5 @@
                 changeDetection: ChangeDetectionStrategy.OnPush,
                 providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER],
-                styles: [".mat-calendar{display:block}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;margin:5% calc(33% / 7 - 16px)}.mat-calendar-controls .mat-icon-button:hover .mat-button-focus-overlay{opacity:.04}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0}.mat-calendar-arrow{display:inline-block;width:10px;height:5px;margin:0 0 0 5px;vertical-align:middle}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}.cdk-high-contrast-active .mat-calendar-arrow{fill:CanvasText}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\"\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\"\";position:absolute;top:0;left:-8px;right:-8px;height:1px}.mat-calendar-abbr{text-decoration:none}\n"]
+                styles: [".mat-calendar{display:block}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;margin:5% calc(33% / 7 - 16px)}.mat-calendar-controls .mat-icon-button:hover .mat-button-focus-overlay{opacity:.04}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0}.mat-calendar-arrow{display:inline-block;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top-width:5px;border-top-style:solid;margin:0 0 0 5px;vertical-align:middle}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\"\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\"\";position:absolute;top:0;left:-8px;right:-8px;height:1px}.mat-calendar-abbr{text-decoration:none}\n"]
             },] }
 ];
Index: trip-planner-front/node_modules/@angular/material/fesm2015/datepicker.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/datepicker.js.map	(revision fa375fed9635035b3c62cf759f42938afa14271b)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/datepicker.js.map	(revision 8d391a12ef6baa3aefe9611a6f7c5b569977c946)
@@ -1,1 +1,1 @@
-{"version":3,"file":"datepicker.js","sources":["../../../../../../src/material/datepicker/datepicker-errors.ts","../../../../../../src/material/datepicker/datepicker-intl.ts","../../../../../../src/material/datepicker/calendar-body.ts","../../../../../../src/material/datepicker/date-selection-model.ts","../../../../../../src/material/datepicker/date-range-selection-strategy.ts","../../../../../../src/material/datepicker/month-view.ts","../../../../../../src/material/datepicker/multi-year-view.ts","../../../../../../src/material/datepicker/year-view.ts","../../../../../../src/material/datepicker/calendar.ts","../../../../../../src/material/datepicker/datepicker-animations.ts","../../../../../../src/material/datepicker/datepicker-base.ts","../../../../../../src/material/datepicker/datepicker.ts","../../../../../../src/material/datepicker/datepicker-input-base.ts","../../../../../../src/material/datepicker/datepicker-input.ts","../../../../../../src/material/datepicker/datepicker-toggle.ts","../../../../../../src/material/datepicker/date-range-input-parts.ts","../../../../../../src/material/datepicker/date-range-input.ts","../../../../../../src/material/datepicker/date-range-picker.ts","../../../../../../src/material/datepicker/datepicker-actions.ts","../../../../../../src/material/datepicker/datepicker-module.ts","../../../../../../src/material/datepicker/public-api.ts","../../../../../../src/material/datepicker/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\n/** @docs-private */\nexport function createMissingDateImplError(provider: string) {\n  return Error(\n      `MatDatepicker: No provider found for ${provider}. You must import one of the following ` +\n      `modules at your application root: MatNativeDateModule, MatMomentDateModule, or provide a ` +\n      `custom implementation.`);\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 {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n\n/** Datepicker data that requires internationalization. */\n@Injectable({providedIn: 'root'})\nexport class MatDatepickerIntl {\n  /**\n   * Stream that emits whenever the labels here are changed. Use this to notify\n   * components if the labels have changed after initialization.\n   */\n  readonly changes: Subject<void> = new Subject<void>();\n\n  /** A label for the calendar popup (used by screen readers). */\n  calendarLabel: string = 'Calendar';\n\n  /** A label for the button used to open the calendar popup (used by screen readers). */\n  openCalendarLabel: string = 'Open calendar';\n\n  /** Label for the button used to close the calendar popup. */\n  closeCalendarLabel: string = 'Close calendar';\n\n  /** A label for the previous month button (used by screen readers). */\n  prevMonthLabel: string = 'Previous month';\n\n  /** A label for the next month button (used by screen readers). */\n  nextMonthLabel: string = 'Next month';\n\n  /** A label for the previous year button (used by screen readers). */\n  prevYearLabel: string = 'Previous year';\n\n  /** A label for the next year button (used by screen readers). */\n  nextYearLabel: string = 'Next year';\n\n  /** A label for the previous multi-year button (used by screen readers). */\n  prevMultiYearLabel: string = 'Previous 24 years';\n\n  /** A label for the next multi-year button (used by screen readers). */\n  nextMultiYearLabel: string = 'Next 24 years';\n\n  /** A label for the 'switch to month view' button (used by screen readers). */\n  switchToMonthViewLabel: string = 'Choose date';\n\n  /** A label for the 'switch to year view' button (used by screen readers). */\n  switchToMultiYearViewLabel: string = 'Choose month and year';\n\n  /** Formats a range of years. */\n  formatYearRange(start: string, end: string): string {\n    return `${start} \\u2013 ${end}`;\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 {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  ViewEncapsulation,\n  NgZone,\n  OnChanges,\n  SimpleChanges,\n  OnDestroy,\n} from '@angular/core';\nimport {take} from 'rxjs/operators';\n\n/** Extra CSS classes that can be associated with a calendar cell. */\nexport type MatCalendarCellCssClasses = string | string[] | Set<string> | {[key: string]: any};\n\n/** Function that can generate the extra classes that should be added to a calendar cell. */\nexport type MatCalendarCellClassFunction<D> =\n    (date: D, view: 'month' | 'year' | 'multi-year') => MatCalendarCellCssClasses;\n\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nexport class MatCalendarCell<D = any> {\n  constructor(public value: number,\n              public displayValue: string,\n              public ariaLabel: string,\n              public enabled: boolean,\n              public cssClasses: MatCalendarCellCssClasses = {},\n              public compareValue = value,\n              public rawValue?: D) {}\n}\n\n/** Event emitted when a date inside the calendar is triggered as a result of a user action. */\nexport interface MatCalendarUserEvent<D> {\n  value: D;\n  event: Event;\n}\n\n/**\n * An internal component used to display calendar data in a table.\n * @docs-private\n */\n@Component({\n  selector: '[mat-calendar-body]',\n  templateUrl: 'calendar-body.html',\n  styleUrls: ['calendar-body.css'],\n  host: {\n    'class': 'mat-calendar-body',\n  },\n  exportAs: 'matCalendarBody',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatCalendarBody implements OnChanges, OnDestroy {\n  /**\n   * Used to skip the next focus event when rendering the preview range.\n   * We need a flag like this, because some browsers fire focus events asynchronously.\n   */\n  private _skipNextFocus: boolean;\n\n  /** The label for the table. (e.g. \"Jan 2017\"). */\n  @Input() label: string;\n\n  /** The cells to display in the table. */\n  @Input() rows: MatCalendarCell[][];\n\n  /** The value in the table that corresponds to today. */\n  @Input() todayValue: number;\n\n  /** Start value of the selected date range. */\n  @Input() startValue: number;\n\n  /** End value of the selected date range. */\n  @Input() endValue: number;\n\n  /** The minimum number of free cells needed to fit the label in the first row. */\n  @Input() labelMinRequiredCells: number;\n\n  /** The number of columns in the table. */\n  @Input() numCols: number = 7;\n\n  /** The cell number of the active cell in the table. */\n  @Input() activeCell: number = 0;\n\n  /** Whether a range is being selected. */\n  @Input() isRange: boolean = false;\n\n  /**\n   * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n   * maintained even as the table resizes.\n   */\n  @Input() cellAspectRatio: number = 1;\n\n  /** Start of the comparison range. */\n  @Input() comparisonStart: number | null;\n\n  /** End of the comparison range. */\n  @Input() comparisonEnd: number | null;\n\n  /** Start of the preview range. */\n  @Input() previewStart: number | null = null;\n\n  /** End of the preview range. */\n  @Input() previewEnd: number | null = null;\n\n  /** Emits when a new value is selected. */\n  @Output() readonly selectedValueChange = new EventEmitter<MatCalendarUserEvent<number>>();\n\n  /** Emits when the preview has changed as a result of a user action. */\n  @Output() readonly previewChange =\n    new EventEmitter<MatCalendarUserEvent<MatCalendarCell | null>>();\n\n  /** The number of blank cells to put at the beginning for the first row. */\n  _firstRowOffset: number;\n\n  /** Padding for the individual date cells. */\n  _cellPadding: string;\n\n  /** Width of an individual cell. */\n  _cellWidth: string;\n\n  constructor(private _elementRef: ElementRef<HTMLElement>, private _ngZone: NgZone) {\n    _ngZone.runOutsideAngular(() => {\n      const element = _elementRef.nativeElement;\n      element.addEventListener('mouseenter', this._enterHandler, true);\n      element.addEventListener('focus', this._enterHandler, true);\n      element.addEventListener('mouseleave', this._leaveHandler, true);\n      element.addEventListener('blur', this._leaveHandler, true);\n    });\n  }\n\n  /** Called when a cell is clicked. */\n  _cellClicked(cell: MatCalendarCell, event: MouseEvent): void {\n    if (cell.enabled) {\n      this.selectedValueChange.emit({value: cell.value, event});\n    }\n  }\n\n  /** Returns whether a cell should be marked as selected. */\n  _isSelected(value: number) {\n    return this.startValue === value || this.endValue === value;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const columnChanges = changes['numCols'];\n    const {rows, numCols} = this;\n\n    if (changes['rows'] || columnChanges) {\n      this._firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n    }\n\n    if (changes['cellAspectRatio'] || columnChanges || !this._cellPadding) {\n      this._cellPadding = `${50 * this.cellAspectRatio / numCols}%`;\n    }\n\n    if (columnChanges || !this._cellWidth) {\n      this._cellWidth = `${100 / numCols}%`;\n    }\n  }\n\n  ngOnDestroy() {\n    const element = this._elementRef.nativeElement;\n    element.removeEventListener('mouseenter', this._enterHandler, true);\n    element.removeEventListener('focus', this._enterHandler, true);\n    element.removeEventListener('mouseleave', this._leaveHandler, true);\n    element.removeEventListener('blur', this._leaveHandler, true);\n  }\n\n  /** Returns whether a cell is active. */\n  _isActiveCell(rowIndex: number, colIndex: number): boolean {\n    let cellNumber = rowIndex * this.numCols + colIndex;\n\n    // Account for the fact that the first row may not have as many cells.\n    if (rowIndex) {\n      cellNumber -= this._firstRowOffset;\n    }\n\n    return cellNumber == this.activeCell;\n  }\n\n  /** Focuses the active cell after the microtask queue is empty. */\n  _focusActiveCell(movePreview = true) {\n    this._ngZone.runOutsideAngular(() => {\n      this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n        const activeCell: HTMLElement | null =\n            this._elementRef.nativeElement.querySelector('.mat-calendar-body-active');\n\n        if (activeCell) {\n          if (!movePreview) {\n            this._skipNextFocus = true;\n          }\n\n          activeCell.focus();\n        }\n      });\n    });\n  }\n\n  /** Gets whether a value is the start of the main range. */\n  _isRangeStart(value: number) {\n    return isStart(value, this.startValue, this.endValue);\n  }\n\n  /** Gets whether a value is the end of the main range. */\n  _isRangeEnd(value: number) {\n    return isEnd(value, this.startValue, this.endValue);\n  }\n\n  /** Gets whether a value is within the currently-selected range. */\n  _isInRange(value: number): boolean {\n    return isInRange(value, this.startValue, this.endValue, this.isRange);\n  }\n\n  /** Gets whether a value is the start of the comparison range. */\n  _isComparisonStart(value: number) {\n    return isStart(value, this.comparisonStart, this.comparisonEnd);\n  }\n\n  /** Whether the cell is a start bridge cell between the main and comparison ranges. */\n  _isComparisonBridgeStart(value: number, rowIndex: number, colIndex: number) {\n    if (!this._isComparisonStart(value) || this._isRangeStart(value) || !this._isInRange(value)) {\n      return false;\n    }\n\n    let previousCell: MatCalendarCell | undefined = this.rows[rowIndex][colIndex - 1];\n\n    if (!previousCell) {\n      const previousRow = this.rows[rowIndex - 1];\n      previousCell = previousRow && previousRow[previousRow.length - 1];\n    }\n\n    return previousCell && !this._isRangeEnd(previousCell.compareValue);\n  }\n\n  /** Whether the cell is an end bridge cell between the main and comparison ranges. */\n  _isComparisonBridgeEnd(value: number, rowIndex: number, colIndex: number) {\n    if (!this._isComparisonEnd(value) || this._isRangeEnd(value) || !this._isInRange(value)) {\n      return false;\n    }\n\n    let nextCell: MatCalendarCell | undefined = this.rows[rowIndex][colIndex + 1];\n\n    if (!nextCell) {\n      const nextRow = this.rows[rowIndex + 1];\n      nextCell = nextRow && nextRow[0];\n    }\n\n    return nextCell && !this._isRangeStart(nextCell.compareValue);\n  }\n\n  /** Gets whether a value is the end of the comparison range. */\n  _isComparisonEnd(value: number) {\n    return isEnd(value, this.comparisonStart, this.comparisonEnd);\n  }\n\n  /** Gets whether a value is within the current comparison range. */\n  _isInComparisonRange(value: number) {\n    return isInRange(value, this.comparisonStart, this.comparisonEnd, this.isRange);\n  }\n\n  /**\n   * Gets whether a value is the same as the start and end of the comparison range.\n   * For context, the functions that we use to determine whether something is the start/end of\n   * a range don't allow for the start and end to be on the same day, because we'd have to use\n   * much more specific CSS selectors to style them correctly in all scenarios. This is fine for\n   * the regular range, because when it happens, the selected styles take over and still show where\n   * the range would've been, however we don't have these selected styles for a comparison range.\n   * This function is used to apply a class that serves the same purpose as the one for selected\n   * dates, but it only applies in the context of a comparison range.\n   */\n  _isComparisonIdentical(value: number) {\n    // Note that we don't need to null check the start/end\n    // here, because the `value` will always be defined.\n    return this.comparisonStart === this.comparisonEnd && value === this.comparisonStart;\n  }\n\n  /** Gets whether a value is the start of the preview range. */\n  _isPreviewStart(value: number) {\n    return isStart(value, this.previewStart, this.previewEnd);\n  }\n\n  /** Gets whether a value is the end of the preview range. */\n  _isPreviewEnd(value: number) {\n    return isEnd(value, this.previewStart, this.previewEnd);\n  }\n\n  /** Gets whether a value is inside the preview range. */\n  _isInPreview(value: number) {\n    return isInRange(value, this.previewStart, this.previewEnd, this.isRange);\n  }\n\n  /**\n   * Event handler for when the user enters an element\n   * inside the calendar body (e.g. by hovering in or focus).\n   */\n  private _enterHandler = (event: Event) => {\n    if (this._skipNextFocus && event.type === 'focus') {\n      this._skipNextFocus = false;\n      return;\n    }\n\n    // We only need to hit the zone when we're selecting a range.\n    if (event.target && this.isRange) {\n      const cell = this._getCellFromElement(event.target as HTMLElement);\n\n      if (cell) {\n        this._ngZone.run(() => this.previewChange.emit({value: cell.enabled ? cell : null, event}));\n      }\n    }\n  }\n\n  /**\n   * Event handler for when the user's pointer leaves an element\n   * inside the calendar body (e.g. by hovering out or blurring).\n   */\n  private _leaveHandler = (event: Event) => {\n    // We only need to hit the zone when we're selecting a range.\n    if (this.previewEnd !== null && this.isRange) {\n      // Only reset the preview end value when leaving cells. This looks better, because\n      // we have a gap between the cells and the rows and we don't want to remove the\n      // range just for it to show up again when the user moves a few pixels to the side.\n      if (event.target && isTableCell(event.target as HTMLElement)) {\n        this._ngZone.run(() => this.previewChange.emit({value: null, event}));\n      }\n    }\n  }\n\n  /** Finds the MatCalendarCell that corresponds to a DOM node. */\n  private _getCellFromElement(element: HTMLElement): MatCalendarCell | null {\n    let cell: HTMLElement | undefined;\n\n    if (isTableCell(element)) {\n      cell = element;\n    } else if (isTableCell(element.parentNode!)) {\n      cell = element.parentNode as HTMLElement;\n    }\n\n    if (cell) {\n      const row = cell.getAttribute('data-mat-row');\n      const col = cell.getAttribute('data-mat-col');\n\n      if (row && col) {\n        return this.rows[parseInt(row)][parseInt(col)];\n      }\n    }\n\n    return null;\n  }\n\n}\n\n/** Checks whether a node is a table cell element. */\nfunction isTableCell(node: Node): node is HTMLTableCellElement {\n  return node.nodeName === 'TD';\n}\n\n/** Checks whether a value is the start of a range. */\nfunction isStart(value: number, start: number | null, end: number | null): boolean {\n  return end !== null && start !== end && value < end && value === start;\n}\n\n/** Checks whether a value is the end of a range. */\nfunction isEnd(value: number, start: number | null, end: number | null): boolean {\n  return start !== null && start !== end && value >= start && value === end;\n}\n\n/** Checks whether a value is inside of a range. */\nfunction isInRange(value: number,\n                   start: number | null,\n                   end: number | null,\n                   rangeEnabled: boolean): boolean {\n  return rangeEnabled && start !== null && end !== null && start !== end &&\n         value >= start && value <= end;\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 {FactoryProvider, Injectable, Optional, SkipSelf, OnDestroy} from '@angular/core';\nimport {DateAdapter} from '@angular/material/core';\nimport {Observable, Subject} from 'rxjs';\n\n/** A class representing a range of dates. */\nexport class DateRange<D> {\n  /**\n   * Ensures that objects with a `start` and `end` property can't be assigned to a variable that\n   * expects a `DateRange`\n   */\n  // tslint:disable-next-line:no-unused-variable\n  private _disableStructuralEquivalency: never;\n\n  constructor(\n    /** The start date of the range. */\n    readonly start: D | null,\n    /** The end date of the range. */\n    readonly end: D | null) {}\n}\n\n/**\n * Conditionally picks the date type, if a DateRange is passed in.\n * @docs-private\n */\nexport type ExtractDateTypeFromSelection<T> = T extends DateRange<infer D> ? D : NonNullable<T>;\n\n/**\n * Event emitted by the date selection model when its selection changes.\n * @docs-private\n */\nexport interface DateSelectionModelChange<S> {\n  /** New value for the selection. */\n  selection: S;\n\n  /** Object that triggered the change. */\n  source: unknown;\n\n  /** Previous value */\n  oldValue?: S;\n}\n\n/**\n * A selection model containing a date selection.\n * @docs-private\n */\n@Injectable()\nexport abstract class MatDateSelectionModel<S, D = ExtractDateTypeFromSelection<S>>\n    implements OnDestroy {\n  private readonly _selectionChanged = new Subject<DateSelectionModelChange<S>>();\n\n  /** Emits when the selection has changed. */\n  selectionChanged: Observable<DateSelectionModelChange<S>> = this._selectionChanged;\n\n  protected constructor(\n    /** The current selection. */\n    readonly selection: S,\n    protected _adapter: DateAdapter<D>) {\n    this.selection = selection;\n  }\n\n  /**\n   * Updates the current selection in the model.\n   * @param value New selection that should be assigned.\n   * @param source Object that triggered the selection change.\n   */\n  updateSelection(value: S, source: unknown) {\n    const oldValue = (this as {selection: S}).selection;\n    (this as {selection: S}).selection = value;\n    this._selectionChanged.next({selection: value, source, oldValue});\n  }\n\n  ngOnDestroy() {\n    this._selectionChanged.complete();\n  }\n\n  protected _isValidDateInstance(date: D): boolean {\n    return this._adapter.isDateInstance(date) && this._adapter.isValid(date);\n  }\n\n  /** Adds a date to the current selection. */\n  abstract add(date: D | null): void;\n\n  /** Checks whether the current selection is valid. */\n  abstract isValid(): boolean;\n\n  /** Checks whether the current selection is complete. */\n  abstract isComplete(): boolean;\n\n  /** Clones the selection model. */\n  abstract clone(): MatDateSelectionModel<S, D>;\n}\n\n/**\n * A selection model that contains a single date.\n * @docs-private\n */\n@Injectable()\nexport class MatSingleDateSelectionModel<D> extends MatDateSelectionModel<D | null, D> {\n  constructor(adapter: DateAdapter<D>) {\n    super(null, adapter);\n  }\n\n  /**\n   * Adds a date to the current selection. In the case of a single date selection, the added date\n   * simply overwrites the previous selection\n   */\n  add(date: D | null) {\n    super.updateSelection(date, this);\n  }\n\n  /** Checks whether the current selection is valid. */\n  isValid(): boolean {\n    return this.selection != null && this._isValidDateInstance(this.selection);\n  }\n\n  /**\n   * Checks whether the current selection is complete. In the case of a single date selection, this\n   * is true if the current selection is not null.\n   */\n  isComplete() {\n    return this.selection != null;\n  }\n\n  /** Clones the selection model. */\n  clone() {\n    const clone = new MatSingleDateSelectionModel<D>(this._adapter);\n    clone.updateSelection(this.selection, this);\n    return clone;\n  }\n}\n\n/**\n * A selection model that contains a date range.\n * @docs-private\n */\n@Injectable()\nexport class MatRangeDateSelectionModel<D> extends MatDateSelectionModel<DateRange<D>, D> {\n  constructor(adapter: DateAdapter<D>) {\n    super(new DateRange<D>(null, null), adapter);\n  }\n\n  /**\n   * Adds a date to the current selection. In the case of a date range selection, the added date\n   * fills in the next `null` value in the range. If both the start and the end already have a date,\n   * the selection is reset so that the given date is the new `start` and the `end` is null.\n   */\n  add(date: D | null): void {\n    let {start, end} = this.selection;\n\n    if (start == null) {\n      start = date;\n    } else if (end == null) {\n      end = date;\n    } else {\n      start = date;\n      end = null;\n    }\n\n    super.updateSelection(new DateRange<D>(start, end), this);\n  }\n\n  /** Checks whether the current selection is valid. */\n  isValid(): boolean {\n    const {start, end} = this.selection;\n\n    // Empty ranges are valid.\n    if (start == null && end == null) {\n      return true;\n    }\n\n    // Complete ranges are only valid if both dates are valid and the start is before the end.\n    if (start != null && end != null) {\n      return this._isValidDateInstance(start) && this._isValidDateInstance(end) &&\n             this._adapter.compareDate(start, end) <= 0;\n    }\n\n    // Partial ranges are valid if the start/end is valid.\n    return (start == null || this._isValidDateInstance(start)) &&\n           (end == null || this._isValidDateInstance(end));\n  }\n\n  /**\n   * Checks whether the current selection is complete. In the case of a date range selection, this\n   * is true if the current selection has a non-null `start` and `end`.\n   */\n  isComplete(): boolean {\n    return this.selection.start != null && this.selection.end != null;\n  }\n\n  /** Clones the selection model. */\n  clone() {\n    const clone = new MatRangeDateSelectionModel<D>(this._adapter);\n    clone.updateSelection(this.selection, this);\n    return clone;\n  }\n}\n\n/** @docs-private */\nexport function MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY(\n    parent: MatSingleDateSelectionModel<unknown>, adapter: DateAdapter<unknown>) {\n  return parent || new MatSingleDateSelectionModel(adapter);\n}\n\n/**\n * Used to provide a single selection model to a component.\n * @docs-private\n */\nexport const MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER: FactoryProvider = {\n  provide: MatDateSelectionModel,\n  deps: [[new Optional(), new SkipSelf(), MatDateSelectionModel], DateAdapter],\n  useFactory: MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY,\n};\n\n\n/** @docs-private */\nexport function MAT_RANGE_DATE_SELECTION_MODEL_FACTORY(\n    parent: MatSingleDateSelectionModel<unknown>, adapter: DateAdapter<unknown>) {\n  return parent || new MatRangeDateSelectionModel(adapter);\n}\n\n/**\n * Used to provide a range selection model to a component.\n * @docs-private\n */\nexport const MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER: FactoryProvider = {\n  provide: MatDateSelectionModel,\n  deps: [[new Optional(), new SkipSelf(), MatDateSelectionModel], DateAdapter],\n  useFactory: MAT_RANGE_DATE_SELECTION_MODEL_FACTORY,\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 {Injectable, InjectionToken, Optional, SkipSelf, FactoryProvider} from '@angular/core';\nimport {DateAdapter} from '@angular/material/core';\nimport {DateRange} from './date-selection-model';\n\n/** Injection token used to customize the date range selection behavior. */\nexport const MAT_DATE_RANGE_SELECTION_STRATEGY =\n    new InjectionToken<MatDateRangeSelectionStrategy<any>>('MAT_DATE_RANGE_SELECTION_STRATEGY');\n\n/** Object that can be provided in order to customize the date range selection behavior. */\nexport interface MatDateRangeSelectionStrategy<D> {\n  /**\n   * Called when the user has finished selecting a value.\n   * @param date Date that was selected. Will be null if the user cleared the selection.\n   * @param currentRange Range that is currently show in the calendar.\n   * @param event DOM event that triggered the selection. Currently only corresponds to a `click`\n   *    event, but it may get expanded in the future.\n   */\n  selectionFinished(date: D | null, currentRange: DateRange<D>, event: Event): DateRange<D>;\n\n  /**\n   * Called when the user has activated a new date (e.g. by hovering over\n   * it or moving focus) and the calendar tries to display a date range.\n   *\n   * @param activeDate Date that the user has activated. Will be null if the user moved\n   *    focus to an element that's no a calendar cell.\n   * @param currentRange Range that is currently shown in the calendar.\n   * @param event DOM event that caused the preview to be changed. Will be either a\n   *    `mouseenter`/`mouseleave` or `focus`/`blur` depending on how the user is navigating.\n   */\n  createPreview(activeDate: D | null, currentRange: DateRange<D>, event: Event): DateRange<D>;\n}\n\n/** Provides the default date range selection behavior. */\n@Injectable()\nexport class DefaultMatCalendarRangeStrategy<D> implements MatDateRangeSelectionStrategy<D> {\n  constructor(private _dateAdapter: DateAdapter<D>) {}\n\n  selectionFinished(date: D, currentRange: DateRange<D>) {\n    let {start, end} = currentRange;\n\n    if (start == null) {\n      start = date;\n    } else if (end == null && date && this._dateAdapter.compareDate(date, start) >= 0) {\n      end = date;\n    } else {\n      start = date;\n      end = null;\n    }\n\n    return new DateRange<D>(start, end);\n  }\n\n  createPreview(activeDate: D | null, currentRange: DateRange<D>) {\n    let start: D | null = null;\n    let end: D | null = null;\n\n    if (currentRange.start && !currentRange.end && activeDate) {\n      start = currentRange.start;\n      end = activeDate;\n    }\n\n    return new DateRange<D>(start, end);\n  }\n}\n\n\n/** @docs-private */\nexport function MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY(\n  parent: MatDateRangeSelectionStrategy<unknown>, adapter: DateAdapter<unknown>) {\n  return parent || new DefaultMatCalendarRangeStrategy(adapter);\n}\n\n/** @docs-private */\nexport const MAT_CALENDAR_RANGE_STRATEGY_PROVIDER: FactoryProvider = {\n  provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n  deps: [[new Optional(), new SkipSelf(), MAT_DATE_RANGE_SELECTION_STRATEGY], DateAdapter],\n  useFactory: MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY,\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 {\n  DOWN_ARROW,\n  END,\n  ENTER,\n  HOME,\n  LEFT_ARROW,\n  PAGE_DOWN,\n  PAGE_UP,\n  RIGHT_ARROW,\n  UP_ARROW,\n  SPACE,\n  ESCAPE,\n  hasModifierKey,\n} from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  Optional,\n  Output,\n  ViewEncapsulation,\n  ViewChild,\n  OnDestroy,\n  SimpleChanges,\n  OnChanges,\n} from '@angular/core';\nimport {DateAdapter, MAT_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n  MatCalendarBody,\n  MatCalendarCell,\n  MatCalendarUserEvent,\n  MatCalendarCellClassFunction,\n} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {Subscription} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {DateRange} from './date-selection-model';\nimport {\n  MatDateRangeSelectionStrategy,\n  MAT_DATE_RANGE_SELECTION_STRATEGY,\n} from './date-range-selection-strategy';\n\n\nconst DAYS_PER_WEEK = 7;\n\n\n/**\n * An internal component used to display a single month in the datepicker.\n * @docs-private\n */\n@Component({\n  selector: 'mat-month-view',\n  templateUrl: 'month-view.html',\n  exportAs: 'matMonthView',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatMonthView<D> implements AfterContentInit, OnChanges, OnDestroy {\n  private _rerenderSubscription = Subscription.EMPTY;\n\n  /** Flag used to filter out space/enter keyup events that originated outside of the view. */\n  private _selectionKeyPressed: boolean;\n\n  /**\n   * The date to display in this month view (everything other than the month and year is ignored).\n   */\n  @Input()\n  get activeDate(): D { return this._activeDate; }\n  set activeDate(value: D) {\n    const oldActiveDate = this._activeDate;\n    const validDate =\n      this._dateAdapter.getValidDateOrNull(\n        this._dateAdapter.deserialize(value)\n      ) || this._dateAdapter.today();\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n    if (!this._hasSameMonthAndYear(oldActiveDate, this._activeDate)) {\n      this._init();\n    }\n  }\n  private _activeDate: D;\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): DateRange<D> | D | null { return this._selected; }\n  set selected(value: DateRange<D> | D | null) {\n    if (value instanceof DateRange) {\n      this._selected = value;\n    } else {\n      this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n    }\n\n    this._setRanges(this._selected);\n  }\n  private _selected: DateRange<D> | D | null;\n\n  /** The minimum selectable date. */\n  @Input()\n  get minDate(): D | null { return this._minDate; }\n  set minDate(value: D | null) {\n    this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _minDate: D | null;\n\n  /** The maximum selectable date. */\n  @Input()\n  get maxDate(): D | null { return this._maxDate; }\n  set maxDate(value: D | null) {\n    this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _maxDate: D | null;\n\n  /** Function used to filter which dates are selectable. */\n  @Input() dateFilter: (date: D) => boolean;\n\n  /** Function that can be used to add custom CSS classes to dates. */\n  @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n  /** Start of the comparison range. */\n  @Input() comparisonStart: D | null;\n\n  /** End of the comparison range. */\n  @Input() comparisonEnd: D | null;\n\n  /** Emits when a new date is selected. */\n  @Output() readonly selectedChange: EventEmitter<D | null> = new EventEmitter<D | null>();\n\n  /** Emits when any date is selected. */\n  @Output() readonly _userSelection: EventEmitter<MatCalendarUserEvent<D | null>> =\n      new EventEmitter<MatCalendarUserEvent<D | null>>();\n\n  /** Emits when any date is activated. */\n  @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** The body of calendar table */\n  @ViewChild(MatCalendarBody) _matCalendarBody: MatCalendarBody;\n\n  /** The label for this month (e.g. \"January 2017\"). */\n  _monthLabel: string;\n\n  /** Grid of calendar cells representing the dates of the month. */\n  _weeks: MatCalendarCell[][];\n\n  /** The number of blank cells in the first row before the 1st of the month. */\n  _firstWeekOffset: number;\n\n  /** Start value of the currently-shown date range. */\n  _rangeStart: number | null;\n\n  /** End value of the currently-shown date range. */\n  _rangeEnd: number | null;\n\n  /** Start value of the currently-shown comparison date range. */\n  _comparisonRangeStart: number | null;\n\n  /** End value of the currently-shown comparison date range. */\n  _comparisonRangeEnd: number | null;\n\n  /** Start of the preview range. */\n  _previewStart: number | null;\n\n  /** End of the preview range. */\n  _previewEnd: number | null;\n\n  /** Whether the user is currently selecting a range of dates. */\n  _isRange: boolean;\n\n  /** The date of the month that today falls on. Null if today is in another month. */\n  _todayDate: number | null;\n\n  /** The names of the weekdays. */\n  _weekdays: {long: string, narrow: string}[];\n\n  constructor(readonly _changeDetectorRef: ChangeDetectorRef,\n              @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n              @Optional() public _dateAdapter: DateAdapter<D>,\n              @Optional() private _dir?: Directionality,\n              @Inject(MAT_DATE_RANGE_SELECTION_STRATEGY) @Optional()\n                  private _rangeStrategy?: MatDateRangeSelectionStrategy<D>) {\n\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._dateAdapter) {\n        throw createMissingDateImplError('DateAdapter');\n      }\n      if (!this._dateFormats) {\n        throw createMissingDateImplError('MAT_DATE_FORMATS');\n      }\n    }\n\n    this._activeDate = this._dateAdapter.today();\n  }\n\n  ngAfterContentInit() {\n    this._rerenderSubscription = this._dateAdapter.localeChanges\n      .pipe(startWith(null))\n      .subscribe(() => this._init());\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const comparisonChange = changes['comparisonStart'] || changes['comparisonEnd'];\n\n    if (comparisonChange && !comparisonChange.firstChange) {\n      this._setRanges(this.selected);\n    }\n  }\n\n  ngOnDestroy() {\n    this._rerenderSubscription.unsubscribe();\n  }\n\n  /** Handles when a new date is selected. */\n  _dateSelected(event: MatCalendarUserEvent<number>) {\n    const date = event.value;\n    const selectedYear = this._dateAdapter.getYear(this.activeDate);\n    const selectedMonth = this._dateAdapter.getMonth(this.activeDate);\n    const selectedDate = this._dateAdapter.createDate(selectedYear, selectedMonth, date);\n    let rangeStartDate: number | null;\n    let rangeEndDate: number | null;\n\n    if (this._selected instanceof DateRange) {\n      rangeStartDate = this._getDateInCurrentMonth(this._selected.start);\n      rangeEndDate = this._getDateInCurrentMonth(this._selected.end);\n    } else {\n      rangeStartDate = rangeEndDate = this._getDateInCurrentMonth(this._selected);\n    }\n\n    if (rangeStartDate !== date || rangeEndDate !== date) {\n      this.selectedChange.emit(selectedDate);\n    }\n\n    this._userSelection.emit({value: selectedDate, event: event.event});\n    this._previewStart = this._previewEnd = null;\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Handles keydown events on the calendar body when calendar is in month view. */\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n    // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n    // disabled ones from being selected. This may not be ideal, we should look into whether\n    // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n    const oldActiveDate = this._activeDate;\n    const isRtl = this._isRtl();\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? 1 : -1);\n        break;\n      case RIGHT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? -1 : 1);\n        break;\n      case UP_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -7);\n        break;\n      case DOWN_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 7);\n        break;\n      case HOME:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate,\n            1 - this._dateAdapter.getDate(this._activeDate));\n        break;\n      case END:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate,\n            (this._dateAdapter.getNumDaysInMonth(this._activeDate) -\n              this._dateAdapter.getDate(this._activeDate)));\n        break;\n      case PAGE_UP:\n        this.activeDate = event.altKey ?\n            this._dateAdapter.addCalendarYears(this._activeDate, -1) :\n            this._dateAdapter.addCalendarMonths(this._activeDate, -1);\n        break;\n      case PAGE_DOWN:\n        this.activeDate = event.altKey ?\n            this._dateAdapter.addCalendarYears(this._activeDate, 1) :\n            this._dateAdapter.addCalendarMonths(this._activeDate, 1);\n        break;\n      case ENTER:\n      case SPACE:\n        this._selectionKeyPressed = true;\n\n        if (this._canSelect(this._activeDate)) {\n          // Prevent unexpected default actions such as form submission.\n          // Note that we only prevent the default action here while the selection happens in\n          // `keyup` below. We can't do the selection here, because it can cause the calendar to\n          // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n          // because it's too late (see #23305).\n          event.preventDefault();\n        }\n        return;\n      case ESCAPE:\n        // Abort the current range selection if the user presses escape mid-selection.\n        if (this._previewEnd != null && !hasModifierKey(event)) {\n          this._previewStart = this._previewEnd = null;\n          this.selectedChange.emit(null);\n          this._userSelection.emit({value: null, event});\n          event.preventDefault();\n          event.stopPropagation(); // Prevents the overlay from closing.\n        }\n        return;\n      default:\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n        return;\n    }\n\n    if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n      this.activeDateChange.emit(this.activeDate);\n    }\n\n    this._focusActiveCell();\n    // Prevent unexpected default actions such as form submission.\n    event.preventDefault();\n  }\n\n  /** Handles keyup events on the calendar body when calendar is in month view. */\n  _handleCalendarBodyKeyup(event: KeyboardEvent): void {\n    if (event.keyCode === SPACE || event.keyCode === ENTER) {\n      if (this._selectionKeyPressed && this._canSelect(this._activeDate)) {\n        this._dateSelected({value: this._dateAdapter.getDate(this._activeDate), event});\n      }\n\n      this._selectionKeyPressed = false;\n    }\n  }\n\n  /** Initializes this month view. */\n  _init() {\n    this._setRanges(this.selected);\n    this._todayDate = this._getCellCompareValue(this._dateAdapter.today());\n    this._monthLabel = this._dateFormats.display.monthLabel\n        ? this._dateAdapter.format(this.activeDate, this._dateFormats.display.monthLabel)\n        : this._dateAdapter.getMonthNames('short')[this._dateAdapter.getMonth(this.activeDate)]\n            .toLocaleUpperCase();\n\n    let firstOfMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),\n        this._dateAdapter.getMonth(this.activeDate), 1);\n    this._firstWeekOffset =\n        (DAYS_PER_WEEK + this._dateAdapter.getDayOfWeek(firstOfMonth) -\n         this._dateAdapter.getFirstDayOfWeek()) % DAYS_PER_WEEK;\n\n    this._initWeekdays();\n    this._createWeekCells();\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Focuses the active cell after the microtask queue is empty. */\n  _focusActiveCell(movePreview?: boolean) {\n    this._matCalendarBody._focusActiveCell(movePreview);\n  }\n\n  /** Called when the user has activated a new cell and the preview needs to be updated. */\n  _previewChanged({event, value: cell}: MatCalendarUserEvent<MatCalendarCell<D> | null>) {\n    if (this._rangeStrategy) {\n      // We can assume that this will be a range, because preview\n      // events aren't fired for single date selections.\n      const value = cell ? cell.rawValue! : null;\n      const previewRange =\n          this._rangeStrategy.createPreview(value, this.selected as DateRange<D>, event);\n      this._previewStart = this._getCellCompareValue(previewRange.start);\n      this._previewEnd = this._getCellCompareValue(previewRange.end);\n\n      // Note that here we need to use `detectChanges`, rather than `markForCheck`, because\n      // the way `_focusActiveCell` is set up at the moment makes it fire at the wrong time\n      // when navigating one month back using the keyboard which will cause this handler\n      // to throw a \"changed after checked\" error when updating the preview state.\n      this._changeDetectorRef.detectChanges();\n    }\n  }\n\n  /** Initializes the weekdays. */\n  private _initWeekdays() {\n    const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();\n    const narrowWeekdays = this._dateAdapter.getDayOfWeekNames('narrow');\n    const longWeekdays = this._dateAdapter.getDayOfWeekNames('long');\n\n    // Rotate the labels for days of the week based on the configured first day of the week.\n    let weekdays = longWeekdays.map((long, i) => {\n        return {long, narrow: narrowWeekdays[i]};\n    });\n    this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n  }\n\n  /** Creates MatCalendarCells for the dates in this month. */\n  private _createWeekCells() {\n    const daysInMonth = this._dateAdapter.getNumDaysInMonth(this.activeDate);\n    const dateNames = this._dateAdapter.getDateNames();\n    this._weeks = [[]];\n    for (let i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {\n      if (cell == DAYS_PER_WEEK) {\n        this._weeks.push([]);\n        cell = 0;\n      }\n      const date = this._dateAdapter.createDate(\n            this._dateAdapter.getYear(this.activeDate),\n            this._dateAdapter.getMonth(this.activeDate), i + 1);\n      const enabled = this._shouldEnableDate(date);\n      const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.dateA11yLabel);\n      const cellClasses = this.dateClass ? this.dateClass(date, 'month') : undefined;\n\n      this._weeks[this._weeks.length - 1].push(new MatCalendarCell<D>(i + 1, dateNames[i],\n          ariaLabel, enabled, cellClasses, this._getCellCompareValue(date)!, date));\n    }\n  }\n\n  /** Date filter for the month */\n  private _shouldEnableDate(date: D): boolean {\n    return !!date &&\n        (!this.minDate || this._dateAdapter.compareDate(date, this.minDate) >= 0) &&\n        (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate) <= 0) &&\n        (!this.dateFilter || this.dateFilter(date));\n  }\n\n  /**\n   * Gets the date in this month that the given Date falls on.\n   * Returns null if the given Date is in another month.\n   */\n  private _getDateInCurrentMonth(date: D | null): number | null {\n    return date && this._hasSameMonthAndYear(date, this.activeDate) ?\n        this._dateAdapter.getDate(date) : null;\n  }\n\n  /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\n  private _hasSameMonthAndYear(d1: D | null, d2: D | null): boolean {\n    return !!(d1 && d2 && this._dateAdapter.getMonth(d1) == this._dateAdapter.getMonth(d2) &&\n              this._dateAdapter.getYear(d1) == this._dateAdapter.getYear(d2));\n  }\n\n  /** Gets the value that will be used to one cell to another. */\n  private _getCellCompareValue(date: D | null): number | null {\n    if (date) {\n      // We use the time since the Unix epoch to compare dates in this view, rather than the\n      // cell values, because we need to support ranges that span across multiple months/years.\n      const year = this._dateAdapter.getYear(date);\n      const month = this._dateAdapter.getMonth(date);\n      const day = this._dateAdapter.getDate(date);\n      return new Date(year, month, day).getTime();\n    }\n\n    return null;\n  }\n\n  /** Determines whether the user has the RTL layout direction. */\n  private _isRtl() {\n    return this._dir && this._dir.value === 'rtl';\n  }\n\n  /** Sets the current range based on a model value. */\n  private _setRanges(selectedValue: DateRange<D> | D | null) {\n    if (selectedValue instanceof DateRange) {\n      this._rangeStart = this._getCellCompareValue(selectedValue.start);\n      this._rangeEnd = this._getCellCompareValue(selectedValue.end);\n      this._isRange = true;\n    } else {\n      this._rangeStart = this._rangeEnd = this._getCellCompareValue(selectedValue);\n      this._isRange = false;\n    }\n\n    this._comparisonRangeStart = this._getCellCompareValue(this.comparisonStart);\n    this._comparisonRangeEnd = this._getCellCompareValue(this.comparisonEnd);\n  }\n\n  /** Gets whether a date can be selected in the month view. */\n  private _canSelect(date: D) {\n    return !this.dateFilter || this.dateFilter(date);\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 {\n  DOWN_ARROW,\n  END,\n  ENTER,\n  HOME,\n  LEFT_ARROW,\n  PAGE_DOWN,\n  PAGE_UP,\n  RIGHT_ARROW,\n  UP_ARROW,\n  SPACE,\n} from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  Optional,\n  Output,\n  ViewChild,\n  ViewEncapsulation,\n  OnDestroy,\n} from '@angular/core';\nimport {DateAdapter} from '@angular/material/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n  MatCalendarBody,\n  MatCalendarCell,\n  MatCalendarUserEvent,\n  MatCalendarCellClassFunction,\n} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {Subscription} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {DateRange} from './date-selection-model';\n\nexport const yearsPerPage = 24;\n\nexport const yearsPerRow = 4;\n\n/**\n * An internal component used to display a year selector in the datepicker.\n * @docs-private\n */\n@Component({\n  selector: 'mat-multi-year-view',\n  templateUrl: 'multi-year-view.html',\n  exportAs: 'matMultiYearView',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatMultiYearView<D> implements AfterContentInit, OnDestroy {\n  private _rerenderSubscription = Subscription.EMPTY;\n\n  /** Flag used to filter out space/enter keyup events that originated outside of the view. */\n  private _selectionKeyPressed: boolean;\n\n  /** The date to display in this multi-year view (everything other than the year is ignored). */\n  @Input()\n  get activeDate(): D { return this._activeDate; }\n  set activeDate(value: D) {\n    let oldActiveDate = this._activeDate;\n    const validDate =\n      this._dateAdapter.getValidDateOrNull(\n        this._dateAdapter.deserialize(value)\n      ) || this._dateAdapter.today();\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n\n    if (!isSameMultiYearView(\n      this._dateAdapter, oldActiveDate, this._activeDate, this.minDate, this.maxDate)) {\n      this._init();\n    }\n  }\n  private _activeDate: D;\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): DateRange<D> | D | null { return this._selected; }\n  set selected(value: DateRange<D> | D | null) {\n    if (value instanceof DateRange) {\n      this._selected = value;\n    } else {\n      this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n    }\n\n    this._setSelectedYear(value);\n  }\n  private _selected: DateRange<D> | D | null;\n\n\n  /** The minimum selectable date. */\n  @Input()\n  get minDate(): D | null { return this._minDate; }\n  set minDate(value: D | null) {\n    this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _minDate: D | null;\n\n  /** The maximum selectable date. */\n  @Input()\n  get maxDate(): D | null { return this._maxDate; }\n  set maxDate(value: D | null) {\n    this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _maxDate: D | null;\n\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter: (date: D) => boolean;\n\n  /** Function that can be used to add custom CSS classes to date cells. */\n  @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n  /** Emits when a new year is selected. */\n  @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** Emits the selected year. This doesn't imply a change on the selected date */\n  @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /** Emits when any date is activated. */\n  @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** The body of calendar table */\n  @ViewChild(MatCalendarBody) _matCalendarBody: MatCalendarBody;\n\n  /** Grid of calendar cells representing the currently displayed years. */\n  _years: MatCalendarCell[][];\n\n  /** The year that today falls on. */\n  _todayYear: number;\n\n  /** The year of the selected date. Null if the selected date is null. */\n  _selectedYear: number | null;\n\n  constructor(private _changeDetectorRef: ChangeDetectorRef,\n              @Optional() public _dateAdapter: DateAdapter<D>,\n              @Optional() private _dir?: Directionality) {\n    if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw createMissingDateImplError('DateAdapter');\n    }\n\n    this._activeDate = this._dateAdapter.today();\n  }\n\n  ngAfterContentInit() {\n    this._rerenderSubscription = this._dateAdapter.localeChanges\n      .pipe(startWith(null))\n      .subscribe(() => this._init());\n  }\n\n  ngOnDestroy() {\n    this._rerenderSubscription.unsubscribe();\n  }\n\n  /** Initializes this multi-year view. */\n  _init() {\n    this._todayYear = this._dateAdapter.getYear(this._dateAdapter.today());\n\n    // We want a range years such that we maximize the number of\n    // enabled dates visible at once. This prevents issues where the minimum year\n    // is the last item of a page OR the maximum year is the first item of a page.\n\n    // The offset from the active year to the \"slot\" for the starting year is the\n    // *actual* first rendered year in the multi-year view.\n    const activeYear = this._dateAdapter.getYear(this._activeDate);\n    const minYearOfPage = activeYear - getActiveOffset(\n      this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n\n    this._years = [];\n    for (let i = 0, row: number[] = []; i < yearsPerPage; i++) {\n      row.push(minYearOfPage + i);\n      if (row.length == yearsPerRow) {\n        this._years.push(row.map(year => this._createCellForYear(year)));\n        row = [];\n      }\n    }\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Handles when a new year is selected. */\n  _yearSelected(event: MatCalendarUserEvent<number>) {\n    const year = event.value;\n    this.yearSelected.emit(this._dateAdapter.createDate(year, 0, 1));\n    let month = this._dateAdapter.getMonth(this.activeDate);\n    let daysInMonth =\n        this._dateAdapter.getNumDaysInMonth(this._dateAdapter.createDate(year, month, 1));\n    this.selectedChange.emit(this._dateAdapter.createDate(year, month,\n        Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth)));\n  }\n\n  /** Handles keydown events on the calendar body when calendar is in multi-year view. */\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n    const oldActiveDate = this._activeDate;\n    const isRtl = this._isRtl();\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? 1 : -1);\n        break;\n      case RIGHT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? -1 : 1);\n        break;\n      case UP_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -yearsPerRow);\n        break;\n      case DOWN_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerRow);\n        break;\n      case HOME:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate,\n          -getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate));\n        break;\n      case END:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate,\n          yearsPerPage - getActiveOffset(\n            this._dateAdapter, this.activeDate, this.minDate, this.maxDate) - 1);\n        break;\n      case PAGE_UP:\n        this.activeDate =\n            this._dateAdapter.addCalendarYears(\n                this._activeDate, event.altKey ? -yearsPerPage * 10 : -yearsPerPage);\n        break;\n      case PAGE_DOWN:\n        this.activeDate =\n            this._dateAdapter.addCalendarYears(\n                this._activeDate, event.altKey ? yearsPerPage * 10 : yearsPerPage);\n        break;\n      case ENTER:\n      case SPACE:\n        // Note that we only prevent the default action here while the selection happens in\n        // `keyup` below. We can't do the selection here, because it can cause the calendar to\n        // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n        // because it's too late (see #23305).\n        this._selectionKeyPressed = true;\n        break;\n      default:\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n        return;\n    }\n    if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n      this.activeDateChange.emit(this.activeDate);\n    }\n\n    this._focusActiveCell();\n    // Prevent unexpected default actions such as form submission.\n    event.preventDefault();\n  }\n\n  /** Handles keyup events on the calendar body when calendar is in multi-year view. */\n  _handleCalendarBodyKeyup(event: KeyboardEvent): void {\n    if (event.keyCode === SPACE || event.keyCode === ENTER) {\n      if (this._selectionKeyPressed) {\n        this._yearSelected({value: this._dateAdapter.getYear(this._activeDate), event});\n      }\n\n      this._selectionKeyPressed = false;\n    }\n  }\n\n  _getActiveCell(): number {\n    return getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n  }\n\n  /** Focuses the active cell after the microtask queue is empty. */\n  _focusActiveCell() {\n    this._matCalendarBody._focusActiveCell();\n  }\n\n  /** Creates an MatCalendarCell for the given year. */\n  private _createCellForYear(year: number) {\n    const date = this._dateAdapter.createDate(year, 0, 1);\n    const yearName = this._dateAdapter.getYearName(date);\n    const cellClasses = this.dateClass ? this.dateClass(date, 'multi-year') : undefined;\n\n    return new MatCalendarCell(year, yearName, yearName, this._shouldEnableYear(year), cellClasses);\n  }\n\n  /** Whether the given year is enabled. */\n  private _shouldEnableYear(year: number) {\n    // disable if the year is greater than maxDate lower than minDate\n    if (year === undefined || year === null ||\n        (this.maxDate && year > this._dateAdapter.getYear(this.maxDate)) ||\n        (this.minDate && year < this._dateAdapter.getYear(this.minDate))) {\n      return false;\n    }\n\n    // enable if it reaches here and there's no filter defined\n    if (!this.dateFilter) {\n      return true;\n    }\n\n    const firstOfYear = this._dateAdapter.createDate(year, 0, 1);\n\n    // If any date in the year is enabled count the year as enabled.\n    for (let date = firstOfYear; this._dateAdapter.getYear(date) == year;\n      date = this._dateAdapter.addCalendarDays(date, 1)) {\n      if (this.dateFilter(date)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /** Determines whether the user has the RTL layout direction. */\n  private _isRtl() {\n    return this._dir && this._dir.value === 'rtl';\n  }\n\n  /** Sets the currently-highlighted year based on a model value. */\n  private _setSelectedYear(value: DateRange<D> | D | null) {\n    this._selectedYear = null;\n\n    if (value instanceof DateRange) {\n      const displayValue = value.start || value.end;\n\n      if (displayValue) {\n        this._selectedYear = this._dateAdapter.getYear(displayValue);\n      }\n    } else if (value) {\n      this._selectedYear = this._dateAdapter.getYear(value);\n    }\n  }\n}\n\nexport function isSameMultiYearView<D>(\n  dateAdapter: DateAdapter<D>, date1: D, date2: D, minDate: D | null, maxDate: D | null): boolean {\n  const year1 = dateAdapter.getYear(date1);\n  const year2 = dateAdapter.getYear(date2);\n  const startingYear = getStartingYear(dateAdapter, minDate, maxDate);\n  return Math.floor((year1 - startingYear) / yearsPerPage) ===\n          Math.floor((year2 - startingYear) / yearsPerPage);\n}\n\n/**\n * When the multi-year view is first opened, the active year will be in view.\n * So we compute how many years are between the active year and the *slot* where our\n * \"startingYear\" will render when paged into view.\n */\nexport function getActiveOffset<D>(\n  dateAdapter: DateAdapter<D>, activeDate: D, minDate: D | null, maxDate: D | null): number {\n  const activeYear = dateAdapter.getYear(activeDate);\n  return euclideanModulo((activeYear - getStartingYear(dateAdapter, minDate, maxDate)),\n    yearsPerPage);\n}\n\n/**\n * We pick a \"starting\" year such that either the maximum year would be at the end\n * or the minimum year would be at the beginning of a page.\n */\nfunction getStartingYear<D>(\n  dateAdapter: DateAdapter<D>, minDate: D | null, maxDate: D | null): number {\n  let startingYear = 0;\n  if (maxDate) {\n    const maxYear = dateAdapter.getYear(maxDate);\n    startingYear = maxYear - yearsPerPage + 1;\n  } else if (minDate) {\n    startingYear = dateAdapter.getYear(minDate);\n  }\n  return startingYear;\n}\n\n/** Gets remainder that is non-negative, even if first number is negative */\nfunction euclideanModulo (a: number, b: number): number {\n  return (a % b + b) % b;\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 {\n  DOWN_ARROW,\n  END,\n  ENTER,\n  HOME,\n  LEFT_ARROW,\n  PAGE_DOWN,\n  PAGE_UP,\n  RIGHT_ARROW,\n  UP_ARROW,\n  SPACE,\n} from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  Optional,\n  Output,\n  ViewChild,\n  ViewEncapsulation,\n  OnDestroy,\n} from '@angular/core';\nimport {DateAdapter, MAT_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n  MatCalendarBody,\n  MatCalendarCell,\n  MatCalendarUserEvent,\n  MatCalendarCellClassFunction,\n} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {Subscription} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {DateRange} from './date-selection-model';\n\n/**\n * An internal component used to display a single year in the datepicker.\n * @docs-private\n */\n@Component({\n  selector: 'mat-year-view',\n  templateUrl: 'year-view.html',\n  exportAs: 'matYearView',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatYearView<D> implements AfterContentInit, OnDestroy {\n  private _rerenderSubscription = Subscription.EMPTY;\n\n  /** Flag used to filter out space/enter keyup events that originated outside of the view. */\n  private _selectionKeyPressed: boolean;\n\n  /** The date to display in this year view (everything other than the year is ignored). */\n  @Input()\n  get activeDate(): D { return this._activeDate; }\n  set activeDate(value: D) {\n    let oldActiveDate = this._activeDate;\n    const validDate =\n      this._dateAdapter.getValidDateOrNull(\n        this._dateAdapter.deserialize(value)\n      ) || this._dateAdapter.today();\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n    if (this._dateAdapter.getYear(oldActiveDate) !== this._dateAdapter.getYear(this._activeDate)) {\n      this._init();\n    }\n  }\n  private _activeDate: D;\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): DateRange<D> | D | null { return this._selected; }\n  set selected(value: DateRange<D> | D | null) {\n    if (value instanceof DateRange) {\n      this._selected = value;\n    } else {\n      this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n    }\n\n    this._setSelectedMonth(value);\n  }\n  private _selected: DateRange<D> | D | null;\n\n  /** The minimum selectable date. */\n  @Input()\n  get minDate(): D | null { return this._minDate; }\n  set minDate(value: D | null) {\n    this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _minDate: D | null;\n\n  /** The maximum selectable date. */\n  @Input()\n  get maxDate(): D | null { return this._maxDate; }\n  set maxDate(value: D | null) {\n    this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _maxDate: D | null;\n\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter: (date: D) => boolean;\n\n  /** Function that can be used to add custom CSS classes to date cells. */\n  @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n  /** Emits when a new month is selected. */\n  @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** Emits the selected month. This doesn't imply a change on the selected date */\n  @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /** Emits when any date is activated. */\n  @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** The body of calendar table */\n  @ViewChild(MatCalendarBody) _matCalendarBody: MatCalendarBody;\n\n  /** Grid of calendar cells representing the months of the year. */\n  _months: MatCalendarCell[][];\n\n  /** The label for this year (e.g. \"2017\"). */\n  _yearLabel: string;\n\n  /** The month in this year that today falls on. Null if today is in a different year. */\n  _todayMonth: number | null;\n\n  /**\n   * The month in this year that the selected Date falls on.\n   * Null if the selected Date is in a different year.\n   */\n  _selectedMonth: number | null;\n\n  constructor(readonly _changeDetectorRef: ChangeDetectorRef,\n              @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n              @Optional() public _dateAdapter: DateAdapter<D>,\n              @Optional() private _dir?: Directionality) {\n\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._dateAdapter) {\n        throw createMissingDateImplError('DateAdapter');\n      }\n      if (!this._dateFormats) {\n        throw createMissingDateImplError('MAT_DATE_FORMATS');\n      }\n    }\n\n    this._activeDate = this._dateAdapter.today();\n  }\n\n  ngAfterContentInit() {\n    this._rerenderSubscription = this._dateAdapter.localeChanges\n      .pipe(startWith(null))\n      .subscribe(() => this._init());\n  }\n\n  ngOnDestroy() {\n    this._rerenderSubscription.unsubscribe();\n  }\n\n  /** Handles when a new month is selected. */\n  _monthSelected(event: MatCalendarUserEvent<number>) {\n    const month = event.value;\n    const normalizedDate =\n          this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n\n    this.monthSelected.emit(normalizedDate);\n\n    const daysInMonth = this._dateAdapter.getNumDaysInMonth(normalizedDate);\n\n    this.selectedChange.emit(this._dateAdapter.createDate(\n        this._dateAdapter.getYear(this.activeDate), month,\n        Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth)));\n  }\n\n  /** Handles keydown events on the calendar body when calendar is in year view. */\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n    // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n    // disabled ones from being selected. This may not be ideal, we should look into whether\n    // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n    const oldActiveDate = this._activeDate;\n    const isRtl = this._isRtl();\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? 1 : -1);\n        break;\n      case RIGHT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? -1 : 1);\n        break;\n      case UP_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -4);\n        break;\n      case DOWN_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 4);\n        break;\n      case HOME:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate,\n            -this._dateAdapter.getMonth(this._activeDate));\n        break;\n      case END:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate,\n            11 - this._dateAdapter.getMonth(this._activeDate));\n        break;\n      case PAGE_UP:\n        this.activeDate =\n            this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\n        break;\n      case PAGE_DOWN:\n        this.activeDate =\n            this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\n        break;\n      case ENTER:\n      case SPACE:\n        // Note that we only prevent the default action here while the selection happens in\n        // `keyup` below. We can't do the selection here, because it can cause the calendar to\n        // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n        // because it's too late (see #23305).\n        this._selectionKeyPressed = true;\n        break;\n      default:\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n        return;\n    }\n\n    if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n      this.activeDateChange.emit(this.activeDate);\n    }\n\n    this._focusActiveCell();\n    // Prevent unexpected default actions such as form submission.\n    event.preventDefault();\n  }\n\n  /** Handles keyup events on the calendar body when calendar is in year view. */\n  _handleCalendarBodyKeyup(event: KeyboardEvent): void {\n    if (event.keyCode === SPACE || event.keyCode === ENTER) {\n      if (this._selectionKeyPressed) {\n        this._monthSelected({value: this._dateAdapter.getMonth(this._activeDate), event});\n      }\n\n      this._selectionKeyPressed = false;\n    }\n  }\n\n  /** Initializes this year view. */\n  _init() {\n    this._setSelectedMonth(this.selected);\n    this._todayMonth = this._getMonthInCurrentYear(this._dateAdapter.today());\n    this._yearLabel = this._dateAdapter.getYearName(this.activeDate);\n\n    let monthNames = this._dateAdapter.getMonthNames('short');\n    // First row of months only contains 5 elements so we can fit the year label on the same row.\n    this._months = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]].map(row => row.map(\n        month => this._createCellForMonth(month, monthNames[month])));\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Focuses the active cell after the microtask queue is empty. */\n  _focusActiveCell() {\n    this._matCalendarBody._focusActiveCell();\n  }\n\n  /**\n   * Gets the month in this year that the given Date falls on.\n   * Returns null if the given Date is in another year.\n   */\n  private _getMonthInCurrentYear(date: D | null) {\n    return date && this._dateAdapter.getYear(date) == this._dateAdapter.getYear(this.activeDate) ?\n        this._dateAdapter.getMonth(date) : null;\n  }\n\n  /** Creates an MatCalendarCell for the given month. */\n  private _createCellForMonth(month: number, monthName: string) {\n    const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n    const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.monthYearA11yLabel);\n    const cellClasses = this.dateClass ? this.dateClass(date, 'year') : undefined;\n\n    return new MatCalendarCell(month, monthName.toLocaleUpperCase(), ariaLabel,\n        this._shouldEnableMonth(month), cellClasses);\n  }\n\n  /** Whether the given month is enabled. */\n  private _shouldEnableMonth(month: number) {\n\n    const activeYear = this._dateAdapter.getYear(this.activeDate);\n\n    if (month === undefined || month === null ||\n        this._isYearAndMonthAfterMaxDate(activeYear, month) ||\n        this._isYearAndMonthBeforeMinDate(activeYear, month)) {\n      return false;\n    }\n\n    if (!this.dateFilter) {\n      return true;\n    }\n\n    const firstOfMonth = this._dateAdapter.createDate(activeYear, month, 1);\n\n    // If any date in the month is enabled count the month as enabled.\n    for (let date = firstOfMonth; this._dateAdapter.getMonth(date) == month;\n         date = this._dateAdapter.addCalendarDays(date, 1)) {\n      if (this.dateFilter(date)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Tests whether the combination month/year is after this.maxDate, considering\n   * just the month and year of this.maxDate\n   */\n  private _isYearAndMonthAfterMaxDate(year: number, month: number) {\n    if (this.maxDate) {\n      const maxYear = this._dateAdapter.getYear(this.maxDate);\n      const maxMonth = this._dateAdapter.getMonth(this.maxDate);\n\n      return year > maxYear || (year === maxYear && month > maxMonth);\n    }\n\n    return false;\n  }\n\n  /**\n   * Tests whether the combination month/year is before this.minDate, considering\n   * just the month and year of this.minDate\n   */\n  private _isYearAndMonthBeforeMinDate(year: number, month: number) {\n    if (this.minDate) {\n      const minYear = this._dateAdapter.getYear(this.minDate);\n      const minMonth = this._dateAdapter.getMonth(this.minDate);\n\n      return year < minYear || (year === minYear && month < minMonth);\n    }\n\n    return false;\n  }\n\n  /** Determines whether the user has the RTL layout direction. */\n  private _isRtl() {\n    return this._dir && this._dir.value === 'rtl';\n  }\n\n  /** Sets the currently-selected month based on a model value. */\n  private _setSelectedMonth(value: DateRange<D> | D | null) {\n    if (value instanceof DateRange) {\n      this._selectedMonth = this._getMonthInCurrentYear(value.start) ||\n                            this._getMonthInCurrentYear(value.end);\n    } else {\n      this._selectedMonth = this._getMonthInCurrentYear(value);\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 {ComponentPortal, ComponentType, Portal} from '@angular/cdk/portal';\nimport {\n  AfterContentInit,\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  DateAdapter,\n  MAT_DATE_FORMATS,\n  MatDateFormats,\n} from '@angular/material/core';\nimport {Subject, Subscription} from 'rxjs';\nimport {MatCalendarUserEvent, MatCalendarCellClassFunction} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {MatDatepickerIntl} from './datepicker-intl';\nimport {MatMonthView} from './month-view';\nimport {\n  getActiveOffset,\n  isSameMultiYearView,\n  MatMultiYearView,\n  yearsPerPage\n} from './multi-year-view';\nimport {MatYearView} from './year-view';\nimport {MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, DateRange} from './date-selection-model';\n\n/**\n * Possible views for the calendar.\n * @docs-private\n */\nexport type MatCalendarView = 'month' | 'year' | 'multi-year';\n\n/** Counter used to generate unique IDs. */\nlet uniqueId = 0;\n\n/** Default header for MatCalendar */\n@Component({\n  selector: 'mat-calendar-header',\n  templateUrl: 'calendar-header.html',\n  exportAs: 'matCalendarHeader',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatCalendarHeader<D> {\n  _buttonDescriptionId = `mat-calendar-button-${uniqueId++}`;\n\n  constructor(private _intl: MatDatepickerIntl,\n              @Inject(forwardRef(() => MatCalendar)) public calendar: MatCalendar<D>,\n              @Optional() private _dateAdapter: DateAdapter<D>,\n              @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n              changeDetectorRef: ChangeDetectorRef) {\n\n    this.calendar.stateChanges.subscribe(() => changeDetectorRef.markForCheck());\n  }\n\n  /** The label for the current calendar view. */\n  get periodButtonText(): string {\n    if (this.calendar.currentView == 'month') {\n      return this._dateAdapter\n          .format(this.calendar.activeDate, this._dateFormats.display.monthYearLabel)\n              .toLocaleUpperCase();\n    }\n    if (this.calendar.currentView == 'year') {\n      return this._dateAdapter.getYearName(this.calendar.activeDate);\n    }\n\n    // The offset from the active year to the \"slot\" for the starting year is the\n    // *actual* first rendered year in the multi-year view, and the last year is\n    // just yearsPerPage - 1 away.\n    const activeYear = this._dateAdapter.getYear(this.calendar.activeDate);\n    const minYearOfPage = activeYear - getActiveOffset(\n      this._dateAdapter, this.calendar.activeDate, this.calendar.minDate, this.calendar.maxDate);\n    const maxYearOfPage = minYearOfPage + yearsPerPage - 1;\n    const minYearName =\n      this._dateAdapter.getYearName(this._dateAdapter.createDate(minYearOfPage, 0, 1));\n    const maxYearName =\n      this._dateAdapter.getYearName(this._dateAdapter.createDate(maxYearOfPage, 0, 1));\n    return this._intl.formatYearRange(minYearName, maxYearName);\n  }\n\n  get periodButtonLabel(): string {\n    return this.calendar.currentView == 'month' ?\n        this._intl.switchToMultiYearViewLabel : this._intl.switchToMonthViewLabel;\n  }\n\n  /** The label for the previous button. */\n  get prevButtonLabel(): string {\n    return {\n      'month': this._intl.prevMonthLabel,\n      'year': this._intl.prevYearLabel,\n      'multi-year': this._intl.prevMultiYearLabel\n    }[this.calendar.currentView];\n  }\n\n  /** The label for the next button. */\n  get nextButtonLabel(): string {\n    return {\n      'month': this._intl.nextMonthLabel,\n      'year': this._intl.nextYearLabel,\n      'multi-year': this._intl.nextMultiYearLabel\n    }[this.calendar.currentView];\n  }\n\n  /** Handles user clicks on the period label. */\n  currentPeriodClicked(): void {\n    this.calendar.currentView = this.calendar.currentView == 'month' ? 'multi-year' : 'month';\n  }\n\n  /** Handles user clicks on the previous button. */\n  previousClicked(): void {\n    this.calendar.activeDate = this.calendar.currentView == 'month' ?\n        this._dateAdapter.addCalendarMonths(this.calendar.activeDate, -1) :\n            this._dateAdapter.addCalendarYears(\n                this.calendar.activeDate, this.calendar.currentView == 'year' ? -1 : -yearsPerPage\n            );\n  }\n\n  /** Handles user clicks on the next button. */\n  nextClicked(): void {\n    this.calendar.activeDate = this.calendar.currentView == 'month' ?\n        this._dateAdapter.addCalendarMonths(this.calendar.activeDate, 1) :\n            this._dateAdapter.addCalendarYears(\n                this.calendar.activeDate,\n                    this.calendar.currentView == 'year' ? 1 : yearsPerPage\n            );\n  }\n\n  /** Whether the previous period button is enabled. */\n  previousEnabled(): boolean {\n    if (!this.calendar.minDate) {\n      return true;\n    }\n    return !this.calendar.minDate ||\n        !this._isSameView(this.calendar.activeDate, this.calendar.minDate);\n  }\n\n  /** Whether the next period button is enabled. */\n  nextEnabled(): boolean {\n    return !this.calendar.maxDate ||\n        !this._isSameView(this.calendar.activeDate, this.calendar.maxDate);\n  }\n\n  /** Whether the two dates represent the same view in the current view mode (month or year). */\n  private _isSameView(date1: D, date2: D): boolean {\n    if (this.calendar.currentView == 'month') {\n      return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2) &&\n          this._dateAdapter.getMonth(date1) == this._dateAdapter.getMonth(date2);\n    }\n    if (this.calendar.currentView == 'year') {\n      return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2);\n    }\n    // Otherwise we are in 'multi-year' view.\n    return isSameMultiYearView(\n      this._dateAdapter, date1, date2, this.calendar.minDate, this.calendar.maxDate);\n  }\n}\n\n/** A calendar that is used as part of the datepicker. */\n@Component({\n  selector: 'mat-calendar',\n  templateUrl: 'calendar.html',\n  styleUrls: ['calendar.css'],\n  host: {\n    'class': 'mat-calendar',\n  },\n  exportAs: 'matCalendar',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER]\n})\nexport class MatCalendar<D> implements AfterContentInit, AfterViewChecked, OnDestroy, OnChanges {\n  /** An input indicating the type of the header component, if set. */\n  @Input() headerComponent: ComponentType<any>;\n\n  /** A portal containing the header component type for this calendar. */\n  _calendarHeaderPortal: Portal<any>;\n\n  private _intlChanges: Subscription;\n\n  /**\n   * Used for scheduling that focus should be moved to the active cell on the next tick.\n   * We need to schedule it, rather than do it immediately, because we have to wait\n   * for Angular to re-evaluate the view children.\n   */\n  private _moveFocusOnNextTick = false;\n\n  /** A date representing the period (month or year) to start the calendar in. */\n  @Input()\n  get startAt(): D | null { return this._startAt; }\n  set startAt(value: D | null) {\n    this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _startAt: D | null;\n\n  /** Whether the calendar should be started in month or year view. */\n  @Input() startView: MatCalendarView = 'month';\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): DateRange<D> | D | null { return this._selected; }\n  set selected(value: DateRange<D> | D | null) {\n    if (value instanceof DateRange) {\n      this._selected = value;\n    } else {\n      this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n    }\n  }\n  private _selected: DateRange<D> | D | null;\n\n  /** The minimum selectable date. */\n  @Input()\n  get minDate(): D | null { return this._minDate; }\n  set minDate(value: D | null) {\n    this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _minDate: D | null;\n\n  /** The maximum selectable date. */\n  @Input()\n  get maxDate(): D | null { return this._maxDate; }\n  set maxDate(value: D | null) {\n    this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _maxDate: D | null;\n\n  /** Function used to filter which dates are selectable. */\n  @Input() dateFilter: (date: D) => boolean;\n\n  /** Function that can be used to add custom CSS classes to dates. */\n  @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n  /** Start of the comparison range. */\n  @Input() comparisonStart: D | null;\n\n  /** End of the comparison range. */\n  @Input() comparisonEnd: D | null;\n\n  /** Emits when the currently selected date changes. */\n  @Output() readonly selectedChange: EventEmitter<D | null> = new EventEmitter<D | null>();\n\n  /**\n   * Emits the year chosen in multiyear view.\n   * This doesn't imply a change on the selected date.\n   */\n  @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /**\n   * Emits the month chosen in year view.\n   * This doesn't imply a change on the selected date.\n   */\n  @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /**\n   * Emits when the current view changes.\n   */\n  @Output() readonly viewChanged: EventEmitter<MatCalendarView> =\n    new EventEmitter<MatCalendarView>(true);\n\n  /** Emits when any date is selected. */\n  @Output() readonly _userSelection: EventEmitter<MatCalendarUserEvent<D | null>> =\n      new EventEmitter<MatCalendarUserEvent<D | null>>();\n\n  /** Reference to the current month view component. */\n  @ViewChild(MatMonthView) monthView: MatMonthView<D>;\n\n  /** Reference to the current year view component. */\n  @ViewChild(MatYearView) yearView: MatYearView<D>;\n\n  /** Reference to the current multi-year view component. */\n  @ViewChild(MatMultiYearView) multiYearView: MatMultiYearView<D>;\n\n  /**\n   * The current active date. This determines which time period is shown and which date is\n   * highlighted when using keyboard navigation.\n   */\n  get activeDate(): D { return this._clampedActiveDate; }\n  set activeDate(value: D) {\n    this._clampedActiveDate = this._dateAdapter.clampDate(value, this.minDate, this.maxDate);\n    this.stateChanges.next();\n    this._changeDetectorRef.markForCheck();\n  }\n  private _clampedActiveDate: D;\n\n  /** Whether the calendar is in month view. */\n  get currentView(): MatCalendarView { return this._currentView; }\n  set currentView(value: MatCalendarView) {\n    const viewChangedResult = this._currentView !== value ? value : null;\n    this._currentView = value;\n    this._moveFocusOnNextTick = true;\n    this._changeDetectorRef.markForCheck();\n    if (viewChangedResult) {\n      this.viewChanged.emit(viewChangedResult);\n    }\n  }\n  private _currentView: MatCalendarView;\n\n  /**\n   * Emits whenever there is a state change that the header may need to respond to.\n   */\n  readonly stateChanges = new Subject<void>();\n\n  constructor(_intl: MatDatepickerIntl,\n              @Optional() private _dateAdapter: DateAdapter<D>,\n              @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n              private _changeDetectorRef: ChangeDetectorRef) {\n\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._dateAdapter) {\n        throw createMissingDateImplError('DateAdapter');\n      }\n\n      if (!this._dateFormats) {\n        throw createMissingDateImplError('MAT_DATE_FORMATS');\n      }\n    }\n\n    this._intlChanges = _intl.changes.subscribe(() => {\n      _changeDetectorRef.markForCheck();\n      this.stateChanges.next();\n    });\n  }\n\n  ngAfterContentInit() {\n    this._calendarHeaderPortal = new ComponentPortal(this.headerComponent || MatCalendarHeader);\n    this.activeDate = this.startAt || this._dateAdapter.today();\n\n    // Assign to the private property since we don't want to move focus on init.\n    this._currentView = this.startView;\n  }\n\n  ngAfterViewChecked() {\n    if (this._moveFocusOnNextTick) {\n      this._moveFocusOnNextTick = false;\n      this.focusActiveCell();\n    }\n  }\n\n  ngOnDestroy() {\n    this._intlChanges.unsubscribe();\n    this.stateChanges.complete();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const change =\n        changes['minDate'] || changes['maxDate'] || changes['dateFilter'];\n\n    if (change && !change.firstChange) {\n      const view = this._getCurrentViewComponent();\n\n      if (view) {\n        // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\n        // passed down to the view via data bindings which won't be up-to-date when we call `_init`.\n        this._changeDetectorRef.detectChanges();\n        view._init();\n      }\n    }\n\n    this.stateChanges.next();\n  }\n\n  /** Focuses the active date. */\n  focusActiveCell() {\n    this._getCurrentViewComponent()._focusActiveCell(false);\n  }\n\n  /** Updates today's date after an update of the active date */\n  updateTodaysDate() {\n    this._getCurrentViewComponent()._init();\n  }\n\n  /** Handles date selection in the month view. */\n  _dateSelected(event: MatCalendarUserEvent<D | null>): void {\n    const date = event.value;\n\n    if (this.selected instanceof DateRange ||\n        (date && !this._dateAdapter.sameDate(date, this.selected))) {\n      this.selectedChange.emit(date);\n    }\n\n    this._userSelection.emit(event);\n  }\n\n  /** Handles year selection in the multiyear view. */\n  _yearSelectedInMultiYearView(normalizedYear: D) {\n    this.yearSelected.emit(normalizedYear);\n  }\n\n  /** Handles month selection in the year view. */\n  _monthSelectedInYearView(normalizedMonth: D) {\n    this.monthSelected.emit(normalizedMonth);\n  }\n\n  /** Handles year/month selection in the multi-year/year views. */\n  _goToDateInView(date: D, view: 'month' | 'year' | 'multi-year'): void {\n    this.activeDate = date;\n    this.currentView = view;\n  }\n\n  /** Returns the component instance that corresponds to the current calendar view. */\n  private _getCurrentViewComponent(): MatMonthView<D> | MatYearView<D> | MatMultiYearView<D> {\n    // The return type is explicitly written as a union to ensure that the Closure compiler does\n    // not optimize calls to _init(). Without the explict return type, TypeScript narrows it to\n    // only the first component type. See https://github.com/angular/components/issues/22996.\n    return this.monthView || this.yearView || this.multiYearView;\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  keyframes,\n  AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material datepicker.\n * @docs-private\n */\nexport const matDatepickerAnimations: {\n  readonly transformPanel: AnimationTriggerMetadata;\n  readonly fadeInCalendar: AnimationTriggerMetadata;\n} = {\n  /** Transforms the height of the datepicker's calendar. */\n  transformPanel: trigger('transformPanel', [\n    transition('void => enter-dropdown', animate('120ms cubic-bezier(0, 0, 0.2, 1)', keyframes([\n      style({opacity: 0, transform: 'scale(1, 0.8)'}),\n      style({opacity: 1, transform: 'scale(1, 1)'})\n    ]))),\n    transition('void => enter-dialog', animate('150ms cubic-bezier(0, 0, 0.2, 1)', keyframes([\n      style({opacity: 0, transform: 'scale(0.7)'}),\n      style({transform: 'none', opacity: 1})\n    ]))),\n    transition('* => void', animate('100ms linear', style({opacity: 0})))\n  ]),\n\n  /** Fades in the content of the calendar. */\n  fadeInCalendar: trigger('fadeInCalendar', [\n    state('void', style({opacity: 0})),\n    state('enter', style({opacity: 1})),\n\n    // TODO(crisbeto): this animation should be removed since it isn't quite on spec, but we\n    // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\n    transition('void => *', animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'))\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 {Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty, coerceStringArray} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey, UP_ARROW} from '@angular/cdk/keycodes';\nimport {\n  Overlay,\n  OverlayConfig,\n  OverlayRef,\n  ScrollStrategy,\n  FlexibleConnectedPositionStrategy,\n} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, TemplatePortal} from '@angular/cdk/portal';\nimport {DOCUMENT} from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ComponentRef,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  Optional,\n  Output,\n  ViewChild,\n  ViewContainerRef,\n  ViewEncapsulation,\n  ChangeDetectorRef,\n  Directive,\n  OnChanges,\n  SimpleChanges,\n  OnInit,\n} from '@angular/core';\nimport {\n  CanColor,\n  DateAdapter,\n  mixinColor,\n  ThemePalette,\n} from '@angular/material/core';\nimport {merge, Subject, Observable, Subscription} from 'rxjs';\nimport {filter, take} from 'rxjs/operators';\nimport {_getFocusedElementPierceShadowDom} from '@angular/cdk/platform';\nimport {MatCalendar, MatCalendarView} from './calendar';\nimport {matDatepickerAnimations} from './datepicker-animations';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {MatCalendarUserEvent, MatCalendarCellClassFunction} from './calendar-body';\nimport {DateFilterFn} from './datepicker-input-base';\nimport {\n  ExtractDateTypeFromSelection,\n  MatDateSelectionModel,\n  DateRange,\n} from './date-selection-model';\nimport {\n  MAT_DATE_RANGE_SELECTION_STRATEGY,\n  MatDateRangeSelectionStrategy,\n} from './date-range-selection-strategy';\nimport {MatDatepickerIntl} from './datepicker-intl';\n\n/** Used to generate a unique ID for each datepicker instance. */\nlet datepickerUid = 0;\n\n/** Injection token that determines the scroll handling while the calendar is open. */\nexport const MAT_DATEPICKER_SCROLL_STRATEGY =\n    new InjectionToken<() => ScrollStrategy>('mat-datepicker-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n  return () => overlay.scrollStrategies.reposition();\n}\n\n/** Possible positions for the datepicker dropdown along the X axis. */\nexport type DatepickerDropdownPositionX = 'start' | 'end';\n\n/** Possible positions for the datepicker dropdown along the Y axis. */\nexport type DatepickerDropdownPositionY = 'above' | 'below';\n\n/** @docs-private */\nexport const MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n  provide: MAT_DATEPICKER_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY,\n};\n\n// Boilerplate for applying mixins to MatDatepickerContent.\n/** @docs-private */\nconst _MatDatepickerContentBase = mixinColor(class {\n  constructor(public _elementRef: ElementRef) {}\n});\n\n/**\n * Component used as the content for the datepicker overlay. We use this instead of using\n * MatCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the overlay that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * @docs-private\n */\n@Component({\n  selector: 'mat-datepicker-content',\n  templateUrl: 'datepicker-content.html',\n  styleUrls: ['datepicker-content.css'],\n  host: {\n    'class': 'mat-datepicker-content',\n    '[@transformPanel]': '_animationState',\n    '(@transformPanel.done)': '_animationDone.next()',\n    '[class.mat-datepicker-content-touch]': 'datepicker.touchUi',\n  },\n  animations: [\n    matDatepickerAnimations.transformPanel,\n    matDatepickerAnimations.fadeInCalendar,\n  ],\n  exportAs: 'matDatepickerContent',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['color'],\n})\nexport class MatDatepickerContent<S, D = ExtractDateTypeFromSelection<S>>\n  extends _MatDatepickerContentBase implements OnInit, AfterViewInit, OnDestroy, CanColor {\n  private _subscriptions = new Subscription();\n  private _model: MatDateSelectionModel<S, D>;\n\n  /** Reference to the internal calendar component. */\n  @ViewChild(MatCalendar) _calendar: MatCalendar<D>;\n\n  /** Reference to the datepicker that created the overlay. */\n  datepicker: MatDatepickerBase<any, S, D>;\n\n  /** Start of the comparison range. */\n  comparisonStart: D | null;\n\n  /** End of the comparison range. */\n  comparisonEnd: D | null;\n\n  /** Whether the datepicker is above or below the input. */\n  _isAbove: boolean;\n\n  /** Current state of the animation. */\n  _animationState: 'enter-dropdown' | 'enter-dialog' | 'void';\n\n  /** Emits when an animation has finished. */\n  readonly _animationDone = new Subject<void>();\n\n  /** Text for the close button. */\n  _closeButtonText: string;\n\n  /** Whether the close button currently has focus. */\n  _closeButtonFocused: boolean;\n\n  /** Portal with projected action buttons. */\n  _actionsPortal: TemplatePortal | null = null;\n\n  constructor(\n    elementRef: ElementRef,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _globalModel: MatDateSelectionModel<S, D>,\n    private _dateAdapter: DateAdapter<D>,\n    @Optional() @Inject(MAT_DATE_RANGE_SELECTION_STRATEGY)\n        private _rangeSelectionStrategy: MatDateRangeSelectionStrategy<D>,\n    intl: MatDatepickerIntl) {\n    super(elementRef);\n    this._closeButtonText = intl.closeCalendarLabel;\n  }\n\n  ngOnInit() {\n    // If we have actions, clone the model so that we have the ability to cancel the selection,\n    // otherwise update the global model directly. Note that we want to assign this as soon as\n    // possible, but `_actionsPortal` isn't available in the constructor so we do it in `ngOnInit`.\n    this._model = this._actionsPortal ? this._globalModel.clone() : this._globalModel;\n    this._animationState = this.datepicker.touchUi ? 'enter-dialog' : 'enter-dropdown';\n  }\n\n  ngAfterViewInit() {\n    this._subscriptions.add(this.datepicker.stateChanges.subscribe(() => {\n      this._changeDetectorRef.markForCheck();\n    }));\n    this._calendar.focusActiveCell();\n  }\n\n  ngOnDestroy() {\n    this._subscriptions.unsubscribe();\n    this._animationDone.complete();\n  }\n\n  _handleUserSelection(event: MatCalendarUserEvent<D | null>) {\n    const selection = this._model.selection;\n    const value = event.value;\n    const isRange = selection instanceof DateRange;\n\n    // If we're selecting a range and we have a selection strategy, always pass the value through\n    // there. Otherwise don't assign null values to the model, unless we're selecting a range.\n    // A null value when picking a range means that the user cancelled the selection (e.g. by\n    // pressing escape), whereas when selecting a single value it means that the value didn't\n    // change. This isn't very intuitive, but it's here for backwards-compatibility.\n    if (isRange && this._rangeSelectionStrategy) {\n      const newSelection = this._rangeSelectionStrategy.selectionFinished(value,\n          selection as unknown as DateRange<D>, event.event);\n      this._model.updateSelection(newSelection as unknown as S, this);\n    } else if (value && (isRange ||\n              !this._dateAdapter.sameDate(value, selection as unknown as D))) {\n      this._model.add(value);\n    }\n\n    // Delegate closing the overlay to the actions.\n    if ((!this._model || this._model.isComplete()) && !this._actionsPortal) {\n      this.datepicker.close();\n    }\n  }\n\n  _startExitAnimation() {\n    this._animationState = 'void';\n    this._changeDetectorRef.markForCheck();\n  }\n\n  _getSelected() {\n    return this._model.selection as unknown as D | DateRange<D> | null;\n  }\n\n  /** Applies the current pending selection to the global model. */\n  _applyPendingSelection() {\n    if (this._model !== this._globalModel) {\n      this._globalModel.updateSelection(this._model.selection, this);\n    }\n  }\n}\n\n/** Form control that can be associated with a datepicker. */\nexport interface MatDatepickerControl<D> {\n  getStartValue(): D | null;\n  getThemePalette(): ThemePalette;\n  min: D | null;\n  max: D | null;\n  disabled: boolean;\n  dateFilter: DateFilterFn<D>;\n  getConnectedOverlayOrigin(): ElementRef;\n  getOverlayLabelId(): string | null;\n  stateChanges: Observable<void>;\n}\n\n/** A datepicker that can be attached to a {@link MatDatepickerControl}. */\nexport interface MatDatepickerPanel<C extends MatDatepickerControl<D>, S,\n    D = ExtractDateTypeFromSelection<S>> {\n  /** Stream that emits whenever the date picker is closed. */\n  closedStream: EventEmitter<void>;\n  /** Color palette to use on the datepicker's calendar. */\n  color: ThemePalette;\n  /** The input element the datepicker is associated with. */\n  datepickerInput: C;\n  /** Whether the datepicker pop-up should be disabled. */\n  disabled: boolean;\n  /** The id for the datepicker's calendar. */\n  id: string;\n  /** Whether the datepicker is open. */\n  opened: boolean;\n  /** Stream that emits whenever the date picker is opened. */\n  openedStream: EventEmitter<void>;\n  /** Emits when the datepicker's state changes. */\n  stateChanges: Subject<void>;\n  /** Opens the datepicker. */\n  open(): void;\n  /** Register an input with the datepicker. */\n  registerInput(input: C): MatDateSelectionModel<S, D>;\n}\n\n/** Base class for a datepicker. */\n@Directive()\nexport abstract class MatDatepickerBase<C extends MatDatepickerControl<D>, S,\n  D = ExtractDateTypeFromSelection<S>> implements MatDatepickerPanel<C, S, D>, OnDestroy,\n    OnChanges {\n  private _scrollStrategy: () => ScrollStrategy;\n  private _inputStateChanges = Subscription.EMPTY;\n\n  /** An input indicating the type of the custom header component for the calendar, if set. */\n  @Input() calendarHeaderComponent: ComponentType<any>;\n\n  /** The date to open the calendar to initially. */\n  @Input()\n  get startAt(): D | null {\n    // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n    // selected value is.\n    return this._startAt || (this.datepickerInput ? this.datepickerInput.getStartValue() : null);\n  }\n  set startAt(value: D | null) {\n    this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _startAt: D | null;\n\n  /** The view that the calendar should start in. */\n  @Input() startView: 'month' | 'year' | 'multi-year' = 'month';\n\n  /** Color palette to use on the datepicker's calendar. */\n  @Input()\n  get color(): ThemePalette {\n    return this._color ||\n        (this.datepickerInput ? this.datepickerInput.getThemePalette() : undefined);\n  }\n  set color(value: ThemePalette) {\n    this._color = value;\n  }\n  _color: ThemePalette;\n\n  /**\n   * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n   * than a dropdown and elements have more padding to allow for bigger touch targets.\n   */\n  @Input()\n  get touchUi(): boolean { return this._touchUi; }\n  set touchUi(value: boolean) {\n    this._touchUi = coerceBooleanProperty(value);\n  }\n  private _touchUi = false;\n\n  /** Whether the datepicker pop-up should be disabled. */\n  @Input()\n  get disabled(): boolean {\n    return this._disabled === undefined && this.datepickerInput ?\n        this.datepickerInput.disabled : !!this._disabled;\n  }\n  set disabled(value: boolean) {\n    const newValue = coerceBooleanProperty(value);\n\n    if (newValue !== this._disabled) {\n      this._disabled = newValue;\n      this.stateChanges.next(undefined);\n    }\n  }\n  private _disabled: boolean;\n\n  /** Preferred position of the datepicker in the X axis. */\n  @Input()\n  xPosition: DatepickerDropdownPositionX = 'start';\n\n  /** Preferred position of the datepicker in the Y axis. */\n  @Input()\n  yPosition: DatepickerDropdownPositionY = 'below';\n\n  /**\n   * Whether to restore focus to the previously-focused element when the calendar is closed.\n   * Note that automatic focus restoration is an accessibility feature and it is recommended that\n   * you provide your own equivalent, if you decide to turn it off.\n   */\n  @Input()\n  get restoreFocus(): boolean { return this._restoreFocus; }\n  set restoreFocus(value: boolean) {\n    this._restoreFocus = coerceBooleanProperty(value);\n  }\n  private _restoreFocus = true;\n\n  /**\n   * Emits selected year in multiyear view.\n   * This doesn't imply a change on the selected date.\n   */\n  @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /**\n   * Emits selected month in year view.\n   * This doesn't imply a change on the selected date.\n   */\n  @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /**\n   * Emits when the current view changes.\n   */\n  @Output() readonly viewChanged: EventEmitter<MatCalendarView> =\n    new EventEmitter<MatCalendarView>(true);\n\n  /** Function that can be used to add custom CSS classes to dates. */\n  @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n  /** Emits when the datepicker has been opened. */\n  @Output('opened') readonly openedStream = new EventEmitter<void>();\n\n  /** Emits when the datepicker has been closed. */\n  @Output('closed') readonly closedStream = new EventEmitter<void>();\n\n  /**\n   * Classes to be passed to the date picker panel.\n   * Supports string and string array values, similar to `ngClass`.\n   */\n  @Input()\n  get panelClass(): string | string[] { return this._panelClass; }\n  set panelClass(value: string | string[]) {\n    this._panelClass = coerceStringArray(value);\n  }\n  private _panelClass: string[];\n\n  /** Whether the calendar is open. */\n  @Input()\n  get opened(): boolean { return this._opened; }\n  set opened(value: boolean) {\n    coerceBooleanProperty(value) ? this.open() : this.close();\n  }\n  private _opened = false;\n\n  /** The id for the datepicker calendar. */\n  id: string = `mat-datepicker-${datepickerUid++}`;\n\n  /** The minimum selectable date. */\n  _getMinDate(): D | null {\n    return this.datepickerInput && this.datepickerInput.min;\n  }\n\n  /** The maximum selectable date. */\n  _getMaxDate(): D | null {\n    return this.datepickerInput && this.datepickerInput.max;\n  }\n\n  _getDateFilter(): DateFilterFn<D> {\n    return this.datepickerInput && this.datepickerInput.dateFilter;\n  }\n\n  /** A reference to the overlay into which we've rendered the calendar. */\n  private _overlayRef: OverlayRef | null;\n\n  /** Reference to the component instance rendered in the overlay. */\n  private _componentRef: ComponentRef<MatDatepickerContent<S, D>> | null;\n\n  /** The element that was focused before the datepicker was opened. */\n  private _focusedElementBeforeOpen: HTMLElement | null = null;\n\n  /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */\n  private _backdropHarnessClass = `${this.id}-backdrop`;\n\n  /** Currently-registered actions portal. */\n  private _actionsPortal: TemplatePortal | null;\n\n  /** The input element this datepicker is associated with. */\n  datepickerInput: C;\n\n  /** Emits when the datepicker's state changes. */\n  readonly stateChanges = new Subject<void>();\n\n  constructor(\n    /**\n     * @deprecated `_dialog` parameter is no longer being used and it will be removed.\n     * @breaking-change 13.0.0\n     */\n    @Inject(ElementRef) _dialog: any,\n    private _overlay: Overlay,\n    private _ngZone: NgZone,\n    private _viewContainerRef: ViewContainerRef,\n    @Inject(MAT_DATEPICKER_SCROLL_STRATEGY) scrollStrategy: any,\n    @Optional() private _dateAdapter: DateAdapter<D>,\n    @Optional() private _dir: Directionality,\n    /**\n     * @deprecated No longer being used. To be removed.\n     * @breaking-change 13.0.0\n     */\n    @Optional() @Inject(DOCUMENT) _document: any,\n    private _model: MatDateSelectionModel<S, D>) {\n    if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw createMissingDateImplError('DateAdapter');\n    }\n\n    this._scrollStrategy = scrollStrategy;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const positionChange = changes['xPosition'] || changes['yPosition'];\n\n    if (positionChange && !positionChange.firstChange && this._overlayRef) {\n      const positionStrategy = this._overlayRef.getConfig().positionStrategy;\n\n      if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n        this._setConnectedPositions(positionStrategy);\n\n        if (this.opened) {\n          this._overlayRef.updatePosition();\n        }\n      }\n    }\n\n    this.stateChanges.next(undefined);\n  }\n\n  ngOnDestroy() {\n    this._destroyOverlay();\n    this.close();\n    this._inputStateChanges.unsubscribe();\n    this.stateChanges.complete();\n  }\n\n  /** Selects the given date */\n  select(date: D): void {\n    this._model.add(date);\n  }\n\n  /** Emits the selected year in multiyear view */\n  _selectYear(normalizedYear: D): void {\n    this.yearSelected.emit(normalizedYear);\n  }\n\n  /** Emits selected month in year view */\n  _selectMonth(normalizedMonth: D): void {\n    this.monthSelected.emit(normalizedMonth);\n  }\n\n  /** Emits changed view */\n  _viewChanged(view: MatCalendarView): void {\n    this.viewChanged.emit(view);\n  }\n\n  /**\n   * Register an input with this datepicker.\n   * @param input The datepicker input to register with this datepicker.\n   * @returns Selection model that the input should hook itself up to.\n   */\n  registerInput(input: C): MatDateSelectionModel<S, D> {\n    if (this.datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('A MatDatepicker can only be associated with a single input.');\n    }\n    this._inputStateChanges.unsubscribe();\n    this.datepickerInput = input;\n    this._inputStateChanges =\n        input.stateChanges.subscribe(() => this.stateChanges.next(undefined));\n    return this._model;\n  }\n\n  /**\n   * Registers a portal containing action buttons with the datepicker.\n   * @param portal Portal to be registered.\n   */\n  registerActions(portal: TemplatePortal): void {\n    if (this._actionsPortal && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('A MatDatepicker can only be associated with a single actions row.');\n    }\n    this._actionsPortal = portal;\n  }\n\n  /**\n   * Removes a portal containing action buttons from the datepicker.\n   * @param portal Portal to be removed.\n   */\n  removeActions(portal: TemplatePortal): void {\n    if (portal === this._actionsPortal) {\n      this._actionsPortal = null;\n    }\n  }\n\n  /** Open the calendar. */\n  open(): void {\n    if (this._opened || this.disabled) {\n      return;\n    }\n\n    if (!this.datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('Attempted to open an MatDatepicker with no associated input.');\n    }\n\n    this._focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n    this._openOverlay();\n    this._opened = true;\n    this.openedStream.emit();\n  }\n\n  /** Close the calendar. */\n  close(): void {\n    if (!this._opened) {\n      return;\n    }\n\n    if (this._componentRef) {\n      const instance = this._componentRef.instance;\n      instance._startExitAnimation();\n      instance._animationDone.pipe(take(1)).subscribe(() => this._destroyOverlay());\n    }\n\n    const completeClose = () => {\n      // The `_opened` could've been reset already if\n      // we got two events in quick succession.\n      if (this._opened) {\n        this._opened = false;\n        this.closedStream.emit();\n        this._focusedElementBeforeOpen = null;\n      }\n    };\n\n    if (this._restoreFocus && this._focusedElementBeforeOpen &&\n      typeof this._focusedElementBeforeOpen.focus === 'function') {\n      // Because IE moves focus asynchronously, we can't count on it being restored before we've\n      // marked the datepicker as closed. If the event fires out of sequence and the element that\n      // we're refocusing opens the datepicker on focus, the user could be stuck with not being\n      // able to close the calendar at all. We work around it by making the logic, that marks\n      // the datepicker as closed, async as well.\n      this._focusedElementBeforeOpen.focus();\n      setTimeout(completeClose);\n    } else {\n      completeClose();\n    }\n  }\n\n  /** Applies the current pending selection on the overlay to the model. */\n  _applyPendingSelection() {\n    this._componentRef?.instance?._applyPendingSelection();\n  }\n\n  /** Forwards relevant values from the datepicker to the datepicker content inside the overlay. */\n  protected _forwardContentValues(instance: MatDatepickerContent<S, D>) {\n    instance.datepicker = this;\n    instance.color = this.color;\n    instance._actionsPortal = this._actionsPortal;\n  }\n\n  /** Opens the overlay with the calendar. */\n  private _openOverlay(): void {\n    this._destroyOverlay();\n\n    const isDialog = this.touchUi;\n    const labelId = this.datepickerInput.getOverlayLabelId();\n    const portal = new ComponentPortal<MatDatepickerContent<S, D>>(MatDatepickerContent,\n      this._viewContainerRef);\n    const overlayRef = this._overlayRef = this._overlay.create(new OverlayConfig({\n      positionStrategy: isDialog ? this._getDialogStrategy() : this._getDropdownStrategy(),\n      hasBackdrop: true,\n      backdropClass: [\n        isDialog ? 'cdk-overlay-dark-backdrop' : 'mat-overlay-transparent-backdrop',\n        this._backdropHarnessClass\n      ],\n      direction: this._dir,\n      scrollStrategy: isDialog ? this._overlay.scrollStrategies.block() : this._scrollStrategy(),\n      panelClass: `mat-datepicker-${isDialog ? 'dialog' : 'popup'}`,\n    }));\n    const overlayElement = overlayRef.overlayElement;\n    overlayElement.setAttribute('role', 'dialog');\n\n    if (labelId) {\n      overlayElement.setAttribute('aria-labelledby', labelId);\n    }\n\n    if (isDialog) {\n      overlayElement.setAttribute('aria-modal', 'true');\n    }\n\n    this._getCloseStream(overlayRef).subscribe(event => {\n      if (event) {\n        event.preventDefault();\n      }\n      this.close();\n    });\n\n    this._componentRef = overlayRef.attach(portal);\n    this._forwardContentValues(this._componentRef.instance);\n\n    // Update the position once the calendar has rendered. Only relevant in dropdown mode.\n    if (!isDialog) {\n      this._ngZone.onStable.pipe(take(1)).subscribe(() => overlayRef.updatePosition());\n    }\n  }\n\n  /** Destroys the current overlay. */\n  private _destroyOverlay() {\n    if (this._overlayRef) {\n      this._overlayRef.dispose();\n      this._overlayRef = this._componentRef = null;\n    }\n  }\n\n  /** Gets a position strategy that will open the calendar as a dropdown. */\n  private _getDialogStrategy() {\n    return this._overlay.position().global().centerHorizontally().centerVertically();\n  }\n\n  /** Gets a position strategy that will open the calendar as a dropdown. */\n  private _getDropdownStrategy() {\n    const strategy = this._overlay.position()\n      .flexibleConnectedTo(this.datepickerInput.getConnectedOverlayOrigin())\n      .withTransformOriginOn('.mat-datepicker-content')\n      .withFlexibleDimensions(false)\n      .withViewportMargin(8)\n      .withLockedPosition();\n\n    return this._setConnectedPositions(strategy);\n  }\n\n  /** Sets the positions of the datepicker in dropdown mode based on the current configuration. */\n  private _setConnectedPositions(strategy: FlexibleConnectedPositionStrategy) {\n    const primaryX = this.xPosition === 'end' ? 'end' : 'start';\n    const secondaryX = primaryX === 'start' ? 'end' : 'start';\n    const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';\n    const secondaryY = primaryY === 'top' ? 'bottom' : 'top';\n\n    return strategy.withPositions([\n      {\n        originX: primaryX,\n        originY: secondaryY,\n        overlayX: primaryX,\n        overlayY: primaryY\n      },\n      {\n        originX: primaryX,\n        originY: primaryY,\n        overlayX: primaryX,\n        overlayY: secondaryY\n      },\n      {\n        originX: secondaryX,\n        originY: secondaryY,\n        overlayX: secondaryX,\n        overlayY: primaryY\n      },\n      {\n        originX: secondaryX,\n        originY: primaryY,\n        overlayX: secondaryX,\n        overlayY: secondaryY\n      }\n    ]);\n  }\n\n  /** Gets an observable that will emit when the overlay is supposed to be closed. */\n  private _getCloseStream(overlayRef: OverlayRef) {\n    return merge(\n      overlayRef.backdropClick(),\n      overlayRef.detachments(),\n      overlayRef.keydownEvents().pipe(filter(event => {\n        // Closing on alt + up is only valid when there's an input associated with the datepicker.\n        return (event.keyCode === ESCAPE && !hasModifierKey(event)) || (this.datepickerInput &&\n                hasModifierKey(event, 'altKey') && event.keyCode === UP_ARROW);\n      }))\n    );\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_opened: BooleanInput;\n  static ngAcceptInputType_touchUi: BooleanInput;\n  static ngAcceptInputType_restoreFocus: BooleanInput;\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 {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\nimport {MatDatepickerBase, MatDatepickerControl} from './datepicker-base';\nimport {MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER} from './date-selection-model';\n\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDatepicker\"). We can change this to a directive\n// if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the datepicker popup/dialog. */\n@Component({\n  selector: 'mat-datepicker',\n  template: '',\n  exportAs: 'matDatepicker',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER,\n    {provide: MatDatepickerBase, useExisting: MatDatepicker},\n  ]\n})\nexport class MatDatepicker<D> extends MatDatepickerBase<MatDatepickerControl<D>, D | null, D> {\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 {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {DOWN_ARROW} from '@angular/cdk/keycodes';\nimport {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  AfterViewInit,\n  OnChanges,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  ValidationErrors,\n  Validator,\n  ValidatorFn,\n} from '@angular/forms';\nimport {\n  DateAdapter,\n  MAT_DATE_FORMATS,\n  MatDateFormats,\n} from '@angular/material/core';\nimport {Subscription, Subject} from 'rxjs';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {\n  ExtractDateTypeFromSelection,\n  MatDateSelectionModel,\n  DateSelectionModelChange,\n} from './date-selection-model';\n\n/**\n * An event used for datepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use MatDatepickerInputEvent instead.\n */\nexport class MatDatepickerInputEvent<D, S = unknown> {\n  /** The new value for the target datepicker input. */\n  value: D | null;\n\n  constructor(\n      /** Reference to the datepicker input component that emitted the event. */\n      public target: MatDatepickerInputBase<S, D>,\n      /** Reference to the native input element associated with the datepicker input. */\n      public targetElement: HTMLElement) {\n    this.value = this.target.value;\n  }\n}\n\n/** Function that can be used to filter out dates from a calendar. */\nexport type DateFilterFn<D> = (date: D | null) => boolean;\n\n/** Base class for datepicker inputs. */\n@Directive()\nexport abstract class MatDatepickerInputBase<S, D = ExtractDateTypeFromSelection<S>>\n  implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy, Validator {\n\n  /** Whether the component has been initialized. */\n  private _isInitialized: boolean;\n\n  /** The value of the input. */\n  @Input()\n  get value(): D | null {\n    return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;\n  }\n  set value(value: D | null) {\n    this._assignValueProgrammatically(value);\n  }\n  protected _model: MatDateSelectionModel<S, D> | undefined;\n\n  /** Whether the datepicker-input is disabled. */\n  @Input()\n  get disabled(): boolean { return !!this._disabled || this._parentDisabled(); }\n  set disabled(value: boolean) {\n    const newValue = coerceBooleanProperty(value);\n    const element = this._elementRef.nativeElement;\n\n    if (this._disabled !== newValue) {\n      this._disabled = newValue;\n      this.stateChanges.next(undefined);\n    }\n\n    // We need to null check the `blur` method, because it's undefined during SSR.\n    // In Ivy static bindings are invoked earlier, before the element is attached to the DOM.\n    // This can cause an error to be thrown in some browsers (IE/Edge) which assert that the\n    // element has been inserted.\n    if (newValue && this._isInitialized && element.blur) {\n      // Normally, native input elements automatically blur if they turn disabled. This behavior\n      // is problematic, because it would mean that it triggers another change detection cycle,\n      // which then causes a changed after checked error if the input element was focused before.\n      element.blur();\n    }\n  }\n  private _disabled: boolean;\n\n  /** Emits when a `change` event is fired on this `<input>`. */\n  @Output() readonly dateChange: EventEmitter<MatDatepickerInputEvent<D, S>> =\n      new EventEmitter<MatDatepickerInputEvent<D, S>>();\n\n  /** Emits when an `input` event is fired on this `<input>`. */\n  @Output() readonly dateInput: EventEmitter<MatDatepickerInputEvent<D, S>> =\n      new EventEmitter<MatDatepickerInputEvent<D, S>>();\n\n  /** Emits when the internal state has changed */\n  readonly stateChanges = new Subject<void>();\n\n  _onTouched = () => {};\n  _validatorOnChange = () => {};\n\n  private _cvaOnChange: (value: any) => void = () => {};\n  private _valueChangesSubscription = Subscription.EMPTY;\n  private _localeSubscription = Subscription.EMPTY;\n\n  /**\n   * Since the value is kept on the model which is assigned in an Input,\n   * we might get a value before we have a model. This property keeps track\n   * of the value until we have somewhere to assign it.\n   */\n  private _pendingValue: D | null;\n\n  /** The form control validator for whether the input parses. */\n  private _parseValidator: ValidatorFn = (): ValidationErrors | null => {\n    return this._lastValueValid ?\n        null : {'matDatepickerParse': {'text': this._elementRef.nativeElement.value}};\n  }\n\n  /** The form control validator for the date filter. */\n  private _filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._dateAdapter.getValidDateOrNull(\n      this._dateAdapter.deserialize(control.value));\n    return !controlValue || this._matchesFilter(controlValue) ?\n        null : {'matDatepickerFilter': true};\n  }\n\n  /** The form control validator for the min date. */\n  private _minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._dateAdapter.getValidDateOrNull(\n      this._dateAdapter.deserialize(control.value));\n    const min = this._getMinDate();\n    return (!min || !controlValue ||\n        this._dateAdapter.compareDate(min, controlValue) <= 0) ?\n        null : {'matDatepickerMin': {'min': min, 'actual': controlValue}};\n  }\n\n  /** The form control validator for the max date. */\n  private _maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._dateAdapter.getValidDateOrNull(\n      this._dateAdapter.deserialize(control.value));\n    const max = this._getMaxDate();\n    return (!max || !controlValue ||\n        this._dateAdapter.compareDate(max, controlValue) >= 0) ?\n        null : {'matDatepickerMax': {'max': max, 'actual': controlValue}};\n  }\n\n  /** Gets the base validator functions. */\n  protected _getValidators(): ValidatorFn[] {\n    return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];\n  }\n\n  /** Gets the minimum date for the input. Used for validation. */\n  abstract _getMinDate(): D | null;\n\n  /** Gets the maximum date for the input. Used for validation. */\n  abstract _getMaxDate(): D | null;\n\n  /** Gets the date filter function. Used for validation. */\n  protected abstract _getDateFilter(): DateFilterFn<D> | undefined;\n\n  /** Registers a date selection model with the input. */\n  _registerModel(model: MatDateSelectionModel<S, D>): void {\n    this._model = model;\n    this._valueChangesSubscription.unsubscribe();\n\n    if (this._pendingValue) {\n      this._assignValue(this._pendingValue);\n    }\n\n    this._valueChangesSubscription = this._model.selectionChanged.subscribe(event => {\n      if (this._shouldHandleChangeEvent(event)) {\n        const value = this._getValueFromModel(event.selection);\n        this._lastValueValid = this._isValidValue(value);\n        this._cvaOnChange(value);\n        this._onTouched();\n        this._formatValue(value);\n        this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n        this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n      }\n    });\n  }\n\n  /** Opens the popup associated with the input. */\n  protected abstract _openPopup(): void;\n\n  /** Assigns a value to the input's model. */\n  protected abstract _assignValueToModel(model: D | null): void;\n\n  /** Converts a value from the model into a native value for the input. */\n  protected abstract _getValueFromModel(modelValue: S): D | null;\n\n  /** Combined form control validator for this input. */\n  protected abstract _validator: ValidatorFn | null;\n\n  /** Predicate that determines whether the input should handle a particular change event. */\n  protected abstract _shouldHandleChangeEvent(event: DateSelectionModelChange<S>): boolean;\n\n  /** Whether the last value set on the input was valid. */\n  protected _lastValueValid = false;\n\n  constructor(\n      protected _elementRef: ElementRef<HTMLInputElement>,\n      @Optional() public _dateAdapter: DateAdapter<D>,\n      @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats) {\n\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._dateAdapter) {\n        throw createMissingDateImplError('DateAdapter');\n      }\n      if (!this._dateFormats) {\n        throw createMissingDateImplError('MAT_DATE_FORMATS');\n      }\n    }\n\n    // Update the displayed date when the locale changes.\n    this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\n      this._assignValueProgrammatically(this.value);\n    });\n  }\n\n  ngAfterViewInit() {\n    this._isInitialized = true;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (dateInputsHaveChanged(changes, this._dateAdapter)) {\n      this.stateChanges.next(undefined);\n    }\n  }\n\n  ngOnDestroy() {\n    this._valueChangesSubscription.unsubscribe();\n    this._localeSubscription.unsubscribe();\n    this.stateChanges.complete();\n  }\n\n  /** @docs-private */\n  registerOnValidatorChange(fn: () => void): void {\n    this._validatorOnChange = fn;\n  }\n\n  /** @docs-private */\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this._validator ? this._validator(c) : null;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  writeValue(value: D): void {\n    this._assignValueProgrammatically(value);\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnChange(fn: (value: any) => void): void {\n    this._cvaOnChange = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  _onKeydown(event: KeyboardEvent) {\n    const isAltDownArrow = event.altKey && event.keyCode === DOWN_ARROW;\n\n    if (isAltDownArrow && !this._elementRef.nativeElement.readOnly) {\n      this._openPopup();\n      event.preventDefault();\n    }\n  }\n\n  _onInput(value: string) {\n    const lastValueWasValid = this._lastValueValid;\n    let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);\n    this._lastValueValid = this._isValidValue(date);\n    date = this._dateAdapter.getValidDateOrNull(date);\n\n    if (!this._dateAdapter.sameDate(date, this.value)) {\n      this._assignValue(date);\n      this._cvaOnChange(date);\n      this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n    } else {\n      // Call the CVA change handler for invalid values\n      // since this is what marks the control as dirty.\n      if (value && !this.value) {\n        this._cvaOnChange(date);\n      }\n\n      if (lastValueWasValid !== this._lastValueValid) {\n        this._validatorOnChange();\n      }\n    }\n  }\n\n  _onChange() {\n    this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n  }\n\n  /** Handles blur events on the input. */\n  _onBlur() {\n    // Reformat the input only if we have a valid value.\n    if (this.value) {\n      this._formatValue(this.value);\n    }\n\n    this._onTouched();\n  }\n\n  /** Formats a value and sets it on the input element. */\n  protected _formatValue(value: D | null) {\n    this._elementRef.nativeElement.value =\n        value ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '';\n  }\n\n  /** Assigns a value to the model. */\n  private _assignValue(value: D | null) {\n    // We may get some incoming values before the model was\n    // assigned. Save the value so that we can assign it later.\n    if (this._model) {\n      this._assignValueToModel(value);\n      this._pendingValue = null;\n    } else {\n      this._pendingValue = value;\n    }\n  }\n\n  /** Whether a value is considered valid. */\n  private _isValidValue(value: D | null): boolean {\n    return !value || this._dateAdapter.isValid(value);\n  }\n\n  /**\n   * Checks whether a parent control is disabled. This is in place so that it can be overridden\n   * by inputs extending this one which can be placed inside of a group that can be disabled.\n   */\n  protected _parentDisabled() {\n    return false;\n  }\n\n  /** Programmatically assigns a value to the input. */\n  protected _assignValueProgrammatically(value: D | null) {\n    value = this._dateAdapter.deserialize(value);\n    this._lastValueValid = this._isValidValue(value);\n    value = this._dateAdapter.getValidDateOrNull(value);\n    this._assignValue(value);\n    this._formatValue(value);\n  }\n\n  /** Gets whether a value matches the current date filter. */\n  _matchesFilter(value: D | null): boolean {\n    const filter = this._getDateFilter();\n    return !filter || filter(value);\n  }\n\n  // Accept `any` to avoid conflicts with other directives on `<input>` that\n  // may accept different types.\n  static ngAcceptInputType_value: any;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Checks whether the `SimpleChanges` object from an `ngOnChanges`\n * callback has any changes, accounting for date objects.\n */\nexport function dateInputsHaveChanged(\n  changes: SimpleChanges,\n  adapter: DateAdapter<unknown>): boolean {\n  const keys = Object.keys(changes);\n\n  for (let key of keys) {\n    const {previousValue, currentValue} = changes[key];\n\n    if (adapter.isDateInstance(previousValue) && adapter.isDateInstance(currentValue)) {\n      if (!adapter.sameDate(previousValue, currentValue)) {\n        return true;\n      }\n    } else {\n      return true;\n    }\n  }\n\n  return false;\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 {\n  Directive,\n  ElementRef,\n  forwardRef,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n} from '@angular/core';\nimport {\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport {\n  DateAdapter,\n  MAT_DATE_FORMATS,\n  MatDateFormats,\n  ThemePalette,\n} from '@angular/material/core';\nimport {MatFormField, MAT_FORM_FIELD} from '@angular/material/form-field';\nimport {MAT_INPUT_VALUE_ACCESSOR} from '@angular/material/input';\nimport {Subscription} from 'rxjs';\nimport {MatDatepickerInputBase, DateFilterFn} from './datepicker-input-base';\nimport {MatDatepickerControl, MatDatepickerPanel} from './datepicker-base';\nimport {DateSelectionModelChange} from './date-selection-model';\n\n/** @docs-private */\nexport const MAT_DATEPICKER_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => MatDatepickerInput),\n  multi: true\n};\n\n/** @docs-private */\nexport const MAT_DATEPICKER_VALIDATORS: any = {\n  provide: NG_VALIDATORS,\n  useExisting: forwardRef(() => MatDatepickerInput),\n  multi: true\n};\n\n/** Directive used to connect an input to a MatDatepicker. */\n@Directive({\n  selector: 'input[matDatepicker]',\n  providers: [\n    MAT_DATEPICKER_VALUE_ACCESSOR,\n    MAT_DATEPICKER_VALIDATORS,\n    {provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput},\n  ],\n  host: {\n    'class': 'mat-datepicker-input',\n    '[attr.aria-haspopup]': '_datepicker ? \"dialog\" : null',\n    '[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',\n    '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n    '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n    // Used by the test harness to tie this input to its calendar. We can't depend on\n    // `aria-owns` for this, because it's only defined while the calendar is open.\n    '[attr.data-mat-calendar]': '_datepicker ? _datepicker.id : null',\n    '[disabled]': 'disabled',\n    '(input)': '_onInput($event.target.value)',\n    '(change)': '_onChange()',\n    '(blur)': '_onBlur()',\n    '(keydown)': '_onKeydown($event)',\n  },\n  exportAs: 'matDatepickerInput',\n})\nexport class MatDatepickerInput<D> extends MatDatepickerInputBase<D | null, D>\n  implements MatDatepickerControl<D | null>, OnDestroy {\n  private _closedSubscription = Subscription.EMPTY;\n\n  /** The datepicker that this input is associated with. */\n  @Input()\n  set matDatepicker(datepicker: MatDatepickerPanel<MatDatepickerControl<D>, D | null, D>) {\n    if (datepicker) {\n      this._datepicker = datepicker;\n      this._closedSubscription = datepicker.closedStream.subscribe(() => this._onTouched());\n      this._registerModel(datepicker.registerInput(this));\n    }\n  }\n  _datepicker: MatDatepickerPanel<MatDatepickerControl<D>, D | null, D>;\n\n  /** The minimum valid date. */\n  @Input()\n  get min(): D | null { return this._min; }\n  set min(value: D | null) {\n    const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n    if (!this._dateAdapter.sameDate(validValue, this._min)) {\n      this._min = validValue;\n      this._validatorOnChange();\n    }\n  }\n  private _min: D | null;\n\n  /** The maximum valid date. */\n  @Input()\n  get max(): D | null { return this._max; }\n  set max(value: D | null) {\n    const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n    if (!this._dateAdapter.sameDate(validValue, this._max)) {\n      this._max = validValue;\n      this._validatorOnChange();\n    }\n  }\n  private _max: D | null;\n\n  /** Function that can be used to filter out dates within the datepicker. */\n  @Input('matDatepickerFilter')\n  get dateFilter() { return this._dateFilter; }\n  set dateFilter(value: DateFilterFn<D | null>) {\n    const wasMatchingValue = this._matchesFilter(this.value);\n    this._dateFilter = value;\n\n    if (this._matchesFilter(this.value) !== wasMatchingValue) {\n      this._validatorOnChange();\n    }\n  }\n  private _dateFilter: DateFilterFn<D | null>;\n\n  /** The combined form control validator for this input. */\n  protected _validator: ValidatorFn | null;\n\n  constructor(\n      elementRef: ElementRef<HTMLInputElement>,\n      @Optional() dateAdapter: DateAdapter<D>,\n      @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats,\n      @Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField) {\n    super(elementRef, dateAdapter, dateFormats);\n    this._validator = Validators.compose(super._getValidators());\n  }\n\n  /**\n   * Gets the element that the datepicker popup should be connected to.\n   * @return The element to connect the popup to.\n   */\n  getConnectedOverlayOrigin(): ElementRef {\n    return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n  }\n\n  /** Gets the ID of an element that should be used a description for the calendar overlay. */\n  getOverlayLabelId(): string | null {\n    if (this._formField) {\n      return this._formField.getLabelId();\n    }\n\n    return this._elementRef.nativeElement.getAttribute('aria-labelledby');\n  }\n\n  /** Returns the palette used by the input's form field, if any. */\n  getThemePalette(): ThemePalette {\n    return this._formField ? this._formField.color : undefined;\n  }\n\n  /** Gets the value at which the calendar should start. */\n  getStartValue(): D | null {\n    return this.value;\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n    this._closedSubscription.unsubscribe();\n  }\n\n  /** Opens the associated datepicker. */\n  protected _openPopup(): void {\n    if (this._datepicker) {\n      this._datepicker.open();\n    }\n  }\n\n  protected _getValueFromModel(modelValue: D | null): D | null {\n    return modelValue;\n  }\n\n  protected _assignValueToModel(value: D | null): void {\n    if (this._model) {\n      this._model.updateSelection(value, this);\n    }\n  }\n\n  /** Gets the input's minimum date. */\n  _getMinDate() {\n    return this._min;\n  }\n\n  /** Gets the input's maximum date. */\n  _getMaxDate() {\n    return this._max;\n  }\n\n  /** Gets the input's date filtering function. */\n  protected _getDateFilter() {\n    return this._dateFilter;\n  }\n\n  protected _shouldHandleChangeEvent(event: DateSelectionModelChange<D>) {\n    return event.source !== this;\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 {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  AfterContentInit,\n  Attribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  Directive,\n  Input,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewEncapsulation,\n  ViewChild,\n} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {merge, Observable, of as observableOf, Subscription} from 'rxjs';\nimport {MatDatepickerIntl} from './datepicker-intl';\nimport {MatDatepickerControl, MatDatepickerPanel} from './datepicker-base';\n\n\n/** Can be used to override the icon of a `matDatepickerToggle`. */\n@Directive({\n  selector: '[matDatepickerToggleIcon]'\n})\nexport class MatDatepickerToggleIcon {}\n\n\n@Component({\n  selector: 'mat-datepicker-toggle',\n  templateUrl: 'datepicker-toggle.html',\n  styleUrls: ['datepicker-toggle.css'],\n  host: {\n    'class': 'mat-datepicker-toggle',\n    '[attr.tabindex]': 'null',\n    '[class.mat-datepicker-toggle-active]': 'datepicker && datepicker.opened',\n    '[class.mat-accent]': 'datepicker && datepicker.color === \"accent\"',\n    '[class.mat-warn]': 'datepicker && datepicker.color === \"warn\"',\n    // Used by the test harness to tie this toggle to its datepicker.\n    '[attr.data-mat-calendar]': 'datepicker ? datepicker.id : null',\n    // Bind the `click` on the host, rather than the inner `button`, so that we can call\n    // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\n    // it so that the input doesn't get focused automatically by the form field (See #21836).\n    '(click)': '_open($event)',\n  },\n  exportAs: 'matDatepickerToggle',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatDatepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {\n  private _stateChanges = Subscription.EMPTY;\n\n  /** Datepicker instance that the button will toggle. */\n  @Input('for') datepicker: MatDatepickerPanel<MatDatepickerControl<any>, D>;\n\n  /** Tabindex for the toggle. */\n  @Input() tabIndex: number | null;\n\n  /** Screenreader label for the button. */\n  @Input('aria-label') ariaLabel: string;\n\n  /** Whether the toggle button is disabled. */\n  @Input()\n  get disabled(): boolean {\n    if (this._disabled === undefined && this.datepicker) {\n      return this.datepicker.disabled;\n    }\n\n    return !!this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n  }\n  private _disabled: boolean;\n\n  /** Whether ripples on the toggle should be disabled. */\n  @Input() disableRipple: boolean;\n\n  /** Custom icon set by the consumer. */\n  @ContentChild(MatDatepickerToggleIcon) _customIcon: MatDatepickerToggleIcon;\n\n  /** Underlying button element. */\n  @ViewChild('button') _button: MatButton;\n\n  constructor(\n    public _intl: MatDatepickerIntl,\n    private _changeDetectorRef: ChangeDetectorRef,\n    @Attribute('tabindex') defaultTabIndex: string) {\n\n    const parsedTabIndex = Number(defaultTabIndex);\n    this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['datepicker']) {\n      this._watchStateChanges();\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.unsubscribe();\n  }\n\n  ngAfterContentInit() {\n    this._watchStateChanges();\n  }\n\n  _open(event: Event): void {\n    if (this.datepicker && !this.disabled) {\n      this.datepicker.open();\n      event.stopPropagation();\n    }\n  }\n\n  private _watchStateChanges() {\n    const datepickerStateChanged = this.datepicker ? this.datepicker.stateChanges : observableOf();\n    const inputStateChanged = this.datepicker && this.datepicker.datepickerInput ?\n        this.datepicker.datepickerInput.stateChanges : observableOf();\n    const datepickerToggled = this.datepicker ?\n        merge(this.datepicker.openedStream, this.datepicker.closedStream) :\n        observableOf();\n\n    this._stateChanges.unsubscribe();\n    this._stateChanges = merge(\n      this._intl.changes,\n      datepickerStateChanged as Observable<void>,\n      inputStateChanged,\n      datepickerToggled\n    ).subscribe(() => this._changeDetectorRef.markForCheck());\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\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 {\n  Directive,\n  ElementRef,\n  Optional,\n  InjectionToken,\n  Inject,\n  OnInit,\n  Injector,\n  InjectFlags,\n  DoCheck,\n} from '@angular/core';\nimport {\n  NG_VALUE_ACCESSOR,\n  NG_VALIDATORS,\n  NgForm,\n  FormGroupDirective,\n  NgControl,\n  ValidatorFn,\n  Validators,\n  AbstractControl,\n  ValidationErrors,\n} from '@angular/forms';\nimport {\n  CanUpdateErrorState,\n  mixinErrorState,\n  MAT_DATE_FORMATS,\n  DateAdapter,\n  MatDateFormats,\n  ErrorStateMatcher,\n} from '@angular/material/core';\nimport {BACKSPACE} from '@angular/cdk/keycodes';\nimport {MatDatepickerInputBase, DateFilterFn} from './datepicker-input-base';\nimport {DateRange, DateSelectionModelChange} from './date-selection-model';\n\n/** Parent component that should be wrapped around `MatStartDate` and `MatEndDate`. */\nexport interface MatDateRangeInputParent<D> {\n  id: string;\n  min: D | null;\n  max: D | null;\n  dateFilter: DateFilterFn<D>;\n  rangePicker: {\n    opened: boolean;\n    id: string;\n  };\n  _startInput: MatDateRangeInputPartBase<D>;\n  _endInput: MatDateRangeInputPartBase<D>;\n  _groupDisabled: boolean;\n  _handleChildValueChange(): void;\n  _openDatepicker(): void;\n}\n\n/**\n * Used to provide the date range input wrapper component\n * to the parts without circular dependencies.\n */\nexport const MAT_DATE_RANGE_INPUT_PARENT =\n    new InjectionToken<MatDateRangeInputParent<unknown>>('MAT_DATE_RANGE_INPUT_PARENT');\n\n/**\n * Base class for the individual inputs that can be projected inside a `mat-date-range-input`.\n */\n@Directive()\nabstract class MatDateRangeInputPartBase<D>\n  extends MatDatepickerInputBase<DateRange<D>> implements OnInit, DoCheck {\n\n  /** @docs-private */\n  ngControl: NgControl;\n\n  /** @docs-private */\n  abstract updateErrorState(): void;\n\n  protected abstract override _validator: ValidatorFn | null;\n  protected abstract override _assignValueToModel(value: D | null): void;\n  protected abstract override _getValueFromModel(modelValue: DateRange<D>): D | null;\n\n  constructor(\n    @Inject(MAT_DATE_RANGE_INPUT_PARENT) public _rangeInput: MatDateRangeInputParent<D>,\n    elementRef: ElementRef<HTMLInputElement>,\n    public _defaultErrorStateMatcher: ErrorStateMatcher,\n    private _injector: Injector,\n    @Optional() public _parentForm: NgForm,\n    @Optional() public _parentFormGroup: FormGroupDirective,\n    @Optional() dateAdapter: DateAdapter<D>,\n    @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats) {\n    super(elementRef, dateAdapter, dateFormats);\n  }\n\n  ngOnInit() {\n    // We need the date input to provide itself as a `ControlValueAccessor` and a `Validator`, while\n    // injecting its `NgControl` so that the error state is handled correctly. This introduces a\n    // circular dependency, because both `ControlValueAccessor` and `Validator` depend on the input\n    // itself. Usually we can work around it for the CVA, but there's no API to do it for the\n    // validator. We work around it here by injecting the `NgControl` in `ngOnInit`, after\n    // everything has been resolved.\n    // tslint:disable-next-line:no-bitwise\n    const ngControl = this._injector.get(NgControl, null, InjectFlags.Self | InjectFlags.Optional);\n\n    if (ngControl) {\n      this.ngControl = ngControl;\n    }\n  }\n\n  ngDoCheck() {\n    if (this.ngControl) {\n      // We need to re-evaluate this on every change detection cycle, because there are some\n      // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n      // that whatever logic is in here has to be super lean or we risk destroying the performance.\n      this.updateErrorState();\n    }\n  }\n\n  /** Gets whether the input is empty. */\n  isEmpty(): boolean {\n    return this._elementRef.nativeElement.value.length === 0;\n  }\n\n  /** Gets the placeholder of the input. */\n  _getPlaceholder() {\n    return this._elementRef.nativeElement.placeholder;\n  }\n\n  /** Focuses the input. */\n  focus(): void {\n    this._elementRef.nativeElement.focus();\n  }\n\n  /** Handles `input` events on the input element. */\n  override _onInput(value: string) {\n    super._onInput(value);\n    this._rangeInput._handleChildValueChange();\n  }\n\n  /** Opens the datepicker associated with the input. */\n  protected _openPopup(): void {\n    this._rangeInput._openDatepicker();\n  }\n\n  /** Gets the minimum date from the range input. */\n  _getMinDate() {\n    return this._rangeInput.min;\n  }\n\n  /** Gets the maximum date from the range input. */\n  _getMaxDate() {\n    return this._rangeInput.max;\n  }\n\n  /** Gets the date filter function from the range input. */\n  protected _getDateFilter() {\n    return this._rangeInput.dateFilter;\n  }\n\n  protected override _parentDisabled() {\n    return this._rangeInput._groupDisabled;\n  }\n\n  protected _shouldHandleChangeEvent({source}: DateSelectionModelChange<DateRange<D>>): boolean {\n    return source !== this._rangeInput._startInput && source !== this._rangeInput._endInput;\n  }\n\n  protected override _assignValueProgrammatically(value: D | null) {\n    super._assignValueProgrammatically(value);\n    const opposite = (this === this._rangeInput._startInput ? this._rangeInput._endInput :\n        this._rangeInput._startInput) as MatDateRangeInputPartBase<D> | undefined;\n    opposite?._validatorOnChange();\n  }\n}\n\nconst _MatDateRangeInputBase = mixinErrorState(MatDateRangeInputPartBase);\n\n/** Input for entering the start date in a `mat-date-range-input`. */\n@Directive({\n  selector: 'input[matStartDate]',\n  host: {\n    'class': 'mat-start-date mat-date-range-input-inner',\n    '[disabled]': 'disabled',\n    '(input)': '_onInput($event.target.value)',\n    '(change)': '_onChange()',\n    '(keydown)': '_onKeydown($event)',\n    '[attr.id]': '_rangeInput.id',\n    '[attr.aria-haspopup]': '_rangeInput.rangePicker ? \"dialog\" : null',\n    '[attr.aria-owns]': '(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null',\n    '[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',\n    '[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',\n    '(blur)': '_onBlur()',\n    'type': 'text',\n  },\n  providers: [\n    {provide: NG_VALUE_ACCESSOR, useExisting: MatStartDate, multi: true},\n    {provide: NG_VALIDATORS, useExisting: MatStartDate, multi: true}\n  ],\n  // These need to be specified explicitly, because some tooling doesn't\n  // seem to pick them up from the base class. See #20932.\n  outputs: ['dateChange', 'dateInput'],\n  inputs: ['errorStateMatcher']\n})\nexport class MatStartDate<D> extends _MatDateRangeInputBase<D> implements\n    CanUpdateErrorState, DoCheck, OnInit {\n  /** Validator that checks that the start date isn't after the end date. */\n  private _startValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const start = this._dateAdapter.getValidDateOrNull(\n      this._dateAdapter.deserialize(control.value));\n    const end = this._model ? this._model.selection.end : null;\n    return (!start || !end ||\n        this._dateAdapter.compareDate(start, end) <= 0) ?\n        null : {'matStartDateInvalid': {'end': end, 'actual': start}};\n  }\n\n  constructor(\n    @Inject(MAT_DATE_RANGE_INPUT_PARENT) rangeInput: MatDateRangeInputParent<D>,\n    elementRef: ElementRef<HTMLInputElement>,\n    defaultErrorStateMatcher: ErrorStateMatcher,\n    injector: Injector,\n    @Optional() parentForm: NgForm,\n    @Optional() parentFormGroup: FormGroupDirective,\n    @Optional() dateAdapter: DateAdapter<D>,\n    @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats) {\n\n    // TODO(crisbeto): this constructor shouldn't be necessary, but ViewEngine doesn't seem to\n    // handle DI correctly when it is inherited from `MatDateRangeInputPartBase`. We can drop this\n    // constructor once ViewEngine is removed.\n    super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup,\n        dateAdapter, dateFormats);\n  }\n\n  override ngOnInit() {\n    // Normally this happens automatically, but it seems to break if not added explicitly when all\n    // of the criteria below are met:\n    // 1) The class extends a TS mixin.\n    // 2) The application is running in ViewEngine.\n    // 3) The application is being transpiled through tsickle.\n    // This can be removed once google3 is completely migrated to Ivy.\n    super.ngOnInit();\n  }\n\n  override ngDoCheck() {\n    // Normally this happens automatically, but it seems to break if not added explicitly when all\n    // of the criteria below are met:\n    // 1) The class extends a TS mixin.\n    // 2) The application is running in ViewEngine.\n    // 3) The application is being transpiled through tsickle.\n    // This can be removed once google3 is completely migrated to Ivy.\n    super.ngDoCheck();\n  }\n\n  protected _validator = Validators.compose([...super._getValidators(), this._startValidator]);\n\n  protected _getValueFromModel(modelValue: DateRange<D>) {\n    return modelValue.start;\n  }\n\n  protected override _shouldHandleChangeEvent(\n      change: DateSelectionModelChange<DateRange<D>>): boolean {\n    if (!super._shouldHandleChangeEvent(change)) {\n      return false;\n    } else {\n      return !change.oldValue?.start ? !!change.selection.start :\n        !change.selection.start ||\n        !!this._dateAdapter.compareDate(change.oldValue.start, change.selection.start);\n    }\n  }\n\n  protected _assignValueToModel(value: D | null) {\n    if (this._model) {\n      const range = new DateRange(value, this._model.selection.end);\n      this._model.updateSelection(range, this);\n    }\n  }\n\n  protected override _formatValue(value: D | null) {\n    super._formatValue(value);\n\n    // Any time the input value is reformatted we need to tell the parent.\n    this._rangeInput._handleChildValueChange();\n  }\n\n  /** Gets the value that should be used when mirroring the input's size. */\n  getMirrorValue(): string {\n    const element = this._elementRef.nativeElement;\n    const value = element.value;\n    return value.length > 0 ? value : element.placeholder;\n  }\n}\n\n\n/** Input for entering the end date in a `mat-date-range-input`. */\n@Directive({\n  selector: 'input[matEndDate]',\n  host: {\n    'class': 'mat-end-date mat-date-range-input-inner',\n    '[disabled]': 'disabled',\n    '(input)': '_onInput($event.target.value)',\n    '(change)': '_onChange()',\n    '(keydown)': '_onKeydown($event)',\n    '[attr.aria-haspopup]': '_rangeInput.rangePicker ? \"dialog\" : null',\n    '[attr.aria-owns]': '(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null',\n    '[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',\n    '[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',\n    '(blur)': '_onBlur()',\n    'type': 'text',\n  },\n  providers: [\n    {provide: NG_VALUE_ACCESSOR, useExisting: MatEndDate, multi: true},\n    {provide: NG_VALIDATORS, useExisting: MatEndDate, multi: true}\n  ],\n  // These need to be specified explicitly, because some tooling doesn't\n  // seem to pick them up from the base class. See #20932.\n  outputs: ['dateChange', 'dateInput'],\n  inputs: ['errorStateMatcher']\n})\nexport class MatEndDate<D> extends _MatDateRangeInputBase<D> implements\n    CanUpdateErrorState, DoCheck, OnInit {\n  /** Validator that checks that the end date isn't before the start date. */\n  private _endValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const end = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n    const start = this._model ? this._model.selection.start : null;\n    return (!end || !start ||\n        this._dateAdapter.compareDate(end, start) >= 0) ?\n        null : {'matEndDateInvalid': {'start': start, 'actual': end}};\n  }\n\n  constructor(\n    @Inject(MAT_DATE_RANGE_INPUT_PARENT) rangeInput: MatDateRangeInputParent<D>,\n    elementRef: ElementRef<HTMLInputElement>,\n    defaultErrorStateMatcher: ErrorStateMatcher,\n    injector: Injector,\n    @Optional() parentForm: NgForm,\n    @Optional() parentFormGroup: FormGroupDirective,\n    @Optional() dateAdapter: DateAdapter<D>,\n    @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats) {\n\n    // TODO(crisbeto): this constructor shouldn't be necessary, but ViewEngine doesn't seem to\n    // handle DI correctly when it is inherited from `MatDateRangeInputPartBase`. We can drop this\n    // constructor once ViewEngine is removed.\n    super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup,\n        dateAdapter, dateFormats);\n  }\n\n  override ngOnInit() {\n    // Normally this happens automatically, but it seems to break if not added explicitly when all\n    // of the criteria below are met:\n    // 1) The class extends a TS mixin.\n    // 2) The application is running in ViewEngine.\n    // 3) The application is being transpiled through tsickle.\n    // This can be removed once google3 is completely migrated to Ivy.\n    super.ngOnInit();\n  }\n\n  override ngDoCheck() {\n    // Normally this happens automatically, but it seems to break if not added explicitly when all\n    // of the criteria below are met:\n    // 1) The class extends a TS mixin.\n    // 2) The application is running in ViewEngine.\n    // 3) The application is being transpiled through tsickle.\n    // This can be removed once google3 is completely migrated to Ivy.\n    super.ngDoCheck();\n  }\n\n  protected _validator = Validators.compose([...super._getValidators(), this._endValidator]);\n\n  protected _getValueFromModel(modelValue: DateRange<D>) {\n    return modelValue.end;\n  }\n\n  protected override _shouldHandleChangeEvent(\n      change: DateSelectionModelChange<DateRange<D>>): boolean {\n    if (!super._shouldHandleChangeEvent(change)) {\n      return false;\n    } else {\n      return !change.oldValue?.end ? !!change.selection.end :\n        !change.selection.end ||\n        !!this._dateAdapter.compareDate(change.oldValue.end, change.selection.end);\n    }\n  }\n\n  protected _assignValueToModel(value: D | null) {\n    if (this._model) {\n      const range = new DateRange(this._model.selection.start, value);\n      this._model.updateSelection(range, this);\n    }\n  }\n\n  override _onKeydown(event: KeyboardEvent) {\n    // If the user is pressing backspace on an empty end input, move focus back to the start.\n    if (event.keyCode === BACKSPACE && !this._elementRef.nativeElement.value) {\n      this._rangeInput._startInput.focus();\n    }\n\n    super._onKeydown(event);\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 {\n  Component,\n  ChangeDetectionStrategy,\n  ViewEncapsulation,\n  Input,\n  Optional,\n  OnDestroy,\n  ContentChild,\n  AfterContentInit,\n  ChangeDetectorRef,\n  Self,\n  ElementRef,\n  Inject,\n  OnChanges,\n  SimpleChanges,\n} from '@angular/core';\nimport {MatFormFieldControl, MatFormField, MAT_FORM_FIELD} from '@angular/material/form-field';\nimport {ThemePalette, DateAdapter} from '@angular/material/core';\nimport {NgControl, ControlContainer} from '@angular/forms';\nimport {Subject, merge, Subscription} from 'rxjs';\nimport {FocusOrigin} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty, BooleanInput} from '@angular/cdk/coercion';\nimport {\n  MatStartDate,\n  MatEndDate,\n  MatDateRangeInputParent,\n  MAT_DATE_RANGE_INPUT_PARENT,\n} from './date-range-input-parts';\nimport {MatDatepickerControl, MatDatepickerPanel} from './datepicker-base';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {DateFilterFn, dateInputsHaveChanged} from './datepicker-input-base';\nimport {MatDateRangePickerInput} from './date-range-picker';\nimport {DateRange, MatDateSelectionModel} from './date-selection-model';\n\nlet nextUniqueId = 0;\n\n@Component({\n  selector: 'mat-date-range-input',\n  templateUrl: 'date-range-input.html',\n  styleUrls: ['date-range-input.css'],\n  exportAs: 'matDateRangeInput',\n  host: {\n    'class': 'mat-date-range-input',\n    '[class.mat-date-range-input-hide-placeholders]': '_shouldHidePlaceholders()',\n    '[class.mat-date-range-input-required]': 'required',\n    '[attr.id]': 'null',\n    'role': 'group',\n    '[attr.aria-labelledby]': '_getAriaLabelledby()',\n    '[attr.aria-describedby]': '_ariaDescribedBy',\n    // Used by the test harness to tie this input to its calendar. We can't depend on\n    // `aria-owns` for this, because it's only defined while the calendar is open.\n    '[attr.data-mat-calendar]': 'rangePicker ? rangePicker.id : null',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {provide: MatFormFieldControl, useExisting: MatDateRangeInput},\n    {provide: MAT_DATE_RANGE_INPUT_PARENT, useExisting: MatDateRangeInput},\n  ]\n})\nexport class MatDateRangeInput<D> implements MatFormFieldControl<DateRange<D>>,\n  MatDatepickerControl<D>, MatDateRangeInputParent<D>, MatDateRangePickerInput<D>,\n  AfterContentInit, OnChanges, OnDestroy {\n  private _closedSubscription = Subscription.EMPTY;\n\n  /** Current value of the range input. */\n  get value() {\n    return this._model ? this._model.selection : null;\n  }\n\n  /** Unique ID for the input. */\n  id = `mat-date-range-input-${nextUniqueId++}`;\n\n  /** Whether the control is focused. */\n  focused = false;\n\n  /** Whether the control's label should float. */\n  get shouldLabelFloat(): boolean {\n    return this.focused || !this.empty;\n  }\n\n  /** Name of the form control. */\n  controlType = 'mat-date-range-input';\n\n  /**\n   * Implemented as a part of `MatFormFieldControl`.\n   * Set the placeholder attribute on `matStartDate` and `matEndDate`.\n   * @docs-private\n   */\n  get placeholder() {\n    const start = this._startInput?._getPlaceholder() || '';\n    const end = this._endInput?._getPlaceholder() || '';\n    return (start || end) ? `${start} ${this.separator} ${end}` : '';\n  }\n\n  /** The range picker that this input is associated with. */\n  @Input()\n  get rangePicker() { return this._rangePicker; }\n  set rangePicker(rangePicker: MatDatepickerPanel<MatDatepickerControl<D>, DateRange<D>, D>) {\n    if (rangePicker) {\n      this._model = rangePicker.registerInput(this);\n      this._rangePicker = rangePicker;\n      this._closedSubscription.unsubscribe();\n      this._closedSubscription = rangePicker.closedStream.subscribe(() => {\n        this._startInput?._onTouched();\n        this._endInput?._onTouched();\n      });\n      this._registerModel(this._model!);\n    }\n  }\n  private _rangePicker: MatDatepickerPanel<MatDatepickerControl<D>, DateRange<D>, D>;\n\n  /** Whether the input is required. */\n  @Input()\n  get required(): boolean { return !!this._required; }\n  set required(value: boolean) {\n    this._required = coerceBooleanProperty(value);\n  }\n  private _required: boolean;\n\n  /** Function that can be used to filter out dates within the date range picker. */\n  @Input()\n  get dateFilter() { return this._dateFilter; }\n  set dateFilter(value: DateFilterFn<D>) {\n    const start = this._startInput;\n    const end = this._endInput;\n    const wasMatchingStart = start && start._matchesFilter(start.value);\n    const wasMatchingEnd = end && end._matchesFilter(start.value);\n    this._dateFilter = value;\n\n    if (start && start._matchesFilter(start.value) !== wasMatchingStart) {\n      start._validatorOnChange();\n    }\n\n    if (end && end._matchesFilter(end.value) !== wasMatchingEnd) {\n      end._validatorOnChange();\n    }\n  }\n  private _dateFilter: DateFilterFn<D>;\n\n  /** The minimum valid date. */\n  @Input()\n  get min(): D | null { return this._min; }\n  set min(value: D | null) {\n    const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n    if (!this._dateAdapter.sameDate(validValue, this._min)) {\n      this._min = validValue;\n      this._revalidate();\n    }\n  }\n  private _min: D | null;\n\n  /** The maximum valid date. */\n  @Input()\n  get max(): D | null { return this._max; }\n  set max(value: D | null) {\n    const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n    if (!this._dateAdapter.sameDate(validValue, this._max)) {\n      this._max = validValue;\n      this._revalidate();\n    }\n  }\n  private _max: D | null;\n\n  /** Whether the input is disabled. */\n  @Input()\n  get disabled(): boolean {\n    return (this._startInput && this._endInput) ?\n      (this._startInput.disabled && this._endInput.disabled) :\n      this._groupDisabled;\n  }\n  set disabled(value: boolean) {\n    const newValue = coerceBooleanProperty(value);\n\n    if (newValue !== this._groupDisabled) {\n      this._groupDisabled = newValue;\n      this.stateChanges.next(undefined);\n    }\n  }\n  _groupDisabled = false;\n\n  /** Whether the input is in an error state. */\n  get errorState(): boolean {\n    if (this._startInput && this._endInput) {\n      return this._startInput.errorState || this._endInput.errorState;\n    }\n\n    return false;\n  }\n\n  /** Whether the datepicker input is empty. */\n  get empty(): boolean {\n    const startEmpty = this._startInput ? this._startInput.isEmpty() : false;\n    const endEmpty = this._endInput ? this._endInput.isEmpty() : false;\n    return startEmpty && endEmpty;\n  }\n\n  /** Value for the `aria-describedby` attribute of the inputs. */\n  _ariaDescribedBy: string | null = null;\n\n  /** Date selection model currently registered with the input. */\n  private _model: MatDateSelectionModel<DateRange<D>> | undefined;\n\n  /** Separator text to be shown between the inputs. */\n  @Input() separator = '–';\n\n  /** Start of the comparison range that should be shown in the calendar. */\n  @Input() comparisonStart: D | null = null;\n\n  /** End of the comparison range that should be shown in the calendar. */\n  @Input() comparisonEnd: D | null = null;\n\n  @ContentChild(MatStartDate) _startInput: MatStartDate<D>;\n  @ContentChild(MatEndDate) _endInput: MatEndDate<D>;\n\n  /**\n   * Implemented as a part of `MatFormFieldControl`.\n   * TODO(crisbeto): change type to `AbstractControlDirective` after #18206 lands.\n   * @docs-private\n   */\n  ngControl: NgControl | null;\n\n  /** Emits when the input's state has changed. */\n  readonly stateChanges = new Subject<void>();\n\n  constructor(\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _elementRef: ElementRef<HTMLElement>,\n    @Optional() @Self() control: ControlContainer,\n    @Optional() private _dateAdapter: DateAdapter<D>,\n    @Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField) {\n\n    if (!_dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw createMissingDateImplError('DateAdapter');\n    }\n\n    // The datepicker module can be used both with MDC and non-MDC form fields. We have\n    // to conditionally add the MDC input class so that the range picker looks correctly.\n    if (_formField?._elementRef.nativeElement.classList.contains('mat-mdc-form-field')) {\n      const classList = _elementRef.nativeElement.classList;\n      classList.add('mat-mdc-input-element');\n      classList.add('mat-mdc-form-field-input-control');\n    }\n\n    // TODO(crisbeto): remove `as any` after #18206 lands.\n    this.ngControl = control as any;\n  }\n\n  /**\n   * Implemented as a part of `MatFormFieldControl`.\n   * @docs-private\n   */\n  setDescribedByIds(ids: string[]): void {\n    this._ariaDescribedBy = ids.length ? ids.join(' ') : null;\n  }\n\n  /**\n   * Implemented as a part of `MatFormFieldControl`.\n   * @docs-private\n   */\n  onContainerClick(): void {\n    if (!this.focused && !this.disabled) {\n      if (!this._model || !this._model.selection.start) {\n        this._startInput.focus();\n      } else {\n        this._endInput.focus();\n      }\n    }\n  }\n\n  ngAfterContentInit() {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._startInput) {\n        throw Error('mat-date-range-input must contain a matStartDate input');\n      }\n\n      if (!this._endInput) {\n        throw Error('mat-date-range-input must contain a matEndDate input');\n      }\n    }\n\n    if (this._model) {\n      this._registerModel(this._model);\n    }\n\n    // We don't need to unsubscribe from this, because we\n    // know that the input streams will be completed on destroy.\n    merge(this._startInput.stateChanges, this._endInput.stateChanges).subscribe(() => {\n      this.stateChanges.next(undefined);\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (dateInputsHaveChanged(changes, this._dateAdapter)) {\n      this.stateChanges.next(undefined);\n    }\n  }\n\n  ngOnDestroy() {\n    this._closedSubscription.unsubscribe();\n    this.stateChanges.complete();\n  }\n\n  /** Gets the date at which the calendar should start. */\n  getStartValue(): D | null {\n    return this.value ? this.value.start : null;\n  }\n\n  /** Gets the input's theme palette. */\n  getThemePalette(): ThemePalette {\n    return this._formField ? this._formField.color : undefined;\n  }\n\n  /** Gets the element to which the calendar overlay should be attached. */\n  getConnectedOverlayOrigin(): ElementRef {\n    return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n  }\n\n  /** Gets the ID of an element that should be used a description for the calendar overlay. */\n  getOverlayLabelId(): string | null {\n    return this._formField ? this._formField.getLabelId() : null;\n  }\n\n  /** Gets the value that is used to mirror the state input. */\n  _getInputMirrorValue() {\n    return this._startInput ? this._startInput.getMirrorValue() : '';\n  }\n\n  /** Whether the input placeholders should be hidden. */\n  _shouldHidePlaceholders() {\n    return this._startInput ? !this._startInput.isEmpty() : false;\n  }\n\n  /** Handles the value in one of the child inputs changing. */\n  _handleChildValueChange() {\n    this.stateChanges.next(undefined);\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Opens the date range picker associated with the input. */\n  _openDatepicker() {\n    if (this._rangePicker) {\n      this._rangePicker.open();\n    }\n  }\n\n  /** Whether the separate text should be hidden. */\n  _shouldHideSeparator() {\n    return (!this._formField || (this._formField.getLabelId() &&\n      !this._formField._shouldLabelFloat())) && this.empty;\n  }\n\n  /** Gets the value for the `aria-labelledby` attribute of the inputs. */\n  _getAriaLabelledby() {\n    const formField = this._formField;\n    return formField && formField._hasFloatingLabel() ? formField._labelId : null;\n  }\n\n  /** Updates the focused state of the range input. */\n  _updateFocus(origin: FocusOrigin) {\n    this.focused = origin !== null;\n    this.stateChanges.next();\n  }\n\n  /** Re-runs the validators on the start/end inputs. */\n  private _revalidate() {\n    if (this._startInput) {\n      this._startInput._validatorOnChange();\n    }\n\n    if (this._endInput) {\n      this._endInput._validatorOnChange();\n    }\n  }\n\n  /** Registers the current date selection model with the start/end inputs. */\n  private _registerModel(model: MatDateSelectionModel<DateRange<D>>) {\n    if (this._startInput) {\n      this._startInput._registerModel(model);\n    }\n\n    if (this._endInput) {\n      this._endInput._registerModel(model);\n    }\n  }\n\n  static ngAcceptInputType_required: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\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 {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\nimport {MatDatepickerBase, MatDatepickerContent, MatDatepickerControl} from './datepicker-base';\nimport {MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER, DateRange} from './date-selection-model';\nimport {MAT_CALENDAR_RANGE_STRATEGY_PROVIDER} from './date-range-selection-strategy';\n\n/**\n * Input that can be associated with a date range picker.\n * @docs-private\n */\nexport interface MatDateRangePickerInput<D> extends MatDatepickerControl<D> {\n  comparisonStart: D|null;\n  comparisonEnd: D|null;\n}\n\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDateRangePicker\"). We can change this to a\n// directive if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the date range picker popup/dialog. */\n@Component({\n  selector: 'mat-date-range-picker',\n  template: '',\n  exportAs: 'matDateRangePicker',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER,\n    MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,\n    {provide: MatDatepickerBase, useExisting: MatDateRangePicker},\n  ]\n})\nexport class MatDateRangePicker<D> extends MatDatepickerBase<MatDateRangePickerInput<D>,\n  DateRange<D>, D> {\n  protected override _forwardContentValues(instance: MatDatepickerContent<DateRange<D>, D>) {\n    super._forwardContentValues(instance);\n\n    const input = this.datepickerInput;\n\n    if (input) {\n      instance.comparisonStart = input.comparisonStart;\n      instance.comparisonEnd = input.comparisonEnd;\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 {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  Directive,\n  OnDestroy,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n  ViewEncapsulation\n} from '@angular/core';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {MatDatepickerBase, MatDatepickerControl} from './datepicker-base';\n\n\n/** Button that will close the datepicker and assign the current selection to the data model. */\n@Directive({\n  selector: '[matDatepickerApply], [matDateRangePickerApply]',\n  host: {'(click)': '_applySelection()'}\n})\nexport class MatDatepickerApply {\n  constructor(private _datepicker: MatDatepickerBase<MatDatepickerControl<unknown>, unknown>) {}\n\n  _applySelection() {\n    this._datepicker._applyPendingSelection();\n    this._datepicker.close();\n  }\n}\n\n\n/** Button that will close the datepicker and discard the current selection. */\n@Directive({\n  selector: '[matDatepickerCancel], [matDateRangePickerCancel]',\n  host: {'(click)': '_datepicker.close()'}\n})\nexport class MatDatepickerCancel {\n  constructor(public _datepicker: MatDatepickerBase<MatDatepickerControl<unknown>, unknown>) {}\n}\n\n\n/**\n * Container that can be used to project a row of action buttons\n * to the bottom of a datepicker or date range picker.\n */\n@Component({\n  selector: 'mat-datepicker-actions, mat-date-range-picker-actions',\n  styleUrls: ['datepicker-actions.css'],\n  template: `\n    <ng-template>\n      <div class=\"mat-datepicker-actions\">\n        <ng-content></ng-content>\n      </div>\n    </ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class MatDatepickerActions implements AfterViewInit, OnDestroy {\n  @ViewChild(TemplateRef) _template: TemplateRef<unknown>;\n  private _portal: TemplatePortal;\n\n  constructor(\n    private _datepicker: MatDatepickerBase<MatDatepickerControl<unknown>, unknown>,\n    private _viewContainerRef: ViewContainerRef) {}\n\n  ngAfterViewInit() {\n    this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n    this._datepicker.registerActions(this._portal);\n  }\n\n  ngOnDestroy() {\n    this._datepicker.removeActions(this._portal);\n\n    // Needs to be null checked since we initialize it in `ngAfterViewInit`.\n    if (this._portal && this._portal.isAttached) {\n      this._portal?.detach();\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 {A11yModule} from '@angular/cdk/a11y';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatCalendar, MatCalendarHeader} from './calendar';\nimport {MatCalendarBody} from './calendar-body';\nimport {MatDatepicker} from './datepicker';\nimport {\n  MatDatepickerContent,\n  MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n} from './datepicker-base';\nimport {MatDatepickerInput} from './datepicker-input';\nimport {MatDatepickerIntl} from './datepicker-intl';\nimport {MatDatepickerToggle, MatDatepickerToggleIcon} from './datepicker-toggle';\nimport {MatMonthView} from './month-view';\nimport {MatMultiYearView} from './multi-year-view';\nimport {MatYearView} from './year-view';\nimport {MatDateRangeInput} from './date-range-input';\nimport {MatStartDate, MatEndDate} from './date-range-input-parts';\nimport {MatDateRangePicker} from './date-range-picker';\nimport {MatDatepickerActions, MatDatepickerApply, MatDatepickerCancel} from './datepicker-actions';\n\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatButtonModule,\n    OverlayModule,\n    A11yModule,\n    PortalModule,\n    MatCommonModule,\n  ],\n  exports: [\n    CdkScrollableModule,\n    MatCalendar,\n    MatCalendarBody,\n    MatDatepicker,\n    MatDatepickerContent,\n    MatDatepickerInput,\n    MatDatepickerToggle,\n    MatDatepickerToggleIcon,\n    MatMonthView,\n    MatYearView,\n    MatMultiYearView,\n    MatCalendarHeader,\n    MatDateRangeInput,\n    MatStartDate,\n    MatEndDate,\n    MatDateRangePicker,\n    MatDatepickerActions,\n    MatDatepickerCancel,\n    MatDatepickerApply\n  ],\n  declarations: [\n    MatCalendar,\n    MatCalendarBody,\n    MatDatepicker,\n    MatDatepickerContent,\n    MatDatepickerInput,\n    MatDatepickerToggle,\n    MatDatepickerToggleIcon,\n    MatMonthView,\n    MatYearView,\n    MatMultiYearView,\n    MatCalendarHeader,\n    MatDateRangeInput,\n    MatStartDate,\n    MatEndDate,\n    MatDateRangePicker,\n    MatDatepickerActions,\n    MatDatepickerCancel,\n    MatDatepickerApply\n  ],\n  providers: [\n    MatDatepickerIntl,\n    MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER\n  ],\n  entryComponents: [\n    MatDatepickerContent,\n    MatCalendarHeader,\n  ]\n})\nexport class MatDatepickerModule {}\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 './datepicker-module';\nexport * from './calendar';\nexport * from './calendar-body';\nexport * from './datepicker';\nexport {\n  MAT_DATE_RANGE_SELECTION_STRATEGY,\n  MatDateRangeSelectionStrategy,\n  DefaultMatCalendarRangeStrategy,\n} from './date-range-selection-strategy';\nexport * from './datepicker-animations';\nexport {\n  MAT_DATEPICKER_SCROLL_STRATEGY,\n  MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY,\n  MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n  MatDatepickerContent,\n  DatepickerDropdownPositionX,\n  DatepickerDropdownPositionY,\n} from './datepicker-base';\nexport {MatDatepickerInputEvent, DateFilterFn} from './datepicker-input-base';\nexport {\n  MAT_DATEPICKER_VALUE_ACCESSOR,\n  MAT_DATEPICKER_VALIDATORS,\n  MatDatepickerInput,\n} from './datepicker-input';\nexport * from './datepicker-intl';\nexport * from './datepicker-toggle';\nexport * from './month-view';\nexport * from './year-view';\nexport * from './date-range-input';\nexport {MatDateRangePicker} from './date-range-picker';\nexport * from './date-selection-model';\nexport {MatStartDate, MatEndDate} from './date-range-input-parts';\nexport {MatMultiYearView, yearsPerPage, yearsPerRow} from './multi-year-view';\nexport * from './datepicker-actions';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MAT_DATE_RANGE_INPUT_PARENT as ɵangular_material_src_material_datepicker_datepicker_e} from './date-range-input-parts';\nexport {MAT_CALENDAR_RANGE_STRATEGY_PROVIDER as ɵangular_material_src_material_datepicker_datepicker_b,MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY as ɵangular_material_src_material_datepicker_datepicker_a} from './date-range-selection-strategy';\nexport {MatDatepickerBase as ɵangular_material_src_material_datepicker_datepicker_c} from './datepicker-base';\nexport {MatDatepickerInputBase as ɵangular_material_src_material_datepicker_datepicker_d} from './datepicker-input-base';"],"names":["observableOf"],"mappings":"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"}
+{"version":3,"file":"datepicker.js","sources":["../../../../../../src/material/datepicker/datepicker-errors.ts","../../../../../../src/material/datepicker/datepicker-intl.ts","../../../../../../src/material/datepicker/calendar-body.ts","../../../../../../src/material/datepicker/date-selection-model.ts","../../../../../../src/material/datepicker/date-range-selection-strategy.ts","../../../../../../src/material/datepicker/month-view.ts","../../../../../../src/material/datepicker/multi-year-view.ts","../../../../../../src/material/datepicker/year-view.ts","../../../../../../src/material/datepicker/calendar.ts","../../../../../../src/material/datepicker/datepicker-animations.ts","../../../../../../src/material/datepicker/datepicker-base.ts","../../../../../../src/material/datepicker/datepicker.ts","../../../../../../src/material/datepicker/datepicker-input-base.ts","../../../../../../src/material/datepicker/datepicker-input.ts","../../../../../../src/material/datepicker/datepicker-toggle.ts","../../../../../../src/material/datepicker/date-range-input-parts.ts","../../../../../../src/material/datepicker/date-range-input.ts","../../../../../../src/material/datepicker/date-range-picker.ts","../../../../../../src/material/datepicker/datepicker-actions.ts","../../../../../../src/material/datepicker/datepicker-module.ts","../../../../../../src/material/datepicker/public-api.ts","../../../../../../src/material/datepicker/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\n/** @docs-private */\nexport function createMissingDateImplError(provider: string) {\n  return Error(\n      `MatDatepicker: No provider found for ${provider}. You must import one of the following ` +\n      `modules at your application root: MatNativeDateModule, MatMomentDateModule, or provide a ` +\n      `custom implementation.`);\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 {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n\n/** Datepicker data that requires internationalization. */\n@Injectable({providedIn: 'root'})\nexport class MatDatepickerIntl {\n  /**\n   * Stream that emits whenever the labels here are changed. Use this to notify\n   * components if the labels have changed after initialization.\n   */\n  readonly changes: Subject<void> = new Subject<void>();\n\n  /** A label for the calendar popup (used by screen readers). */\n  calendarLabel: string = 'Calendar';\n\n  /** A label for the button used to open the calendar popup (used by screen readers). */\n  openCalendarLabel: string = 'Open calendar';\n\n  /** Label for the button used to close the calendar popup. */\n  closeCalendarLabel: string = 'Close calendar';\n\n  /** A label for the previous month button (used by screen readers). */\n  prevMonthLabel: string = 'Previous month';\n\n  /** A label for the next month button (used by screen readers). */\n  nextMonthLabel: string = 'Next month';\n\n  /** A label for the previous year button (used by screen readers). */\n  prevYearLabel: string = 'Previous year';\n\n  /** A label for the next year button (used by screen readers). */\n  nextYearLabel: string = 'Next year';\n\n  /** A label for the previous multi-year button (used by screen readers). */\n  prevMultiYearLabel: string = 'Previous 24 years';\n\n  /** A label for the next multi-year button (used by screen readers). */\n  nextMultiYearLabel: string = 'Next 24 years';\n\n  /** A label for the 'switch to month view' button (used by screen readers). */\n  switchToMonthViewLabel: string = 'Choose date';\n\n  /** A label for the 'switch to year view' button (used by screen readers). */\n  switchToMultiYearViewLabel: string = 'Choose month and year';\n\n  /** Formats a range of years. */\n  formatYearRange(start: string, end: string): string {\n    return `${start} \\u2013 ${end}`;\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 {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  ViewEncapsulation,\n  NgZone,\n  OnChanges,\n  SimpleChanges,\n  OnDestroy,\n} from '@angular/core';\nimport {take} from 'rxjs/operators';\n\n/** Extra CSS classes that can be associated with a calendar cell. */\nexport type MatCalendarCellCssClasses = string | string[] | Set<string> | {[key: string]: any};\n\n/** Function that can generate the extra classes that should be added to a calendar cell. */\nexport type MatCalendarCellClassFunction<D> =\n    (date: D, view: 'month' | 'year' | 'multi-year') => MatCalendarCellCssClasses;\n\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nexport class MatCalendarCell<D = any> {\n  constructor(public value: number,\n              public displayValue: string,\n              public ariaLabel: string,\n              public enabled: boolean,\n              public cssClasses: MatCalendarCellCssClasses = {},\n              public compareValue = value,\n              public rawValue?: D) {}\n}\n\n/** Event emitted when a date inside the calendar is triggered as a result of a user action. */\nexport interface MatCalendarUserEvent<D> {\n  value: D;\n  event: Event;\n}\n\n/**\n * An internal component used to display calendar data in a table.\n * @docs-private\n */\n@Component({\n  selector: '[mat-calendar-body]',\n  templateUrl: 'calendar-body.html',\n  styleUrls: ['calendar-body.css'],\n  host: {\n    'class': 'mat-calendar-body',\n  },\n  exportAs: 'matCalendarBody',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatCalendarBody implements OnChanges, OnDestroy {\n  /**\n   * Used to skip the next focus event when rendering the preview range.\n   * We need a flag like this, because some browsers fire focus events asynchronously.\n   */\n  private _skipNextFocus: boolean;\n\n  /** The label for the table. (e.g. \"Jan 2017\"). */\n  @Input() label: string;\n\n  /** The cells to display in the table. */\n  @Input() rows: MatCalendarCell[][];\n\n  /** The value in the table that corresponds to today. */\n  @Input() todayValue: number;\n\n  /** Start value of the selected date range. */\n  @Input() startValue: number;\n\n  /** End value of the selected date range. */\n  @Input() endValue: number;\n\n  /** The minimum number of free cells needed to fit the label in the first row. */\n  @Input() labelMinRequiredCells: number;\n\n  /** The number of columns in the table. */\n  @Input() numCols: number = 7;\n\n  /** The cell number of the active cell in the table. */\n  @Input() activeCell: number = 0;\n\n  /** Whether a range is being selected. */\n  @Input() isRange: boolean = false;\n\n  /**\n   * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n   * maintained even as the table resizes.\n   */\n  @Input() cellAspectRatio: number = 1;\n\n  /** Start of the comparison range. */\n  @Input() comparisonStart: number | null;\n\n  /** End of the comparison range. */\n  @Input() comparisonEnd: number | null;\n\n  /** Start of the preview range. */\n  @Input() previewStart: number | null = null;\n\n  /** End of the preview range. */\n  @Input() previewEnd: number | null = null;\n\n  /** Emits when a new value is selected. */\n  @Output() readonly selectedValueChange = new EventEmitter<MatCalendarUserEvent<number>>();\n\n  /** Emits when the preview has changed as a result of a user action. */\n  @Output() readonly previewChange =\n    new EventEmitter<MatCalendarUserEvent<MatCalendarCell | null>>();\n\n  /** The number of blank cells to put at the beginning for the first row. */\n  _firstRowOffset: number;\n\n  /** Padding for the individual date cells. */\n  _cellPadding: string;\n\n  /** Width of an individual cell. */\n  _cellWidth: string;\n\n  constructor(private _elementRef: ElementRef<HTMLElement>, private _ngZone: NgZone) {\n    _ngZone.runOutsideAngular(() => {\n      const element = _elementRef.nativeElement;\n      element.addEventListener('mouseenter', this._enterHandler, true);\n      element.addEventListener('focus', this._enterHandler, true);\n      element.addEventListener('mouseleave', this._leaveHandler, true);\n      element.addEventListener('blur', this._leaveHandler, true);\n    });\n  }\n\n  /** Called when a cell is clicked. */\n  _cellClicked(cell: MatCalendarCell, event: MouseEvent): void {\n    if (cell.enabled) {\n      this.selectedValueChange.emit({value: cell.value, event});\n    }\n  }\n\n  /** Returns whether a cell should be marked as selected. */\n  _isSelected(value: number) {\n    return this.startValue === value || this.endValue === value;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const columnChanges = changes['numCols'];\n    const {rows, numCols} = this;\n\n    if (changes['rows'] || columnChanges) {\n      this._firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n    }\n\n    if (changes['cellAspectRatio'] || columnChanges || !this._cellPadding) {\n      this._cellPadding = `${50 * this.cellAspectRatio / numCols}%`;\n    }\n\n    if (columnChanges || !this._cellWidth) {\n      this._cellWidth = `${100 / numCols}%`;\n    }\n  }\n\n  ngOnDestroy() {\n    const element = this._elementRef.nativeElement;\n    element.removeEventListener('mouseenter', this._enterHandler, true);\n    element.removeEventListener('focus', this._enterHandler, true);\n    element.removeEventListener('mouseleave', this._leaveHandler, true);\n    element.removeEventListener('blur', this._leaveHandler, true);\n  }\n\n  /** Returns whether a cell is active. */\n  _isActiveCell(rowIndex: number, colIndex: number): boolean {\n    let cellNumber = rowIndex * this.numCols + colIndex;\n\n    // Account for the fact that the first row may not have as many cells.\n    if (rowIndex) {\n      cellNumber -= this._firstRowOffset;\n    }\n\n    return cellNumber == this.activeCell;\n  }\n\n  /** Focuses the active cell after the microtask queue is empty. */\n  _focusActiveCell(movePreview = true) {\n    this._ngZone.runOutsideAngular(() => {\n      this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n        const activeCell: HTMLElement | null =\n            this._elementRef.nativeElement.querySelector('.mat-calendar-body-active');\n\n        if (activeCell) {\n          if (!movePreview) {\n            this._skipNextFocus = true;\n          }\n\n          activeCell.focus();\n        }\n      });\n    });\n  }\n\n  /** Gets whether a value is the start of the main range. */\n  _isRangeStart(value: number) {\n    return isStart(value, this.startValue, this.endValue);\n  }\n\n  /** Gets whether a value is the end of the main range. */\n  _isRangeEnd(value: number) {\n    return isEnd(value, this.startValue, this.endValue);\n  }\n\n  /** Gets whether a value is within the currently-selected range. */\n  _isInRange(value: number): boolean {\n    return isInRange(value, this.startValue, this.endValue, this.isRange);\n  }\n\n  /** Gets whether a value is the start of the comparison range. */\n  _isComparisonStart(value: number) {\n    return isStart(value, this.comparisonStart, this.comparisonEnd);\n  }\n\n  /** Whether the cell is a start bridge cell between the main and comparison ranges. */\n  _isComparisonBridgeStart(value: number, rowIndex: number, colIndex: number) {\n    if (!this._isComparisonStart(value) || this._isRangeStart(value) || !this._isInRange(value)) {\n      return false;\n    }\n\n    let previousCell: MatCalendarCell | undefined = this.rows[rowIndex][colIndex - 1];\n\n    if (!previousCell) {\n      const previousRow = this.rows[rowIndex - 1];\n      previousCell = previousRow && previousRow[previousRow.length - 1];\n    }\n\n    return previousCell && !this._isRangeEnd(previousCell.compareValue);\n  }\n\n  /** Whether the cell is an end bridge cell between the main and comparison ranges. */\n  _isComparisonBridgeEnd(value: number, rowIndex: number, colIndex: number) {\n    if (!this._isComparisonEnd(value) || this._isRangeEnd(value) || !this._isInRange(value)) {\n      return false;\n    }\n\n    let nextCell: MatCalendarCell | undefined = this.rows[rowIndex][colIndex + 1];\n\n    if (!nextCell) {\n      const nextRow = this.rows[rowIndex + 1];\n      nextCell = nextRow && nextRow[0];\n    }\n\n    return nextCell && !this._isRangeStart(nextCell.compareValue);\n  }\n\n  /** Gets whether a value is the end of the comparison range. */\n  _isComparisonEnd(value: number) {\n    return isEnd(value, this.comparisonStart, this.comparisonEnd);\n  }\n\n  /** Gets whether a value is within the current comparison range. */\n  _isInComparisonRange(value: number) {\n    return isInRange(value, this.comparisonStart, this.comparisonEnd, this.isRange);\n  }\n\n  /**\n   * Gets whether a value is the same as the start and end of the comparison range.\n   * For context, the functions that we use to determine whether something is the start/end of\n   * a range don't allow for the start and end to be on the same day, because we'd have to use\n   * much more specific CSS selectors to style them correctly in all scenarios. This is fine for\n   * the regular range, because when it happens, the selected styles take over and still show where\n   * the range would've been, however we don't have these selected styles for a comparison range.\n   * This function is used to apply a class that serves the same purpose as the one for selected\n   * dates, but it only applies in the context of a comparison range.\n   */\n  _isComparisonIdentical(value: number) {\n    // Note that we don't need to null check the start/end\n    // here, because the `value` will always be defined.\n    return this.comparisonStart === this.comparisonEnd && value === this.comparisonStart;\n  }\n\n  /** Gets whether a value is the start of the preview range. */\n  _isPreviewStart(value: number) {\n    return isStart(value, this.previewStart, this.previewEnd);\n  }\n\n  /** Gets whether a value is the end of the preview range. */\n  _isPreviewEnd(value: number) {\n    return isEnd(value, this.previewStart, this.previewEnd);\n  }\n\n  /** Gets whether a value is inside the preview range. */\n  _isInPreview(value: number) {\n    return isInRange(value, this.previewStart, this.previewEnd, this.isRange);\n  }\n\n  /**\n   * Event handler for when the user enters an element\n   * inside the calendar body (e.g. by hovering in or focus).\n   */\n  private _enterHandler = (event: Event) => {\n    if (this._skipNextFocus && event.type === 'focus') {\n      this._skipNextFocus = false;\n      return;\n    }\n\n    // We only need to hit the zone when we're selecting a range.\n    if (event.target && this.isRange) {\n      const cell = this._getCellFromElement(event.target as HTMLElement);\n\n      if (cell) {\n        this._ngZone.run(() => this.previewChange.emit({value: cell.enabled ? cell : null, event}));\n      }\n    }\n  }\n\n  /**\n   * Event handler for when the user's pointer leaves an element\n   * inside the calendar body (e.g. by hovering out or blurring).\n   */\n  private _leaveHandler = (event: Event) => {\n    // We only need to hit the zone when we're selecting a range.\n    if (this.previewEnd !== null && this.isRange) {\n      // Only reset the preview end value when leaving cells. This looks better, because\n      // we have a gap between the cells and the rows and we don't want to remove the\n      // range just for it to show up again when the user moves a few pixels to the side.\n      if (event.target && isTableCell(event.target as HTMLElement)) {\n        this._ngZone.run(() => this.previewChange.emit({value: null, event}));\n      }\n    }\n  }\n\n  /** Finds the MatCalendarCell that corresponds to a DOM node. */\n  private _getCellFromElement(element: HTMLElement): MatCalendarCell | null {\n    let cell: HTMLElement | undefined;\n\n    if (isTableCell(element)) {\n      cell = element;\n    } else if (isTableCell(element.parentNode!)) {\n      cell = element.parentNode as HTMLElement;\n    }\n\n    if (cell) {\n      const row = cell.getAttribute('data-mat-row');\n      const col = cell.getAttribute('data-mat-col');\n\n      if (row && col) {\n        return this.rows[parseInt(row)][parseInt(col)];\n      }\n    }\n\n    return null;\n  }\n\n}\n\n/** Checks whether a node is a table cell element. */\nfunction isTableCell(node: Node): node is HTMLTableCellElement {\n  return node.nodeName === 'TD';\n}\n\n/** Checks whether a value is the start of a range. */\nfunction isStart(value: number, start: number | null, end: number | null): boolean {\n  return end !== null && start !== end && value < end && value === start;\n}\n\n/** Checks whether a value is the end of a range. */\nfunction isEnd(value: number, start: number | null, end: number | null): boolean {\n  return start !== null && start !== end && value >= start && value === end;\n}\n\n/** Checks whether a value is inside of a range. */\nfunction isInRange(value: number,\n                   start: number | null,\n                   end: number | null,\n                   rangeEnabled: boolean): boolean {\n  return rangeEnabled && start !== null && end !== null && start !== end &&\n         value >= start && value <= end;\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 {FactoryProvider, Injectable, Optional, SkipSelf, OnDestroy} from '@angular/core';\nimport {DateAdapter} from '@angular/material/core';\nimport {Observable, Subject} from 'rxjs';\n\n/** A class representing a range of dates. */\nexport class DateRange<D> {\n  /**\n   * Ensures that objects with a `start` and `end` property can't be assigned to a variable that\n   * expects a `DateRange`\n   */\n  // tslint:disable-next-line:no-unused-variable\n  private _disableStructuralEquivalency: never;\n\n  constructor(\n    /** The start date of the range. */\n    readonly start: D | null,\n    /** The end date of the range. */\n    readonly end: D | null) {}\n}\n\n/**\n * Conditionally picks the date type, if a DateRange is passed in.\n * @docs-private\n */\nexport type ExtractDateTypeFromSelection<T> = T extends DateRange<infer D> ? D : NonNullable<T>;\n\n/**\n * Event emitted by the date selection model when its selection changes.\n * @docs-private\n */\nexport interface DateSelectionModelChange<S> {\n  /** New value for the selection. */\n  selection: S;\n\n  /** Object that triggered the change. */\n  source: unknown;\n\n  /** Previous value */\n  oldValue?: S;\n}\n\n/**\n * A selection model containing a date selection.\n * @docs-private\n */\n@Injectable()\nexport abstract class MatDateSelectionModel<S, D = ExtractDateTypeFromSelection<S>>\n    implements OnDestroy {\n  private readonly _selectionChanged = new Subject<DateSelectionModelChange<S>>();\n\n  /** Emits when the selection has changed. */\n  selectionChanged: Observable<DateSelectionModelChange<S>> = this._selectionChanged;\n\n  protected constructor(\n    /** The current selection. */\n    readonly selection: S,\n    protected _adapter: DateAdapter<D>) {\n    this.selection = selection;\n  }\n\n  /**\n   * Updates the current selection in the model.\n   * @param value New selection that should be assigned.\n   * @param source Object that triggered the selection change.\n   */\n  updateSelection(value: S, source: unknown) {\n    const oldValue = (this as {selection: S}).selection;\n    (this as {selection: S}).selection = value;\n    this._selectionChanged.next({selection: value, source, oldValue});\n  }\n\n  ngOnDestroy() {\n    this._selectionChanged.complete();\n  }\n\n  protected _isValidDateInstance(date: D): boolean {\n    return this._adapter.isDateInstance(date) && this._adapter.isValid(date);\n  }\n\n  /** Adds a date to the current selection. */\n  abstract add(date: D | null): void;\n\n  /** Checks whether the current selection is valid. */\n  abstract isValid(): boolean;\n\n  /** Checks whether the current selection is complete. */\n  abstract isComplete(): boolean;\n\n  /** Clones the selection model. */\n  abstract clone(): MatDateSelectionModel<S, D>;\n}\n\n/**\n * A selection model that contains a single date.\n * @docs-private\n */\n@Injectable()\nexport class MatSingleDateSelectionModel<D> extends MatDateSelectionModel<D | null, D> {\n  constructor(adapter: DateAdapter<D>) {\n    super(null, adapter);\n  }\n\n  /**\n   * Adds a date to the current selection. In the case of a single date selection, the added date\n   * simply overwrites the previous selection\n   */\n  add(date: D | null) {\n    super.updateSelection(date, this);\n  }\n\n  /** Checks whether the current selection is valid. */\n  isValid(): boolean {\n    return this.selection != null && this._isValidDateInstance(this.selection);\n  }\n\n  /**\n   * Checks whether the current selection is complete. In the case of a single date selection, this\n   * is true if the current selection is not null.\n   */\n  isComplete() {\n    return this.selection != null;\n  }\n\n  /** Clones the selection model. */\n  clone() {\n    const clone = new MatSingleDateSelectionModel<D>(this._adapter);\n    clone.updateSelection(this.selection, this);\n    return clone;\n  }\n}\n\n/**\n * A selection model that contains a date range.\n * @docs-private\n */\n@Injectable()\nexport class MatRangeDateSelectionModel<D> extends MatDateSelectionModel<DateRange<D>, D> {\n  constructor(adapter: DateAdapter<D>) {\n    super(new DateRange<D>(null, null), adapter);\n  }\n\n  /**\n   * Adds a date to the current selection. In the case of a date range selection, the added date\n   * fills in the next `null` value in the range. If both the start and the end already have a date,\n   * the selection is reset so that the given date is the new `start` and the `end` is null.\n   */\n  add(date: D | null): void {\n    let {start, end} = this.selection;\n\n    if (start == null) {\n      start = date;\n    } else if (end == null) {\n      end = date;\n    } else {\n      start = date;\n      end = null;\n    }\n\n    super.updateSelection(new DateRange<D>(start, end), this);\n  }\n\n  /** Checks whether the current selection is valid. */\n  isValid(): boolean {\n    const {start, end} = this.selection;\n\n    // Empty ranges are valid.\n    if (start == null && end == null) {\n      return true;\n    }\n\n    // Complete ranges are only valid if both dates are valid and the start is before the end.\n    if (start != null && end != null) {\n      return this._isValidDateInstance(start) && this._isValidDateInstance(end) &&\n             this._adapter.compareDate(start, end) <= 0;\n    }\n\n    // Partial ranges are valid if the start/end is valid.\n    return (start == null || this._isValidDateInstance(start)) &&\n           (end == null || this._isValidDateInstance(end));\n  }\n\n  /**\n   * Checks whether the current selection is complete. In the case of a date range selection, this\n   * is true if the current selection has a non-null `start` and `end`.\n   */\n  isComplete(): boolean {\n    return this.selection.start != null && this.selection.end != null;\n  }\n\n  /** Clones the selection model. */\n  clone() {\n    const clone = new MatRangeDateSelectionModel<D>(this._adapter);\n    clone.updateSelection(this.selection, this);\n    return clone;\n  }\n}\n\n/** @docs-private */\nexport function MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY(\n    parent: MatSingleDateSelectionModel<unknown>, adapter: DateAdapter<unknown>) {\n  return parent || new MatSingleDateSelectionModel(adapter);\n}\n\n/**\n * Used to provide a single selection model to a component.\n * @docs-private\n */\nexport const MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER: FactoryProvider = {\n  provide: MatDateSelectionModel,\n  deps: [[new Optional(), new SkipSelf(), MatDateSelectionModel], DateAdapter],\n  useFactory: MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY,\n};\n\n\n/** @docs-private */\nexport function MAT_RANGE_DATE_SELECTION_MODEL_FACTORY(\n    parent: MatSingleDateSelectionModel<unknown>, adapter: DateAdapter<unknown>) {\n  return parent || new MatRangeDateSelectionModel(adapter);\n}\n\n/**\n * Used to provide a range selection model to a component.\n * @docs-private\n */\nexport const MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER: FactoryProvider = {\n  provide: MatDateSelectionModel,\n  deps: [[new Optional(), new SkipSelf(), MatDateSelectionModel], DateAdapter],\n  useFactory: MAT_RANGE_DATE_SELECTION_MODEL_FACTORY,\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 {Injectable, InjectionToken, Optional, SkipSelf, FactoryProvider} from '@angular/core';\nimport {DateAdapter} from '@angular/material/core';\nimport {DateRange} from './date-selection-model';\n\n/** Injection token used to customize the date range selection behavior. */\nexport const MAT_DATE_RANGE_SELECTION_STRATEGY =\n    new InjectionToken<MatDateRangeSelectionStrategy<any>>('MAT_DATE_RANGE_SELECTION_STRATEGY');\n\n/** Object that can be provided in order to customize the date range selection behavior. */\nexport interface MatDateRangeSelectionStrategy<D> {\n  /**\n   * Called when the user has finished selecting a value.\n   * @param date Date that was selected. Will be null if the user cleared the selection.\n   * @param currentRange Range that is currently show in the calendar.\n   * @param event DOM event that triggered the selection. Currently only corresponds to a `click`\n   *    event, but it may get expanded in the future.\n   */\n  selectionFinished(date: D | null, currentRange: DateRange<D>, event: Event): DateRange<D>;\n\n  /**\n   * Called when the user has activated a new date (e.g. by hovering over\n   * it or moving focus) and the calendar tries to display a date range.\n   *\n   * @param activeDate Date that the user has activated. Will be null if the user moved\n   *    focus to an element that's no a calendar cell.\n   * @param currentRange Range that is currently shown in the calendar.\n   * @param event DOM event that caused the preview to be changed. Will be either a\n   *    `mouseenter`/`mouseleave` or `focus`/`blur` depending on how the user is navigating.\n   */\n  createPreview(activeDate: D | null, currentRange: DateRange<D>, event: Event): DateRange<D>;\n}\n\n/** Provides the default date range selection behavior. */\n@Injectable()\nexport class DefaultMatCalendarRangeStrategy<D> implements MatDateRangeSelectionStrategy<D> {\n  constructor(private _dateAdapter: DateAdapter<D>) {}\n\n  selectionFinished(date: D, currentRange: DateRange<D>) {\n    let {start, end} = currentRange;\n\n    if (start == null) {\n      start = date;\n    } else if (end == null && date && this._dateAdapter.compareDate(date, start) >= 0) {\n      end = date;\n    } else {\n      start = date;\n      end = null;\n    }\n\n    return new DateRange<D>(start, end);\n  }\n\n  createPreview(activeDate: D | null, currentRange: DateRange<D>) {\n    let start: D | null = null;\n    let end: D | null = null;\n\n    if (currentRange.start && !currentRange.end && activeDate) {\n      start = currentRange.start;\n      end = activeDate;\n    }\n\n    return new DateRange<D>(start, end);\n  }\n}\n\n\n/** @docs-private */\nexport function MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY(\n  parent: MatDateRangeSelectionStrategy<unknown>, adapter: DateAdapter<unknown>) {\n  return parent || new DefaultMatCalendarRangeStrategy(adapter);\n}\n\n/** @docs-private */\nexport const MAT_CALENDAR_RANGE_STRATEGY_PROVIDER: FactoryProvider = {\n  provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n  deps: [[new Optional(), new SkipSelf(), MAT_DATE_RANGE_SELECTION_STRATEGY], DateAdapter],\n  useFactory: MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY,\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 {\n  DOWN_ARROW,\n  END,\n  ENTER,\n  HOME,\n  LEFT_ARROW,\n  PAGE_DOWN,\n  PAGE_UP,\n  RIGHT_ARROW,\n  UP_ARROW,\n  SPACE,\n  ESCAPE,\n  hasModifierKey,\n} from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  Optional,\n  Output,\n  ViewEncapsulation,\n  ViewChild,\n  OnDestroy,\n  SimpleChanges,\n  OnChanges,\n} from '@angular/core';\nimport {DateAdapter, MAT_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n  MatCalendarBody,\n  MatCalendarCell,\n  MatCalendarUserEvent,\n  MatCalendarCellClassFunction,\n} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {Subscription} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {DateRange} from './date-selection-model';\nimport {\n  MatDateRangeSelectionStrategy,\n  MAT_DATE_RANGE_SELECTION_STRATEGY,\n} from './date-range-selection-strategy';\n\n\nconst DAYS_PER_WEEK = 7;\n\n\n/**\n * An internal component used to display a single month in the datepicker.\n * @docs-private\n */\n@Component({\n  selector: 'mat-month-view',\n  templateUrl: 'month-view.html',\n  exportAs: 'matMonthView',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatMonthView<D> implements AfterContentInit, OnChanges, OnDestroy {\n  private _rerenderSubscription = Subscription.EMPTY;\n\n  /** Flag used to filter out space/enter keyup events that originated outside of the view. */\n  private _selectionKeyPressed: boolean;\n\n  /**\n   * The date to display in this month view (everything other than the month and year is ignored).\n   */\n  @Input()\n  get activeDate(): D { return this._activeDate; }\n  set activeDate(value: D) {\n    const oldActiveDate = this._activeDate;\n    const validDate =\n      this._dateAdapter.getValidDateOrNull(\n        this._dateAdapter.deserialize(value)\n      ) || this._dateAdapter.today();\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n    if (!this._hasSameMonthAndYear(oldActiveDate, this._activeDate)) {\n      this._init();\n    }\n  }\n  private _activeDate: D;\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): DateRange<D> | D | null { return this._selected; }\n  set selected(value: DateRange<D> | D | null) {\n    if (value instanceof DateRange) {\n      this._selected = value;\n    } else {\n      this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n    }\n\n    this._setRanges(this._selected);\n  }\n  private _selected: DateRange<D> | D | null;\n\n  /** The minimum selectable date. */\n  @Input()\n  get minDate(): D | null { return this._minDate; }\n  set minDate(value: D | null) {\n    this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _minDate: D | null;\n\n  /** The maximum selectable date. */\n  @Input()\n  get maxDate(): D | null { return this._maxDate; }\n  set maxDate(value: D | null) {\n    this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _maxDate: D | null;\n\n  /** Function used to filter which dates are selectable. */\n  @Input() dateFilter: (date: D) => boolean;\n\n  /** Function that can be used to add custom CSS classes to dates. */\n  @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n  /** Start of the comparison range. */\n  @Input() comparisonStart: D | null;\n\n  /** End of the comparison range. */\n  @Input() comparisonEnd: D | null;\n\n  /** Emits when a new date is selected. */\n  @Output() readonly selectedChange: EventEmitter<D | null> = new EventEmitter<D | null>();\n\n  /** Emits when any date is selected. */\n  @Output() readonly _userSelection: EventEmitter<MatCalendarUserEvent<D | null>> =\n      new EventEmitter<MatCalendarUserEvent<D | null>>();\n\n  /** Emits when any date is activated. */\n  @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** The body of calendar table */\n  @ViewChild(MatCalendarBody) _matCalendarBody: MatCalendarBody;\n\n  /** The label for this month (e.g. \"January 2017\"). */\n  _monthLabel: string;\n\n  /** Grid of calendar cells representing the dates of the month. */\n  _weeks: MatCalendarCell[][];\n\n  /** The number of blank cells in the first row before the 1st of the month. */\n  _firstWeekOffset: number;\n\n  /** Start value of the currently-shown date range. */\n  _rangeStart: number | null;\n\n  /** End value of the currently-shown date range. */\n  _rangeEnd: number | null;\n\n  /** Start value of the currently-shown comparison date range. */\n  _comparisonRangeStart: number | null;\n\n  /** End value of the currently-shown comparison date range. */\n  _comparisonRangeEnd: number | null;\n\n  /** Start of the preview range. */\n  _previewStart: number | null;\n\n  /** End of the preview range. */\n  _previewEnd: number | null;\n\n  /** Whether the user is currently selecting a range of dates. */\n  _isRange: boolean;\n\n  /** The date of the month that today falls on. Null if today is in another month. */\n  _todayDate: number | null;\n\n  /** The names of the weekdays. */\n  _weekdays: {long: string, narrow: string}[];\n\n  constructor(readonly _changeDetectorRef: ChangeDetectorRef,\n              @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n              @Optional() public _dateAdapter: DateAdapter<D>,\n              @Optional() private _dir?: Directionality,\n              @Inject(MAT_DATE_RANGE_SELECTION_STRATEGY) @Optional()\n                  private _rangeStrategy?: MatDateRangeSelectionStrategy<D>) {\n\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._dateAdapter) {\n        throw createMissingDateImplError('DateAdapter');\n      }\n      if (!this._dateFormats) {\n        throw createMissingDateImplError('MAT_DATE_FORMATS');\n      }\n    }\n\n    this._activeDate = this._dateAdapter.today();\n  }\n\n  ngAfterContentInit() {\n    this._rerenderSubscription = this._dateAdapter.localeChanges\n      .pipe(startWith(null))\n      .subscribe(() => this._init());\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const comparisonChange = changes['comparisonStart'] || changes['comparisonEnd'];\n\n    if (comparisonChange && !comparisonChange.firstChange) {\n      this._setRanges(this.selected);\n    }\n  }\n\n  ngOnDestroy() {\n    this._rerenderSubscription.unsubscribe();\n  }\n\n  /** Handles when a new date is selected. */\n  _dateSelected(event: MatCalendarUserEvent<number>) {\n    const date = event.value;\n    const selectedYear = this._dateAdapter.getYear(this.activeDate);\n    const selectedMonth = this._dateAdapter.getMonth(this.activeDate);\n    const selectedDate = this._dateAdapter.createDate(selectedYear, selectedMonth, date);\n    let rangeStartDate: number | null;\n    let rangeEndDate: number | null;\n\n    if (this._selected instanceof DateRange) {\n      rangeStartDate = this._getDateInCurrentMonth(this._selected.start);\n      rangeEndDate = this._getDateInCurrentMonth(this._selected.end);\n    } else {\n      rangeStartDate = rangeEndDate = this._getDateInCurrentMonth(this._selected);\n    }\n\n    if (rangeStartDate !== date || rangeEndDate !== date) {\n      this.selectedChange.emit(selectedDate);\n    }\n\n    this._userSelection.emit({value: selectedDate, event: event.event});\n    this._previewStart = this._previewEnd = null;\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Handles keydown events on the calendar body when calendar is in month view. */\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n    // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n    // disabled ones from being selected. This may not be ideal, we should look into whether\n    // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n    const oldActiveDate = this._activeDate;\n    const isRtl = this._isRtl();\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? 1 : -1);\n        break;\n      case RIGHT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? -1 : 1);\n        break;\n      case UP_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -7);\n        break;\n      case DOWN_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 7);\n        break;\n      case HOME:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate,\n            1 - this._dateAdapter.getDate(this._activeDate));\n        break;\n      case END:\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate,\n            (this._dateAdapter.getNumDaysInMonth(this._activeDate) -\n              this._dateAdapter.getDate(this._activeDate)));\n        break;\n      case PAGE_UP:\n        this.activeDate = event.altKey ?\n            this._dateAdapter.addCalendarYears(this._activeDate, -1) :\n            this._dateAdapter.addCalendarMonths(this._activeDate, -1);\n        break;\n      case PAGE_DOWN:\n        this.activeDate = event.altKey ?\n            this._dateAdapter.addCalendarYears(this._activeDate, 1) :\n            this._dateAdapter.addCalendarMonths(this._activeDate, 1);\n        break;\n      case ENTER:\n      case SPACE:\n        this._selectionKeyPressed = true;\n\n        if (this._canSelect(this._activeDate)) {\n          // Prevent unexpected default actions such as form submission.\n          // Note that we only prevent the default action here while the selection happens in\n          // `keyup` below. We can't do the selection here, because it can cause the calendar to\n          // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n          // because it's too late (see #23305).\n          event.preventDefault();\n        }\n        return;\n      case ESCAPE:\n        // Abort the current range selection if the user presses escape mid-selection.\n        if (this._previewEnd != null && !hasModifierKey(event)) {\n          this._previewStart = this._previewEnd = null;\n          this.selectedChange.emit(null);\n          this._userSelection.emit({value: null, event});\n          event.preventDefault();\n          event.stopPropagation(); // Prevents the overlay from closing.\n        }\n        return;\n      default:\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n        return;\n    }\n\n    if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n      this.activeDateChange.emit(this.activeDate);\n    }\n\n    this._focusActiveCell();\n    // Prevent unexpected default actions such as form submission.\n    event.preventDefault();\n  }\n\n  /** Handles keyup events on the calendar body when calendar is in month view. */\n  _handleCalendarBodyKeyup(event: KeyboardEvent): void {\n    if (event.keyCode === SPACE || event.keyCode === ENTER) {\n      if (this._selectionKeyPressed && this._canSelect(this._activeDate)) {\n        this._dateSelected({value: this._dateAdapter.getDate(this._activeDate), event});\n      }\n\n      this._selectionKeyPressed = false;\n    }\n  }\n\n  /** Initializes this month view. */\n  _init() {\n    this._setRanges(this.selected);\n    this._todayDate = this._getCellCompareValue(this._dateAdapter.today());\n    this._monthLabel = this._dateFormats.display.monthLabel\n        ? this._dateAdapter.format(this.activeDate, this._dateFormats.display.monthLabel)\n        : this._dateAdapter.getMonthNames('short')[this._dateAdapter.getMonth(this.activeDate)]\n            .toLocaleUpperCase();\n\n    let firstOfMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),\n        this._dateAdapter.getMonth(this.activeDate), 1);\n    this._firstWeekOffset =\n        (DAYS_PER_WEEK + this._dateAdapter.getDayOfWeek(firstOfMonth) -\n         this._dateAdapter.getFirstDayOfWeek()) % DAYS_PER_WEEK;\n\n    this._initWeekdays();\n    this._createWeekCells();\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Focuses the active cell after the microtask queue is empty. */\n  _focusActiveCell(movePreview?: boolean) {\n    this._matCalendarBody._focusActiveCell(movePreview);\n  }\n\n  /** Called when the user has activated a new cell and the preview needs to be updated. */\n  _previewChanged({event, value: cell}: MatCalendarUserEvent<MatCalendarCell<D> | null>) {\n    if (this._rangeStrategy) {\n      // We can assume that this will be a range, because preview\n      // events aren't fired for single date selections.\n      const value = cell ? cell.rawValue! : null;\n      const previewRange =\n          this._rangeStrategy.createPreview(value, this.selected as DateRange<D>, event);\n      this._previewStart = this._getCellCompareValue(previewRange.start);\n      this._previewEnd = this._getCellCompareValue(previewRange.end);\n\n      // Note that here we need to use `detectChanges`, rather than `markForCheck`, because\n      // the way `_focusActiveCell` is set up at the moment makes it fire at the wrong time\n      // when navigating one month back using the keyboard which will cause this handler\n      // to throw a \"changed after checked\" error when updating the preview state.\n      this._changeDetectorRef.detectChanges();\n    }\n  }\n\n  /** Initializes the weekdays. */\n  private _initWeekdays() {\n    const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();\n    const narrowWeekdays = this._dateAdapter.getDayOfWeekNames('narrow');\n    const longWeekdays = this._dateAdapter.getDayOfWeekNames('long');\n\n    // Rotate the labels for days of the week based on the configured first day of the week.\n    let weekdays = longWeekdays.map((long, i) => {\n        return {long, narrow: narrowWeekdays[i]};\n    });\n    this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n  }\n\n  /** Creates MatCalendarCells for the dates in this month. */\n  private _createWeekCells() {\n    const daysInMonth = this._dateAdapter.getNumDaysInMonth(this.activeDate);\n    const dateNames = this._dateAdapter.getDateNames();\n    this._weeks = [[]];\n    for (let i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {\n      if (cell == DAYS_PER_WEEK) {\n        this._weeks.push([]);\n        cell = 0;\n      }\n      const date = this._dateAdapter.createDate(\n            this._dateAdapter.getYear(this.activeDate),\n            this._dateAdapter.getMonth(this.activeDate), i + 1);\n      const enabled = this._shouldEnableDate(date);\n      const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.dateA11yLabel);\n      const cellClasses = this.dateClass ? this.dateClass(date, 'month') : undefined;\n\n      this._weeks[this._weeks.length - 1].push(new MatCalendarCell<D>(i + 1, dateNames[i],\n          ariaLabel, enabled, cellClasses, this._getCellCompareValue(date)!, date));\n    }\n  }\n\n  /** Date filter for the month */\n  private _shouldEnableDate(date: D): boolean {\n    return !!date &&\n        (!this.minDate || this._dateAdapter.compareDate(date, this.minDate) >= 0) &&\n        (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate) <= 0) &&\n        (!this.dateFilter || this.dateFilter(date));\n  }\n\n  /**\n   * Gets the date in this month that the given Date falls on.\n   * Returns null if the given Date is in another month.\n   */\n  private _getDateInCurrentMonth(date: D | null): number | null {\n    return date && this._hasSameMonthAndYear(date, this.activeDate) ?\n        this._dateAdapter.getDate(date) : null;\n  }\n\n  /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\n  private _hasSameMonthAndYear(d1: D | null, d2: D | null): boolean {\n    return !!(d1 && d2 && this._dateAdapter.getMonth(d1) == this._dateAdapter.getMonth(d2) &&\n              this._dateAdapter.getYear(d1) == this._dateAdapter.getYear(d2));\n  }\n\n  /** Gets the value that will be used to one cell to another. */\n  private _getCellCompareValue(date: D | null): number | null {\n    if (date) {\n      // We use the time since the Unix epoch to compare dates in this view, rather than the\n      // cell values, because we need to support ranges that span across multiple months/years.\n      const year = this._dateAdapter.getYear(date);\n      const month = this._dateAdapter.getMonth(date);\n      const day = this._dateAdapter.getDate(date);\n      return new Date(year, month, day).getTime();\n    }\n\n    return null;\n  }\n\n  /** Determines whether the user has the RTL layout direction. */\n  private _isRtl() {\n    return this._dir && this._dir.value === 'rtl';\n  }\n\n  /** Sets the current range based on a model value. */\n  private _setRanges(selectedValue: DateRange<D> | D | null) {\n    if (selectedValue instanceof DateRange) {\n      this._rangeStart = this._getCellCompareValue(selectedValue.start);\n      this._rangeEnd = this._getCellCompareValue(selectedValue.end);\n      this._isRange = true;\n    } else {\n      this._rangeStart = this._rangeEnd = this._getCellCompareValue(selectedValue);\n      this._isRange = false;\n    }\n\n    this._comparisonRangeStart = this._getCellCompareValue(this.comparisonStart);\n    this._comparisonRangeEnd = this._getCellCompareValue(this.comparisonEnd);\n  }\n\n  /** Gets whether a date can be selected in the month view. */\n  private _canSelect(date: D) {\n    return !this.dateFilter || this.dateFilter(date);\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 {\n  DOWN_ARROW,\n  END,\n  ENTER,\n  HOME,\n  LEFT_ARROW,\n  PAGE_DOWN,\n  PAGE_UP,\n  RIGHT_ARROW,\n  UP_ARROW,\n  SPACE,\n} from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  Optional,\n  Output,\n  ViewChild,\n  ViewEncapsulation,\n  OnDestroy,\n} from '@angular/core';\nimport {DateAdapter} from '@angular/material/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n  MatCalendarBody,\n  MatCalendarCell,\n  MatCalendarUserEvent,\n  MatCalendarCellClassFunction,\n} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {Subscription} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {DateRange} from './date-selection-model';\n\nexport const yearsPerPage = 24;\n\nexport const yearsPerRow = 4;\n\n/**\n * An internal component used to display a year selector in the datepicker.\n * @docs-private\n */\n@Component({\n  selector: 'mat-multi-year-view',\n  templateUrl: 'multi-year-view.html',\n  exportAs: 'matMultiYearView',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatMultiYearView<D> implements AfterContentInit, OnDestroy {\n  private _rerenderSubscription = Subscription.EMPTY;\n\n  /** Flag used to filter out space/enter keyup events that originated outside of the view. */\n  private _selectionKeyPressed: boolean;\n\n  /** The date to display in this multi-year view (everything other than the year is ignored). */\n  @Input()\n  get activeDate(): D { return this._activeDate; }\n  set activeDate(value: D) {\n    let oldActiveDate = this._activeDate;\n    const validDate =\n      this._dateAdapter.getValidDateOrNull(\n        this._dateAdapter.deserialize(value)\n      ) || this._dateAdapter.today();\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n\n    if (!isSameMultiYearView(\n      this._dateAdapter, oldActiveDate, this._activeDate, this.minDate, this.maxDate)) {\n      this._init();\n    }\n  }\n  private _activeDate: D;\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): DateRange<D> | D | null { return this._selected; }\n  set selected(value: DateRange<D> | D | null) {\n    if (value instanceof DateRange) {\n      this._selected = value;\n    } else {\n      this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n    }\n\n    this._setSelectedYear(value);\n  }\n  private _selected: DateRange<D> | D | null;\n\n\n  /** The minimum selectable date. */\n  @Input()\n  get minDate(): D | null { return this._minDate; }\n  set minDate(value: D | null) {\n    this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _minDate: D | null;\n\n  /** The maximum selectable date. */\n  @Input()\n  get maxDate(): D | null { return this._maxDate; }\n  set maxDate(value: D | null) {\n    this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _maxDate: D | null;\n\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter: (date: D) => boolean;\n\n  /** Function that can be used to add custom CSS classes to date cells. */\n  @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n  /** Emits when a new year is selected. */\n  @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** Emits the selected year. This doesn't imply a change on the selected date */\n  @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /** Emits when any date is activated. */\n  @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** The body of calendar table */\n  @ViewChild(MatCalendarBody) _matCalendarBody: MatCalendarBody;\n\n  /** Grid of calendar cells representing the currently displayed years. */\n  _years: MatCalendarCell[][];\n\n  /** The year that today falls on. */\n  _todayYear: number;\n\n  /** The year of the selected date. Null if the selected date is null. */\n  _selectedYear: number | null;\n\n  constructor(private _changeDetectorRef: ChangeDetectorRef,\n              @Optional() public _dateAdapter: DateAdapter<D>,\n              @Optional() private _dir?: Directionality) {\n    if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw createMissingDateImplError('DateAdapter');\n    }\n\n    this._activeDate = this._dateAdapter.today();\n  }\n\n  ngAfterContentInit() {\n    this._rerenderSubscription = this._dateAdapter.localeChanges\n      .pipe(startWith(null))\n      .subscribe(() => this._init());\n  }\n\n  ngOnDestroy() {\n    this._rerenderSubscription.unsubscribe();\n  }\n\n  /** Initializes this multi-year view. */\n  _init() {\n    this._todayYear = this._dateAdapter.getYear(this._dateAdapter.today());\n\n    // We want a range years such that we maximize the number of\n    // enabled dates visible at once. This prevents issues where the minimum year\n    // is the last item of a page OR the maximum year is the first item of a page.\n\n    // The offset from the active year to the \"slot\" for the starting year is the\n    // *actual* first rendered year in the multi-year view.\n    const activeYear = this._dateAdapter.getYear(this._activeDate);\n    const minYearOfPage = activeYear - getActiveOffset(\n      this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n\n    this._years = [];\n    for (let i = 0, row: number[] = []; i < yearsPerPage; i++) {\n      row.push(minYearOfPage + i);\n      if (row.length == yearsPerRow) {\n        this._years.push(row.map(year => this._createCellForYear(year)));\n        row = [];\n      }\n    }\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Handles when a new year is selected. */\n  _yearSelected(event: MatCalendarUserEvent<number>) {\n    const year = event.value;\n    this.yearSelected.emit(this._dateAdapter.createDate(year, 0, 1));\n    let month = this._dateAdapter.getMonth(this.activeDate);\n    let daysInMonth =\n        this._dateAdapter.getNumDaysInMonth(this._dateAdapter.createDate(year, month, 1));\n    this.selectedChange.emit(this._dateAdapter.createDate(year, month,\n        Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth)));\n  }\n\n  /** Handles keydown events on the calendar body when calendar is in multi-year view. */\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n    const oldActiveDate = this._activeDate;\n    const isRtl = this._isRtl();\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? 1 : -1);\n        break;\n      case RIGHT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? -1 : 1);\n        break;\n      case UP_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -yearsPerRow);\n        break;\n      case DOWN_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerRow);\n        break;\n      case HOME:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate,\n          -getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate));\n        break;\n      case END:\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate,\n          yearsPerPage - getActiveOffset(\n            this._dateAdapter, this.activeDate, this.minDate, this.maxDate) - 1);\n        break;\n      case PAGE_UP:\n        this.activeDate =\n            this._dateAdapter.addCalendarYears(\n                this._activeDate, event.altKey ? -yearsPerPage * 10 : -yearsPerPage);\n        break;\n      case PAGE_DOWN:\n        this.activeDate =\n            this._dateAdapter.addCalendarYears(\n                this._activeDate, event.altKey ? yearsPerPage * 10 : yearsPerPage);\n        break;\n      case ENTER:\n      case SPACE:\n        // Note that we only prevent the default action here while the selection happens in\n        // `keyup` below. We can't do the selection here, because it can cause the calendar to\n        // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n        // because it's too late (see #23305).\n        this._selectionKeyPressed = true;\n        break;\n      default:\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n        return;\n    }\n    if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n      this.activeDateChange.emit(this.activeDate);\n    }\n\n    this._focusActiveCell();\n    // Prevent unexpected default actions such as form submission.\n    event.preventDefault();\n  }\n\n  /** Handles keyup events on the calendar body when calendar is in multi-year view. */\n  _handleCalendarBodyKeyup(event: KeyboardEvent): void {\n    if (event.keyCode === SPACE || event.keyCode === ENTER) {\n      if (this._selectionKeyPressed) {\n        this._yearSelected({value: this._dateAdapter.getYear(this._activeDate), event});\n      }\n\n      this._selectionKeyPressed = false;\n    }\n  }\n\n  _getActiveCell(): number {\n    return getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n  }\n\n  /** Focuses the active cell after the microtask queue is empty. */\n  _focusActiveCell() {\n    this._matCalendarBody._focusActiveCell();\n  }\n\n  /** Creates an MatCalendarCell for the given year. */\n  private _createCellForYear(year: number) {\n    const date = this._dateAdapter.createDate(year, 0, 1);\n    const yearName = this._dateAdapter.getYearName(date);\n    const cellClasses = this.dateClass ? this.dateClass(date, 'multi-year') : undefined;\n\n    return new MatCalendarCell(year, yearName, yearName, this._shouldEnableYear(year), cellClasses);\n  }\n\n  /** Whether the given year is enabled. */\n  private _shouldEnableYear(year: number) {\n    // disable if the year is greater than maxDate lower than minDate\n    if (year === undefined || year === null ||\n        (this.maxDate && year > this._dateAdapter.getYear(this.maxDate)) ||\n        (this.minDate && year < this._dateAdapter.getYear(this.minDate))) {\n      return false;\n    }\n\n    // enable if it reaches here and there's no filter defined\n    if (!this.dateFilter) {\n      return true;\n    }\n\n    const firstOfYear = this._dateAdapter.createDate(year, 0, 1);\n\n    // If any date in the year is enabled count the year as enabled.\n    for (let date = firstOfYear; this._dateAdapter.getYear(date) == year;\n      date = this._dateAdapter.addCalendarDays(date, 1)) {\n      if (this.dateFilter(date)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /** Determines whether the user has the RTL layout direction. */\n  private _isRtl() {\n    return this._dir && this._dir.value === 'rtl';\n  }\n\n  /** Sets the currently-highlighted year based on a model value. */\n  private _setSelectedYear(value: DateRange<D> | D | null) {\n    this._selectedYear = null;\n\n    if (value instanceof DateRange) {\n      const displayValue = value.start || value.end;\n\n      if (displayValue) {\n        this._selectedYear = this._dateAdapter.getYear(displayValue);\n      }\n    } else if (value) {\n      this._selectedYear = this._dateAdapter.getYear(value);\n    }\n  }\n}\n\nexport function isSameMultiYearView<D>(\n  dateAdapter: DateAdapter<D>, date1: D, date2: D, minDate: D | null, maxDate: D | null): boolean {\n  const year1 = dateAdapter.getYear(date1);\n  const year2 = dateAdapter.getYear(date2);\n  const startingYear = getStartingYear(dateAdapter, minDate, maxDate);\n  return Math.floor((year1 - startingYear) / yearsPerPage) ===\n          Math.floor((year2 - startingYear) / yearsPerPage);\n}\n\n/**\n * When the multi-year view is first opened, the active year will be in view.\n * So we compute how many years are between the active year and the *slot* where our\n * \"startingYear\" will render when paged into view.\n */\nexport function getActiveOffset<D>(\n  dateAdapter: DateAdapter<D>, activeDate: D, minDate: D | null, maxDate: D | null): number {\n  const activeYear = dateAdapter.getYear(activeDate);\n  return euclideanModulo((activeYear - getStartingYear(dateAdapter, minDate, maxDate)),\n    yearsPerPage);\n}\n\n/**\n * We pick a \"starting\" year such that either the maximum year would be at the end\n * or the minimum year would be at the beginning of a page.\n */\nfunction getStartingYear<D>(\n  dateAdapter: DateAdapter<D>, minDate: D | null, maxDate: D | null): number {\n  let startingYear = 0;\n  if (maxDate) {\n    const maxYear = dateAdapter.getYear(maxDate);\n    startingYear = maxYear - yearsPerPage + 1;\n  } else if (minDate) {\n    startingYear = dateAdapter.getYear(minDate);\n  }\n  return startingYear;\n}\n\n/** Gets remainder that is non-negative, even if first number is negative */\nfunction euclideanModulo (a: number, b: number): number {\n  return (a % b + b) % b;\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 {\n  DOWN_ARROW,\n  END,\n  ENTER,\n  HOME,\n  LEFT_ARROW,\n  PAGE_DOWN,\n  PAGE_UP,\n  RIGHT_ARROW,\n  UP_ARROW,\n  SPACE,\n} from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  Optional,\n  Output,\n  ViewChild,\n  ViewEncapsulation,\n  OnDestroy,\n} from '@angular/core';\nimport {DateAdapter, MAT_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n  MatCalendarBody,\n  MatCalendarCell,\n  MatCalendarUserEvent,\n  MatCalendarCellClassFunction,\n} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {Subscription} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {DateRange} from './date-selection-model';\n\n/**\n * An internal component used to display a single year in the datepicker.\n * @docs-private\n */\n@Component({\n  selector: 'mat-year-view',\n  templateUrl: 'year-view.html',\n  exportAs: 'matYearView',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatYearView<D> implements AfterContentInit, OnDestroy {\n  private _rerenderSubscription = Subscription.EMPTY;\n\n  /** Flag used to filter out space/enter keyup events that originated outside of the view. */\n  private _selectionKeyPressed: boolean;\n\n  /** The date to display in this year view (everything other than the year is ignored). */\n  @Input()\n  get activeDate(): D { return this._activeDate; }\n  set activeDate(value: D) {\n    let oldActiveDate = this._activeDate;\n    const validDate =\n      this._dateAdapter.getValidDateOrNull(\n        this._dateAdapter.deserialize(value)\n      ) || this._dateAdapter.today();\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n    if (this._dateAdapter.getYear(oldActiveDate) !== this._dateAdapter.getYear(this._activeDate)) {\n      this._init();\n    }\n  }\n  private _activeDate: D;\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): DateRange<D> | D | null { return this._selected; }\n  set selected(value: DateRange<D> | D | null) {\n    if (value instanceof DateRange) {\n      this._selected = value;\n    } else {\n      this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n    }\n\n    this._setSelectedMonth(value);\n  }\n  private _selected: DateRange<D> | D | null;\n\n  /** The minimum selectable date. */\n  @Input()\n  get minDate(): D | null { return this._minDate; }\n  set minDate(value: D | null) {\n    this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _minDate: D | null;\n\n  /** The maximum selectable date. */\n  @Input()\n  get maxDate(): D | null { return this._maxDate; }\n  set maxDate(value: D | null) {\n    this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _maxDate: D | null;\n\n  /** A function used to filter which dates are selectable. */\n  @Input() dateFilter: (date: D) => boolean;\n\n  /** Function that can be used to add custom CSS classes to date cells. */\n  @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n  /** Emits when a new month is selected. */\n  @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** Emits the selected month. This doesn't imply a change on the selected date */\n  @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /** Emits when any date is activated. */\n  @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n  /** The body of calendar table */\n  @ViewChild(MatCalendarBody) _matCalendarBody: MatCalendarBody;\n\n  /** Grid of calendar cells representing the months of the year. */\n  _months: MatCalendarCell[][];\n\n  /** The label for this year (e.g. \"2017\"). */\n  _yearLabel: string;\n\n  /** The month in this year that today falls on. Null if today is in a different year. */\n  _todayMonth: number | null;\n\n  /**\n   * The month in this year that the selected Date falls on.\n   * Null if the selected Date is in a different year.\n   */\n  _selectedMonth: number | null;\n\n  constructor(readonly _changeDetectorRef: ChangeDetectorRef,\n              @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n              @Optional() public _dateAdapter: DateAdapter<D>,\n              @Optional() private _dir?: Directionality) {\n\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._dateAdapter) {\n        throw createMissingDateImplError('DateAdapter');\n      }\n      if (!this._dateFormats) {\n        throw createMissingDateImplError('MAT_DATE_FORMATS');\n      }\n    }\n\n    this._activeDate = this._dateAdapter.today();\n  }\n\n  ngAfterContentInit() {\n    this._rerenderSubscription = this._dateAdapter.localeChanges\n      .pipe(startWith(null))\n      .subscribe(() => this._init());\n  }\n\n  ngOnDestroy() {\n    this._rerenderSubscription.unsubscribe();\n  }\n\n  /** Handles when a new month is selected. */\n  _monthSelected(event: MatCalendarUserEvent<number>) {\n    const month = event.value;\n    const normalizedDate =\n          this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n\n    this.monthSelected.emit(normalizedDate);\n\n    const daysInMonth = this._dateAdapter.getNumDaysInMonth(normalizedDate);\n\n    this.selectedChange.emit(this._dateAdapter.createDate(\n        this._dateAdapter.getYear(this.activeDate), month,\n        Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth)));\n  }\n\n  /** Handles keydown events on the calendar body when calendar is in year view. */\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n    // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n    // disabled ones from being selected. This may not be ideal, we should look into whether\n    // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n    const oldActiveDate = this._activeDate;\n    const isRtl = this._isRtl();\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? 1 : -1);\n        break;\n      case RIGHT_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? -1 : 1);\n        break;\n      case UP_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -4);\n        break;\n      case DOWN_ARROW:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 4);\n        break;\n      case HOME:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate,\n            -this._dateAdapter.getMonth(this._activeDate));\n        break;\n      case END:\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate,\n            11 - this._dateAdapter.getMonth(this._activeDate));\n        break;\n      case PAGE_UP:\n        this.activeDate =\n            this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\n        break;\n      case PAGE_DOWN:\n        this.activeDate =\n            this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\n        break;\n      case ENTER:\n      case SPACE:\n        // Note that we only prevent the default action here while the selection happens in\n        // `keyup` below. We can't do the selection here, because it can cause the calendar to\n        // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n        // because it's too late (see #23305).\n        this._selectionKeyPressed = true;\n        break;\n      default:\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n        return;\n    }\n\n    if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n      this.activeDateChange.emit(this.activeDate);\n    }\n\n    this._focusActiveCell();\n    // Prevent unexpected default actions such as form submission.\n    event.preventDefault();\n  }\n\n  /** Handles keyup events on the calendar body when calendar is in year view. */\n  _handleCalendarBodyKeyup(event: KeyboardEvent): void {\n    if (event.keyCode === SPACE || event.keyCode === ENTER) {\n      if (this._selectionKeyPressed) {\n        this._monthSelected({value: this._dateAdapter.getMonth(this._activeDate), event});\n      }\n\n      this._selectionKeyPressed = false;\n    }\n  }\n\n  /** Initializes this year view. */\n  _init() {\n    this._setSelectedMonth(this.selected);\n    this._todayMonth = this._getMonthInCurrentYear(this._dateAdapter.today());\n    this._yearLabel = this._dateAdapter.getYearName(this.activeDate);\n\n    let monthNames = this._dateAdapter.getMonthNames('short');\n    // First row of months only contains 5 elements so we can fit the year label on the same row.\n    this._months = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]].map(row => row.map(\n        month => this._createCellForMonth(month, monthNames[month])));\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Focuses the active cell after the microtask queue is empty. */\n  _focusActiveCell() {\n    this._matCalendarBody._focusActiveCell();\n  }\n\n  /**\n   * Gets the month in this year that the given Date falls on.\n   * Returns null if the given Date is in another year.\n   */\n  private _getMonthInCurrentYear(date: D | null) {\n    return date && this._dateAdapter.getYear(date) == this._dateAdapter.getYear(this.activeDate) ?\n        this._dateAdapter.getMonth(date) : null;\n  }\n\n  /** Creates an MatCalendarCell for the given month. */\n  private _createCellForMonth(month: number, monthName: string) {\n    const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n    const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.monthYearA11yLabel);\n    const cellClasses = this.dateClass ? this.dateClass(date, 'year') : undefined;\n\n    return new MatCalendarCell(month, monthName.toLocaleUpperCase(), ariaLabel,\n        this._shouldEnableMonth(month), cellClasses);\n  }\n\n  /** Whether the given month is enabled. */\n  private _shouldEnableMonth(month: number) {\n\n    const activeYear = this._dateAdapter.getYear(this.activeDate);\n\n    if (month === undefined || month === null ||\n        this._isYearAndMonthAfterMaxDate(activeYear, month) ||\n        this._isYearAndMonthBeforeMinDate(activeYear, month)) {\n      return false;\n    }\n\n    if (!this.dateFilter) {\n      return true;\n    }\n\n    const firstOfMonth = this._dateAdapter.createDate(activeYear, month, 1);\n\n    // If any date in the month is enabled count the month as enabled.\n    for (let date = firstOfMonth; this._dateAdapter.getMonth(date) == month;\n         date = this._dateAdapter.addCalendarDays(date, 1)) {\n      if (this.dateFilter(date)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Tests whether the combination month/year is after this.maxDate, considering\n   * just the month and year of this.maxDate\n   */\n  private _isYearAndMonthAfterMaxDate(year: number, month: number) {\n    if (this.maxDate) {\n      const maxYear = this._dateAdapter.getYear(this.maxDate);\n      const maxMonth = this._dateAdapter.getMonth(this.maxDate);\n\n      return year > maxYear || (year === maxYear && month > maxMonth);\n    }\n\n    return false;\n  }\n\n  /**\n   * Tests whether the combination month/year is before this.minDate, considering\n   * just the month and year of this.minDate\n   */\n  private _isYearAndMonthBeforeMinDate(year: number, month: number) {\n    if (this.minDate) {\n      const minYear = this._dateAdapter.getYear(this.minDate);\n      const minMonth = this._dateAdapter.getMonth(this.minDate);\n\n      return year < minYear || (year === minYear && month < minMonth);\n    }\n\n    return false;\n  }\n\n  /** Determines whether the user has the RTL layout direction. */\n  private _isRtl() {\n    return this._dir && this._dir.value === 'rtl';\n  }\n\n  /** Sets the currently-selected month based on a model value. */\n  private _setSelectedMonth(value: DateRange<D> | D | null) {\n    if (value instanceof DateRange) {\n      this._selectedMonth = this._getMonthInCurrentYear(value.start) ||\n                            this._getMonthInCurrentYear(value.end);\n    } else {\n      this._selectedMonth = this._getMonthInCurrentYear(value);\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 {ComponentPortal, ComponentType, Portal} from '@angular/cdk/portal';\nimport {\n  AfterContentInit,\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  DateAdapter,\n  MAT_DATE_FORMATS,\n  MatDateFormats,\n} from '@angular/material/core';\nimport {Subject, Subscription} from 'rxjs';\nimport {MatCalendarUserEvent, MatCalendarCellClassFunction} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {MatDatepickerIntl} from './datepicker-intl';\nimport {MatMonthView} from './month-view';\nimport {\n  getActiveOffset,\n  isSameMultiYearView,\n  MatMultiYearView,\n  yearsPerPage\n} from './multi-year-view';\nimport {MatYearView} from './year-view';\nimport {MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, DateRange} from './date-selection-model';\n\n/**\n * Possible views for the calendar.\n * @docs-private\n */\nexport type MatCalendarView = 'month' | 'year' | 'multi-year';\n\n/** Counter used to generate unique IDs. */\nlet uniqueId = 0;\n\n/** Default header for MatCalendar */\n@Component({\n  selector: 'mat-calendar-header',\n  templateUrl: 'calendar-header.html',\n  exportAs: 'matCalendarHeader',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatCalendarHeader<D> {\n  _buttonDescriptionId = `mat-calendar-button-${uniqueId++}`;\n\n  constructor(private _intl: MatDatepickerIntl,\n              @Inject(forwardRef(() => MatCalendar)) public calendar: MatCalendar<D>,\n              @Optional() private _dateAdapter: DateAdapter<D>,\n              @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n              changeDetectorRef: ChangeDetectorRef) {\n\n    this.calendar.stateChanges.subscribe(() => changeDetectorRef.markForCheck());\n  }\n\n  /** The label for the current calendar view. */\n  get periodButtonText(): string {\n    if (this.calendar.currentView == 'month') {\n      return this._dateAdapter\n          .format(this.calendar.activeDate, this._dateFormats.display.monthYearLabel)\n              .toLocaleUpperCase();\n    }\n    if (this.calendar.currentView == 'year') {\n      return this._dateAdapter.getYearName(this.calendar.activeDate);\n    }\n\n    // The offset from the active year to the \"slot\" for the starting year is the\n    // *actual* first rendered year in the multi-year view, and the last year is\n    // just yearsPerPage - 1 away.\n    const activeYear = this._dateAdapter.getYear(this.calendar.activeDate);\n    const minYearOfPage = activeYear - getActiveOffset(\n      this._dateAdapter, this.calendar.activeDate, this.calendar.minDate, this.calendar.maxDate);\n    const maxYearOfPage = minYearOfPage + yearsPerPage - 1;\n    const minYearName =\n      this._dateAdapter.getYearName(this._dateAdapter.createDate(minYearOfPage, 0, 1));\n    const maxYearName =\n      this._dateAdapter.getYearName(this._dateAdapter.createDate(maxYearOfPage, 0, 1));\n    return this._intl.formatYearRange(minYearName, maxYearName);\n  }\n\n  get periodButtonLabel(): string {\n    return this.calendar.currentView == 'month' ?\n        this._intl.switchToMultiYearViewLabel : this._intl.switchToMonthViewLabel;\n  }\n\n  /** The label for the previous button. */\n  get prevButtonLabel(): string {\n    return {\n      'month': this._intl.prevMonthLabel,\n      'year': this._intl.prevYearLabel,\n      'multi-year': this._intl.prevMultiYearLabel\n    }[this.calendar.currentView];\n  }\n\n  /** The label for the next button. */\n  get nextButtonLabel(): string {\n    return {\n      'month': this._intl.nextMonthLabel,\n      'year': this._intl.nextYearLabel,\n      'multi-year': this._intl.nextMultiYearLabel\n    }[this.calendar.currentView];\n  }\n\n  /** Handles user clicks on the period label. */\n  currentPeriodClicked(): void {\n    this.calendar.currentView = this.calendar.currentView == 'month' ? 'multi-year' : 'month';\n  }\n\n  /** Handles user clicks on the previous button. */\n  previousClicked(): void {\n    this.calendar.activeDate = this.calendar.currentView == 'month' ?\n        this._dateAdapter.addCalendarMonths(this.calendar.activeDate, -1) :\n            this._dateAdapter.addCalendarYears(\n                this.calendar.activeDate, this.calendar.currentView == 'year' ? -1 : -yearsPerPage\n            );\n  }\n\n  /** Handles user clicks on the next button. */\n  nextClicked(): void {\n    this.calendar.activeDate = this.calendar.currentView == 'month' ?\n        this._dateAdapter.addCalendarMonths(this.calendar.activeDate, 1) :\n            this._dateAdapter.addCalendarYears(\n                this.calendar.activeDate,\n                    this.calendar.currentView == 'year' ? 1 : yearsPerPage\n            );\n  }\n\n  /** Whether the previous period button is enabled. */\n  previousEnabled(): boolean {\n    if (!this.calendar.minDate) {\n      return true;\n    }\n    return !this.calendar.minDate ||\n        !this._isSameView(this.calendar.activeDate, this.calendar.minDate);\n  }\n\n  /** Whether the next period button is enabled. */\n  nextEnabled(): boolean {\n    return !this.calendar.maxDate ||\n        !this._isSameView(this.calendar.activeDate, this.calendar.maxDate);\n  }\n\n  /** Whether the two dates represent the same view in the current view mode (month or year). */\n  private _isSameView(date1: D, date2: D): boolean {\n    if (this.calendar.currentView == 'month') {\n      return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2) &&\n          this._dateAdapter.getMonth(date1) == this._dateAdapter.getMonth(date2);\n    }\n    if (this.calendar.currentView == 'year') {\n      return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2);\n    }\n    // Otherwise we are in 'multi-year' view.\n    return isSameMultiYearView(\n      this._dateAdapter, date1, date2, this.calendar.minDate, this.calendar.maxDate);\n  }\n}\n\n/** A calendar that is used as part of the datepicker. */\n@Component({\n  selector: 'mat-calendar',\n  templateUrl: 'calendar.html',\n  styleUrls: ['calendar.css'],\n  host: {\n    'class': 'mat-calendar',\n  },\n  exportAs: 'matCalendar',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER]\n})\nexport class MatCalendar<D> implements AfterContentInit, AfterViewChecked, OnDestroy, OnChanges {\n  /** An input indicating the type of the header component, if set. */\n  @Input() headerComponent: ComponentType<any>;\n\n  /** A portal containing the header component type for this calendar. */\n  _calendarHeaderPortal: Portal<any>;\n\n  private _intlChanges: Subscription;\n\n  /**\n   * Used for scheduling that focus should be moved to the active cell on the next tick.\n   * We need to schedule it, rather than do it immediately, because we have to wait\n   * for Angular to re-evaluate the view children.\n   */\n  private _moveFocusOnNextTick = false;\n\n  /** A date representing the period (month or year) to start the calendar in. */\n  @Input()\n  get startAt(): D | null { return this._startAt; }\n  set startAt(value: D | null) {\n    this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _startAt: D | null;\n\n  /** Whether the calendar should be started in month or year view. */\n  @Input() startView: MatCalendarView = 'month';\n\n  /** The currently selected date. */\n  @Input()\n  get selected(): DateRange<D> | D | null { return this._selected; }\n  set selected(value: DateRange<D> | D | null) {\n    if (value instanceof DateRange) {\n      this._selected = value;\n    } else {\n      this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n    }\n  }\n  private _selected: DateRange<D> | D | null;\n\n  /** The minimum selectable date. */\n  @Input()\n  get minDate(): D | null { return this._minDate; }\n  set minDate(value: D | null) {\n    this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _minDate: D | null;\n\n  /** The maximum selectable date. */\n  @Input()\n  get maxDate(): D | null { return this._maxDate; }\n  set maxDate(value: D | null) {\n    this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _maxDate: D | null;\n\n  /** Function used to filter which dates are selectable. */\n  @Input() dateFilter: (date: D) => boolean;\n\n  /** Function that can be used to add custom CSS classes to dates. */\n  @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n  /** Start of the comparison range. */\n  @Input() comparisonStart: D | null;\n\n  /** End of the comparison range. */\n  @Input() comparisonEnd: D | null;\n\n  /** Emits when the currently selected date changes. */\n  @Output() readonly selectedChange: EventEmitter<D | null> = new EventEmitter<D | null>();\n\n  /**\n   * Emits the year chosen in multiyear view.\n   * This doesn't imply a change on the selected date.\n   */\n  @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /**\n   * Emits the month chosen in year view.\n   * This doesn't imply a change on the selected date.\n   */\n  @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /**\n   * Emits when the current view changes.\n   */\n  @Output() readonly viewChanged: EventEmitter<MatCalendarView> =\n    new EventEmitter<MatCalendarView>(true);\n\n  /** Emits when any date is selected. */\n  @Output() readonly _userSelection: EventEmitter<MatCalendarUserEvent<D | null>> =\n      new EventEmitter<MatCalendarUserEvent<D | null>>();\n\n  /** Reference to the current month view component. */\n  @ViewChild(MatMonthView) monthView: MatMonthView<D>;\n\n  /** Reference to the current year view component. */\n  @ViewChild(MatYearView) yearView: MatYearView<D>;\n\n  /** Reference to the current multi-year view component. */\n  @ViewChild(MatMultiYearView) multiYearView: MatMultiYearView<D>;\n\n  /**\n   * The current active date. This determines which time period is shown and which date is\n   * highlighted when using keyboard navigation.\n   */\n  get activeDate(): D { return this._clampedActiveDate; }\n  set activeDate(value: D) {\n    this._clampedActiveDate = this._dateAdapter.clampDate(value, this.minDate, this.maxDate);\n    this.stateChanges.next();\n    this._changeDetectorRef.markForCheck();\n  }\n  private _clampedActiveDate: D;\n\n  /** Whether the calendar is in month view. */\n  get currentView(): MatCalendarView { return this._currentView; }\n  set currentView(value: MatCalendarView) {\n    const viewChangedResult = this._currentView !== value ? value : null;\n    this._currentView = value;\n    this._moveFocusOnNextTick = true;\n    this._changeDetectorRef.markForCheck();\n    if (viewChangedResult) {\n      this.viewChanged.emit(viewChangedResult);\n    }\n  }\n  private _currentView: MatCalendarView;\n\n  /**\n   * Emits whenever there is a state change that the header may need to respond to.\n   */\n  readonly stateChanges = new Subject<void>();\n\n  constructor(_intl: MatDatepickerIntl,\n              @Optional() private _dateAdapter: DateAdapter<D>,\n              @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n              private _changeDetectorRef: ChangeDetectorRef) {\n\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._dateAdapter) {\n        throw createMissingDateImplError('DateAdapter');\n      }\n\n      if (!this._dateFormats) {\n        throw createMissingDateImplError('MAT_DATE_FORMATS');\n      }\n    }\n\n    this._intlChanges = _intl.changes.subscribe(() => {\n      _changeDetectorRef.markForCheck();\n      this.stateChanges.next();\n    });\n  }\n\n  ngAfterContentInit() {\n    this._calendarHeaderPortal = new ComponentPortal(this.headerComponent || MatCalendarHeader);\n    this.activeDate = this.startAt || this._dateAdapter.today();\n\n    // Assign to the private property since we don't want to move focus on init.\n    this._currentView = this.startView;\n  }\n\n  ngAfterViewChecked() {\n    if (this._moveFocusOnNextTick) {\n      this._moveFocusOnNextTick = false;\n      this.focusActiveCell();\n    }\n  }\n\n  ngOnDestroy() {\n    this._intlChanges.unsubscribe();\n    this.stateChanges.complete();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const change =\n        changes['minDate'] || changes['maxDate'] || changes['dateFilter'];\n\n    if (change && !change.firstChange) {\n      const view = this._getCurrentViewComponent();\n\n      if (view) {\n        // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\n        // passed down to the view via data bindings which won't be up-to-date when we call `_init`.\n        this._changeDetectorRef.detectChanges();\n        view._init();\n      }\n    }\n\n    this.stateChanges.next();\n  }\n\n  /** Focuses the active date. */\n  focusActiveCell() {\n    this._getCurrentViewComponent()._focusActiveCell(false);\n  }\n\n  /** Updates today's date after an update of the active date */\n  updateTodaysDate() {\n    this._getCurrentViewComponent()._init();\n  }\n\n  /** Handles date selection in the month view. */\n  _dateSelected(event: MatCalendarUserEvent<D | null>): void {\n    const date = event.value;\n\n    if (this.selected instanceof DateRange ||\n        (date && !this._dateAdapter.sameDate(date, this.selected))) {\n      this.selectedChange.emit(date);\n    }\n\n    this._userSelection.emit(event);\n  }\n\n  /** Handles year selection in the multiyear view. */\n  _yearSelectedInMultiYearView(normalizedYear: D) {\n    this.yearSelected.emit(normalizedYear);\n  }\n\n  /** Handles month selection in the year view. */\n  _monthSelectedInYearView(normalizedMonth: D) {\n    this.monthSelected.emit(normalizedMonth);\n  }\n\n  /** Handles year/month selection in the multi-year/year views. */\n  _goToDateInView(date: D, view: 'month' | 'year' | 'multi-year'): void {\n    this.activeDate = date;\n    this.currentView = view;\n  }\n\n  /** Returns the component instance that corresponds to the current calendar view. */\n  private _getCurrentViewComponent(): MatMonthView<D> | MatYearView<D> | MatMultiYearView<D> {\n    // The return type is explicitly written as a union to ensure that the Closure compiler does\n    // not optimize calls to _init(). Without the explict return type, TypeScript narrows it to\n    // only the first component type. See https://github.com/angular/components/issues/22996.\n    return this.monthView || this.yearView || this.multiYearView;\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  keyframes,\n  AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material datepicker.\n * @docs-private\n */\nexport const matDatepickerAnimations: {\n  readonly transformPanel: AnimationTriggerMetadata;\n  readonly fadeInCalendar: AnimationTriggerMetadata;\n} = {\n  /** Transforms the height of the datepicker's calendar. */\n  transformPanel: trigger('transformPanel', [\n    transition('void => enter-dropdown', animate('120ms cubic-bezier(0, 0, 0.2, 1)', keyframes([\n      style({opacity: 0, transform: 'scale(1, 0.8)'}),\n      style({opacity: 1, transform: 'scale(1, 1)'})\n    ]))),\n    transition('void => enter-dialog', animate('150ms cubic-bezier(0, 0, 0.2, 1)', keyframes([\n      style({opacity: 0, transform: 'scale(0.7)'}),\n      style({transform: 'none', opacity: 1})\n    ]))),\n    transition('* => void', animate('100ms linear', style({opacity: 0})))\n  ]),\n\n  /** Fades in the content of the calendar. */\n  fadeInCalendar: trigger('fadeInCalendar', [\n    state('void', style({opacity: 0})),\n    state('enter', style({opacity: 1})),\n\n    // TODO(crisbeto): this animation should be removed since it isn't quite on spec, but we\n    // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\n    transition('void => *', animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'))\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 {Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty, coerceStringArray} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey, UP_ARROW} from '@angular/cdk/keycodes';\nimport {\n  Overlay,\n  OverlayConfig,\n  OverlayRef,\n  ScrollStrategy,\n  FlexibleConnectedPositionStrategy,\n} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, TemplatePortal} from '@angular/cdk/portal';\nimport {DOCUMENT} from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ComponentRef,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  Optional,\n  Output,\n  ViewChild,\n  ViewContainerRef,\n  ViewEncapsulation,\n  ChangeDetectorRef,\n  Directive,\n  OnChanges,\n  SimpleChanges,\n  OnInit,\n} from '@angular/core';\nimport {\n  CanColor,\n  DateAdapter,\n  mixinColor,\n  ThemePalette,\n} from '@angular/material/core';\nimport {merge, Subject, Observable, Subscription} from 'rxjs';\nimport {filter, take} from 'rxjs/operators';\nimport {_getFocusedElementPierceShadowDom} from '@angular/cdk/platform';\nimport {MatCalendar, MatCalendarView} from './calendar';\nimport {matDatepickerAnimations} from './datepicker-animations';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {MatCalendarUserEvent, MatCalendarCellClassFunction} from './calendar-body';\nimport {DateFilterFn} from './datepicker-input-base';\nimport {\n  ExtractDateTypeFromSelection,\n  MatDateSelectionModel,\n  DateRange,\n} from './date-selection-model';\nimport {\n  MAT_DATE_RANGE_SELECTION_STRATEGY,\n  MatDateRangeSelectionStrategy,\n} from './date-range-selection-strategy';\nimport {MatDatepickerIntl} from './datepicker-intl';\n\n/** Used to generate a unique ID for each datepicker instance. */\nlet datepickerUid = 0;\n\n/** Injection token that determines the scroll handling while the calendar is open. */\nexport const MAT_DATEPICKER_SCROLL_STRATEGY =\n    new InjectionToken<() => ScrollStrategy>('mat-datepicker-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n  return () => overlay.scrollStrategies.reposition();\n}\n\n/** Possible positions for the datepicker dropdown along the X axis. */\nexport type DatepickerDropdownPositionX = 'start' | 'end';\n\n/** Possible positions for the datepicker dropdown along the Y axis. */\nexport type DatepickerDropdownPositionY = 'above' | 'below';\n\n/** @docs-private */\nexport const MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n  provide: MAT_DATEPICKER_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY,\n};\n\n// Boilerplate for applying mixins to MatDatepickerContent.\n/** @docs-private */\nconst _MatDatepickerContentBase = mixinColor(class {\n  constructor(public _elementRef: ElementRef) {}\n});\n\n/**\n * Component used as the content for the datepicker overlay. We use this instead of using\n * MatCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the overlay that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * @docs-private\n */\n@Component({\n  selector: 'mat-datepicker-content',\n  templateUrl: 'datepicker-content.html',\n  styleUrls: ['datepicker-content.css'],\n  host: {\n    'class': 'mat-datepicker-content',\n    '[@transformPanel]': '_animationState',\n    '(@transformPanel.done)': '_animationDone.next()',\n    '[class.mat-datepicker-content-touch]': 'datepicker.touchUi',\n  },\n  animations: [\n    matDatepickerAnimations.transformPanel,\n    matDatepickerAnimations.fadeInCalendar,\n  ],\n  exportAs: 'matDatepickerContent',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['color'],\n})\nexport class MatDatepickerContent<S, D = ExtractDateTypeFromSelection<S>>\n  extends _MatDatepickerContentBase implements OnInit, AfterViewInit, OnDestroy, CanColor {\n  private _subscriptions = new Subscription();\n  private _model: MatDateSelectionModel<S, D>;\n\n  /** Reference to the internal calendar component. */\n  @ViewChild(MatCalendar) _calendar: MatCalendar<D>;\n\n  /** Reference to the datepicker that created the overlay. */\n  datepicker: MatDatepickerBase<any, S, D>;\n\n  /** Start of the comparison range. */\n  comparisonStart: D | null;\n\n  /** End of the comparison range. */\n  comparisonEnd: D | null;\n\n  /** Whether the datepicker is above or below the input. */\n  _isAbove: boolean;\n\n  /** Current state of the animation. */\n  _animationState: 'enter-dropdown' | 'enter-dialog' | 'void';\n\n  /** Emits when an animation has finished. */\n  readonly _animationDone = new Subject<void>();\n\n  /** Text for the close button. */\n  _closeButtonText: string;\n\n  /** Whether the close button currently has focus. */\n  _closeButtonFocused: boolean;\n\n  /** Portal with projected action buttons. */\n  _actionsPortal: TemplatePortal | null = null;\n\n  constructor(\n    elementRef: ElementRef,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _globalModel: MatDateSelectionModel<S, D>,\n    private _dateAdapter: DateAdapter<D>,\n    @Optional() @Inject(MAT_DATE_RANGE_SELECTION_STRATEGY)\n        private _rangeSelectionStrategy: MatDateRangeSelectionStrategy<D>,\n    intl: MatDatepickerIntl) {\n    super(elementRef);\n    this._closeButtonText = intl.closeCalendarLabel;\n  }\n\n  ngOnInit() {\n    // If we have actions, clone the model so that we have the ability to cancel the selection,\n    // otherwise update the global model directly. Note that we want to assign this as soon as\n    // possible, but `_actionsPortal` isn't available in the constructor so we do it in `ngOnInit`.\n    this._model = this._actionsPortal ? this._globalModel.clone() : this._globalModel;\n    this._animationState = this.datepicker.touchUi ? 'enter-dialog' : 'enter-dropdown';\n  }\n\n  ngAfterViewInit() {\n    this._subscriptions.add(this.datepicker.stateChanges.subscribe(() => {\n      this._changeDetectorRef.markForCheck();\n    }));\n    this._calendar.focusActiveCell();\n  }\n\n  ngOnDestroy() {\n    this._subscriptions.unsubscribe();\n    this._animationDone.complete();\n  }\n\n  _handleUserSelection(event: MatCalendarUserEvent<D | null>) {\n    const selection = this._model.selection;\n    const value = event.value;\n    const isRange = selection instanceof DateRange;\n\n    // If we're selecting a range and we have a selection strategy, always pass the value through\n    // there. Otherwise don't assign null values to the model, unless we're selecting a range.\n    // A null value when picking a range means that the user cancelled the selection (e.g. by\n    // pressing escape), whereas when selecting a single value it means that the value didn't\n    // change. This isn't very intuitive, but it's here for backwards-compatibility.\n    if (isRange && this._rangeSelectionStrategy) {\n      const newSelection = this._rangeSelectionStrategy.selectionFinished(value,\n          selection as unknown as DateRange<D>, event.event);\n      this._model.updateSelection(newSelection as unknown as S, this);\n    } else if (value && (isRange ||\n              !this._dateAdapter.sameDate(value, selection as unknown as D))) {\n      this._model.add(value);\n    }\n\n    // Delegate closing the overlay to the actions.\n    if ((!this._model || this._model.isComplete()) && !this._actionsPortal) {\n      this.datepicker.close();\n    }\n  }\n\n  _startExitAnimation() {\n    this._animationState = 'void';\n    this._changeDetectorRef.markForCheck();\n  }\n\n  _getSelected() {\n    return this._model.selection as unknown as D | DateRange<D> | null;\n  }\n\n  /** Applies the current pending selection to the global model. */\n  _applyPendingSelection() {\n    if (this._model !== this._globalModel) {\n      this._globalModel.updateSelection(this._model.selection, this);\n    }\n  }\n}\n\n/** Form control that can be associated with a datepicker. */\nexport interface MatDatepickerControl<D> {\n  getStartValue(): D | null;\n  getThemePalette(): ThemePalette;\n  min: D | null;\n  max: D | null;\n  disabled: boolean;\n  dateFilter: DateFilterFn<D>;\n  getConnectedOverlayOrigin(): ElementRef;\n  getOverlayLabelId(): string | null;\n  stateChanges: Observable<void>;\n}\n\n/** A datepicker that can be attached to a {@link MatDatepickerControl}. */\nexport interface MatDatepickerPanel<C extends MatDatepickerControl<D>, S,\n    D = ExtractDateTypeFromSelection<S>> {\n  /** Stream that emits whenever the date picker is closed. */\n  closedStream: EventEmitter<void>;\n  /** Color palette to use on the datepicker's calendar. */\n  color: ThemePalette;\n  /** The input element the datepicker is associated with. */\n  datepickerInput: C;\n  /** Whether the datepicker pop-up should be disabled. */\n  disabled: boolean;\n  /** The id for the datepicker's calendar. */\n  id: string;\n  /** Whether the datepicker is open. */\n  opened: boolean;\n  /** Stream that emits whenever the date picker is opened. */\n  openedStream: EventEmitter<void>;\n  /** Emits when the datepicker's state changes. */\n  stateChanges: Subject<void>;\n  /** Opens the datepicker. */\n  open(): void;\n  /** Register an input with the datepicker. */\n  registerInput(input: C): MatDateSelectionModel<S, D>;\n}\n\n/** Base class for a datepicker. */\n@Directive()\nexport abstract class MatDatepickerBase<C extends MatDatepickerControl<D>, S,\n  D = ExtractDateTypeFromSelection<S>> implements MatDatepickerPanel<C, S, D>, OnDestroy,\n    OnChanges {\n  private _scrollStrategy: () => ScrollStrategy;\n  private _inputStateChanges = Subscription.EMPTY;\n\n  /** An input indicating the type of the custom header component for the calendar, if set. */\n  @Input() calendarHeaderComponent: ComponentType<any>;\n\n  /** The date to open the calendar to initially. */\n  @Input()\n  get startAt(): D | null {\n    // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n    // selected value is.\n    return this._startAt || (this.datepickerInput ? this.datepickerInput.getStartValue() : null);\n  }\n  set startAt(value: D | null) {\n    this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n  }\n  private _startAt: D | null;\n\n  /** The view that the calendar should start in. */\n  @Input() startView: 'month' | 'year' | 'multi-year' = 'month';\n\n  /** Color palette to use on the datepicker's calendar. */\n  @Input()\n  get color(): ThemePalette {\n    return this._color ||\n        (this.datepickerInput ? this.datepickerInput.getThemePalette() : undefined);\n  }\n  set color(value: ThemePalette) {\n    this._color = value;\n  }\n  _color: ThemePalette;\n\n  /**\n   * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n   * than a dropdown and elements have more padding to allow for bigger touch targets.\n   */\n  @Input()\n  get touchUi(): boolean { return this._touchUi; }\n  set touchUi(value: boolean) {\n    this._touchUi = coerceBooleanProperty(value);\n  }\n  private _touchUi = false;\n\n  /** Whether the datepicker pop-up should be disabled. */\n  @Input()\n  get disabled(): boolean {\n    return this._disabled === undefined && this.datepickerInput ?\n        this.datepickerInput.disabled : !!this._disabled;\n  }\n  set disabled(value: boolean) {\n    const newValue = coerceBooleanProperty(value);\n\n    if (newValue !== this._disabled) {\n      this._disabled = newValue;\n      this.stateChanges.next(undefined);\n    }\n  }\n  private _disabled: boolean;\n\n  /** Preferred position of the datepicker in the X axis. */\n  @Input()\n  xPosition: DatepickerDropdownPositionX = 'start';\n\n  /** Preferred position of the datepicker in the Y axis. */\n  @Input()\n  yPosition: DatepickerDropdownPositionY = 'below';\n\n  /**\n   * Whether to restore focus to the previously-focused element when the calendar is closed.\n   * Note that automatic focus restoration is an accessibility feature and it is recommended that\n   * you provide your own equivalent, if you decide to turn it off.\n   */\n  @Input()\n  get restoreFocus(): boolean { return this._restoreFocus; }\n  set restoreFocus(value: boolean) {\n    this._restoreFocus = coerceBooleanProperty(value);\n  }\n  private _restoreFocus = true;\n\n  /**\n   * Emits selected year in multiyear view.\n   * This doesn't imply a change on the selected date.\n   */\n  @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /**\n   * Emits selected month in year view.\n   * This doesn't imply a change on the selected date.\n   */\n  @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n  /**\n   * Emits when the current view changes.\n   */\n  @Output() readonly viewChanged: EventEmitter<MatCalendarView> =\n    new EventEmitter<MatCalendarView>(true);\n\n  /** Function that can be used to add custom CSS classes to dates. */\n  @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n  /** Emits when the datepicker has been opened. */\n  @Output('opened') readonly openedStream = new EventEmitter<void>();\n\n  /** Emits when the datepicker has been closed. */\n  @Output('closed') readonly closedStream = new EventEmitter<void>();\n\n  /**\n   * Classes to be passed to the date picker panel.\n   * Supports string and string array values, similar to `ngClass`.\n   */\n  @Input()\n  get panelClass(): string | string[] { return this._panelClass; }\n  set panelClass(value: string | string[]) {\n    this._panelClass = coerceStringArray(value);\n  }\n  private _panelClass: string[];\n\n  /** Whether the calendar is open. */\n  @Input()\n  get opened(): boolean { return this._opened; }\n  set opened(value: boolean) {\n    coerceBooleanProperty(value) ? this.open() : this.close();\n  }\n  private _opened = false;\n\n  /** The id for the datepicker calendar. */\n  id: string = `mat-datepicker-${datepickerUid++}`;\n\n  /** The minimum selectable date. */\n  _getMinDate(): D | null {\n    return this.datepickerInput && this.datepickerInput.min;\n  }\n\n  /** The maximum selectable date. */\n  _getMaxDate(): D | null {\n    return this.datepickerInput && this.datepickerInput.max;\n  }\n\n  _getDateFilter(): DateFilterFn<D> {\n    return this.datepickerInput && this.datepickerInput.dateFilter;\n  }\n\n  /** A reference to the overlay into which we've rendered the calendar. */\n  private _overlayRef: OverlayRef | null;\n\n  /** Reference to the component instance rendered in the overlay. */\n  private _componentRef: ComponentRef<MatDatepickerContent<S, D>> | null;\n\n  /** The element that was focused before the datepicker was opened. */\n  private _focusedElementBeforeOpen: HTMLElement | null = null;\n\n  /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */\n  private _backdropHarnessClass = `${this.id}-backdrop`;\n\n  /** Currently-registered actions portal. */\n  private _actionsPortal: TemplatePortal | null;\n\n  /** The input element this datepicker is associated with. */\n  datepickerInput: C;\n\n  /** Emits when the datepicker's state changes. */\n  readonly stateChanges = new Subject<void>();\n\n  constructor(\n    /**\n     * @deprecated `_dialog` parameter is no longer being used and it will be removed.\n     * @breaking-change 13.0.0\n     */\n    @Inject(ElementRef) _dialog: any,\n    private _overlay: Overlay,\n    private _ngZone: NgZone,\n    private _viewContainerRef: ViewContainerRef,\n    @Inject(MAT_DATEPICKER_SCROLL_STRATEGY) scrollStrategy: any,\n    @Optional() private _dateAdapter: DateAdapter<D>,\n    @Optional() private _dir: Directionality,\n    /**\n     * @deprecated No longer being used. To be removed.\n     * @breaking-change 13.0.0\n     */\n    @Optional() @Inject(DOCUMENT) _document: any,\n    private _model: MatDateSelectionModel<S, D>) {\n    if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw createMissingDateImplError('DateAdapter');\n    }\n\n    this._scrollStrategy = scrollStrategy;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const positionChange = changes['xPosition'] || changes['yPosition'];\n\n    if (positionChange && !positionChange.firstChange && this._overlayRef) {\n      const positionStrategy = this._overlayRef.getConfig().positionStrategy;\n\n      if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n        this._setConnectedPositions(positionStrategy);\n\n        if (this.opened) {\n          this._overlayRef.updatePosition();\n        }\n      }\n    }\n\n    this.stateChanges.next(undefined);\n  }\n\n  ngOnDestroy() {\n    this._destroyOverlay();\n    this.close();\n    this._inputStateChanges.unsubscribe();\n    this.stateChanges.complete();\n  }\n\n  /** Selects the given date */\n  select(date: D): void {\n    this._model.add(date);\n  }\n\n  /** Emits the selected year in multiyear view */\n  _selectYear(normalizedYear: D): void {\n    this.yearSelected.emit(normalizedYear);\n  }\n\n  /** Emits selected month in year view */\n  _selectMonth(normalizedMonth: D): void {\n    this.monthSelected.emit(normalizedMonth);\n  }\n\n  /** Emits changed view */\n  _viewChanged(view: MatCalendarView): void {\n    this.viewChanged.emit(view);\n  }\n\n  /**\n   * Register an input with this datepicker.\n   * @param input The datepicker input to register with this datepicker.\n   * @returns Selection model that the input should hook itself up to.\n   */\n  registerInput(input: C): MatDateSelectionModel<S, D> {\n    if (this.datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('A MatDatepicker can only be associated with a single input.');\n    }\n    this._inputStateChanges.unsubscribe();\n    this.datepickerInput = input;\n    this._inputStateChanges =\n        input.stateChanges.subscribe(() => this.stateChanges.next(undefined));\n    return this._model;\n  }\n\n  /**\n   * Registers a portal containing action buttons with the datepicker.\n   * @param portal Portal to be registered.\n   */\n  registerActions(portal: TemplatePortal): void {\n    if (this._actionsPortal && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('A MatDatepicker can only be associated with a single actions row.');\n    }\n    this._actionsPortal = portal;\n  }\n\n  /**\n   * Removes a portal containing action buttons from the datepicker.\n   * @param portal Portal to be removed.\n   */\n  removeActions(portal: TemplatePortal): void {\n    if (portal === this._actionsPortal) {\n      this._actionsPortal = null;\n    }\n  }\n\n  /** Open the calendar. */\n  open(): void {\n    if (this._opened || this.disabled) {\n      return;\n    }\n\n    if (!this.datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('Attempted to open an MatDatepicker with no associated input.');\n    }\n\n    this._focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n    this._openOverlay();\n    this._opened = true;\n    this.openedStream.emit();\n  }\n\n  /** Close the calendar. */\n  close(): void {\n    if (!this._opened) {\n      return;\n    }\n\n    if (this._componentRef) {\n      const instance = this._componentRef.instance;\n      instance._startExitAnimation();\n      instance._animationDone.pipe(take(1)).subscribe(() => this._destroyOverlay());\n    }\n\n    const completeClose = () => {\n      // The `_opened` could've been reset already if\n      // we got two events in quick succession.\n      if (this._opened) {\n        this._opened = false;\n        this.closedStream.emit();\n        this._focusedElementBeforeOpen = null;\n      }\n    };\n\n    if (this._restoreFocus && this._focusedElementBeforeOpen &&\n      typeof this._focusedElementBeforeOpen.focus === 'function') {\n      // Because IE moves focus asynchronously, we can't count on it being restored before we've\n      // marked the datepicker as closed. If the event fires out of sequence and the element that\n      // we're refocusing opens the datepicker on focus, the user could be stuck with not being\n      // able to close the calendar at all. We work around it by making the logic, that marks\n      // the datepicker as closed, async as well.\n      this._focusedElementBeforeOpen.focus();\n      setTimeout(completeClose);\n    } else {\n      completeClose();\n    }\n  }\n\n  /** Applies the current pending selection on the overlay to the model. */\n  _applyPendingSelection() {\n    this._componentRef?.instance?._applyPendingSelection();\n  }\n\n  /** Forwards relevant values from the datepicker to the datepicker content inside the overlay. */\n  protected _forwardContentValues(instance: MatDatepickerContent<S, D>) {\n    instance.datepicker = this;\n    instance.color = this.color;\n    instance._actionsPortal = this._actionsPortal;\n  }\n\n  /** Opens the overlay with the calendar. */\n  private _openOverlay(): void {\n    this._destroyOverlay();\n\n    const isDialog = this.touchUi;\n    const labelId = this.datepickerInput.getOverlayLabelId();\n    const portal = new ComponentPortal<MatDatepickerContent<S, D>>(MatDatepickerContent,\n      this._viewContainerRef);\n    const overlayRef = this._overlayRef = this._overlay.create(new OverlayConfig({\n      positionStrategy: isDialog ? this._getDialogStrategy() : this._getDropdownStrategy(),\n      hasBackdrop: true,\n      backdropClass: [\n        isDialog ? 'cdk-overlay-dark-backdrop' : 'mat-overlay-transparent-backdrop',\n        this._backdropHarnessClass\n      ],\n      direction: this._dir,\n      scrollStrategy: isDialog ? this._overlay.scrollStrategies.block() : this._scrollStrategy(),\n      panelClass: `mat-datepicker-${isDialog ? 'dialog' : 'popup'}`,\n    }));\n    const overlayElement = overlayRef.overlayElement;\n    overlayElement.setAttribute('role', 'dialog');\n\n    if (labelId) {\n      overlayElement.setAttribute('aria-labelledby', labelId);\n    }\n\n    if (isDialog) {\n      overlayElement.setAttribute('aria-modal', 'true');\n    }\n\n    this._getCloseStream(overlayRef).subscribe(event => {\n      if (event) {\n        event.preventDefault();\n      }\n      this.close();\n    });\n\n    this._componentRef = overlayRef.attach(portal);\n    this._forwardContentValues(this._componentRef.instance);\n\n    // Update the position once the calendar has rendered. Only relevant in dropdown mode.\n    if (!isDialog) {\n      this._ngZone.onStable.pipe(take(1)).subscribe(() => overlayRef.updatePosition());\n    }\n  }\n\n  /** Destroys the current overlay. */\n  private _destroyOverlay() {\n    if (this._overlayRef) {\n      this._overlayRef.dispose();\n      this._overlayRef = this._componentRef = null;\n    }\n  }\n\n  /** Gets a position strategy that will open the calendar as a dropdown. */\n  private _getDialogStrategy() {\n    return this._overlay.position().global().centerHorizontally().centerVertically();\n  }\n\n  /** Gets a position strategy that will open the calendar as a dropdown. */\n  private _getDropdownStrategy() {\n    const strategy = this._overlay.position()\n      .flexibleConnectedTo(this.datepickerInput.getConnectedOverlayOrigin())\n      .withTransformOriginOn('.mat-datepicker-content')\n      .withFlexibleDimensions(false)\n      .withViewportMargin(8)\n      .withLockedPosition();\n\n    return this._setConnectedPositions(strategy);\n  }\n\n  /** Sets the positions of the datepicker in dropdown mode based on the current configuration. */\n  private _setConnectedPositions(strategy: FlexibleConnectedPositionStrategy) {\n    const primaryX = this.xPosition === 'end' ? 'end' : 'start';\n    const secondaryX = primaryX === 'start' ? 'end' : 'start';\n    const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';\n    const secondaryY = primaryY === 'top' ? 'bottom' : 'top';\n\n    return strategy.withPositions([\n      {\n        originX: primaryX,\n        originY: secondaryY,\n        overlayX: primaryX,\n        overlayY: primaryY\n      },\n      {\n        originX: primaryX,\n        originY: primaryY,\n        overlayX: primaryX,\n        overlayY: secondaryY\n      },\n      {\n        originX: secondaryX,\n        originY: secondaryY,\n        overlayX: secondaryX,\n        overlayY: primaryY\n      },\n      {\n        originX: secondaryX,\n        originY: primaryY,\n        overlayX: secondaryX,\n        overlayY: secondaryY\n      }\n    ]);\n  }\n\n  /** Gets an observable that will emit when the overlay is supposed to be closed. */\n  private _getCloseStream(overlayRef: OverlayRef) {\n    return merge(\n      overlayRef.backdropClick(),\n      overlayRef.detachments(),\n      overlayRef.keydownEvents().pipe(filter(event => {\n        // Closing on alt + up is only valid when there's an input associated with the datepicker.\n        return (event.keyCode === ESCAPE && !hasModifierKey(event)) || (this.datepickerInput &&\n                hasModifierKey(event, 'altKey') && event.keyCode === UP_ARROW);\n      }))\n    );\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_opened: BooleanInput;\n  static ngAcceptInputType_touchUi: BooleanInput;\n  static ngAcceptInputType_restoreFocus: BooleanInput;\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 {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\nimport {MatDatepickerBase, MatDatepickerControl} from './datepicker-base';\nimport {MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER} from './date-selection-model';\n\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDatepicker\"). We can change this to a directive\n// if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the datepicker popup/dialog. */\n@Component({\n  selector: 'mat-datepicker',\n  template: '',\n  exportAs: 'matDatepicker',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER,\n    {provide: MatDatepickerBase, useExisting: MatDatepicker},\n  ]\n})\nexport class MatDatepicker<D> extends MatDatepickerBase<MatDatepickerControl<D>, D | null, D> {\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 {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {DOWN_ARROW} from '@angular/cdk/keycodes';\nimport {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  AfterViewInit,\n  OnChanges,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  ValidationErrors,\n  Validator,\n  ValidatorFn,\n} from '@angular/forms';\nimport {\n  DateAdapter,\n  MAT_DATE_FORMATS,\n  MatDateFormats,\n} from '@angular/material/core';\nimport {Subscription, Subject} from 'rxjs';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {\n  ExtractDateTypeFromSelection,\n  MatDateSelectionModel,\n  DateSelectionModelChange,\n} from './date-selection-model';\n\n/**\n * An event used for datepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use MatDatepickerInputEvent instead.\n */\nexport class MatDatepickerInputEvent<D, S = unknown> {\n  /** The new value for the target datepicker input. */\n  value: D | null;\n\n  constructor(\n      /** Reference to the datepicker input component that emitted the event. */\n      public target: MatDatepickerInputBase<S, D>,\n      /** Reference to the native input element associated with the datepicker input. */\n      public targetElement: HTMLElement) {\n    this.value = this.target.value;\n  }\n}\n\n/** Function that can be used to filter out dates from a calendar. */\nexport type DateFilterFn<D> = (date: D | null) => boolean;\n\n/** Base class for datepicker inputs. */\n@Directive()\nexport abstract class MatDatepickerInputBase<S, D = ExtractDateTypeFromSelection<S>>\n  implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy, Validator {\n\n  /** Whether the component has been initialized. */\n  private _isInitialized: boolean;\n\n  /** The value of the input. */\n  @Input()\n  get value(): D | null {\n    return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;\n  }\n  set value(value: D | null) {\n    this._assignValueProgrammatically(value);\n  }\n  protected _model: MatDateSelectionModel<S, D> | undefined;\n\n  /** Whether the datepicker-input is disabled. */\n  @Input()\n  get disabled(): boolean { return !!this._disabled || this._parentDisabled(); }\n  set disabled(value: boolean) {\n    const newValue = coerceBooleanProperty(value);\n    const element = this._elementRef.nativeElement;\n\n    if (this._disabled !== newValue) {\n      this._disabled = newValue;\n      this.stateChanges.next(undefined);\n    }\n\n    // We need to null check the `blur` method, because it's undefined during SSR.\n    // In Ivy static bindings are invoked earlier, before the element is attached to the DOM.\n    // This can cause an error to be thrown in some browsers (IE/Edge) which assert that the\n    // element has been inserted.\n    if (newValue && this._isInitialized && element.blur) {\n      // Normally, native input elements automatically blur if they turn disabled. This behavior\n      // is problematic, because it would mean that it triggers another change detection cycle,\n      // which then causes a changed after checked error if the input element was focused before.\n      element.blur();\n    }\n  }\n  private _disabled: boolean;\n\n  /** Emits when a `change` event is fired on this `<input>`. */\n  @Output() readonly dateChange: EventEmitter<MatDatepickerInputEvent<D, S>> =\n      new EventEmitter<MatDatepickerInputEvent<D, S>>();\n\n  /** Emits when an `input` event is fired on this `<input>`. */\n  @Output() readonly dateInput: EventEmitter<MatDatepickerInputEvent<D, S>> =\n      new EventEmitter<MatDatepickerInputEvent<D, S>>();\n\n  /** Emits when the internal state has changed */\n  readonly stateChanges = new Subject<void>();\n\n  _onTouched = () => {};\n  _validatorOnChange = () => {};\n\n  private _cvaOnChange: (value: any) => void = () => {};\n  private _valueChangesSubscription = Subscription.EMPTY;\n  private _localeSubscription = Subscription.EMPTY;\n\n  /**\n   * Since the value is kept on the model which is assigned in an Input,\n   * we might get a value before we have a model. This property keeps track\n   * of the value until we have somewhere to assign it.\n   */\n  private _pendingValue: D | null;\n\n  /** The form control validator for whether the input parses. */\n  private _parseValidator: ValidatorFn = (): ValidationErrors | null => {\n    return this._lastValueValid ?\n        null : {'matDatepickerParse': {'text': this._elementRef.nativeElement.value}};\n  }\n\n  /** The form control validator for the date filter. */\n  private _filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._dateAdapter.getValidDateOrNull(\n      this._dateAdapter.deserialize(control.value));\n    return !controlValue || this._matchesFilter(controlValue) ?\n        null : {'matDatepickerFilter': true};\n  }\n\n  /** The form control validator for the min date. */\n  private _minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._dateAdapter.getValidDateOrNull(\n      this._dateAdapter.deserialize(control.value));\n    const min = this._getMinDate();\n    return (!min || !controlValue ||\n        this._dateAdapter.compareDate(min, controlValue) <= 0) ?\n        null : {'matDatepickerMin': {'min': min, 'actual': controlValue}};\n  }\n\n  /** The form control validator for the max date. */\n  private _maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._dateAdapter.getValidDateOrNull(\n      this._dateAdapter.deserialize(control.value));\n    const max = this._getMaxDate();\n    return (!max || !controlValue ||\n        this._dateAdapter.compareDate(max, controlValue) >= 0) ?\n        null : {'matDatepickerMax': {'max': max, 'actual': controlValue}};\n  }\n\n  /** Gets the base validator functions. */\n  protected _getValidators(): ValidatorFn[] {\n    return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];\n  }\n\n  /** Gets the minimum date for the input. Used for validation. */\n  abstract _getMinDate(): D | null;\n\n  /** Gets the maximum date for the input. Used for validation. */\n  abstract _getMaxDate(): D | null;\n\n  /** Gets the date filter function. Used for validation. */\n  protected abstract _getDateFilter(): DateFilterFn<D> | undefined;\n\n  /** Registers a date selection model with the input. */\n  _registerModel(model: MatDateSelectionModel<S, D>): void {\n    this._model = model;\n    this._valueChangesSubscription.unsubscribe();\n\n    if (this._pendingValue) {\n      this._assignValue(this._pendingValue);\n    }\n\n    this._valueChangesSubscription = this._model.selectionChanged.subscribe(event => {\n      if (this._shouldHandleChangeEvent(event)) {\n        const value = this._getValueFromModel(event.selection);\n        this._lastValueValid = this._isValidValue(value);\n        this._cvaOnChange(value);\n        this._onTouched();\n        this._formatValue(value);\n        this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n        this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n      }\n    });\n  }\n\n  /** Opens the popup associated with the input. */\n  protected abstract _openPopup(): void;\n\n  /** Assigns a value to the input's model. */\n  protected abstract _assignValueToModel(model: D | null): void;\n\n  /** Converts a value from the model into a native value for the input. */\n  protected abstract _getValueFromModel(modelValue: S): D | null;\n\n  /** Combined form control validator for this input. */\n  protected abstract _validator: ValidatorFn | null;\n\n  /** Predicate that determines whether the input should handle a particular change event. */\n  protected abstract _shouldHandleChangeEvent(event: DateSelectionModelChange<S>): boolean;\n\n  /** Whether the last value set on the input was valid. */\n  protected _lastValueValid = false;\n\n  constructor(\n      protected _elementRef: ElementRef<HTMLInputElement>,\n      @Optional() public _dateAdapter: DateAdapter<D>,\n      @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats) {\n\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._dateAdapter) {\n        throw createMissingDateImplError('DateAdapter');\n      }\n      if (!this._dateFormats) {\n        throw createMissingDateImplError('MAT_DATE_FORMATS');\n      }\n    }\n\n    // Update the displayed date when the locale changes.\n    this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\n      this._assignValueProgrammatically(this.value);\n    });\n  }\n\n  ngAfterViewInit() {\n    this._isInitialized = true;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (dateInputsHaveChanged(changes, this._dateAdapter)) {\n      this.stateChanges.next(undefined);\n    }\n  }\n\n  ngOnDestroy() {\n    this._valueChangesSubscription.unsubscribe();\n    this._localeSubscription.unsubscribe();\n    this.stateChanges.complete();\n  }\n\n  /** @docs-private */\n  registerOnValidatorChange(fn: () => void): void {\n    this._validatorOnChange = fn;\n  }\n\n  /** @docs-private */\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this._validator ? this._validator(c) : null;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  writeValue(value: D): void {\n    this._assignValueProgrammatically(value);\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnChange(fn: (value: any) => void): void {\n    this._cvaOnChange = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  _onKeydown(event: KeyboardEvent) {\n    const isAltDownArrow = event.altKey && event.keyCode === DOWN_ARROW;\n\n    if (isAltDownArrow && !this._elementRef.nativeElement.readOnly) {\n      this._openPopup();\n      event.preventDefault();\n    }\n  }\n\n  _onInput(value: string) {\n    const lastValueWasValid = this._lastValueValid;\n    let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);\n    this._lastValueValid = this._isValidValue(date);\n    date = this._dateAdapter.getValidDateOrNull(date);\n\n    if (!this._dateAdapter.sameDate(date, this.value)) {\n      this._assignValue(date);\n      this._cvaOnChange(date);\n      this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n    } else {\n      // Call the CVA change handler for invalid values\n      // since this is what marks the control as dirty.\n      if (value && !this.value) {\n        this._cvaOnChange(date);\n      }\n\n      if (lastValueWasValid !== this._lastValueValid) {\n        this._validatorOnChange();\n      }\n    }\n  }\n\n  _onChange() {\n    this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n  }\n\n  /** Handles blur events on the input. */\n  _onBlur() {\n    // Reformat the input only if we have a valid value.\n    if (this.value) {\n      this._formatValue(this.value);\n    }\n\n    this._onTouched();\n  }\n\n  /** Formats a value and sets it on the input element. */\n  protected _formatValue(value: D | null) {\n    this._elementRef.nativeElement.value =\n        value ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '';\n  }\n\n  /** Assigns a value to the model. */\n  private _assignValue(value: D | null) {\n    // We may get some incoming values before the model was\n    // assigned. Save the value so that we can assign it later.\n    if (this._model) {\n      this._assignValueToModel(value);\n      this._pendingValue = null;\n    } else {\n      this._pendingValue = value;\n    }\n  }\n\n  /** Whether a value is considered valid. */\n  private _isValidValue(value: D | null): boolean {\n    return !value || this._dateAdapter.isValid(value);\n  }\n\n  /**\n   * Checks whether a parent control is disabled. This is in place so that it can be overridden\n   * by inputs extending this one which can be placed inside of a group that can be disabled.\n   */\n  protected _parentDisabled() {\n    return false;\n  }\n\n  /** Programmatically assigns a value to the input. */\n  protected _assignValueProgrammatically(value: D | null) {\n    value = this._dateAdapter.deserialize(value);\n    this._lastValueValid = this._isValidValue(value);\n    value = this._dateAdapter.getValidDateOrNull(value);\n    this._assignValue(value);\n    this._formatValue(value);\n  }\n\n  /** Gets whether a value matches the current date filter. */\n  _matchesFilter(value: D | null): boolean {\n    const filter = this._getDateFilter();\n    return !filter || filter(value);\n  }\n\n  // Accept `any` to avoid conflicts with other directives on `<input>` that\n  // may accept different types.\n  static ngAcceptInputType_value: any;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Checks whether the `SimpleChanges` object from an `ngOnChanges`\n * callback has any changes, accounting for date objects.\n */\nexport function dateInputsHaveChanged(\n  changes: SimpleChanges,\n  adapter: DateAdapter<unknown>): boolean {\n  const keys = Object.keys(changes);\n\n  for (let key of keys) {\n    const {previousValue, currentValue} = changes[key];\n\n    if (adapter.isDateInstance(previousValue) && adapter.isDateInstance(currentValue)) {\n      if (!adapter.sameDate(previousValue, currentValue)) {\n        return true;\n      }\n    } else {\n      return true;\n    }\n  }\n\n  return false;\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 {\n  Directive,\n  ElementRef,\n  forwardRef,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n} from '@angular/core';\nimport {\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport {\n  DateAdapter,\n  MAT_DATE_FORMATS,\n  MatDateFormats,\n  ThemePalette,\n} from '@angular/material/core';\nimport {MatFormField, MAT_FORM_FIELD} from '@angular/material/form-field';\nimport {MAT_INPUT_VALUE_ACCESSOR} from '@angular/material/input';\nimport {Subscription} from 'rxjs';\nimport {MatDatepickerInputBase, DateFilterFn} from './datepicker-input-base';\nimport {MatDatepickerControl, MatDatepickerPanel} from './datepicker-base';\nimport {DateSelectionModelChange} from './date-selection-model';\n\n/** @docs-private */\nexport const MAT_DATEPICKER_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => MatDatepickerInput),\n  multi: true\n};\n\n/** @docs-private */\nexport const MAT_DATEPICKER_VALIDATORS: any = {\n  provide: NG_VALIDATORS,\n  useExisting: forwardRef(() => MatDatepickerInput),\n  multi: true\n};\n\n/** Directive used to connect an input to a MatDatepicker. */\n@Directive({\n  selector: 'input[matDatepicker]',\n  providers: [\n    MAT_DATEPICKER_VALUE_ACCESSOR,\n    MAT_DATEPICKER_VALIDATORS,\n    {provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput},\n  ],\n  host: {\n    'class': 'mat-datepicker-input',\n    '[attr.aria-haspopup]': '_datepicker ? \"dialog\" : null',\n    '[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',\n    '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n    '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n    // Used by the test harness to tie this input to its calendar. We can't depend on\n    // `aria-owns` for this, because it's only defined while the calendar is open.\n    '[attr.data-mat-calendar]': '_datepicker ? _datepicker.id : null',\n    '[disabled]': 'disabled',\n    '(input)': '_onInput($event.target.value)',\n    '(change)': '_onChange()',\n    '(blur)': '_onBlur()',\n    '(keydown)': '_onKeydown($event)',\n  },\n  exportAs: 'matDatepickerInput',\n})\nexport class MatDatepickerInput<D> extends MatDatepickerInputBase<D | null, D>\n  implements MatDatepickerControl<D | null>, OnDestroy {\n  private _closedSubscription = Subscription.EMPTY;\n\n  /** The datepicker that this input is associated with. */\n  @Input()\n  set matDatepicker(datepicker: MatDatepickerPanel<MatDatepickerControl<D>, D | null, D>) {\n    if (datepicker) {\n      this._datepicker = datepicker;\n      this._closedSubscription = datepicker.closedStream.subscribe(() => this._onTouched());\n      this._registerModel(datepicker.registerInput(this));\n    }\n  }\n  _datepicker: MatDatepickerPanel<MatDatepickerControl<D>, D | null, D>;\n\n  /** The minimum valid date. */\n  @Input()\n  get min(): D | null { return this._min; }\n  set min(value: D | null) {\n    const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n    if (!this._dateAdapter.sameDate(validValue, this._min)) {\n      this._min = validValue;\n      this._validatorOnChange();\n    }\n  }\n  private _min: D | null;\n\n  /** The maximum valid date. */\n  @Input()\n  get max(): D | null { return this._max; }\n  set max(value: D | null) {\n    const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n    if (!this._dateAdapter.sameDate(validValue, this._max)) {\n      this._max = validValue;\n      this._validatorOnChange();\n    }\n  }\n  private _max: D | null;\n\n  /** Function that can be used to filter out dates within the datepicker. */\n  @Input('matDatepickerFilter')\n  get dateFilter() { return this._dateFilter; }\n  set dateFilter(value: DateFilterFn<D | null>) {\n    const wasMatchingValue = this._matchesFilter(this.value);\n    this._dateFilter = value;\n\n    if (this._matchesFilter(this.value) !== wasMatchingValue) {\n      this._validatorOnChange();\n    }\n  }\n  private _dateFilter: DateFilterFn<D | null>;\n\n  /** The combined form control validator for this input. */\n  protected _validator: ValidatorFn | null;\n\n  constructor(\n      elementRef: ElementRef<HTMLInputElement>,\n      @Optional() dateAdapter: DateAdapter<D>,\n      @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats,\n      @Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField) {\n    super(elementRef, dateAdapter, dateFormats);\n    this._validator = Validators.compose(super._getValidators());\n  }\n\n  /**\n   * Gets the element that the datepicker popup should be connected to.\n   * @return The element to connect the popup to.\n   */\n  getConnectedOverlayOrigin(): ElementRef {\n    return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n  }\n\n  /** Gets the ID of an element that should be used a description for the calendar overlay. */\n  getOverlayLabelId(): string | null {\n    if (this._formField) {\n      return this._formField.getLabelId();\n    }\n\n    return this._elementRef.nativeElement.getAttribute('aria-labelledby');\n  }\n\n  /** Returns the palette used by the input's form field, if any. */\n  getThemePalette(): ThemePalette {\n    return this._formField ? this._formField.color : undefined;\n  }\n\n  /** Gets the value at which the calendar should start. */\n  getStartValue(): D | null {\n    return this.value;\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n    this._closedSubscription.unsubscribe();\n  }\n\n  /** Opens the associated datepicker. */\n  protected _openPopup(): void {\n    if (this._datepicker) {\n      this._datepicker.open();\n    }\n  }\n\n  protected _getValueFromModel(modelValue: D | null): D | null {\n    return modelValue;\n  }\n\n  protected _assignValueToModel(value: D | null): void {\n    if (this._model) {\n      this._model.updateSelection(value, this);\n    }\n  }\n\n  /** Gets the input's minimum date. */\n  _getMinDate() {\n    return this._min;\n  }\n\n  /** Gets the input's maximum date. */\n  _getMaxDate() {\n    return this._max;\n  }\n\n  /** Gets the input's date filtering function. */\n  protected _getDateFilter() {\n    return this._dateFilter;\n  }\n\n  protected _shouldHandleChangeEvent(event: DateSelectionModelChange<D>) {\n    return event.source !== this;\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 {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  AfterContentInit,\n  Attribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  Directive,\n  Input,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewEncapsulation,\n  ViewChild,\n} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {merge, Observable, of as observableOf, Subscription} from 'rxjs';\nimport {MatDatepickerIntl} from './datepicker-intl';\nimport {MatDatepickerControl, MatDatepickerPanel} from './datepicker-base';\n\n\n/** Can be used to override the icon of a `matDatepickerToggle`. */\n@Directive({\n  selector: '[matDatepickerToggleIcon]'\n})\nexport class MatDatepickerToggleIcon {}\n\n\n@Component({\n  selector: 'mat-datepicker-toggle',\n  templateUrl: 'datepicker-toggle.html',\n  styleUrls: ['datepicker-toggle.css'],\n  host: {\n    'class': 'mat-datepicker-toggle',\n    '[attr.tabindex]': 'null',\n    '[class.mat-datepicker-toggle-active]': 'datepicker && datepicker.opened',\n    '[class.mat-accent]': 'datepicker && datepicker.color === \"accent\"',\n    '[class.mat-warn]': 'datepicker && datepicker.color === \"warn\"',\n    // Used by the test harness to tie this toggle to its datepicker.\n    '[attr.data-mat-calendar]': 'datepicker ? datepicker.id : null',\n    // Bind the `click` on the host, rather than the inner `button`, so that we can call\n    // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\n    // it so that the input doesn't get focused automatically by the form field (See #21836).\n    '(click)': '_open($event)',\n  },\n  exportAs: 'matDatepickerToggle',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatDatepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {\n  private _stateChanges = Subscription.EMPTY;\n\n  /** Datepicker instance that the button will toggle. */\n  @Input('for') datepicker: MatDatepickerPanel<MatDatepickerControl<any>, D>;\n\n  /** Tabindex for the toggle. */\n  @Input() tabIndex: number | null;\n\n  /** Screenreader label for the button. */\n  @Input('aria-label') ariaLabel: string;\n\n  /** Whether the toggle button is disabled. */\n  @Input()\n  get disabled(): boolean {\n    if (this._disabled === undefined && this.datepicker) {\n      return this.datepicker.disabled;\n    }\n\n    return !!this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n  }\n  private _disabled: boolean;\n\n  /** Whether ripples on the toggle should be disabled. */\n  @Input() disableRipple: boolean;\n\n  /** Custom icon set by the consumer. */\n  @ContentChild(MatDatepickerToggleIcon) _customIcon: MatDatepickerToggleIcon;\n\n  /** Underlying button element. */\n  @ViewChild('button') _button: MatButton;\n\n  constructor(\n    public _intl: MatDatepickerIntl,\n    private _changeDetectorRef: ChangeDetectorRef,\n    @Attribute('tabindex') defaultTabIndex: string) {\n\n    const parsedTabIndex = Number(defaultTabIndex);\n    this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['datepicker']) {\n      this._watchStateChanges();\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.unsubscribe();\n  }\n\n  ngAfterContentInit() {\n    this._watchStateChanges();\n  }\n\n  _open(event: Event): void {\n    if (this.datepicker && !this.disabled) {\n      this.datepicker.open();\n      event.stopPropagation();\n    }\n  }\n\n  private _watchStateChanges() {\n    const datepickerStateChanged = this.datepicker ? this.datepicker.stateChanges : observableOf();\n    const inputStateChanged = this.datepicker && this.datepicker.datepickerInput ?\n        this.datepicker.datepickerInput.stateChanges : observableOf();\n    const datepickerToggled = this.datepicker ?\n        merge(this.datepicker.openedStream, this.datepicker.closedStream) :\n        observableOf();\n\n    this._stateChanges.unsubscribe();\n    this._stateChanges = merge(\n      this._intl.changes,\n      datepickerStateChanged as Observable<void>,\n      inputStateChanged,\n      datepickerToggled\n    ).subscribe(() => this._changeDetectorRef.markForCheck());\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\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 {\n  Directive,\n  ElementRef,\n  Optional,\n  InjectionToken,\n  Inject,\n  OnInit,\n  Injector,\n  InjectFlags,\n  DoCheck,\n} from '@angular/core';\nimport {\n  NG_VALUE_ACCESSOR,\n  NG_VALIDATORS,\n  NgForm,\n  FormGroupDirective,\n  NgControl,\n  ValidatorFn,\n  Validators,\n  AbstractControl,\n  ValidationErrors,\n} from '@angular/forms';\nimport {\n  CanUpdateErrorState,\n  mixinErrorState,\n  MAT_DATE_FORMATS,\n  DateAdapter,\n  MatDateFormats,\n  ErrorStateMatcher,\n} from '@angular/material/core';\nimport {BACKSPACE} from '@angular/cdk/keycodes';\nimport {MatDatepickerInputBase, DateFilterFn} from './datepicker-input-base';\nimport {DateRange, DateSelectionModelChange} from './date-selection-model';\n\n/** Parent component that should be wrapped around `MatStartDate` and `MatEndDate`. */\nexport interface MatDateRangeInputParent<D> {\n  id: string;\n  min: D | null;\n  max: D | null;\n  dateFilter: DateFilterFn<D>;\n  rangePicker: {\n    opened: boolean;\n    id: string;\n  };\n  _startInput: MatDateRangeInputPartBase<D>;\n  _endInput: MatDateRangeInputPartBase<D>;\n  _groupDisabled: boolean;\n  _handleChildValueChange(): void;\n  _openDatepicker(): void;\n}\n\n/**\n * Used to provide the date range input wrapper component\n * to the parts without circular dependencies.\n */\nexport const MAT_DATE_RANGE_INPUT_PARENT =\n    new InjectionToken<MatDateRangeInputParent<unknown>>('MAT_DATE_RANGE_INPUT_PARENT');\n\n/**\n * Base class for the individual inputs that can be projected inside a `mat-date-range-input`.\n */\n@Directive()\nabstract class MatDateRangeInputPartBase<D>\n  extends MatDatepickerInputBase<DateRange<D>> implements OnInit, DoCheck {\n\n  /** @docs-private */\n  ngControl: NgControl;\n\n  /** @docs-private */\n  abstract updateErrorState(): void;\n\n  protected abstract override _validator: ValidatorFn | null;\n  protected abstract override _assignValueToModel(value: D | null): void;\n  protected abstract override _getValueFromModel(modelValue: DateRange<D>): D | null;\n\n  constructor(\n    @Inject(MAT_DATE_RANGE_INPUT_PARENT) public _rangeInput: MatDateRangeInputParent<D>,\n    elementRef: ElementRef<HTMLInputElement>,\n    public _defaultErrorStateMatcher: ErrorStateMatcher,\n    private _injector: Injector,\n    @Optional() public _parentForm: NgForm,\n    @Optional() public _parentFormGroup: FormGroupDirective,\n    @Optional() dateAdapter: DateAdapter<D>,\n    @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats) {\n    super(elementRef, dateAdapter, dateFormats);\n  }\n\n  ngOnInit() {\n    // We need the date input to provide itself as a `ControlValueAccessor` and a `Validator`, while\n    // injecting its `NgControl` so that the error state is handled correctly. This introduces a\n    // circular dependency, because both `ControlValueAccessor` and `Validator` depend on the input\n    // itself. Usually we can work around it for the CVA, but there's no API to do it for the\n    // validator. We work around it here by injecting the `NgControl` in `ngOnInit`, after\n    // everything has been resolved.\n    // tslint:disable-next-line:no-bitwise\n    const ngControl = this._injector.get(NgControl, null, InjectFlags.Self | InjectFlags.Optional);\n\n    if (ngControl) {\n      this.ngControl = ngControl;\n    }\n  }\n\n  ngDoCheck() {\n    if (this.ngControl) {\n      // We need to re-evaluate this on every change detection cycle, because there are some\n      // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n      // that whatever logic is in here has to be super lean or we risk destroying the performance.\n      this.updateErrorState();\n    }\n  }\n\n  /** Gets whether the input is empty. */\n  isEmpty(): boolean {\n    return this._elementRef.nativeElement.value.length === 0;\n  }\n\n  /** Gets the placeholder of the input. */\n  _getPlaceholder() {\n    return this._elementRef.nativeElement.placeholder;\n  }\n\n  /** Focuses the input. */\n  focus(): void {\n    this._elementRef.nativeElement.focus();\n  }\n\n  /** Handles `input` events on the input element. */\n  override _onInput(value: string) {\n    super._onInput(value);\n    this._rangeInput._handleChildValueChange();\n  }\n\n  /** Opens the datepicker associated with the input. */\n  protected _openPopup(): void {\n    this._rangeInput._openDatepicker();\n  }\n\n  /** Gets the minimum date from the range input. */\n  _getMinDate() {\n    return this._rangeInput.min;\n  }\n\n  /** Gets the maximum date from the range input. */\n  _getMaxDate() {\n    return this._rangeInput.max;\n  }\n\n  /** Gets the date filter function from the range input. */\n  protected _getDateFilter() {\n    return this._rangeInput.dateFilter;\n  }\n\n  protected override _parentDisabled() {\n    return this._rangeInput._groupDisabled;\n  }\n\n  protected _shouldHandleChangeEvent({source}: DateSelectionModelChange<DateRange<D>>): boolean {\n    return source !== this._rangeInput._startInput && source !== this._rangeInput._endInput;\n  }\n\n  protected override _assignValueProgrammatically(value: D | null) {\n    super._assignValueProgrammatically(value);\n    const opposite = (this === this._rangeInput._startInput ? this._rangeInput._endInput :\n        this._rangeInput._startInput) as MatDateRangeInputPartBase<D> | undefined;\n    opposite?._validatorOnChange();\n  }\n}\n\nconst _MatDateRangeInputBase = mixinErrorState(MatDateRangeInputPartBase);\n\n/** Input for entering the start date in a `mat-date-range-input`. */\n@Directive({\n  selector: 'input[matStartDate]',\n  host: {\n    'class': 'mat-start-date mat-date-range-input-inner',\n    '[disabled]': 'disabled',\n    '(input)': '_onInput($event.target.value)',\n    '(change)': '_onChange()',\n    '(keydown)': '_onKeydown($event)',\n    '[attr.id]': '_rangeInput.id',\n    '[attr.aria-haspopup]': '_rangeInput.rangePicker ? \"dialog\" : null',\n    '[attr.aria-owns]': '(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null',\n    '[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',\n    '[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',\n    '(blur)': '_onBlur()',\n    'type': 'text',\n  },\n  providers: [\n    {provide: NG_VALUE_ACCESSOR, useExisting: MatStartDate, multi: true},\n    {provide: NG_VALIDATORS, useExisting: MatStartDate, multi: true}\n  ],\n  // These need to be specified explicitly, because some tooling doesn't\n  // seem to pick them up from the base class. See #20932.\n  outputs: ['dateChange', 'dateInput'],\n  inputs: ['errorStateMatcher']\n})\nexport class MatStartDate<D> extends _MatDateRangeInputBase<D> implements\n    CanUpdateErrorState, DoCheck, OnInit {\n  /** Validator that checks that the start date isn't after the end date. */\n  private _startValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const start = this._dateAdapter.getValidDateOrNull(\n      this._dateAdapter.deserialize(control.value));\n    const end = this._model ? this._model.selection.end : null;\n    return (!start || !end ||\n        this._dateAdapter.compareDate(start, end) <= 0) ?\n        null : {'matStartDateInvalid': {'end': end, 'actual': start}};\n  }\n\n  constructor(\n    @Inject(MAT_DATE_RANGE_INPUT_PARENT) rangeInput: MatDateRangeInputParent<D>,\n    elementRef: ElementRef<HTMLInputElement>,\n    defaultErrorStateMatcher: ErrorStateMatcher,\n    injector: Injector,\n    @Optional() parentForm: NgForm,\n    @Optional() parentFormGroup: FormGroupDirective,\n    @Optional() dateAdapter: DateAdapter<D>,\n    @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats) {\n\n    // TODO(crisbeto): this constructor shouldn't be necessary, but ViewEngine doesn't seem to\n    // handle DI correctly when it is inherited from `MatDateRangeInputPartBase`. We can drop this\n    // constructor once ViewEngine is removed.\n    super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup,\n        dateAdapter, dateFormats);\n  }\n\n  override ngOnInit() {\n    // Normally this happens automatically, but it seems to break if not added explicitly when all\n    // of the criteria below are met:\n    // 1) The class extends a TS mixin.\n    // 2) The application is running in ViewEngine.\n    // 3) The application is being transpiled through tsickle.\n    // This can be removed once google3 is completely migrated to Ivy.\n    super.ngOnInit();\n  }\n\n  override ngDoCheck() {\n    // Normally this happens automatically, but it seems to break if not added explicitly when all\n    // of the criteria below are met:\n    // 1) The class extends a TS mixin.\n    // 2) The application is running in ViewEngine.\n    // 3) The application is being transpiled through tsickle.\n    // This can be removed once google3 is completely migrated to Ivy.\n    super.ngDoCheck();\n  }\n\n  protected _validator = Validators.compose([...super._getValidators(), this._startValidator]);\n\n  protected _getValueFromModel(modelValue: DateRange<D>) {\n    return modelValue.start;\n  }\n\n  protected override _shouldHandleChangeEvent(\n      change: DateSelectionModelChange<DateRange<D>>): boolean {\n    if (!super._shouldHandleChangeEvent(change)) {\n      return false;\n    } else {\n      return !change.oldValue?.start ? !!change.selection.start :\n        !change.selection.start ||\n        !!this._dateAdapter.compareDate(change.oldValue.start, change.selection.start);\n    }\n  }\n\n  protected _assignValueToModel(value: D | null) {\n    if (this._model) {\n      const range = new DateRange(value, this._model.selection.end);\n      this._model.updateSelection(range, this);\n    }\n  }\n\n  protected override _formatValue(value: D | null) {\n    super._formatValue(value);\n\n    // Any time the input value is reformatted we need to tell the parent.\n    this._rangeInput._handleChildValueChange();\n  }\n\n  /** Gets the value that should be used when mirroring the input's size. */\n  getMirrorValue(): string {\n    const element = this._elementRef.nativeElement;\n    const value = element.value;\n    return value.length > 0 ? value : element.placeholder;\n  }\n}\n\n\n/** Input for entering the end date in a `mat-date-range-input`. */\n@Directive({\n  selector: 'input[matEndDate]',\n  host: {\n    'class': 'mat-end-date mat-date-range-input-inner',\n    '[disabled]': 'disabled',\n    '(input)': '_onInput($event.target.value)',\n    '(change)': '_onChange()',\n    '(keydown)': '_onKeydown($event)',\n    '[attr.aria-haspopup]': '_rangeInput.rangePicker ? \"dialog\" : null',\n    '[attr.aria-owns]': '(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null',\n    '[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',\n    '[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',\n    '(blur)': '_onBlur()',\n    'type': 'text',\n  },\n  providers: [\n    {provide: NG_VALUE_ACCESSOR, useExisting: MatEndDate, multi: true},\n    {provide: NG_VALIDATORS, useExisting: MatEndDate, multi: true}\n  ],\n  // These need to be specified explicitly, because some tooling doesn't\n  // seem to pick them up from the base class. See #20932.\n  outputs: ['dateChange', 'dateInput'],\n  inputs: ['errorStateMatcher']\n})\nexport class MatEndDate<D> extends _MatDateRangeInputBase<D> implements\n    CanUpdateErrorState, DoCheck, OnInit {\n  /** Validator that checks that the end date isn't before the start date. */\n  private _endValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const end = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n    const start = this._model ? this._model.selection.start : null;\n    return (!end || !start ||\n        this._dateAdapter.compareDate(end, start) >= 0) ?\n        null : {'matEndDateInvalid': {'start': start, 'actual': end}};\n  }\n\n  constructor(\n    @Inject(MAT_DATE_RANGE_INPUT_PARENT) rangeInput: MatDateRangeInputParent<D>,\n    elementRef: ElementRef<HTMLInputElement>,\n    defaultErrorStateMatcher: ErrorStateMatcher,\n    injector: Injector,\n    @Optional() parentForm: NgForm,\n    @Optional() parentFormGroup: FormGroupDirective,\n    @Optional() dateAdapter: DateAdapter<D>,\n    @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats) {\n\n    // TODO(crisbeto): this constructor shouldn't be necessary, but ViewEngine doesn't seem to\n    // handle DI correctly when it is inherited from `MatDateRangeInputPartBase`. We can drop this\n    // constructor once ViewEngine is removed.\n    super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup,\n        dateAdapter, dateFormats);\n  }\n\n  override ngOnInit() {\n    // Normally this happens automatically, but it seems to break if not added explicitly when all\n    // of the criteria below are met:\n    // 1) The class extends a TS mixin.\n    // 2) The application is running in ViewEngine.\n    // 3) The application is being transpiled through tsickle.\n    // This can be removed once google3 is completely migrated to Ivy.\n    super.ngOnInit();\n  }\n\n  override ngDoCheck() {\n    // Normally this happens automatically, but it seems to break if not added explicitly when all\n    // of the criteria below are met:\n    // 1) The class extends a TS mixin.\n    // 2) The application is running in ViewEngine.\n    // 3) The application is being transpiled through tsickle.\n    // This can be removed once google3 is completely migrated to Ivy.\n    super.ngDoCheck();\n  }\n\n  protected _validator = Validators.compose([...super._getValidators(), this._endValidator]);\n\n  protected _getValueFromModel(modelValue: DateRange<D>) {\n    return modelValue.end;\n  }\n\n  protected override _shouldHandleChangeEvent(\n      change: DateSelectionModelChange<DateRange<D>>): boolean {\n    if (!super._shouldHandleChangeEvent(change)) {\n      return false;\n    } else {\n      return !change.oldValue?.end ? !!change.selection.end :\n        !change.selection.end ||\n        !!this._dateAdapter.compareDate(change.oldValue.end, change.selection.end);\n    }\n  }\n\n  protected _assignValueToModel(value: D | null) {\n    if (this._model) {\n      const range = new DateRange(this._model.selection.start, value);\n      this._model.updateSelection(range, this);\n    }\n  }\n\n  override _onKeydown(event: KeyboardEvent) {\n    // If the user is pressing backspace on an empty end input, move focus back to the start.\n    if (event.keyCode === BACKSPACE && !this._elementRef.nativeElement.value) {\n      this._rangeInput._startInput.focus();\n    }\n\n    super._onKeydown(event);\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 {\n  Component,\n  ChangeDetectionStrategy,\n  ViewEncapsulation,\n  Input,\n  Optional,\n  OnDestroy,\n  ContentChild,\n  AfterContentInit,\n  ChangeDetectorRef,\n  Self,\n  ElementRef,\n  Inject,\n  OnChanges,\n  SimpleChanges,\n} from '@angular/core';\nimport {MatFormFieldControl, MatFormField, MAT_FORM_FIELD} from '@angular/material/form-field';\nimport {ThemePalette, DateAdapter} from '@angular/material/core';\nimport {NgControl, ControlContainer} from '@angular/forms';\nimport {Subject, merge, Subscription} from 'rxjs';\nimport {FocusOrigin} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty, BooleanInput} from '@angular/cdk/coercion';\nimport {\n  MatStartDate,\n  MatEndDate,\n  MatDateRangeInputParent,\n  MAT_DATE_RANGE_INPUT_PARENT,\n} from './date-range-input-parts';\nimport {MatDatepickerControl, MatDatepickerPanel} from './datepicker-base';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {DateFilterFn, dateInputsHaveChanged} from './datepicker-input-base';\nimport {MatDateRangePickerInput} from './date-range-picker';\nimport {DateRange, MatDateSelectionModel} from './date-selection-model';\n\nlet nextUniqueId = 0;\n\n@Component({\n  selector: 'mat-date-range-input',\n  templateUrl: 'date-range-input.html',\n  styleUrls: ['date-range-input.css'],\n  exportAs: 'matDateRangeInput',\n  host: {\n    'class': 'mat-date-range-input',\n    '[class.mat-date-range-input-hide-placeholders]': '_shouldHidePlaceholders()',\n    '[class.mat-date-range-input-required]': 'required',\n    '[attr.id]': 'null',\n    'role': 'group',\n    '[attr.aria-labelledby]': '_getAriaLabelledby()',\n    '[attr.aria-describedby]': '_ariaDescribedBy',\n    // Used by the test harness to tie this input to its calendar. We can't depend on\n    // `aria-owns` for this, because it's only defined while the calendar is open.\n    '[attr.data-mat-calendar]': 'rangePicker ? rangePicker.id : null',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {provide: MatFormFieldControl, useExisting: MatDateRangeInput},\n    {provide: MAT_DATE_RANGE_INPUT_PARENT, useExisting: MatDateRangeInput},\n  ]\n})\nexport class MatDateRangeInput<D> implements MatFormFieldControl<DateRange<D>>,\n  MatDatepickerControl<D>, MatDateRangeInputParent<D>, MatDateRangePickerInput<D>,\n  AfterContentInit, OnChanges, OnDestroy {\n  private _closedSubscription = Subscription.EMPTY;\n\n  /** Current value of the range input. */\n  get value() {\n    return this._model ? this._model.selection : null;\n  }\n\n  /** Unique ID for the input. */\n  id = `mat-date-range-input-${nextUniqueId++}`;\n\n  /** Whether the control is focused. */\n  focused = false;\n\n  /** Whether the control's label should float. */\n  get shouldLabelFloat(): boolean {\n    return this.focused || !this.empty;\n  }\n\n  /** Name of the form control. */\n  controlType = 'mat-date-range-input';\n\n  /**\n   * Implemented as a part of `MatFormFieldControl`.\n   * Set the placeholder attribute on `matStartDate` and `matEndDate`.\n   * @docs-private\n   */\n  get placeholder() {\n    const start = this._startInput?._getPlaceholder() || '';\n    const end = this._endInput?._getPlaceholder() || '';\n    return (start || end) ? `${start} ${this.separator} ${end}` : '';\n  }\n\n  /** The range picker that this input is associated with. */\n  @Input()\n  get rangePicker() { return this._rangePicker; }\n  set rangePicker(rangePicker: MatDatepickerPanel<MatDatepickerControl<D>, DateRange<D>, D>) {\n    if (rangePicker) {\n      this._model = rangePicker.registerInput(this);\n      this._rangePicker = rangePicker;\n      this._closedSubscription.unsubscribe();\n      this._closedSubscription = rangePicker.closedStream.subscribe(() => {\n        this._startInput?._onTouched();\n        this._endInput?._onTouched();\n      });\n      this._registerModel(this._model!);\n    }\n  }\n  private _rangePicker: MatDatepickerPanel<MatDatepickerControl<D>, DateRange<D>, D>;\n\n  /** Whether the input is required. */\n  @Input()\n  get required(): boolean { return !!this._required; }\n  set required(value: boolean) {\n    this._required = coerceBooleanProperty(value);\n  }\n  private _required: boolean;\n\n  /** Function that can be used to filter out dates within the date range picker. */\n  @Input()\n  get dateFilter() { return this._dateFilter; }\n  set dateFilter(value: DateFilterFn<D>) {\n    const start = this._startInput;\n    const end = this._endInput;\n    const wasMatchingStart = start && start._matchesFilter(start.value);\n    const wasMatchingEnd = end && end._matchesFilter(start.value);\n    this._dateFilter = value;\n\n    if (start && start._matchesFilter(start.value) !== wasMatchingStart) {\n      start._validatorOnChange();\n    }\n\n    if (end && end._matchesFilter(end.value) !== wasMatchingEnd) {\n      end._validatorOnChange();\n    }\n  }\n  private _dateFilter: DateFilterFn<D>;\n\n  /** The minimum valid date. */\n  @Input()\n  get min(): D | null { return this._min; }\n  set min(value: D | null) {\n    const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n    if (!this._dateAdapter.sameDate(validValue, this._min)) {\n      this._min = validValue;\n      this._revalidate();\n    }\n  }\n  private _min: D | null;\n\n  /** The maximum valid date. */\n  @Input()\n  get max(): D | null { return this._max; }\n  set max(value: D | null) {\n    const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n    if (!this._dateAdapter.sameDate(validValue, this._max)) {\n      this._max = validValue;\n      this._revalidate();\n    }\n  }\n  private _max: D | null;\n\n  /** Whether the input is disabled. */\n  @Input()\n  get disabled(): boolean {\n    return (this._startInput && this._endInput) ?\n      (this._startInput.disabled && this._endInput.disabled) :\n      this._groupDisabled;\n  }\n  set disabled(value: boolean) {\n    const newValue = coerceBooleanProperty(value);\n\n    if (newValue !== this._groupDisabled) {\n      this._groupDisabled = newValue;\n      this.stateChanges.next(undefined);\n    }\n  }\n  _groupDisabled = false;\n\n  /** Whether the input is in an error state. */\n  get errorState(): boolean {\n    if (this._startInput && this._endInput) {\n      return this._startInput.errorState || this._endInput.errorState;\n    }\n\n    return false;\n  }\n\n  /** Whether the datepicker input is empty. */\n  get empty(): boolean {\n    const startEmpty = this._startInput ? this._startInput.isEmpty() : false;\n    const endEmpty = this._endInput ? this._endInput.isEmpty() : false;\n    return startEmpty && endEmpty;\n  }\n\n  /** Value for the `aria-describedby` attribute of the inputs. */\n  _ariaDescribedBy: string | null = null;\n\n  /** Date selection model currently registered with the input. */\n  private _model: MatDateSelectionModel<DateRange<D>> | undefined;\n\n  /** Separator text to be shown between the inputs. */\n  @Input() separator = '–';\n\n  /** Start of the comparison range that should be shown in the calendar. */\n  @Input() comparisonStart: D | null = null;\n\n  /** End of the comparison range that should be shown in the calendar. */\n  @Input() comparisonEnd: D | null = null;\n\n  @ContentChild(MatStartDate) _startInput: MatStartDate<D>;\n  @ContentChild(MatEndDate) _endInput: MatEndDate<D>;\n\n  /**\n   * Implemented as a part of `MatFormFieldControl`.\n   * TODO(crisbeto): change type to `AbstractControlDirective` after #18206 lands.\n   * @docs-private\n   */\n  ngControl: NgControl | null;\n\n  /** Emits when the input's state has changed. */\n  readonly stateChanges = new Subject<void>();\n\n  constructor(\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _elementRef: ElementRef<HTMLElement>,\n    @Optional() @Self() control: ControlContainer,\n    @Optional() private _dateAdapter: DateAdapter<D>,\n    @Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField) {\n\n    if (!_dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw createMissingDateImplError('DateAdapter');\n    }\n\n    // The datepicker module can be used both with MDC and non-MDC form fields. We have\n    // to conditionally add the MDC input class so that the range picker looks correctly.\n    if (_formField?._elementRef.nativeElement.classList.contains('mat-mdc-form-field')) {\n      const classList = _elementRef.nativeElement.classList;\n      classList.add('mat-mdc-input-element');\n      classList.add('mat-mdc-form-field-input-control');\n    }\n\n    // TODO(crisbeto): remove `as any` after #18206 lands.\n    this.ngControl = control as any;\n  }\n\n  /**\n   * Implemented as a part of `MatFormFieldControl`.\n   * @docs-private\n   */\n  setDescribedByIds(ids: string[]): void {\n    this._ariaDescribedBy = ids.length ? ids.join(' ') : null;\n  }\n\n  /**\n   * Implemented as a part of `MatFormFieldControl`.\n   * @docs-private\n   */\n  onContainerClick(): void {\n    if (!this.focused && !this.disabled) {\n      if (!this._model || !this._model.selection.start) {\n        this._startInput.focus();\n      } else {\n        this._endInput.focus();\n      }\n    }\n  }\n\n  ngAfterContentInit() {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this._startInput) {\n        throw Error('mat-date-range-input must contain a matStartDate input');\n      }\n\n      if (!this._endInput) {\n        throw Error('mat-date-range-input must contain a matEndDate input');\n      }\n    }\n\n    if (this._model) {\n      this._registerModel(this._model);\n    }\n\n    // We don't need to unsubscribe from this, because we\n    // know that the input streams will be completed on destroy.\n    merge(this._startInput.stateChanges, this._endInput.stateChanges).subscribe(() => {\n      this.stateChanges.next(undefined);\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (dateInputsHaveChanged(changes, this._dateAdapter)) {\n      this.stateChanges.next(undefined);\n    }\n  }\n\n  ngOnDestroy() {\n    this._closedSubscription.unsubscribe();\n    this.stateChanges.complete();\n  }\n\n  /** Gets the date at which the calendar should start. */\n  getStartValue(): D | null {\n    return this.value ? this.value.start : null;\n  }\n\n  /** Gets the input's theme palette. */\n  getThemePalette(): ThemePalette {\n    return this._formField ? this._formField.color : undefined;\n  }\n\n  /** Gets the element to which the calendar overlay should be attached. */\n  getConnectedOverlayOrigin(): ElementRef {\n    return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n  }\n\n  /** Gets the ID of an element that should be used a description for the calendar overlay. */\n  getOverlayLabelId(): string | null {\n    return this._formField ? this._formField.getLabelId() : null;\n  }\n\n  /** Gets the value that is used to mirror the state input. */\n  _getInputMirrorValue() {\n    return this._startInput ? this._startInput.getMirrorValue() : '';\n  }\n\n  /** Whether the input placeholders should be hidden. */\n  _shouldHidePlaceholders() {\n    return this._startInput ? !this._startInput.isEmpty() : false;\n  }\n\n  /** Handles the value in one of the child inputs changing. */\n  _handleChildValueChange() {\n    this.stateChanges.next(undefined);\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Opens the date range picker associated with the input. */\n  _openDatepicker() {\n    if (this._rangePicker) {\n      this._rangePicker.open();\n    }\n  }\n\n  /** Whether the separate text should be hidden. */\n  _shouldHideSeparator() {\n    return (!this._formField || (this._formField.getLabelId() &&\n      !this._formField._shouldLabelFloat())) && this.empty;\n  }\n\n  /** Gets the value for the `aria-labelledby` attribute of the inputs. */\n  _getAriaLabelledby() {\n    const formField = this._formField;\n    return formField && formField._hasFloatingLabel() ? formField._labelId : null;\n  }\n\n  /** Updates the focused state of the range input. */\n  _updateFocus(origin: FocusOrigin) {\n    this.focused = origin !== null;\n    this.stateChanges.next();\n  }\n\n  /** Re-runs the validators on the start/end inputs. */\n  private _revalidate() {\n    if (this._startInput) {\n      this._startInput._validatorOnChange();\n    }\n\n    if (this._endInput) {\n      this._endInput._validatorOnChange();\n    }\n  }\n\n  /** Registers the current date selection model with the start/end inputs. */\n  private _registerModel(model: MatDateSelectionModel<DateRange<D>>) {\n    if (this._startInput) {\n      this._startInput._registerModel(model);\n    }\n\n    if (this._endInput) {\n      this._endInput._registerModel(model);\n    }\n  }\n\n  static ngAcceptInputType_required: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\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 {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\nimport {MatDatepickerBase, MatDatepickerContent, MatDatepickerControl} from './datepicker-base';\nimport {MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER, DateRange} from './date-selection-model';\nimport {MAT_CALENDAR_RANGE_STRATEGY_PROVIDER} from './date-range-selection-strategy';\n\n/**\n * Input that can be associated with a date range picker.\n * @docs-private\n */\nexport interface MatDateRangePickerInput<D> extends MatDatepickerControl<D> {\n  comparisonStart: D|null;\n  comparisonEnd: D|null;\n}\n\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDateRangePicker\"). We can change this to a\n// directive if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the date range picker popup/dialog. */\n@Component({\n  selector: 'mat-date-range-picker',\n  template: '',\n  exportAs: 'matDateRangePicker',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER,\n    MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,\n    {provide: MatDatepickerBase, useExisting: MatDateRangePicker},\n  ]\n})\nexport class MatDateRangePicker<D> extends MatDatepickerBase<MatDateRangePickerInput<D>,\n  DateRange<D>, D> {\n  protected override _forwardContentValues(instance: MatDatepickerContent<DateRange<D>, D>) {\n    super._forwardContentValues(instance);\n\n    const input = this.datepickerInput;\n\n    if (input) {\n      instance.comparisonStart = input.comparisonStart;\n      instance.comparisonEnd = input.comparisonEnd;\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 {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  Directive,\n  OnDestroy,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n  ViewEncapsulation\n} from '@angular/core';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {MatDatepickerBase, MatDatepickerControl} from './datepicker-base';\n\n\n/** Button that will close the datepicker and assign the current selection to the data model. */\n@Directive({\n  selector: '[matDatepickerApply], [matDateRangePickerApply]',\n  host: {'(click)': '_applySelection()'}\n})\nexport class MatDatepickerApply {\n  constructor(private _datepicker: MatDatepickerBase<MatDatepickerControl<unknown>, unknown>) {}\n\n  _applySelection() {\n    this._datepicker._applyPendingSelection();\n    this._datepicker.close();\n  }\n}\n\n\n/** Button that will close the datepicker and discard the current selection. */\n@Directive({\n  selector: '[matDatepickerCancel], [matDateRangePickerCancel]',\n  host: {'(click)': '_datepicker.close()'}\n})\nexport class MatDatepickerCancel {\n  constructor(public _datepicker: MatDatepickerBase<MatDatepickerControl<unknown>, unknown>) {}\n}\n\n\n/**\n * Container that can be used to project a row of action buttons\n * to the bottom of a datepicker or date range picker.\n */\n@Component({\n  selector: 'mat-datepicker-actions, mat-date-range-picker-actions',\n  styleUrls: ['datepicker-actions.css'],\n  template: `\n    <ng-template>\n      <div class=\"mat-datepicker-actions\">\n        <ng-content></ng-content>\n      </div>\n    </ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class MatDatepickerActions implements AfterViewInit, OnDestroy {\n  @ViewChild(TemplateRef) _template: TemplateRef<unknown>;\n  private _portal: TemplatePortal;\n\n  constructor(\n    private _datepicker: MatDatepickerBase<MatDatepickerControl<unknown>, unknown>,\n    private _viewContainerRef: ViewContainerRef) {}\n\n  ngAfterViewInit() {\n    this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n    this._datepicker.registerActions(this._portal);\n  }\n\n  ngOnDestroy() {\n    this._datepicker.removeActions(this._portal);\n\n    // Needs to be null checked since we initialize it in `ngAfterViewInit`.\n    if (this._portal && this._portal.isAttached) {\n      this._portal?.detach();\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 {A11yModule} from '@angular/cdk/a11y';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatCalendar, MatCalendarHeader} from './calendar';\nimport {MatCalendarBody} from './calendar-body';\nimport {MatDatepicker} from './datepicker';\nimport {\n  MatDatepickerContent,\n  MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n} from './datepicker-base';\nimport {MatDatepickerInput} from './datepicker-input';\nimport {MatDatepickerIntl} from './datepicker-intl';\nimport {MatDatepickerToggle, MatDatepickerToggleIcon} from './datepicker-toggle';\nimport {MatMonthView} from './month-view';\nimport {MatMultiYearView} from './multi-year-view';\nimport {MatYearView} from './year-view';\nimport {MatDateRangeInput} from './date-range-input';\nimport {MatStartDate, MatEndDate} from './date-range-input-parts';\nimport {MatDateRangePicker} from './date-range-picker';\nimport {MatDatepickerActions, MatDatepickerApply, MatDatepickerCancel} from './datepicker-actions';\n\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatButtonModule,\n    OverlayModule,\n    A11yModule,\n    PortalModule,\n    MatCommonModule,\n  ],\n  exports: [\n    CdkScrollableModule,\n    MatCalendar,\n    MatCalendarBody,\n    MatDatepicker,\n    MatDatepickerContent,\n    MatDatepickerInput,\n    MatDatepickerToggle,\n    MatDatepickerToggleIcon,\n    MatMonthView,\n    MatYearView,\n    MatMultiYearView,\n    MatCalendarHeader,\n    MatDateRangeInput,\n    MatStartDate,\n    MatEndDate,\n    MatDateRangePicker,\n    MatDatepickerActions,\n    MatDatepickerCancel,\n    MatDatepickerApply\n  ],\n  declarations: [\n    MatCalendar,\n    MatCalendarBody,\n    MatDatepicker,\n    MatDatepickerContent,\n    MatDatepickerInput,\n    MatDatepickerToggle,\n    MatDatepickerToggleIcon,\n    MatMonthView,\n    MatYearView,\n    MatMultiYearView,\n    MatCalendarHeader,\n    MatDateRangeInput,\n    MatStartDate,\n    MatEndDate,\n    MatDateRangePicker,\n    MatDatepickerActions,\n    MatDatepickerCancel,\n    MatDatepickerApply\n  ],\n  providers: [\n    MatDatepickerIntl,\n    MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER\n  ],\n  entryComponents: [\n    MatDatepickerContent,\n    MatCalendarHeader,\n  ]\n})\nexport class MatDatepickerModule {}\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 './datepicker-module';\nexport * from './calendar';\nexport * from './calendar-body';\nexport * from './datepicker';\nexport {\n  MAT_DATE_RANGE_SELECTION_STRATEGY,\n  MatDateRangeSelectionStrategy,\n  DefaultMatCalendarRangeStrategy,\n} from './date-range-selection-strategy';\nexport * from './datepicker-animations';\nexport {\n  MAT_DATEPICKER_SCROLL_STRATEGY,\n  MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY,\n  MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n  MatDatepickerContent,\n  DatepickerDropdownPositionX,\n  DatepickerDropdownPositionY,\n} from './datepicker-base';\nexport {MatDatepickerInputEvent, DateFilterFn} from './datepicker-input-base';\nexport {\n  MAT_DATEPICKER_VALUE_ACCESSOR,\n  MAT_DATEPICKER_VALIDATORS,\n  MatDatepickerInput,\n} from './datepicker-input';\nexport * from './datepicker-intl';\nexport * from './datepicker-toggle';\nexport * from './month-view';\nexport * from './year-view';\nexport * from './date-range-input';\nexport {MatDateRangePicker} from './date-range-picker';\nexport * from './date-selection-model';\nexport {MatStartDate, MatEndDate} from './date-range-input-parts';\nexport {MatMultiYearView, yearsPerPage, yearsPerRow} from './multi-year-view';\nexport * from './datepicker-actions';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MAT_DATE_RANGE_INPUT_PARENT as ɵangular_material_src_material_datepicker_datepicker_e} from './date-range-input-parts';\nexport {MAT_CALENDAR_RANGE_STRATEGY_PROVIDER as ɵangular_material_src_material_datepicker_datepicker_b,MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY as ɵangular_material_src_material_datepicker_datepicker_a} from './date-range-selection-strategy';\nexport {MatDatepickerBase as ɵangular_material_src_material_datepicker_datepicker_c} from './datepicker-base';\nexport {MatDatepickerInputBase as ɵangular_material_src_material_datepicker_datepicker_d} from './datepicker-input-base';"],"names":["observableOf"],"mappings":"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"}
Index: trip-planner-front/node_modules/@angular/material/fesm2015/dialog.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/dialog.js.map	(revision fa375fed9635035b3c62cf759f42938afa14271b)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/dialog.js.map	(revision 8d391a12ef6baa3aefe9611a6f7c5b569977c946)
@@ -1,1 +1,1 @@
-{"version":3,"file":"dialog.js","sources":["../../../../../../src/material/dialog/dialog-config.ts","../../../../../../src/material/dialog/dialog-animations.ts","../../../../../../src/material/dialog/dialog-container.ts","../../../../../../src/material/dialog/dialog-ref.ts","../../../../../../src/material/dialog/dialog.ts","../../../../../../src/material/dialog/dialog-content-directives.ts","../../../../../../src/material/dialog/dialog-module.ts","../../../../../../src/material/dialog/public-api.ts","../../../../../../src/material/dialog/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 {ViewContainerRef, ComponentFactoryResolver} from '@angular/core';\nimport {Direction} from '@angular/cdk/bidi';\nimport {ScrollStrategy} from '@angular/cdk/overlay';\n\n/** Valid ARIA roles for a dialog element. */\nexport type DialogRole = 'dialog' | 'alertdialog';\n\n/** Possible overrides for a dialog's position. */\nexport interface DialogPosition {\n  /** Override for the dialog's top position. */\n  top?: string;\n\n  /** Override for the dialog's bottom position. */\n  bottom?: string;\n\n  /** Override for the dialog's left position. */\n  left?: string;\n\n  /** Override for the dialog's right position. */\n  right?: string;\n}\n\n/**\n * Configuration for opening a modal dialog with the MatDialog service.\n */\nexport class MatDialogConfig<D = any> {\n\n  /**\n   * Where the attached component should live in Angular's *logical* component tree.\n   * This affects what is available for injection and the change detection order for the\n   * component instantiated inside of the dialog. This does not affect where the dialog\n   * content will be rendered.\n   */\n  viewContainerRef?: ViewContainerRef;\n\n  /** ID for the dialog. If omitted, a unique one will be generated. */\n  id?: string;\n\n  /** The ARIA role of the dialog element. */\n  role?: DialogRole = 'dialog';\n\n  /** Custom class for the overlay pane. */\n  panelClass?: string | string[] = '';\n\n  /** Whether the dialog has a backdrop. */\n  hasBackdrop?: boolean = true;\n\n  /** Custom class for the backdrop. */\n  backdropClass?: string | string[] = '';\n\n  /** Whether the user can use escape or clicking on the backdrop to close the modal. */\n  disableClose?: boolean = false;\n\n  /** Width of the dialog. */\n  width?: string = '';\n\n  /** Height of the dialog. */\n  height?: string = '';\n\n  /** Min-width of the dialog. If a number is provided, assumes pixel units. */\n  minWidth?: number | string;\n\n  /** Min-height of the dialog. If a number is provided, assumes pixel units. */\n  minHeight?: number | string;\n\n  /** Max-width of the dialog. If a number is provided, assumes pixel units. Defaults to 80vw. */\n  maxWidth?: number | string = '80vw';\n\n  /** Max-height of the dialog. If a number is provided, assumes pixel units. */\n  maxHeight?: number | string;\n\n  /** Position overrides. */\n  position?: DialogPosition;\n\n  /** Data being injected into the child component. */\n  data?: D | null = null;\n\n  /** Layout direction for the dialog's content. */\n  direction?: Direction;\n\n  /** ID of the element that describes the dialog. */\n  ariaDescribedBy?: string | null = null;\n\n  /** ID of the element that labels the dialog. */\n  ariaLabelledBy?: string | null = null;\n\n  /** Aria label to assign to the dialog element. */\n  ariaLabel?: string | null = null;\n\n  /** Whether the dialog should focus the first focusable element on open. */\n  autoFocus?: boolean = true;\n\n  /**\n   * Whether the dialog should restore focus to the\n   * previously-focused element, after it's closed.\n   */\n  restoreFocus?: boolean = true;\n\n  /** Scroll strategy to be used for the dialog. */\n  scrollStrategy?: ScrollStrategy;\n\n  /**\n   * Whether the dialog should close when the user goes backwards/forwards in history.\n   * Note that this usually doesn't include clicking on links (unless the user is using\n   * the `HashLocationStrategy`).\n   */\n  closeOnNavigation?: boolean = true;\n\n  /** Alternate `ComponentFactoryResolver` to use when resolving the associated component. */\n  componentFactoryResolver?: ComponentFactoryResolver;\n\n  // TODO(jelbourn): add configuration for lifecycle hooks, ARIA labelling.\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 MatDialog.\n * @docs-private\n */\nexport const matDialogAnimations: {\n  readonly dialogContainer: AnimationTriggerMetadata;\n} = {\n  /** Animation that is applied on the dialog container by default. */\n  dialogContainer: trigger('dialogContainer', [\n    // Note: The `enter` animation transitions to `transform: none`, because for some reason\n    // specifying the transform explicitly, causes IE both to blur the dialog content and\n    // decimate the animation performance. Leaving it as `none` solves both issues.\n    state('void, exit', style({opacity: 0, transform: 'scale(0.7)'})),\n    state('enter', style({transform: 'none'})),\n    transition('* => enter', animate('150ms cubic-bezier(0, 0, 0.2, 1)',\n        style({transform: 'none', opacity: 1}))),\n    transition('* => void, * => exit',\n        animate('75ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({opacity: 0}))),\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 {AnimationEvent} from '@angular/animations';\nimport {FocusMonitor, FocusOrigin, FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {_getFocusedElementPierceShadowDom} from '@angular/cdk/platform';\nimport {\n  BasePortalOutlet,\n  CdkPortalOutlet,\n  ComponentPortal,\n  DomPortal,\n  TemplatePortal\n} from '@angular/cdk/portal';\nimport {DOCUMENT} from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentRef,\n  Directive,\n  ElementRef,\n  EmbeddedViewRef,\n  EventEmitter,\n  Inject,\n  Optional,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {matDialogAnimations} from './dialog-animations';\nimport {MatDialogConfig} from './dialog-config';\n\n/** Event that captures the state of dialog container animations. */\ninterface DialogAnimationEvent {\n  state: 'opened' | 'opening' | 'closing' | 'closed';\n  totalTime: number;\n}\n\n/**\n * Throws an exception for the case when a ComponentPortal is\n * attached to a DomPortalOutlet without an origin.\n * @docs-private\n */\nexport function throwMatDialogContentAlreadyAttachedError() {\n  throw Error('Attempting to attach dialog content after content is already attached');\n}\n\n/**\n * Base class for the `MatDialogContainer`. The base class does not implement\n * animations as these are left to implementers of the dialog container.\n */\n@Directive()\nexport abstract class _MatDialogContainerBase extends BasePortalOutlet {\n  protected _document: Document;\n\n  /** The portal outlet inside of this container into which the dialog content will be loaded. */\n  @ViewChild(CdkPortalOutlet, {static: true}) _portalOutlet: CdkPortalOutlet;\n\n  /** The class that traps and manages focus within the dialog. */\n  private _focusTrap: FocusTrap;\n\n  /** Emits when an animation state changes. */\n  _animationStateChanged = new EventEmitter<DialogAnimationEvent>();\n\n  /** Element that was focused before the dialog was opened. Save this to restore upon close. */\n  private _elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n  /**\n   * Type of interaction that led to the dialog being closed. This is used to determine\n   * whether the focus style will be applied when returning focus to its original location\n   * after the dialog is closed.\n   */\n  _closeInteractionType: FocusOrigin|null = null;\n\n  /** ID of the element that should be considered as the dialog's label. */\n  _ariaLabelledBy: string | null;\n\n  /** ID for the container DOM element. */\n  _id: string;\n\n  constructor(\n    protected _elementRef: ElementRef,\n    protected _focusTrapFactory: FocusTrapFactory,\n    protected _changeDetectorRef: ChangeDetectorRef,\n    @Optional() @Inject(DOCUMENT) _document: any,\n    /** The dialog configuration. */\n    public _config: MatDialogConfig,\n    private _focusMonitor?: FocusMonitor) {\n\n    super();\n    this._ariaLabelledBy = _config.ariaLabelledBy || null;\n    this._document = _document;\n  }\n\n  /** Starts the dialog exit animation. */\n  abstract _startExitAnimation(): void;\n\n  /** Initializes the dialog container with the attached content. */\n  _initializeWithAttachedContent() {\n    this._setupFocusTrap();\n    // Save the previously focused element. This element will be re-focused\n    // when the dialog closes.\n    this._capturePreviouslyFocusedElement();\n    // Move focus onto the dialog immediately in order to prevent the user\n    // from accidentally opening multiple dialogs at the same time.\n    this._focusDialogContainer();\n  }\n\n  /**\n   * Attach a ComponentPortal as content to this dialog container.\n   * @param portal Portal to be attached as the dialog content.\n   */\n  attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n    if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throwMatDialogContentAlreadyAttachedError();\n    }\n\n    return this._portalOutlet.attachComponentPortal(portal);\n  }\n\n  /**\n   * Attach a TemplatePortal as content to this dialog container.\n   * @param portal Portal to be attached as the dialog content.\n   */\n  attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n    if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throwMatDialogContentAlreadyAttachedError();\n    }\n\n    return this._portalOutlet.attachTemplatePortal(portal);\n  }\n\n  /**\n   * Attaches a DOM portal to the dialog container.\n   * @param portal Portal to be attached.\n   * @deprecated To be turned into a method.\n   * @breaking-change 10.0.0\n   */\n  override attachDomPortal = (portal: DomPortal) => {\n    if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throwMatDialogContentAlreadyAttachedError();\n    }\n\n    return this._portalOutlet.attachDomPortal(portal);\n  }\n\n  /** Moves focus back into the dialog if it was moved out. */\n  _recaptureFocus() {\n    if (!this._containsFocus()) {\n      const focusContainer = !this._config.autoFocus || !this._focusTrap.focusInitialElement();\n\n      if (focusContainer) {\n        this._elementRef.nativeElement.focus();\n      }\n    }\n  }\n\n  /** Moves the focus inside the focus trap. */\n  protected _trapFocus() {\n    // If we were to attempt to focus immediately, then the content of the dialog would not yet be\n    // ready in instances where change detection has to run first. To deal with this, we simply\n    // wait for the microtask queue to be empty.\n    if (this._config.autoFocus) {\n      this._focusTrap.focusInitialElementWhenReady();\n    } else if (!this._containsFocus()) {\n      // Otherwise ensure that focus is on the dialog container. It's possible that a different\n      // component tried to move focus while the open animation was running. See:\n      // https://github.com/angular/components/issues/16215. Note that we only want to do this\n      // if the focus isn't inside the dialog already, because it's possible that the consumer\n      // turned off `autoFocus` in order to move focus themselves.\n      this._elementRef.nativeElement.focus();\n    }\n  }\n\n  /** Restores focus to the element that was focused before the dialog opened. */\n  protected _restoreFocus() {\n    const previousElement = this._elementFocusedBeforeDialogWasOpened;\n\n    // We need the extra check, because IE can set the `activeElement` to null in some cases.\n    if (this._config.restoreFocus && previousElement &&\n        typeof previousElement.focus === 'function') {\n      const activeElement = _getFocusedElementPierceShadowDom();\n      const element = this._elementRef.nativeElement;\n\n      // Make sure that focus is still inside the dialog or is on the body (usually because a\n      // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n      // the consumer moved it themselves before the animation was done, in which case we shouldn't\n      // do anything.\n      if (!activeElement || activeElement === this._document.body || activeElement === element ||\n          element.contains(activeElement)) {\n        if (this._focusMonitor) {\n          this._focusMonitor.focusVia(previousElement, this._closeInteractionType);\n          this._closeInteractionType = null;\n        } else {\n          previousElement.focus();\n        }\n      }\n    }\n\n    if (this._focusTrap) {\n      this._focusTrap.destroy();\n    }\n  }\n\n  /** Sets up the focus trap. */\n  private _setupFocusTrap() {\n    this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n  }\n\n  /** Captures the element that was focused before the dialog was opened. */\n  private _capturePreviouslyFocusedElement() {\n    if (this._document) {\n      this._elementFocusedBeforeDialogWasOpened = _getFocusedElementPierceShadowDom();\n    }\n  }\n\n  /** Focuses the dialog container. */\n  private _focusDialogContainer() {\n    // Note that there is no focus method when rendering on the server.\n    if (this._elementRef.nativeElement.focus) {\n      this._elementRef.nativeElement.focus();\n    }\n  }\n\n  /** Returns whether focus is inside the dialog. */\n  private _containsFocus() {\n    const element = this._elementRef.nativeElement;\n    const activeElement = _getFocusedElementPierceShadowDom();\n    return element === activeElement || element.contains(activeElement);\n  }\n}\n\n/**\n * Internal component that wraps user-provided dialog content.\n * Animation is based on https://material.io/guidelines/motion/choreography.html.\n * @docs-private\n */\n@Component({\n  selector: 'mat-dialog-container',\n  templateUrl: 'dialog-container.html',\n  styleUrls: ['dialog.css'],\n  encapsulation: ViewEncapsulation.None,\n  // Using OnPush for dialogs caused some G3 sync issues. Disabled until we can track them down.\n  // tslint:disable-next-line:validate-decorators\n  changeDetection: ChangeDetectionStrategy.Default,\n  animations: [matDialogAnimations.dialogContainer],\n  host: {\n    'class': 'mat-dialog-container',\n    'tabindex': '-1',\n    'aria-modal': 'true',\n    '[id]': '_id',\n    '[attr.role]': '_config.role',\n    '[attr.aria-labelledby]': '_config.ariaLabel ? null : _ariaLabelledBy',\n    '[attr.aria-label]': '_config.ariaLabel',\n    '[attr.aria-describedby]': '_config.ariaDescribedBy || null',\n    '[@dialogContainer]': '_state',\n    '(@dialogContainer.start)': '_onAnimationStart($event)',\n    '(@dialogContainer.done)': '_onAnimationDone($event)',\n  },\n})\nexport class MatDialogContainer extends _MatDialogContainerBase {\n  /** State of the dialog animation. */\n  _state: 'void' | 'enter' | 'exit' = 'enter';\n\n  /** Callback, invoked whenever an animation on the host completes. */\n  _onAnimationDone({toState, totalTime}: AnimationEvent) {\n    if (toState === 'enter') {\n      this._trapFocus();\n      this._animationStateChanged.next({state: 'opened', totalTime});\n    } else if (toState === 'exit') {\n      this._restoreFocus();\n      this._animationStateChanged.next({state: 'closed', totalTime});\n    }\n  }\n\n  /** Callback, invoked when an animation on the host starts. */\n  _onAnimationStart({toState, totalTime}: AnimationEvent) {\n    if (toState === 'enter') {\n      this._animationStateChanged.next({state: 'opening', totalTime});\n    } else if (toState === 'exit' || toState === 'void') {\n      this._animationStateChanged.next({state: 'closing', totalTime});\n    }\n  }\n\n  /** Starts the dialog exit animation. */\n  _startExitAnimation(): void {\n    this._state = 'exit';\n\n    // Mark the container for check so it can react if the\n    // view container is using OnPush change detection.\n    this._changeDetectorRef.markForCheck();\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 {FocusOrigin} from '@angular/cdk/a11y';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {GlobalPositionStrategy, OverlayRef} from '@angular/cdk/overlay';\nimport {Observable, Subject} from 'rxjs';\nimport {filter, take} from 'rxjs/operators';\nimport {DialogPosition} from './dialog-config';\nimport {_MatDialogContainerBase} from './dialog-container';\n\n\n// TODO(jelbourn): resizing\n\n// Counter for unique dialog ids.\nlet uniqueId = 0;\n\n/** Possible states of the lifecycle of a dialog. */\nexport const enum MatDialogState {OPEN, CLOSING, CLOSED}\n\n/**\n * Reference to a dialog opened via the MatDialog service.\n */\nexport class MatDialogRef<T, R = any> {\n  /** The instance of component opened into the dialog. */\n  componentInstance: T;\n\n  /** Whether the user is allowed to close the dialog. */\n  disableClose: boolean | undefined = this._containerInstance._config.disableClose;\n\n  /** Subject for notifying the user that the dialog has finished opening. */\n  private readonly _afterOpened = new Subject<void>();\n\n  /** Subject for notifying the user that the dialog has finished closing. */\n  private readonly _afterClosed = new Subject<R | undefined>();\n\n  /** Subject for notifying the user that the dialog has started closing. */\n  private readonly _beforeClosed = new Subject<R | undefined>();\n\n  /** Result to be passed to afterClosed. */\n  private _result: R | undefined;\n\n  /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n  private _closeFallbackTimeout: any;\n\n  /** Current state of the dialog. */\n  private _state = MatDialogState.OPEN;\n\n  constructor(\n    private _overlayRef: OverlayRef,\n    public _containerInstance: _MatDialogContainerBase,\n    /** Id of the dialog. */\n    readonly id: string = `mat-dialog-${uniqueId++}`) {\n\n    // Pass the id along to the container.\n    _containerInstance._id = id;\n\n    // Emit when opening animation completes\n    _containerInstance._animationStateChanged.pipe(\n      filter(event => event.state === 'opened'),\n      take(1)\n    )\n    .subscribe(() => {\n      this._afterOpened.next();\n      this._afterOpened.complete();\n    });\n\n    // Dispose overlay when closing animation is complete\n    _containerInstance._animationStateChanged.pipe(\n      filter(event => event.state === 'closed'),\n      take(1)\n    ).subscribe(() => {\n      clearTimeout(this._closeFallbackTimeout);\n      this._finishDialogClose();\n    });\n\n    _overlayRef.detachments().subscribe(() => {\n      this._beforeClosed.next(this._result);\n      this._beforeClosed.complete();\n      this._afterClosed.next(this._result);\n      this._afterClosed.complete();\n      this.componentInstance = null!;\n      this._overlayRef.dispose();\n    });\n\n    _overlayRef.keydownEvents()\n      .pipe(filter(event => {\n        return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n      }))\n      .subscribe(event => {\n        event.preventDefault();\n        _closeDialogVia(this, 'keyboard');\n      });\n\n    _overlayRef.backdropClick().subscribe(() => {\n      if (this.disableClose) {\n        this._containerInstance._recaptureFocus();\n      } else {\n        _closeDialogVia(this, 'mouse');\n      }\n    });\n  }\n\n  /**\n   * Close the dialog.\n   * @param dialogResult Optional result to return to the dialog opener.\n   */\n  close(dialogResult?: R): void {\n    this._result = dialogResult;\n\n    // Transition the backdrop in parallel to the dialog.\n    this._containerInstance._animationStateChanged.pipe(\n      filter(event => event.state === 'closing'),\n      take(1)\n    )\n    .subscribe(event => {\n      this._beforeClosed.next(dialogResult);\n      this._beforeClosed.complete();\n      this._overlayRef.detachBackdrop();\n\n      // The logic that disposes of the overlay depends on the exit animation completing, however\n      // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n      // timeout which will clean everything up if the animation hasn't fired within the specified\n      // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n      // vast majority of cases the timeout will have been cleared before it has the chance to fire.\n      this._closeFallbackTimeout = setTimeout(() => this._finishDialogClose(),\n          event.totalTime + 100);\n    });\n\n    this._state = MatDialogState.CLOSING;\n    this._containerInstance._startExitAnimation();\n  }\n\n  /**\n   * Gets an observable that is notified when the dialog is finished opening.\n   */\n  afterOpened(): Observable<void> {\n    return this._afterOpened;\n  }\n\n  /**\n   * Gets an observable that is notified when the dialog is finished closing.\n   */\n  afterClosed(): Observable<R | undefined> {\n    return this._afterClosed;\n  }\n\n  /**\n   * Gets an observable that is notified when the dialog has started closing.\n   */\n  beforeClosed(): Observable<R | undefined> {\n    return this._beforeClosed;\n  }\n\n  /**\n   * Gets an observable that emits when the overlay's backdrop has been clicked.\n   */\n  backdropClick(): Observable<MouseEvent> {\n    return this._overlayRef.backdropClick();\n  }\n\n  /**\n   * Gets an observable that emits when keydown events are targeted on the overlay.\n   */\n  keydownEvents(): Observable<KeyboardEvent> {\n    return this._overlayRef.keydownEvents();\n  }\n\n  /**\n   * Updates the dialog's position.\n   * @param position New dialog position.\n   */\n  updatePosition(position?: DialogPosition): this {\n    let strategy = this._getPositionStrategy();\n\n    if (position && (position.left || position.right)) {\n      position.left ? strategy.left(position.left) : strategy.right(position.right);\n    } else {\n      strategy.centerHorizontally();\n    }\n\n    if (position && (position.top || position.bottom)) {\n      position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\n    } else {\n      strategy.centerVertically();\n    }\n\n    this._overlayRef.updatePosition();\n\n    return this;\n  }\n\n  /**\n   * Updates the dialog's width and height.\n   * @param width New width of the dialog.\n   * @param height New height of the dialog.\n   */\n  updateSize(width: string = '', height: string = ''): this {\n    this._overlayRef.updateSize({width, height});\n    this._overlayRef.updatePosition();\n    return this;\n  }\n\n  /** Add a CSS class or an array of classes to the overlay pane. */\n  addPanelClass(classes: string | string[]): this {\n    this._overlayRef.addPanelClass(classes);\n    return this;\n  }\n\n  /** Remove a CSS class or an array of classes from the overlay pane. */\n  removePanelClass(classes: string | string[]): this {\n    this._overlayRef.removePanelClass(classes);\n    return this;\n  }\n\n  /** Gets the current state of the dialog's lifecycle. */\n  getState(): MatDialogState {\n    return this._state;\n  }\n\n  /**\n   * Finishes the dialog close by updating the state of the dialog\n   * and disposing the overlay.\n   */\n  private _finishDialogClose() {\n    this._state = MatDialogState.CLOSED;\n    this._overlayRef.dispose();\n  }\n\n  /** Fetches the position strategy object from the overlay ref. */\n  private _getPositionStrategy(): GlobalPositionStrategy {\n    return this._overlayRef.getConfig().positionStrategy as GlobalPositionStrategy;\n  }\n}\n\n/**\n * Closes the dialog with the specified interaction type. This is currently not part of\n * `MatDialogRef` as that would conflict with custom dialog ref mocks provided in tests.\n * More details. See: https://github.com/angular/components/pull/9257#issuecomment-651342226.\n */\n// TODO: TODO: Move this back into `MatDialogRef` when we provide an official mock dialog ref.\nexport function _closeDialogVia<R>(ref: MatDialogRef<R>, interactionType: FocusOrigin, result?: R) {\n  // Some mock dialog ref instances in tests do not have the `_containerInstance` property.\n  // For those, we keep the behavior as is and do not deal with the interaction type.\n  if (ref._containerInstance !== undefined) {\n    ref._containerInstance._closeInteractionType = interactionType;\n  }\n  return ref.close(result);\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 {Directionality} from '@angular/cdk/bidi';\nimport {\n  Overlay,\n  OverlayConfig,\n  OverlayContainer,\n  OverlayRef,\n  ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, TemplatePortal} from '@angular/cdk/portal';\nimport {Location} from '@angular/common';\nimport {\n  Directive,\n  Inject,\n  Injectable,\n  InjectFlags,\n  InjectionToken,\n  Injector,\n  OnDestroy,\n  Optional,\n  SkipSelf,\n  StaticProvider,\n  TemplateRef,\n  Type,\n} from '@angular/core';\nimport {defer, Observable, of as observableOf, Subject} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {MatDialogConfig} from './dialog-config';\nimport {MatDialogContainer, _MatDialogContainerBase} from './dialog-container';\nimport {MatDialogRef} from './dialog-ref';\n\n\n/** Injection token that can be used to access the data that was passed in to a dialog. */\nexport const MAT_DIALOG_DATA = new InjectionToken<any>('MatDialogData');\n\n/** Injection token that can be used to specify default dialog options. */\nexport const MAT_DIALOG_DEFAULT_OPTIONS =\n    new InjectionToken<MatDialogConfig>('mat-dialog-default-options');\n\n/** Injection token that determines the scroll handling while the dialog is open. */\nexport const MAT_DIALOG_SCROLL_STRATEGY =\n    new InjectionToken<() => ScrollStrategy>('mat-dialog-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_DIALOG_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n  return () => overlay.scrollStrategies.block();\n}\n\n/** @docs-private */\nexport function MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n  () => ScrollStrategy {\n  return () => overlay.scrollStrategies.block();\n}\n\n/** @docs-private */\nexport const MAT_DIALOG_SCROLL_STRATEGY_PROVIDER = {\n  provide: MAT_DIALOG_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n\n/**\n * Base class for dialog services. The base dialog service allows\n * for arbitrary dialog refs and dialog container components.\n */\n@Directive()\nexport abstract class _MatDialogBase<C extends _MatDialogContainerBase> implements OnDestroy {\n  private _openDialogsAtThisLevel: MatDialogRef<any>[] = [];\n  private readonly _afterAllClosedAtThisLevel = new Subject<void>();\n  private readonly _afterOpenedAtThisLevel = new Subject<MatDialogRef<any>>();\n  private _ariaHiddenElements = new Map<Element, string|null>();\n  private _scrollStrategy: () => ScrollStrategy;\n\n  /** Keeps track of the currently-open dialogs. */\n  get openDialogs(): MatDialogRef<any>[] {\n    return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n  }\n\n  /** Stream that emits when a dialog has been opened. */\n  get afterOpened(): Subject<MatDialogRef<any>> {\n    return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n  }\n\n  _getAfterAllClosed(): Subject<void> {\n    const parent = this._parentDialog;\n    return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n  }\n\n  // TODO (jelbourn): tighten the typing right-hand side of this expression.\n  /**\n   * Stream that emits when all open dialog have finished closing.\n   * Will emit on subscribe if there are no open dialogs to begin with.\n   */\n  readonly afterAllClosed: Observable<void> = defer(() => this.openDialogs.length ?\n      this._getAfterAllClosed() :\n      this._getAfterAllClosed().pipe(startWith(undefined))) as Observable<any>;\n\n  constructor(\n      private _overlay: Overlay,\n      private _injector: Injector,\n      private _defaultOptions: MatDialogConfig|undefined,\n      private _parentDialog: _MatDialogBase<C>|undefined,\n      private _overlayContainer: OverlayContainer,\n      scrollStrategy: any,\n      private _dialogRefConstructor: Type<MatDialogRef<any>>,\n      private _dialogContainerType: Type<C>,\n      private _dialogDataToken: InjectionToken<any>) {\n    this._scrollStrategy = scrollStrategy;\n  }\n\n  /**\n   * Opens a modal dialog containing the given component.\n   * @param component Type of the component to load into the dialog.\n   * @param config Extra configuration options.\n   * @returns Reference to the newly-opened dialog.\n   */\n  open<T, D = any, R = any>(component: ComponentType<T>,\n                            config?: MatDialogConfig<D>): MatDialogRef<T, R>;\n\n  /**\n   * Opens a modal dialog containing the given template.\n   * @param template TemplateRef to instantiate as the dialog content.\n   * @param config Extra configuration options.\n   * @returns Reference to the newly-opened dialog.\n   */\n  open<T, D = any, R = any>(template: TemplateRef<T>,\n                            config?: MatDialogConfig<D>): MatDialogRef<T, R>;\n\n  open<T, D = any, R = any>(template: ComponentType<T> | TemplateRef<T>,\n                            config?: MatDialogConfig<D>): MatDialogRef<T, R>;\n\n  open<T, D = any, R = any>(componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n                            config?: MatDialogConfig<D>): MatDialogRef<T, R> {\n    config = _applyConfigDefaults(config, this._defaultOptions || new MatDialogConfig());\n\n    if (config.id && this.getDialogById(config.id) &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n    }\n\n    const overlayRef = this._createOverlay(config);\n    const dialogContainer = this._attachDialogContainer(overlayRef, config);\n    const dialogRef = this._attachDialogContent<T, R>(componentOrTemplateRef,\n                                                      dialogContainer,\n                                                      overlayRef,\n                                                      config);\n\n    // If this is the first dialog that we're opening, hide all the non-overlay content.\n    if (!this.openDialogs.length) {\n      this._hideNonDialogContentFromAssistiveTechnology();\n    }\n\n    this.openDialogs.push(dialogRef);\n    dialogRef.afterClosed().subscribe(() => this._removeOpenDialog(dialogRef));\n    this.afterOpened.next(dialogRef);\n\n    // Notify the dialog container that the content has been attached.\n    dialogContainer._initializeWithAttachedContent();\n\n    return dialogRef;\n  }\n\n  /**\n   * Closes all of the currently-open dialogs.\n   */\n  closeAll(): void {\n    this._closeDialogs(this.openDialogs);\n  }\n\n  /**\n   * Finds an open dialog by its id.\n   * @param id ID to use when looking up the dialog.\n   */\n  getDialogById(id: string): MatDialogRef<any> | undefined {\n    return this.openDialogs.find(dialog => dialog.id === id);\n  }\n\n  ngOnDestroy() {\n    // Only close the dialogs at this level on destroy\n    // since the parent service may still be active.\n    this._closeDialogs(this._openDialogsAtThisLevel);\n    this._afterAllClosedAtThisLevel.complete();\n    this._afterOpenedAtThisLevel.complete();\n  }\n\n  /**\n   * Creates the overlay into which the dialog will be loaded.\n   * @param config The dialog configuration.\n   * @returns A promise resolving to the OverlayRef for the created overlay.\n   */\n  private _createOverlay(config: MatDialogConfig): OverlayRef {\n    const overlayConfig = this._getOverlayConfig(config);\n    return this._overlay.create(overlayConfig);\n  }\n\n  /**\n   * Creates an overlay config from a dialog config.\n   * @param dialogConfig The dialog configuration.\n   * @returns The overlay configuration.\n   */\n  private _getOverlayConfig(dialogConfig: MatDialogConfig): OverlayConfig {\n    const state = new OverlayConfig({\n      positionStrategy: this._overlay.position().global(),\n      scrollStrategy: dialogConfig.scrollStrategy || this._scrollStrategy(),\n      panelClass: dialogConfig.panelClass,\n      hasBackdrop: dialogConfig.hasBackdrop,\n      direction: dialogConfig.direction,\n      minWidth: dialogConfig.minWidth,\n      minHeight: dialogConfig.minHeight,\n      maxWidth: dialogConfig.maxWidth,\n      maxHeight: dialogConfig.maxHeight,\n      disposeOnNavigation: dialogConfig.closeOnNavigation\n    });\n\n    if (dialogConfig.backdropClass) {\n      state.backdropClass = dialogConfig.backdropClass;\n    }\n\n    return state;\n  }\n\n  /**\n   * Attaches a dialog container to a dialog's already-created overlay.\n   * @param overlay Reference to the dialog's underlying overlay.\n   * @param config The dialog configuration.\n   * @returns A promise resolving to a ComponentRef for the attached container.\n   */\n  private _attachDialogContainer(overlay: OverlayRef, config: MatDialogConfig): C {\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n    const injector = Injector.create({\n      parent: userInjector || this._injector,\n      providers: [{provide: MatDialogConfig, useValue: config}]\n    });\n\n    const containerPortal = new ComponentPortal(this._dialogContainerType,\n        config.viewContainerRef, injector, config.componentFactoryResolver);\n    const containerRef = overlay.attach<C>(containerPortal);\n\n    return containerRef.instance;\n  }\n\n  /**\n   * Attaches the user-provided component to the already-created dialog container.\n   * @param componentOrTemplateRef The type of component being loaded into the dialog,\n   *     or a TemplateRef to instantiate as the content.\n   * @param dialogContainer Reference to the wrapping dialog container.\n   * @param overlayRef Reference to the overlay in which the dialog resides.\n   * @param config The dialog configuration.\n   * @returns A promise resolving to the MatDialogRef that should be returned to the user.\n   */\n  private _attachDialogContent<T, R>(\n      componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n      dialogContainer: C,\n      overlayRef: OverlayRef,\n      config: MatDialogConfig): MatDialogRef<T, R> {\n\n    // Create a reference to the dialog we're creating in order to give the user a handle\n    // to modify and close it.\n    const dialogRef = new this._dialogRefConstructor(overlayRef, dialogContainer, config.id);\n\n    if (componentOrTemplateRef instanceof TemplateRef) {\n      dialogContainer.attachTemplatePortal(\n        new TemplatePortal<T>(componentOrTemplateRef, null!,\n          <any>{$implicit: config.data, dialogRef}));\n    } else {\n      const injector = this._createInjector<T>(config, dialogRef, dialogContainer);\n      const contentRef = dialogContainer.attachComponentPortal<T>(\n          new ComponentPortal(componentOrTemplateRef, config.viewContainerRef, injector));\n      dialogRef.componentInstance = contentRef.instance;\n    }\n\n    dialogRef\n      .updateSize(config.width, config.height)\n      .updatePosition(config.position);\n\n    return dialogRef;\n  }\n\n  /**\n   * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n   * of a dialog to close itself and, optionally, to return a value.\n   * @param config Config object that is used to construct the dialog.\n   * @param dialogRef Reference to the dialog.\n   * @param dialogContainer Dialog container element that wraps all of the contents.\n   * @returns The custom injector that can be used inside the dialog.\n   */\n  private _createInjector<T>(\n      config: MatDialogConfig,\n      dialogRef: MatDialogRef<T>,\n      dialogContainer: C): Injector {\n\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n\n    // The dialog container should be provided as the dialog container and the dialog's\n    // content are created out of the same `ViewContainerRef` and as such, are siblings\n    // for injector purposes. To allow the hierarchy that is expected, the dialog\n    // container is explicitly provided in the injector.\n    const providers: StaticProvider[] = [\n      {provide: this._dialogContainerType, useValue: dialogContainer},\n      {provide: this._dialogDataToken, useValue: config.data},\n      {provide: this._dialogRefConstructor, useValue: dialogRef}\n    ];\n\n    if (config.direction && (!userInjector ||\n        !userInjector.get<Directionality | null>(Directionality, null, InjectFlags.Optional))) {\n      providers.push({\n        provide: Directionality,\n        useValue: {value: config.direction, change: observableOf()}\n      });\n    }\n\n    return Injector.create({parent: userInjector || this._injector, providers});\n  }\n\n  /**\n   * Removes a dialog from the array of open dialogs.\n   * @param dialogRef Dialog to be removed.\n   */\n  private _removeOpenDialog(dialogRef: MatDialogRef<any>) {\n    const index = this.openDialogs.indexOf(dialogRef);\n\n    if (index > -1) {\n      this.openDialogs.splice(index, 1);\n\n      // If all the dialogs were closed, remove/restore the `aria-hidden`\n      // to a the siblings and emit to the `afterAllClosed` stream.\n      if (!this.openDialogs.length) {\n        this._ariaHiddenElements.forEach((previousValue, element) => {\n          if (previousValue) {\n            element.setAttribute('aria-hidden', previousValue);\n          } else {\n            element.removeAttribute('aria-hidden');\n          }\n        });\n\n        this._ariaHiddenElements.clear();\n        this._getAfterAllClosed().next();\n      }\n    }\n  }\n\n  /**\n   * Hides all of the content that isn't an overlay from assistive technology.\n   */\n  private _hideNonDialogContentFromAssistiveTechnology() {\n    const overlayContainer = this._overlayContainer.getContainerElement();\n\n    // Ensure that the overlay container is attached to the DOM.\n    if (overlayContainer.parentElement) {\n      const siblings = overlayContainer.parentElement.children;\n\n      for (let i = siblings.length - 1; i > -1; i--) {\n        let sibling = siblings[i];\n\n        if (sibling !== overlayContainer &&\n          sibling.nodeName !== 'SCRIPT' &&\n          sibling.nodeName !== 'STYLE' &&\n          !sibling.hasAttribute('aria-live')) {\n\n          this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n          sibling.setAttribute('aria-hidden', 'true');\n        }\n      }\n    }\n  }\n\n  /** Closes all of the dialogs in an array. */\n  private _closeDialogs(dialogs: MatDialogRef<any>[]) {\n    let i = dialogs.length;\n\n    while (i--) {\n      // The `_openDialogs` property isn't updated after close until the rxjs subscription\n      // runs on the next microtask, in addition to modifying the array as we're going\n      // through it. We loop through all of them and call close without assuming that\n      // they'll be removed from the list instantaneously.\n      dialogs[i].close();\n    }\n  }\n\n}\n\n/**\n * Service to open Material Design modal dialogs.\n */\n@Injectable()\nexport class MatDialog extends _MatDialogBase<MatDialogContainer> {\n  constructor(\n      overlay: Overlay,\n      injector: Injector,\n      /**\n       * @deprecated `_location` parameter to be removed.\n       * @breaking-change 10.0.0\n       */\n      @Optional() location: Location,\n      @Optional() @Inject(MAT_DIALOG_DEFAULT_OPTIONS) defaultOptions: MatDialogConfig,\n      @Inject(MAT_DIALOG_SCROLL_STRATEGY) scrollStrategy: any,\n      @Optional() @SkipSelf() parentDialog: MatDialog,\n      overlayContainer: OverlayContainer) {\n    super(overlay, injector, defaultOptions, parentDialog, overlayContainer, scrollStrategy,\n        MatDialogRef, MatDialogContainer, MAT_DIALOG_DATA);\n  }\n}\n\n/**\n * Applies default options to the dialog config.\n * @param config Config to be modified.\n * @param defaultOptions Default options provided.\n * @returns The new configuration object.\n */\nfunction _applyConfigDefaults(\n    config?: MatDialogConfig, defaultOptions?: MatDialogConfig): MatDialogConfig {\n  return {...defaultOptions, ...config};\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 {\n  Directive,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  SimpleChanges,\n  ElementRef,\n} from '@angular/core';\nimport {MatDialog} from './dialog';\nimport {_closeDialogVia, MatDialogRef} from './dialog-ref';\n\n/** Counter used to generate unique IDs for dialog elements. */\nlet dialogElementUid = 0;\n\n/**\n * Button that will close the current dialog.\n */\n@Directive({\n  selector: '[mat-dialog-close], [matDialogClose]',\n  exportAs: 'matDialogClose',\n  host: {\n    '(click)': '_onButtonClick($event)',\n    '[attr.aria-label]': 'ariaLabel || null',\n    '[attr.type]': 'type',\n  }\n})\nexport class MatDialogClose implements OnInit, OnChanges {\n  /** Screenreader label for the button. */\n  @Input('aria-label') ariaLabel: string;\n\n  /** Default to \"button\" to prevents accidental form submits. */\n  @Input() type: 'submit' | 'button' | 'reset' = 'button';\n\n  /** Dialog close input. */\n  @Input('mat-dialog-close') dialogResult: any;\n\n  @Input('matDialogClose') _matDialogClose: any;\n\n  constructor(\n\n    /**\n     * Reference to the containing dialog.\n     * @deprecated `dialogRef` property to become private.\n     * @breaking-change 13.0.0\n     */\n    // The dialog title directive is always used in combination with a `MatDialogRef`.\n    // tslint:disable-next-line: lightweight-tokens\n    @Optional() public dialogRef: MatDialogRef<any>,\n    private _elementRef: ElementRef<HTMLElement>,\n    private _dialog: MatDialog) {}\n\n  ngOnInit() {\n    if (!this.dialogRef) {\n      // When this directive is included in a dialog via TemplateRef (rather than being\n      // in a Component), the DialogRef isn't available via injection because embedded\n      // views cannot be given a custom injector. Instead, we look up the DialogRef by\n      // ID. This must occur in `onInit`, as the ID binding for the dialog container won't\n      // be resolved at constructor time.\n      this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs)!;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const proxiedChange = changes['_matDialogClose'] || changes['_matDialogCloseResult'];\n\n    if (proxiedChange) {\n      this.dialogResult = proxiedChange.currentValue;\n    }\n  }\n\n  _onButtonClick(event: MouseEvent) {\n    // Determinate the focus origin using the click event, because using the FocusMonitor will\n    // result in incorrect origins. Most of the time, close buttons will be auto focused in the\n    // dialog, and therefore clicking the button won't result in a focus change. This means that\n    // the FocusMonitor won't detect any origin change, and will always output `program`.\n    _closeDialogVia(this.dialogRef,\n        event.screenX === 0 && event.screenY === 0 ? 'keyboard' : 'mouse', this.dialogResult);\n  }\n}\n\n/**\n * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.\n */\n@Directive({\n  selector: '[mat-dialog-title], [matDialogTitle]',\n  exportAs: 'matDialogTitle',\n  host: {\n    'class': 'mat-dialog-title',\n    '[id]': 'id',\n  },\n})\nexport class MatDialogTitle implements OnInit {\n  /** Unique id for the dialog title. If none is supplied, it will be auto-generated. */\n  @Input() id: string = `mat-dialog-title-${dialogElementUid++}`;\n\n  constructor(\n      // The dialog title directive is always used in combination with a `MatDialogRef`.\n      // tslint:disable-next-line: lightweight-tokens\n      @Optional() private _dialogRef: MatDialogRef<any>,\n      private _elementRef: ElementRef<HTMLElement>,\n      private _dialog: MatDialog) {}\n\n  ngOnInit() {\n    if (!this._dialogRef) {\n      this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs)!;\n    }\n\n    if (this._dialogRef) {\n      Promise.resolve().then(() => {\n        const container = this._dialogRef._containerInstance;\n\n        if (container && !container._ariaLabelledBy) {\n          container._ariaLabelledBy = this.id;\n        }\n      });\n    }\n  }\n}\n\n\n/**\n * Scrollable content container of a dialog.\n */\n@Directive({\n  selector: `[mat-dialog-content], mat-dialog-content, [matDialogContent]`,\n  host: {'class': 'mat-dialog-content'}\n})\nexport class MatDialogContent {}\n\n\n/**\n * Container for the bottom action buttons in a dialog.\n * Stays fixed to the bottom when scrolling.\n */\n@Directive({\n  selector: `[mat-dialog-actions], mat-dialog-actions, [matDialogActions]`,\n  host: {'class': 'mat-dialog-actions'}\n})\nexport class MatDialogActions {}\n\n\n/**\n * Finds the closest MatDialogRef to an element by looking at the DOM.\n * @param element Element relative to which to look for a dialog.\n * @param openDialogs References to the currently-open dialogs.\n */\nfunction getClosestDialog(element: ElementRef<HTMLElement>, openDialogs: MatDialogRef<any>[]) {\n  let parent: HTMLElement | null = element.nativeElement.parentElement;\n\n  while (parent && !parent.classList.contains('mat-dialog-container')) {\n    parent = parent.parentElement;\n  }\n\n  return parent ? openDialogs.find(dialog => dialog.id === parent!.id) : 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\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MAT_DIALOG_SCROLL_STRATEGY_PROVIDER, MatDialog} from './dialog';\nimport {MatDialogContainer} from './dialog-container';\nimport {\n  MatDialogActions,\n  MatDialogClose,\n  MatDialogContent,\n  MatDialogTitle,\n} from './dialog-content-directives';\n\n\n@NgModule({\n  imports: [\n    OverlayModule,\n    PortalModule,\n    MatCommonModule,\n  ],\n  exports: [\n    MatDialogContainer,\n    MatDialogClose,\n    MatDialogTitle,\n    MatDialogContent,\n    MatDialogActions,\n    MatCommonModule,\n  ],\n  declarations: [\n    MatDialogContainer,\n    MatDialogClose,\n    MatDialogTitle,\n    MatDialogActions,\n    MatDialogContent,\n  ],\n  providers: [\n    MatDialog,\n    MAT_DIALOG_SCROLL_STRATEGY_PROVIDER,\n  ],\n  entryComponents: [MatDialogContainer],\n})\nexport class MatDialogModule {}\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 './dialog-module';\nexport * from './dialog';\nexport * from './dialog-container';\nexport * from './dialog-content-directives';\nexport * from './dialog-config';\nexport * from './dialog-ref';\nexport * from './dialog-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["observableOf"],"mappings":"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"}
+{"version":3,"file":"dialog.js","sources":["../../../../../../src/material/dialog/dialog-config.ts","../../../../../../src/material/dialog/dialog-animations.ts","../../../../../../src/material/dialog/dialog-container.ts","../../../../../../src/material/dialog/dialog-ref.ts","../../../../../../src/material/dialog/dialog.ts","../../../../../../src/material/dialog/dialog-content-directives.ts","../../../../../../src/material/dialog/dialog-module.ts","../../../../../../src/material/dialog/public-api.ts","../../../../../../src/material/dialog/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 {ViewContainerRef, ComponentFactoryResolver} from '@angular/core';\nimport {Direction} from '@angular/cdk/bidi';\nimport {ScrollStrategy} from '@angular/cdk/overlay';\n\n/** Valid ARIA roles for a dialog element. */\nexport type DialogRole = 'dialog' | 'alertdialog';\n\n/** Possible overrides for a dialog's position. */\nexport interface DialogPosition {\n  /** Override for the dialog's top position. */\n  top?: string;\n\n  /** Override for the dialog's bottom position. */\n  bottom?: string;\n\n  /** Override for the dialog's left position. */\n  left?: string;\n\n  /** Override for the dialog's right position. */\n  right?: string;\n}\n\n/**\n * Configuration for opening a modal dialog with the MatDialog service.\n */\nexport class MatDialogConfig<D = any> {\n\n  /**\n   * Where the attached component should live in Angular's *logical* component tree.\n   * This affects what is available for injection and the change detection order for the\n   * component instantiated inside of the dialog. This does not affect where the dialog\n   * content will be rendered.\n   */\n  viewContainerRef?: ViewContainerRef;\n\n  /** ID for the dialog. If omitted, a unique one will be generated. */\n  id?: string;\n\n  /** The ARIA role of the dialog element. */\n  role?: DialogRole = 'dialog';\n\n  /** Custom class for the overlay pane. */\n  panelClass?: string | string[] = '';\n\n  /** Whether the dialog has a backdrop. */\n  hasBackdrop?: boolean = true;\n\n  /** Custom class for the backdrop. */\n  backdropClass?: string | string[] = '';\n\n  /** Whether the user can use escape or clicking on the backdrop to close the modal. */\n  disableClose?: boolean = false;\n\n  /** Width of the dialog. */\n  width?: string = '';\n\n  /** Height of the dialog. */\n  height?: string = '';\n\n  /** Min-width of the dialog. If a number is provided, assumes pixel units. */\n  minWidth?: number | string;\n\n  /** Min-height of the dialog. If a number is provided, assumes pixel units. */\n  minHeight?: number | string;\n\n  /** Max-width of the dialog. If a number is provided, assumes pixel units. Defaults to 80vw. */\n  maxWidth?: number | string = '80vw';\n\n  /** Max-height of the dialog. If a number is provided, assumes pixel units. */\n  maxHeight?: number | string;\n\n  /** Position overrides. */\n  position?: DialogPosition;\n\n  /** Data being injected into the child component. */\n  data?: D | null = null;\n\n  /** Layout direction for the dialog's content. */\n  direction?: Direction;\n\n  /** ID of the element that describes the dialog. */\n  ariaDescribedBy?: string | null = null;\n\n  /** ID of the element that labels the dialog. */\n  ariaLabelledBy?: string | null = null;\n\n  /** Aria label to assign to the dialog element. */\n  ariaLabel?: string | null = null;\n\n  /** Whether the dialog should focus the first focusable element on open. */\n  autoFocus?: boolean = true;\n\n  /**\n   * Whether the dialog should restore focus to the\n   * previously-focused element, after it's closed.\n   */\n  restoreFocus?: boolean = true;\n\n  /** Scroll strategy to be used for the dialog. */\n  scrollStrategy?: ScrollStrategy;\n\n  /**\n   * Whether the dialog should close when the user goes backwards/forwards in history.\n   * Note that this usually doesn't include clicking on links (unless the user is using\n   * the `HashLocationStrategy`).\n   */\n  closeOnNavigation?: boolean = true;\n\n  /** Alternate `ComponentFactoryResolver` to use when resolving the associated component. */\n  componentFactoryResolver?: ComponentFactoryResolver;\n\n  // TODO(jelbourn): add configuration for lifecycle hooks, ARIA labelling.\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 MatDialog.\n * @docs-private\n */\nexport const matDialogAnimations: {\n  readonly dialogContainer: AnimationTriggerMetadata;\n} = {\n  /** Animation that is applied on the dialog container by default. */\n  dialogContainer: trigger('dialogContainer', [\n    // Note: The `enter` animation transitions to `transform: none`, because for some reason\n    // specifying the transform explicitly, causes IE both to blur the dialog content and\n    // decimate the animation performance. Leaving it as `none` solves both issues.\n    state('void, exit', style({opacity: 0, transform: 'scale(0.7)'})),\n    state('enter', style({transform: 'none'})),\n    transition('* => enter', animate('150ms cubic-bezier(0, 0, 0.2, 1)',\n        style({transform: 'none', opacity: 1}))),\n    transition('* => void, * => exit',\n        animate('75ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({opacity: 0}))),\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 {AnimationEvent} from '@angular/animations';\nimport {FocusMonitor, FocusOrigin, FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {_getFocusedElementPierceShadowDom} from '@angular/cdk/platform';\nimport {\n  BasePortalOutlet,\n  CdkPortalOutlet,\n  ComponentPortal,\n  DomPortal,\n  TemplatePortal\n} from '@angular/cdk/portal';\nimport {DOCUMENT} from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentRef,\n  Directive,\n  ElementRef,\n  EmbeddedViewRef,\n  EventEmitter,\n  Inject,\n  Optional,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {matDialogAnimations} from './dialog-animations';\nimport {MatDialogConfig} from './dialog-config';\n\n/** Event that captures the state of dialog container animations. */\ninterface DialogAnimationEvent {\n  state: 'opened' | 'opening' | 'closing' | 'closed';\n  totalTime: number;\n}\n\n/**\n * Throws an exception for the case when a ComponentPortal is\n * attached to a DomPortalOutlet without an origin.\n * @docs-private\n */\nexport function throwMatDialogContentAlreadyAttachedError() {\n  throw Error('Attempting to attach dialog content after content is already attached');\n}\n\n/**\n * Base class for the `MatDialogContainer`. The base class does not implement\n * animations as these are left to implementers of the dialog container.\n */\n@Directive()\nexport abstract class _MatDialogContainerBase extends BasePortalOutlet {\n  protected _document: Document;\n\n  /** The portal outlet inside of this container into which the dialog content will be loaded. */\n  @ViewChild(CdkPortalOutlet, {static: true}) _portalOutlet: CdkPortalOutlet;\n\n  /** The class that traps and manages focus within the dialog. */\n  private _focusTrap: FocusTrap;\n\n  /** Emits when an animation state changes. */\n  _animationStateChanged = new EventEmitter<DialogAnimationEvent>();\n\n  /** Element that was focused before the dialog was opened. Save this to restore upon close. */\n  private _elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n  /**\n   * Type of interaction that led to the dialog being closed. This is used to determine\n   * whether the focus style will be applied when returning focus to its original location\n   * after the dialog is closed.\n   */\n  _closeInteractionType: FocusOrigin|null = null;\n\n  /** ID of the element that should be considered as the dialog's label. */\n  _ariaLabelledBy: string | null;\n\n  /** ID for the container DOM element. */\n  _id: string;\n\n  constructor(\n    protected _elementRef: ElementRef,\n    protected _focusTrapFactory: FocusTrapFactory,\n    protected _changeDetectorRef: ChangeDetectorRef,\n    @Optional() @Inject(DOCUMENT) _document: any,\n    /** The dialog configuration. */\n    public _config: MatDialogConfig,\n    private _focusMonitor?: FocusMonitor) {\n\n    super();\n    this._ariaLabelledBy = _config.ariaLabelledBy || null;\n    this._document = _document;\n  }\n\n  /** Starts the dialog exit animation. */\n  abstract _startExitAnimation(): void;\n\n  /** Initializes the dialog container with the attached content. */\n  _initializeWithAttachedContent() {\n    this._setupFocusTrap();\n    // Save the previously focused element. This element will be re-focused\n    // when the dialog closes.\n    this._capturePreviouslyFocusedElement();\n    // Move focus onto the dialog immediately in order to prevent the user\n    // from accidentally opening multiple dialogs at the same time.\n    this._focusDialogContainer();\n  }\n\n  /**\n   * Attach a ComponentPortal as content to this dialog container.\n   * @param portal Portal to be attached as the dialog content.\n   */\n  attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n    if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throwMatDialogContentAlreadyAttachedError();\n    }\n\n    return this._portalOutlet.attachComponentPortal(portal);\n  }\n\n  /**\n   * Attach a TemplatePortal as content to this dialog container.\n   * @param portal Portal to be attached as the dialog content.\n   */\n  attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n    if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throwMatDialogContentAlreadyAttachedError();\n    }\n\n    return this._portalOutlet.attachTemplatePortal(portal);\n  }\n\n  /**\n   * Attaches a DOM portal to the dialog container.\n   * @param portal Portal to be attached.\n   * @deprecated To be turned into a method.\n   * @breaking-change 10.0.0\n   */\n  override attachDomPortal = (portal: DomPortal) => {\n    if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throwMatDialogContentAlreadyAttachedError();\n    }\n\n    return this._portalOutlet.attachDomPortal(portal);\n  }\n\n  /** Moves focus back into the dialog if it was moved out. */\n  _recaptureFocus() {\n    if (!this._containsFocus()) {\n      const focusContainer = !this._config.autoFocus || !this._focusTrap.focusInitialElement();\n\n      if (focusContainer) {\n        this._elementRef.nativeElement.focus();\n      }\n    }\n  }\n\n  /** Moves the focus inside the focus trap. */\n  protected _trapFocus() {\n    // If we were to attempt to focus immediately, then the content of the dialog would not yet be\n    // ready in instances where change detection has to run first. To deal with this, we simply\n    // wait for the microtask queue to be empty.\n    if (this._config.autoFocus) {\n      this._focusTrap.focusInitialElementWhenReady();\n    } else if (!this._containsFocus()) {\n      // Otherwise ensure that focus is on the dialog container. It's possible that a different\n      // component tried to move focus while the open animation was running. See:\n      // https://github.com/angular/components/issues/16215. Note that we only want to do this\n      // if the focus isn't inside the dialog already, because it's possible that the consumer\n      // turned off `autoFocus` in order to move focus themselves.\n      this._elementRef.nativeElement.focus();\n    }\n  }\n\n  /** Restores focus to the element that was focused before the dialog opened. */\n  protected _restoreFocus() {\n    const previousElement = this._elementFocusedBeforeDialogWasOpened;\n\n    // We need the extra check, because IE can set the `activeElement` to null in some cases.\n    if (this._config.restoreFocus && previousElement &&\n        typeof previousElement.focus === 'function') {\n      const activeElement = _getFocusedElementPierceShadowDom();\n      const element = this._elementRef.nativeElement;\n\n      // Make sure that focus is still inside the dialog or is on the body (usually because a\n      // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n      // the consumer moved it themselves before the animation was done, in which case we shouldn't\n      // do anything.\n      if (!activeElement || activeElement === this._document.body || activeElement === element ||\n          element.contains(activeElement)) {\n        if (this._focusMonitor) {\n          this._focusMonitor.focusVia(previousElement, this._closeInteractionType);\n          this._closeInteractionType = null;\n        } else {\n          previousElement.focus();\n        }\n      }\n    }\n\n    if (this._focusTrap) {\n      this._focusTrap.destroy();\n    }\n  }\n\n  /** Sets up the focus trap. */\n  private _setupFocusTrap() {\n    this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n  }\n\n  /** Captures the element that was focused before the dialog was opened. */\n  private _capturePreviouslyFocusedElement() {\n    if (this._document) {\n      this._elementFocusedBeforeDialogWasOpened = _getFocusedElementPierceShadowDom();\n    }\n  }\n\n  /** Focuses the dialog container. */\n  private _focusDialogContainer() {\n    // Note that there is no focus method when rendering on the server.\n    if (this._elementRef.nativeElement.focus) {\n      this._elementRef.nativeElement.focus();\n    }\n  }\n\n  /** Returns whether focus is inside the dialog. */\n  private _containsFocus() {\n    const element = this._elementRef.nativeElement;\n    const activeElement = _getFocusedElementPierceShadowDom();\n    return element === activeElement || element.contains(activeElement);\n  }\n}\n\n/**\n * Internal component that wraps user-provided dialog content.\n * Animation is based on https://material.io/guidelines/motion/choreography.html.\n * @docs-private\n */\n@Component({\n  selector: 'mat-dialog-container',\n  templateUrl: 'dialog-container.html',\n  styleUrls: ['dialog.css'],\n  encapsulation: ViewEncapsulation.None,\n  // Using OnPush for dialogs caused some G3 sync issues. Disabled until we can track them down.\n  // tslint:disable-next-line:validate-decorators\n  changeDetection: ChangeDetectionStrategy.Default,\n  animations: [matDialogAnimations.dialogContainer],\n  host: {\n    'class': 'mat-dialog-container',\n    'tabindex': '-1',\n    'aria-modal': 'true',\n    '[id]': '_id',\n    '[attr.role]': '_config.role',\n    '[attr.aria-labelledby]': '_config.ariaLabel ? null : _ariaLabelledBy',\n    '[attr.aria-label]': '_config.ariaLabel',\n    '[attr.aria-describedby]': '_config.ariaDescribedBy || null',\n    '[@dialogContainer]': '_state',\n    '(@dialogContainer.start)': '_onAnimationStart($event)',\n    '(@dialogContainer.done)': '_onAnimationDone($event)',\n  },\n})\nexport class MatDialogContainer extends _MatDialogContainerBase {\n  /** State of the dialog animation. */\n  _state: 'void' | 'enter' | 'exit' = 'enter';\n\n  /** Callback, invoked whenever an animation on the host completes. */\n  _onAnimationDone({toState, totalTime}: AnimationEvent) {\n    if (toState === 'enter') {\n      this._trapFocus();\n      this._animationStateChanged.next({state: 'opened', totalTime});\n    } else if (toState === 'exit') {\n      this._restoreFocus();\n      this._animationStateChanged.next({state: 'closed', totalTime});\n    }\n  }\n\n  /** Callback, invoked when an animation on the host starts. */\n  _onAnimationStart({toState, totalTime}: AnimationEvent) {\n    if (toState === 'enter') {\n      this._animationStateChanged.next({state: 'opening', totalTime});\n    } else if (toState === 'exit' || toState === 'void') {\n      this._animationStateChanged.next({state: 'closing', totalTime});\n    }\n  }\n\n  /** Starts the dialog exit animation. */\n  _startExitAnimation(): void {\n    this._state = 'exit';\n\n    // Mark the container for check so it can react if the\n    // view container is using OnPush change detection.\n    this._changeDetectorRef.markForCheck();\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 {FocusOrigin} from '@angular/cdk/a11y';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {GlobalPositionStrategy, OverlayRef} from '@angular/cdk/overlay';\nimport {Observable, Subject} from 'rxjs';\nimport {filter, take} from 'rxjs/operators';\nimport {DialogPosition} from './dialog-config';\nimport {_MatDialogContainerBase} from './dialog-container';\n\n\n// TODO(jelbourn): resizing\n\n// Counter for unique dialog ids.\nlet uniqueId = 0;\n\n/** Possible states of the lifecycle of a dialog. */\nexport const enum MatDialogState {OPEN, CLOSING, CLOSED}\n\n/**\n * Reference to a dialog opened via the MatDialog service.\n */\nexport class MatDialogRef<T, R = any> {\n  /** The instance of component opened into the dialog. */\n  componentInstance: T;\n\n  /** Whether the user is allowed to close the dialog. */\n  disableClose: boolean | undefined = this._containerInstance._config.disableClose;\n\n  /** Subject for notifying the user that the dialog has finished opening. */\n  private readonly _afterOpened = new Subject<void>();\n\n  /** Subject for notifying the user that the dialog has finished closing. */\n  private readonly _afterClosed = new Subject<R | undefined>();\n\n  /** Subject for notifying the user that the dialog has started closing. */\n  private readonly _beforeClosed = new Subject<R | undefined>();\n\n  /** Result to be passed to afterClosed. */\n  private _result: R | undefined;\n\n  /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n  private _closeFallbackTimeout: number;\n\n  /** Current state of the dialog. */\n  private _state = MatDialogState.OPEN;\n\n  constructor(\n    private _overlayRef: OverlayRef,\n    public _containerInstance: _MatDialogContainerBase,\n    /** Id of the dialog. */\n    readonly id: string = `mat-dialog-${uniqueId++}`) {\n\n    // Pass the id along to the container.\n    _containerInstance._id = id;\n\n    // Emit when opening animation completes\n    _containerInstance._animationStateChanged.pipe(\n      filter(event => event.state === 'opened'),\n      take(1)\n    )\n    .subscribe(() => {\n      this._afterOpened.next();\n      this._afterOpened.complete();\n    });\n\n    // Dispose overlay when closing animation is complete\n    _containerInstance._animationStateChanged.pipe(\n      filter(event => event.state === 'closed'),\n      take(1)\n    ).subscribe(() => {\n      clearTimeout(this._closeFallbackTimeout);\n      this._finishDialogClose();\n    });\n\n    _overlayRef.detachments().subscribe(() => {\n      this._beforeClosed.next(this._result);\n      this._beforeClosed.complete();\n      this._afterClosed.next(this._result);\n      this._afterClosed.complete();\n      this.componentInstance = null!;\n      this._overlayRef.dispose();\n    });\n\n    _overlayRef.keydownEvents()\n      .pipe(filter(event => {\n        return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n      }))\n      .subscribe(event => {\n        event.preventDefault();\n        _closeDialogVia(this, 'keyboard');\n      });\n\n    _overlayRef.backdropClick().subscribe(() => {\n      if (this.disableClose) {\n        this._containerInstance._recaptureFocus();\n      } else {\n        _closeDialogVia(this, 'mouse');\n      }\n    });\n  }\n\n  /**\n   * Close the dialog.\n   * @param dialogResult Optional result to return to the dialog opener.\n   */\n  close(dialogResult?: R): void {\n    this._result = dialogResult;\n\n    // Transition the backdrop in parallel to the dialog.\n    this._containerInstance._animationStateChanged.pipe(\n      filter(event => event.state === 'closing'),\n      take(1)\n    )\n    .subscribe(event => {\n      this._beforeClosed.next(dialogResult);\n      this._beforeClosed.complete();\n      this._overlayRef.detachBackdrop();\n\n      // The logic that disposes of the overlay depends on the exit animation completing, however\n      // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n      // timeout which will clean everything up if the animation hasn't fired within the specified\n      // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n      // vast majority of cases the timeout will have been cleared before it has the chance to fire.\n      this._closeFallbackTimeout = setTimeout(() => this._finishDialogClose(),\n          event.totalTime + 100);\n    });\n\n    this._state = MatDialogState.CLOSING;\n    this._containerInstance._startExitAnimation();\n  }\n\n  /**\n   * Gets an observable that is notified when the dialog is finished opening.\n   */\n  afterOpened(): Observable<void> {\n    return this._afterOpened;\n  }\n\n  /**\n   * Gets an observable that is notified when the dialog is finished closing.\n   */\n  afterClosed(): Observable<R | undefined> {\n    return this._afterClosed;\n  }\n\n  /**\n   * Gets an observable that is notified when the dialog has started closing.\n   */\n  beforeClosed(): Observable<R | undefined> {\n    return this._beforeClosed;\n  }\n\n  /**\n   * Gets an observable that emits when the overlay's backdrop has been clicked.\n   */\n  backdropClick(): Observable<MouseEvent> {\n    return this._overlayRef.backdropClick();\n  }\n\n  /**\n   * Gets an observable that emits when keydown events are targeted on the overlay.\n   */\n  keydownEvents(): Observable<KeyboardEvent> {\n    return this._overlayRef.keydownEvents();\n  }\n\n  /**\n   * Updates the dialog's position.\n   * @param position New dialog position.\n   */\n  updatePosition(position?: DialogPosition): this {\n    let strategy = this._getPositionStrategy();\n\n    if (position && (position.left || position.right)) {\n      position.left ? strategy.left(position.left) : strategy.right(position.right);\n    } else {\n      strategy.centerHorizontally();\n    }\n\n    if (position && (position.top || position.bottom)) {\n      position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\n    } else {\n      strategy.centerVertically();\n    }\n\n    this._overlayRef.updatePosition();\n\n    return this;\n  }\n\n  /**\n   * Updates the dialog's width and height.\n   * @param width New width of the dialog.\n   * @param height New height of the dialog.\n   */\n  updateSize(width: string = '', height: string = ''): this {\n    this._overlayRef.updateSize({width, height});\n    this._overlayRef.updatePosition();\n    return this;\n  }\n\n  /** Add a CSS class or an array of classes to the overlay pane. */\n  addPanelClass(classes: string | string[]): this {\n    this._overlayRef.addPanelClass(classes);\n    return this;\n  }\n\n  /** Remove a CSS class or an array of classes from the overlay pane. */\n  removePanelClass(classes: string | string[]): this {\n    this._overlayRef.removePanelClass(classes);\n    return this;\n  }\n\n  /** Gets the current state of the dialog's lifecycle. */\n  getState(): MatDialogState {\n    return this._state;\n  }\n\n  /**\n   * Finishes the dialog close by updating the state of the dialog\n   * and disposing the overlay.\n   */\n  private _finishDialogClose() {\n    this._state = MatDialogState.CLOSED;\n    this._overlayRef.dispose();\n  }\n\n  /** Fetches the position strategy object from the overlay ref. */\n  private _getPositionStrategy(): GlobalPositionStrategy {\n    return this._overlayRef.getConfig().positionStrategy as GlobalPositionStrategy;\n  }\n}\n\n/**\n * Closes the dialog with the specified interaction type. This is currently not part of\n * `MatDialogRef` as that would conflict with custom dialog ref mocks provided in tests.\n * More details. See: https://github.com/angular/components/pull/9257#issuecomment-651342226.\n */\n// TODO: TODO: Move this back into `MatDialogRef` when we provide an official mock dialog ref.\nexport function _closeDialogVia<R>(ref: MatDialogRef<R>, interactionType: FocusOrigin, result?: R) {\n  // Some mock dialog ref instances in tests do not have the `_containerInstance` property.\n  // For those, we keep the behavior as is and do not deal with the interaction type.\n  if (ref._containerInstance !== undefined) {\n    ref._containerInstance._closeInteractionType = interactionType;\n  }\n  return ref.close(result);\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 {Directionality} from '@angular/cdk/bidi';\nimport {\n  Overlay,\n  OverlayConfig,\n  OverlayContainer,\n  OverlayRef,\n  ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, TemplatePortal} from '@angular/cdk/portal';\nimport {Location} from '@angular/common';\nimport {\n  Directive,\n  Inject,\n  Injectable,\n  InjectFlags,\n  InjectionToken,\n  Injector,\n  OnDestroy,\n  Optional,\n  SkipSelf,\n  StaticProvider,\n  TemplateRef,\n  Type,\n} from '@angular/core';\nimport {defer, Observable, of as observableOf, Subject} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {MatDialogConfig} from './dialog-config';\nimport {MatDialogContainer, _MatDialogContainerBase} from './dialog-container';\nimport {MatDialogRef} from './dialog-ref';\n\n\n/** Injection token that can be used to access the data that was passed in to a dialog. */\nexport const MAT_DIALOG_DATA = new InjectionToken<any>('MatDialogData');\n\n/** Injection token that can be used to specify default dialog options. */\nexport const MAT_DIALOG_DEFAULT_OPTIONS =\n    new InjectionToken<MatDialogConfig>('mat-dialog-default-options');\n\n/** Injection token that determines the scroll handling while the dialog is open. */\nexport const MAT_DIALOG_SCROLL_STRATEGY =\n    new InjectionToken<() => ScrollStrategy>('mat-dialog-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_DIALOG_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n  return () => overlay.scrollStrategies.block();\n}\n\n/** @docs-private */\nexport function MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n  () => ScrollStrategy {\n  return () => overlay.scrollStrategies.block();\n}\n\n/** @docs-private */\nexport const MAT_DIALOG_SCROLL_STRATEGY_PROVIDER = {\n  provide: MAT_DIALOG_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n\n/**\n * Base class for dialog services. The base dialog service allows\n * for arbitrary dialog refs and dialog container components.\n */\n@Directive()\nexport abstract class _MatDialogBase<C extends _MatDialogContainerBase> implements OnDestroy {\n  private _openDialogsAtThisLevel: MatDialogRef<any>[] = [];\n  private readonly _afterAllClosedAtThisLevel = new Subject<void>();\n  private readonly _afterOpenedAtThisLevel = new Subject<MatDialogRef<any>>();\n  private _ariaHiddenElements = new Map<Element, string|null>();\n  private _scrollStrategy: () => ScrollStrategy;\n\n  /** Keeps track of the currently-open dialogs. */\n  get openDialogs(): MatDialogRef<any>[] {\n    return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n  }\n\n  /** Stream that emits when a dialog has been opened. */\n  get afterOpened(): Subject<MatDialogRef<any>> {\n    return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n  }\n\n  _getAfterAllClosed(): Subject<void> {\n    const parent = this._parentDialog;\n    return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n  }\n\n  // TODO (jelbourn): tighten the typing right-hand side of this expression.\n  /**\n   * Stream that emits when all open dialog have finished closing.\n   * Will emit on subscribe if there are no open dialogs to begin with.\n   */\n  readonly afterAllClosed: Observable<void> = defer(() => this.openDialogs.length ?\n      this._getAfterAllClosed() :\n      this._getAfterAllClosed().pipe(startWith(undefined))) as Observable<any>;\n\n  constructor(\n      private _overlay: Overlay,\n      private _injector: Injector,\n      private _defaultOptions: MatDialogConfig|undefined,\n      private _parentDialog: _MatDialogBase<C>|undefined,\n      private _overlayContainer: OverlayContainer,\n      scrollStrategy: any,\n      private _dialogRefConstructor: Type<MatDialogRef<any>>,\n      private _dialogContainerType: Type<C>,\n      private _dialogDataToken: InjectionToken<any>) {\n    this._scrollStrategy = scrollStrategy;\n  }\n\n  /**\n   * Opens a modal dialog containing the given component.\n   * @param component Type of the component to load into the dialog.\n   * @param config Extra configuration options.\n   * @returns Reference to the newly-opened dialog.\n   */\n  open<T, D = any, R = any>(component: ComponentType<T>,\n                            config?: MatDialogConfig<D>): MatDialogRef<T, R>;\n\n  /**\n   * Opens a modal dialog containing the given template.\n   * @param template TemplateRef to instantiate as the dialog content.\n   * @param config Extra configuration options.\n   * @returns Reference to the newly-opened dialog.\n   */\n  open<T, D = any, R = any>(template: TemplateRef<T>,\n                            config?: MatDialogConfig<D>): MatDialogRef<T, R>;\n\n  open<T, D = any, R = any>(template: ComponentType<T> | TemplateRef<T>,\n                            config?: MatDialogConfig<D>): MatDialogRef<T, R>;\n\n  open<T, D = any, R = any>(componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n                            config?: MatDialogConfig<D>): MatDialogRef<T, R> {\n    config = _applyConfigDefaults(config, this._defaultOptions || new MatDialogConfig());\n\n    if (config.id && this.getDialogById(config.id) &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n    }\n\n    const overlayRef = this._createOverlay(config);\n    const dialogContainer = this._attachDialogContainer(overlayRef, config);\n    const dialogRef = this._attachDialogContent<T, R>(componentOrTemplateRef,\n                                                      dialogContainer,\n                                                      overlayRef,\n                                                      config);\n\n    // If this is the first dialog that we're opening, hide all the non-overlay content.\n    if (!this.openDialogs.length) {\n      this._hideNonDialogContentFromAssistiveTechnology();\n    }\n\n    this.openDialogs.push(dialogRef);\n    dialogRef.afterClosed().subscribe(() => this._removeOpenDialog(dialogRef));\n    this.afterOpened.next(dialogRef);\n\n    // Notify the dialog container that the content has been attached.\n    dialogContainer._initializeWithAttachedContent();\n\n    return dialogRef;\n  }\n\n  /**\n   * Closes all of the currently-open dialogs.\n   */\n  closeAll(): void {\n    this._closeDialogs(this.openDialogs);\n  }\n\n  /**\n   * Finds an open dialog by its id.\n   * @param id ID to use when looking up the dialog.\n   */\n  getDialogById(id: string): MatDialogRef<any> | undefined {\n    return this.openDialogs.find(dialog => dialog.id === id);\n  }\n\n  ngOnDestroy() {\n    // Only close the dialogs at this level on destroy\n    // since the parent service may still be active.\n    this._closeDialogs(this._openDialogsAtThisLevel);\n    this._afterAllClosedAtThisLevel.complete();\n    this._afterOpenedAtThisLevel.complete();\n  }\n\n  /**\n   * Creates the overlay into which the dialog will be loaded.\n   * @param config The dialog configuration.\n   * @returns A promise resolving to the OverlayRef for the created overlay.\n   */\n  private _createOverlay(config: MatDialogConfig): OverlayRef {\n    const overlayConfig = this._getOverlayConfig(config);\n    return this._overlay.create(overlayConfig);\n  }\n\n  /**\n   * Creates an overlay config from a dialog config.\n   * @param dialogConfig The dialog configuration.\n   * @returns The overlay configuration.\n   */\n  private _getOverlayConfig(dialogConfig: MatDialogConfig): OverlayConfig {\n    const state = new OverlayConfig({\n      positionStrategy: this._overlay.position().global(),\n      scrollStrategy: dialogConfig.scrollStrategy || this._scrollStrategy(),\n      panelClass: dialogConfig.panelClass,\n      hasBackdrop: dialogConfig.hasBackdrop,\n      direction: dialogConfig.direction,\n      minWidth: dialogConfig.minWidth,\n      minHeight: dialogConfig.minHeight,\n      maxWidth: dialogConfig.maxWidth,\n      maxHeight: dialogConfig.maxHeight,\n      disposeOnNavigation: dialogConfig.closeOnNavigation\n    });\n\n    if (dialogConfig.backdropClass) {\n      state.backdropClass = dialogConfig.backdropClass;\n    }\n\n    return state;\n  }\n\n  /**\n   * Attaches a dialog container to a dialog's already-created overlay.\n   * @param overlay Reference to the dialog's underlying overlay.\n   * @param config The dialog configuration.\n   * @returns A promise resolving to a ComponentRef for the attached container.\n   */\n  private _attachDialogContainer(overlay: OverlayRef, config: MatDialogConfig): C {\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n    const injector = Injector.create({\n      parent: userInjector || this._injector,\n      providers: [{provide: MatDialogConfig, useValue: config}]\n    });\n\n    const containerPortal = new ComponentPortal(this._dialogContainerType,\n        config.viewContainerRef, injector, config.componentFactoryResolver);\n    const containerRef = overlay.attach<C>(containerPortal);\n\n    return containerRef.instance;\n  }\n\n  /**\n   * Attaches the user-provided component to the already-created dialog container.\n   * @param componentOrTemplateRef The type of component being loaded into the dialog,\n   *     or a TemplateRef to instantiate as the content.\n   * @param dialogContainer Reference to the wrapping dialog container.\n   * @param overlayRef Reference to the overlay in which the dialog resides.\n   * @param config The dialog configuration.\n   * @returns A promise resolving to the MatDialogRef that should be returned to the user.\n   */\n  private _attachDialogContent<T, R>(\n      componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n      dialogContainer: C,\n      overlayRef: OverlayRef,\n      config: MatDialogConfig): MatDialogRef<T, R> {\n\n    // Create a reference to the dialog we're creating in order to give the user a handle\n    // to modify and close it.\n    const dialogRef = new this._dialogRefConstructor(overlayRef, dialogContainer, config.id);\n\n    if (componentOrTemplateRef instanceof TemplateRef) {\n      dialogContainer.attachTemplatePortal(\n        new TemplatePortal<T>(componentOrTemplateRef, null!,\n          <any>{$implicit: config.data, dialogRef}));\n    } else {\n      const injector = this._createInjector<T>(config, dialogRef, dialogContainer);\n      const contentRef = dialogContainer.attachComponentPortal<T>(\n          new ComponentPortal(componentOrTemplateRef, config.viewContainerRef, injector));\n      dialogRef.componentInstance = contentRef.instance;\n    }\n\n    dialogRef\n      .updateSize(config.width, config.height)\n      .updatePosition(config.position);\n\n    return dialogRef;\n  }\n\n  /**\n   * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n   * of a dialog to close itself and, optionally, to return a value.\n   * @param config Config object that is used to construct the dialog.\n   * @param dialogRef Reference to the dialog.\n   * @param dialogContainer Dialog container element that wraps all of the contents.\n   * @returns The custom injector that can be used inside the dialog.\n   */\n  private _createInjector<T>(\n      config: MatDialogConfig,\n      dialogRef: MatDialogRef<T>,\n      dialogContainer: C): Injector {\n\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n\n    // The dialog container should be provided as the dialog container and the dialog's\n    // content are created out of the same `ViewContainerRef` and as such, are siblings\n    // for injector purposes. To allow the hierarchy that is expected, the dialog\n    // container is explicitly provided in the injector.\n    const providers: StaticProvider[] = [\n      {provide: this._dialogContainerType, useValue: dialogContainer},\n      {provide: this._dialogDataToken, useValue: config.data},\n      {provide: this._dialogRefConstructor, useValue: dialogRef}\n    ];\n\n    if (config.direction && (!userInjector ||\n        !userInjector.get<Directionality | null>(Directionality, null, InjectFlags.Optional))) {\n      providers.push({\n        provide: Directionality,\n        useValue: {value: config.direction, change: observableOf()}\n      });\n    }\n\n    return Injector.create({parent: userInjector || this._injector, providers});\n  }\n\n  /**\n   * Removes a dialog from the array of open dialogs.\n   * @param dialogRef Dialog to be removed.\n   */\n  private _removeOpenDialog(dialogRef: MatDialogRef<any>) {\n    const index = this.openDialogs.indexOf(dialogRef);\n\n    if (index > -1) {\n      this.openDialogs.splice(index, 1);\n\n      // If all the dialogs were closed, remove/restore the `aria-hidden`\n      // to a the siblings and emit to the `afterAllClosed` stream.\n      if (!this.openDialogs.length) {\n        this._ariaHiddenElements.forEach((previousValue, element) => {\n          if (previousValue) {\n            element.setAttribute('aria-hidden', previousValue);\n          } else {\n            element.removeAttribute('aria-hidden');\n          }\n        });\n\n        this._ariaHiddenElements.clear();\n        this._getAfterAllClosed().next();\n      }\n    }\n  }\n\n  /**\n   * Hides all of the content that isn't an overlay from assistive technology.\n   */\n  private _hideNonDialogContentFromAssistiveTechnology() {\n    const overlayContainer = this._overlayContainer.getContainerElement();\n\n    // Ensure that the overlay container is attached to the DOM.\n    if (overlayContainer.parentElement) {\n      const siblings = overlayContainer.parentElement.children;\n\n      for (let i = siblings.length - 1; i > -1; i--) {\n        let sibling = siblings[i];\n\n        if (sibling !== overlayContainer &&\n          sibling.nodeName !== 'SCRIPT' &&\n          sibling.nodeName !== 'STYLE' &&\n          !sibling.hasAttribute('aria-live')) {\n\n          this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n          sibling.setAttribute('aria-hidden', 'true');\n        }\n      }\n    }\n  }\n\n  /** Closes all of the dialogs in an array. */\n  private _closeDialogs(dialogs: MatDialogRef<any>[]) {\n    let i = dialogs.length;\n\n    while (i--) {\n      // The `_openDialogs` property isn't updated after close until the rxjs subscription\n      // runs on the next microtask, in addition to modifying the array as we're going\n      // through it. We loop through all of them and call close without assuming that\n      // they'll be removed from the list instantaneously.\n      dialogs[i].close();\n    }\n  }\n\n}\n\n/**\n * Service to open Material Design modal dialogs.\n */\n@Injectable()\nexport class MatDialog extends _MatDialogBase<MatDialogContainer> {\n  constructor(\n      overlay: Overlay,\n      injector: Injector,\n      /**\n       * @deprecated `_location` parameter to be removed.\n       * @breaking-change 10.0.0\n       */\n      @Optional() location: Location,\n      @Optional() @Inject(MAT_DIALOG_DEFAULT_OPTIONS) defaultOptions: MatDialogConfig,\n      @Inject(MAT_DIALOG_SCROLL_STRATEGY) scrollStrategy: any,\n      @Optional() @SkipSelf() parentDialog: MatDialog,\n      overlayContainer: OverlayContainer) {\n    super(overlay, injector, defaultOptions, parentDialog, overlayContainer, scrollStrategy,\n        MatDialogRef, MatDialogContainer, MAT_DIALOG_DATA);\n  }\n}\n\n/**\n * Applies default options to the dialog config.\n * @param config Config to be modified.\n * @param defaultOptions Default options provided.\n * @returns The new configuration object.\n */\nfunction _applyConfigDefaults(\n    config?: MatDialogConfig, defaultOptions?: MatDialogConfig): MatDialogConfig {\n  return {...defaultOptions, ...config};\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 {\n  Directive,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  SimpleChanges,\n  ElementRef,\n} from '@angular/core';\nimport {MatDialog} from './dialog';\nimport {_closeDialogVia, MatDialogRef} from './dialog-ref';\n\n/** Counter used to generate unique IDs for dialog elements. */\nlet dialogElementUid = 0;\n\n/**\n * Button that will close the current dialog.\n */\n@Directive({\n  selector: '[mat-dialog-close], [matDialogClose]',\n  exportAs: 'matDialogClose',\n  host: {\n    '(click)': '_onButtonClick($event)',\n    '[attr.aria-label]': 'ariaLabel || null',\n    '[attr.type]': 'type',\n  }\n})\nexport class MatDialogClose implements OnInit, OnChanges {\n  /** Screenreader label for the button. */\n  @Input('aria-label') ariaLabel: string;\n\n  /** Default to \"button\" to prevents accidental form submits. */\n  @Input() type: 'submit' | 'button' | 'reset' = 'button';\n\n  /** Dialog close input. */\n  @Input('mat-dialog-close') dialogResult: any;\n\n  @Input('matDialogClose') _matDialogClose: any;\n\n  constructor(\n\n    /**\n     * Reference to the containing dialog.\n     * @deprecated `dialogRef` property to become private.\n     * @breaking-change 13.0.0\n     */\n    // The dialog title directive is always used in combination with a `MatDialogRef`.\n    // tslint:disable-next-line: lightweight-tokens\n    @Optional() public dialogRef: MatDialogRef<any>,\n    private _elementRef: ElementRef<HTMLElement>,\n    private _dialog: MatDialog) {}\n\n  ngOnInit() {\n    if (!this.dialogRef) {\n      // When this directive is included in a dialog via TemplateRef (rather than being\n      // in a Component), the DialogRef isn't available via injection because embedded\n      // views cannot be given a custom injector. Instead, we look up the DialogRef by\n      // ID. This must occur in `onInit`, as the ID binding for the dialog container won't\n      // be resolved at constructor time.\n      this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs)!;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const proxiedChange = changes['_matDialogClose'] || changes['_matDialogCloseResult'];\n\n    if (proxiedChange) {\n      this.dialogResult = proxiedChange.currentValue;\n    }\n  }\n\n  _onButtonClick(event: MouseEvent) {\n    // Determinate the focus origin using the click event, because using the FocusMonitor will\n    // result in incorrect origins. Most of the time, close buttons will be auto focused in the\n    // dialog, and therefore clicking the button won't result in a focus change. This means that\n    // the FocusMonitor won't detect any origin change, and will always output `program`.\n    _closeDialogVia(this.dialogRef,\n        event.screenX === 0 && event.screenY === 0 ? 'keyboard' : 'mouse', this.dialogResult);\n  }\n}\n\n/**\n * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.\n */\n@Directive({\n  selector: '[mat-dialog-title], [matDialogTitle]',\n  exportAs: 'matDialogTitle',\n  host: {\n    'class': 'mat-dialog-title',\n    '[id]': 'id',\n  },\n})\nexport class MatDialogTitle implements OnInit {\n  /** Unique id for the dialog title. If none is supplied, it will be auto-generated. */\n  @Input() id: string = `mat-dialog-title-${dialogElementUid++}`;\n\n  constructor(\n      // The dialog title directive is always used in combination with a `MatDialogRef`.\n      // tslint:disable-next-line: lightweight-tokens\n      @Optional() private _dialogRef: MatDialogRef<any>,\n      private _elementRef: ElementRef<HTMLElement>,\n      private _dialog: MatDialog) {}\n\n  ngOnInit() {\n    if (!this._dialogRef) {\n      this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs)!;\n    }\n\n    if (this._dialogRef) {\n      Promise.resolve().then(() => {\n        const container = this._dialogRef._containerInstance;\n\n        if (container && !container._ariaLabelledBy) {\n          container._ariaLabelledBy = this.id;\n        }\n      });\n    }\n  }\n}\n\n\n/**\n * Scrollable content container of a dialog.\n */\n@Directive({\n  selector: `[mat-dialog-content], mat-dialog-content, [matDialogContent]`,\n  host: {'class': 'mat-dialog-content'}\n})\nexport class MatDialogContent {}\n\n\n/**\n * Container for the bottom action buttons in a dialog.\n * Stays fixed to the bottom when scrolling.\n */\n@Directive({\n  selector: `[mat-dialog-actions], mat-dialog-actions, [matDialogActions]`,\n  host: {'class': 'mat-dialog-actions'}\n})\nexport class MatDialogActions {}\n\n\n/**\n * Finds the closest MatDialogRef to an element by looking at the DOM.\n * @param element Element relative to which to look for a dialog.\n * @param openDialogs References to the currently-open dialogs.\n */\nfunction getClosestDialog(element: ElementRef<HTMLElement>, openDialogs: MatDialogRef<any>[]) {\n  let parent: HTMLElement | null = element.nativeElement.parentElement;\n\n  while (parent && !parent.classList.contains('mat-dialog-container')) {\n    parent = parent.parentElement;\n  }\n\n  return parent ? openDialogs.find(dialog => dialog.id === parent!.id) : 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\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MAT_DIALOG_SCROLL_STRATEGY_PROVIDER, MatDialog} from './dialog';\nimport {MatDialogContainer} from './dialog-container';\nimport {\n  MatDialogActions,\n  MatDialogClose,\n  MatDialogContent,\n  MatDialogTitle,\n} from './dialog-content-directives';\n\n\n@NgModule({\n  imports: [\n    OverlayModule,\n    PortalModule,\n    MatCommonModule,\n  ],\n  exports: [\n    MatDialogContainer,\n    MatDialogClose,\n    MatDialogTitle,\n    MatDialogContent,\n    MatDialogActions,\n    MatCommonModule,\n  ],\n  declarations: [\n    MatDialogContainer,\n    MatDialogClose,\n    MatDialogTitle,\n    MatDialogActions,\n    MatDialogContent,\n  ],\n  providers: [\n    MatDialog,\n    MAT_DIALOG_SCROLL_STRATEGY_PROVIDER,\n  ],\n  entryComponents: [MatDialogContainer],\n})\nexport class MatDialogModule {}\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 './dialog-module';\nexport * from './dialog';\nexport * from './dialog-container';\nexport * from './dialog-content-directives';\nexport * from './dialog-config';\nexport * from './dialog-ref';\nexport * from './dialog-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["observableOf"],"mappings":"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"}
Index: trip-planner-front/node_modules/@angular/material/fesm2015/icon.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/icon.js	(revision fa375fed9635035b3c62cf759f42938afa14271b)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/icon.js	(revision 8d391a12ef6baa3aefe9611a6f7c5b569977c946)
@@ -911,5 +911,5 @@
                 encapsulation: ViewEncapsulation.None,
                 changeDetection: ChangeDetectionStrategy.OnPush,
-                styles: [".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\n"]
+                styles: [".mat-icon{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\n"]
             },] }
 ];
Index: trip-planner-front/node_modules/@angular/material/fesm2015/input.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/input.js	(revision fa375fed9635035b3c62cf759f42938afa14271b)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/input.js	(revision 8d391a12ef6baa3aefe9611a6f7c5b569977c946)
@@ -406,4 +406,9 @@
         }
     }
+    /** Whether the form control is a native select that is displayed inline. */
+    _isInlineSelect() {
+        const element = this._elementRef.nativeElement;
+        return this._isNativeSelect && (element.multiple || element.size > 1);
+    }
 }
 MatInput.decorators = [
@@ -428,4 +433,5 @@
                     '[required]': 'required',
                     '[attr.readonly]': 'readonly && !_isNativeSelect || null',
+                    '[class.mat-native-select-inline]': '_isInlineSelect()',
                     // Only mark the input as invalid for assistive technology if it has a value since the
                     // state usually overlaps with `aria-required` when the input is empty and can be redundant.
Index: trip-planner-front/node_modules/@angular/material/fesm2015/input.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/input.js.map	(revision fa375fed9635035b3c62cf759f42938afa14271b)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/input.js.map	(revision 8d391a12ef6baa3aefe9611a6f7c5b569977c946)
@@ -1,1 +1,1 @@
-{"version":3,"file":"input.js","sources":["../../../../../../src/material/input/autosize.ts","../../../../../../src/material/input/input-errors.ts","../../../../../../src/material/input/input-value-accessor.ts","../../../../../../src/material/input/input.ts","../../../../../../src/material/input/input-module.ts","../../../../../../src/material/input/public-api.ts","../../../../../../src/material/input/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 {CdkTextareaAutosize} from '@angular/cdk/text-field';\nimport {Directive, Input} from '@angular/core';\n\n/**\n * Directive to automatically resize a textarea to fit its content.\n * @deprecated Use `cdkTextareaAutosize` from `@angular/cdk/text-field` instead.\n * @breaking-change 8.0.0\n */\n@Directive({\n  selector: 'textarea[mat-autosize], textarea[matTextareaAutosize]',\n  exportAs: 'matTextareaAutosize',\n  inputs: ['cdkAutosizeMinRows', 'cdkAutosizeMaxRows'],\n  host: {\n    'class': 'cdk-textarea-autosize mat-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  },\n})\nexport class MatTextareaAutosize extends CdkTextareaAutosize {\n  @Input()\n  get matAutosizeMinRows(): number { return this.minRows; }\n  set matAutosizeMinRows(value: number) { this.minRows = value; }\n\n  @Input()\n  get matAutosizeMaxRows(): number { return this.maxRows; }\n  set matAutosizeMaxRows(value: number) { this.maxRows = value; }\n\n  @Input('mat-autosize')\n  get matAutosize(): boolean { return this.enabled; }\n  set matAutosize(value: boolean) { this.enabled = value; }\n\n  @Input()\n  get matTextareaAutosize(): boolean { return this.enabled; }\n  set matTextareaAutosize(value: boolean) { this.enabled = value; }\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 getMatInputUnsupportedTypeError(type: string): Error {\n  return Error(`Input type \"${type}\" isn't supported by matInput.`);\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 {InjectionToken} from '@angular/core';\n\n\n/**\n * This token is used to inject the object whose value should be set into `MatInput`. If none is\n * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide\n * themselves for this token, in order to make `MatInput` delegate the getting and setting of the\n * value to them.\n */\nexport const MAT_INPUT_VALUE_ACCESSOR =\n    new InjectionToken<{value: any}>('MAT_INPUT_VALUE_ACCESSOR');\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 {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {getSupportedInputTypes, Platform} from '@angular/cdk/platform';\nimport {AutofillMonitor} from '@angular/cdk/text-field';\nimport {\n  AfterViewInit,\n  Directive,\n  DoCheck,\n  ElementRef,\n  HostListener,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Self,\n} from '@angular/core';\nimport {FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {\n  CanUpdateErrorState,\n  ErrorStateMatcher,\n  mixinErrorState,\n} from '@angular/material/core';\nimport {MatFormFieldControl, MatFormField, MAT_FORM_FIELD} from '@angular/material/form-field';\nimport {Subject} from 'rxjs';\nimport {getMatInputUnsupportedTypeError} from './input-errors';\nimport {MAT_INPUT_VALUE_ACCESSOR} from './input-value-accessor';\n\n\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = [\n  'button',\n  'checkbox',\n  'file',\n  'hidden',\n  'image',\n  'radio',\n  'range',\n  'reset',\n  'submit'\n];\n\nlet nextUniqueId = 0;\n\n// Boilerplate for applying mixins to MatInput.\n/** @docs-private */\nconst _MatInputBase = mixinErrorState(class {\n  constructor(public _defaultErrorStateMatcher: ErrorStateMatcher,\n              public _parentForm: NgForm,\n              public _parentFormGroup: FormGroupDirective,\n              /** @docs-private */\n              public ngControl: NgControl) {}\n});\n\n/** Directive that allows a native input to work inside a `MatFormField`. */\n@Directive({\n  selector: `input[matInput], textarea[matInput], select[matNativeControl],\n      input[matNativeControl], textarea[matNativeControl]`,\n  exportAs: 'matInput',\n  host: {\n    /**\n     * @breaking-change 8.0.0 remove .mat-form-field-autofill-control in favor of AutofillMonitor.\n     */\n    'class': 'mat-input-element mat-form-field-autofill-control',\n    '[class.mat-input-server]': '_isServer',\n    // Native input properties that are overwritten by Angular inputs need to be synced with\n    // the native input element. Otherwise property bindings for those don't work.\n    '[attr.id]': 'id',\n    // At the time of writing, we have a lot of customer tests that look up the input based on its\n    // placeholder. Since we sometimes omit the placeholder attribute from the DOM to prevent screen\n    // readers from reading it twice, we have to keep it somewhere in the DOM for the lookup.\n    '[attr.data-placeholder]': 'placeholder',\n    '[disabled]': 'disabled',\n    '[required]': 'required',\n    '[attr.readonly]': 'readonly && !_isNativeSelect || null',\n    // Only mark the input as invalid for assistive technology if it has a value since the\n    // state usually overlaps with `aria-required` when the input is empty and can be redundant.\n    '[attr.aria-invalid]': '(empty && required) ? null : errorState',\n    '[attr.aria-required]': 'required',\n  },\n  providers: [{provide: MatFormFieldControl, useExisting: MatInput}],\n})\nexport class MatInput extends _MatInputBase implements MatFormFieldControl<any>, OnChanges,\n    OnDestroy, AfterViewInit, DoCheck, CanUpdateErrorState {\n  protected _uid = `mat-input-${nextUniqueId++}`;\n  protected _previousNativeValue: any;\n  private _inputValueAccessor: {value: any};\n  private _previousPlaceholder: string | null;\n\n  /** Whether the component is being rendered on the server. */\n  readonly _isServer: boolean;\n\n  /** Whether the component is a native html select. */\n  readonly _isNativeSelect: boolean;\n\n  /** Whether the component is a textarea. */\n  readonly _isTextarea: boolean;\n\n  /** Whether the input is inside of a form field. */\n  readonly _isInFormField: boolean;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  focused: boolean = false;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  override readonly stateChanges: Subject<void> = new Subject<void>();\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  controlType: string = 'mat-input';\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  autofilled = false;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get disabled(): boolean {\n    if (this.ngControl && this.ngControl.disabled !== null) {\n      return this.ngControl.disabled;\n    }\n    return this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n\n    // Browsers may not fire the blur event if the input is disabled too quickly.\n    // Reset from here to ensure that the element doesn't become stuck.\n    if (this.focused) {\n      this.focused = false;\n      this.stateChanges.next();\n    }\n  }\n  protected _disabled = false;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get id(): string { return this._id; }\n  set id(value: string) { this._id = value || this._uid; }\n  protected _id: string;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input() placeholder: string;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get required(): boolean { return this._required; }\n  set required(value: boolean) { this._required = coerceBooleanProperty(value); }\n  protected _required = false;\n\n  /** Input type of the element. */\n  @Input()\n  get type(): string { return this._type; }\n  set type(value: string) {\n    this._type = value || 'text';\n    this._validateType();\n\n    // When using Angular inputs, developers are no longer able to set the properties on the native\n    // input element. To ensure that bindings for `type` work, we need to sync the setter\n    // with the native property. Textarea elements don't support the type property or attribute.\n    if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {\n      (this._elementRef.nativeElement as HTMLInputElement).type = this._type;\n    }\n  }\n  protected _type = 'text';\n\n  /** An object used to control when error messages are shown. */\n  @Input() override errorStateMatcher: ErrorStateMatcher;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input('aria-describedby') userAriaDescribedBy: string;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get value(): string { return this._inputValueAccessor.value; }\n  set value(value: string) {\n    if (value !== this.value) {\n      this._inputValueAccessor.value = value;\n      this.stateChanges.next();\n    }\n  }\n\n  /** Whether the element is readonly. */\n  @Input()\n  get readonly(): boolean { return this._readonly; }\n  set readonly(value: boolean) { this._readonly = coerceBooleanProperty(value); }\n  private _readonly = false;\n\n  protected _neverEmptyInputTypes = [\n    'date',\n    'datetime',\n    'datetime-local',\n    'month',\n    'time',\n    'week'\n  ].filter(t => getSupportedInputTypes().has(t));\n\n  constructor(\n      protected _elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>,\n      protected _platform: Platform,\n      @Optional() @Self() ngControl: NgControl,\n      @Optional() _parentForm: NgForm,\n      @Optional() _parentFormGroup: FormGroupDirective,\n      _defaultErrorStateMatcher: ErrorStateMatcher,\n      @Optional() @Self() @Inject(MAT_INPUT_VALUE_ACCESSOR) inputValueAccessor: any,\n      private _autofillMonitor: AutofillMonitor,\n      ngZone: NgZone,\n      // TODO: Remove this once the legacy appearance has been removed. We only need\n      // to inject the form-field for determining whether the placeholder has been promoted.\n      @Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField) {\n\n    super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n\n    const element = this._elementRef.nativeElement;\n    const nodeName = element.nodeName.toLowerCase();\n\n    // If no input value accessor was explicitly specified, use the element as the input value\n    // accessor.\n    this._inputValueAccessor = inputValueAccessor || element;\n\n    this._previousNativeValue = this.value;\n\n    // Force setter to be called in case id was not specified.\n    this.id = this.id;\n\n    // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n    // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n    // exists on iOS, we only bother to install the listener on iOS.\n    if (_platform.IOS) {\n      ngZone.runOutsideAngular(() => {\n        _elementRef.nativeElement.addEventListener('keyup', (event: Event) => {\n          const el = event.target as HTMLInputElement;\n\n          // Note: We specifically check for 0, rather than `!el.selectionStart`, because the two\n          // indicate different things. If the value is 0, it means that the caret is at the start\n          // of the input, whereas a value of `null` means that the input doesn't support\n          // manipulating the selection range. Inputs that don't support setting the selection range\n          // will throw an error so we want to avoid calling `setSelectionRange` on them. See:\n          // https://html.spec.whatwg.org/multipage/input.html#do-not-apply\n          if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {\n            // Note: Just setting `0, 0` doesn't fix the issue. Setting\n            // `1, 1` fixes it for the first time that you type text and\n            // then hold delete. Toggling to `1, 1` and then back to\n            // `0, 0` seems to completely fix it.\n            el.setSelectionRange(1, 1);\n            el.setSelectionRange(0, 0);\n          }\n        });\n      });\n    }\n\n    this._isServer = !this._platform.isBrowser;\n    this._isNativeSelect = nodeName === 'select';\n    this._isTextarea = nodeName === 'textarea';\n    this._isInFormField = !!_formField;\n\n    if (this._isNativeSelect) {\n      this.controlType = (element as HTMLSelectElement).multiple ? 'mat-native-select-multiple' :\n                                                                   'mat-native-select';\n    }\n  }\n\n  ngAfterViewInit() {\n    if (this._platform.isBrowser) {\n      this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n        this.autofilled = event.isAutofilled;\n        this.stateChanges.next();\n      });\n    }\n  }\n\n  ngOnChanges() {\n    this.stateChanges.next();\n  }\n\n  ngOnDestroy() {\n    this.stateChanges.complete();\n\n    if (this._platform.isBrowser) {\n      this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n    }\n  }\n\n  ngDoCheck() {\n    if (this.ngControl) {\n      // We need to re-evaluate this on every change detection cycle, because there are some\n      // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n      // that whatever logic is in here has to be super lean or we risk destroying the performance.\n      this.updateErrorState();\n    }\n\n    // We need to dirty-check the native element's value, because there are some cases where\n    // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n    // updating the value using `emitEvent: false`).\n    this._dirtyCheckNativeValue();\n\n    // We need to dirty-check and set the placeholder attribute ourselves, because whether it's\n    // present or not depends on a query which is prone to \"changed after checked\" errors.\n    this._dirtyCheckPlaceholder();\n  }\n\n  /** Focuses the input. */\n  focus(options?: FocusOptions): void {\n    this._elementRef.nativeElement.focus(options);\n  }\n\n  // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n  // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n  // ViewEngine they're overwritten.\n  // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n  /** Callback for the cases where the focused state of the input changes. */\n  // tslint:disable:no-host-decorator-in-concrete\n  @HostListener('focus', ['true'])\n  @HostListener('blur', ['false'])\n  // tslint:enable:no-host-decorator-in-concrete\n  _focusChanged(isFocused: boolean) {\n    if (isFocused !== this.focused) {\n      this.focused = isFocused;\n      this.stateChanges.next();\n    }\n  }\n\n  // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n  // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n  // ViewEngine they're overwritten.\n  // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n  // tslint:disable-next-line:no-host-decorator-in-concrete\n  @HostListener('input')\n  _onInput() {\n    // This is a noop function and is used to let Angular know whenever the value changes.\n    // Angular will run a new change detection each time the `input` event has been dispatched.\n    // It's necessary that Angular recognizes the value change, because when floatingLabel\n    // is set to false and Angular forms aren't used, the placeholder won't recognize the\n    // value changes and will not disappear.\n    // Listening to the input event wouldn't be necessary when the input is using the\n    // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n  }\n\n  /** Does some manual dirty checking on the native input `placeholder` attribute. */\n  private _dirtyCheckPlaceholder() {\n    // If we're hiding the native placeholder, it should also be cleared from the DOM, otherwise\n    // screen readers will read it out twice: once from the label and once from the attribute.\n    // TODO: can be removed once we get rid of the `legacy` style for the form field, because it's\n    // the only one that supports promoting the placeholder to a label.\n    const placeholder = this._formField?._hideControlPlaceholder?.() ? null : this.placeholder;\n    if (placeholder !== this._previousPlaceholder) {\n      const element = this._elementRef.nativeElement;\n      this._previousPlaceholder = placeholder;\n      placeholder ?\n          element.setAttribute('placeholder', placeholder) : element.removeAttribute('placeholder');\n    }\n  }\n\n  /** Does some manual dirty checking on the native input `value` property. */\n  protected _dirtyCheckNativeValue() {\n    const newValue = this._elementRef.nativeElement.value;\n\n    if (this._previousNativeValue !== newValue) {\n      this._previousNativeValue = newValue;\n      this.stateChanges.next();\n    }\n  }\n\n  /** Make sure the input is a supported type. */\n  protected _validateType() {\n    if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatInputUnsupportedTypeError(this._type);\n    }\n  }\n\n  /** Checks whether the input type is one of the types that are never empty. */\n  protected _isNeverEmpty() {\n    return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n  }\n\n  /** Checks whether the input is invalid based on the native validation. */\n  protected _isBadInput() {\n    // The `validity` property won't be present on platform-server.\n    let validity = (this._elementRef.nativeElement as HTMLInputElement).validity;\n    return validity && validity.badInput;\n  }\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  get empty(): boolean {\n    return !this._isNeverEmpty() && !this._elementRef.nativeElement.value && !this._isBadInput() &&\n        !this.autofilled;\n  }\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  get shouldLabelFloat(): boolean {\n    if (this._isNativeSelect) {\n      // For a single-selection `<select>`, the label should float when the selected option has\n      // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid\n      // overlapping the label with the options.\n      const selectElement = this._elementRef.nativeElement as HTMLSelectElement;\n      const firstOption: HTMLOptionElement | undefined = selectElement.options[0];\n\n      // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n      // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n      return this.focused || selectElement.multiple || !this.empty ||\n             !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label);\n    } else {\n      return this.focused || !this.empty;\n    }\n  }\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  setDescribedByIds(ids: string[]) {\n    if (ids.length) {\n      this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n    } else {\n      this._elementRef.nativeElement.removeAttribute('aria-describedby');\n    }\n  }\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  onContainerClick() {\n    // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n    // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n    // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n    if (!this.focused) {\n      this.focus();\n    }\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_readonly: BooleanInput;\n  static ngAcceptInputType_required: BooleanInput;\n\n  // Accept `any` to avoid conflicts with other directives on `<input>` that may\n  // accept different types.\n  static ngAcceptInputType_value: any;\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 {TextFieldModule} from '@angular/cdk/text-field';\nimport {NgModule} from '@angular/core';\nimport {ErrorStateMatcher, MatCommonModule} from '@angular/material/core';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatTextareaAutosize} from './autosize';\nimport {MatInput} from './input';\n\n@NgModule({\n  declarations: [MatInput, MatTextareaAutosize],\n  imports: [\n    TextFieldModule,\n    MatFormFieldModule,\n    MatCommonModule,\n  ],\n  exports: [\n    TextFieldModule,\n    // We re-export the `MatFormFieldModule` since `MatInput` will almost always\n    // be used together with `MatFormField`.\n    MatFormFieldModule,\n    MatInput,\n    MatTextareaAutosize,\n  ],\n  providers: [ErrorStateMatcher],\n})\nexport class MatInputModule {}\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 './autosize';\nexport * from './input';\nexport * from './input-errors';\nexport * from './input-module';\nexport * from './input-value-accessor';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
+{"version":3,"file":"input.js","sources":["../../../../../../src/material/input/autosize.ts","../../../../../../src/material/input/input-errors.ts","../../../../../../src/material/input/input-value-accessor.ts","../../../../../../src/material/input/input.ts","../../../../../../src/material/input/input-module.ts","../../../../../../src/material/input/public-api.ts","../../../../../../src/material/input/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 {CdkTextareaAutosize} from '@angular/cdk/text-field';\nimport {Directive, Input} from '@angular/core';\n\n/**\n * Directive to automatically resize a textarea to fit its content.\n * @deprecated Use `cdkTextareaAutosize` from `@angular/cdk/text-field` instead.\n * @breaking-change 8.0.0\n */\n@Directive({\n  selector: 'textarea[mat-autosize], textarea[matTextareaAutosize]',\n  exportAs: 'matTextareaAutosize',\n  inputs: ['cdkAutosizeMinRows', 'cdkAutosizeMaxRows'],\n  host: {\n    'class': 'cdk-textarea-autosize mat-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  },\n})\nexport class MatTextareaAutosize extends CdkTextareaAutosize {\n  @Input()\n  get matAutosizeMinRows(): number { return this.minRows; }\n  set matAutosizeMinRows(value: number) { this.minRows = value; }\n\n  @Input()\n  get matAutosizeMaxRows(): number { return this.maxRows; }\n  set matAutosizeMaxRows(value: number) { this.maxRows = value; }\n\n  @Input('mat-autosize')\n  get matAutosize(): boolean { return this.enabled; }\n  set matAutosize(value: boolean) { this.enabled = value; }\n\n  @Input()\n  get matTextareaAutosize(): boolean { return this.enabled; }\n  set matTextareaAutosize(value: boolean) { this.enabled = value; }\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 getMatInputUnsupportedTypeError(type: string): Error {\n  return Error(`Input type \"${type}\" isn't supported by matInput.`);\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 {InjectionToken} from '@angular/core';\n\n\n/**\n * This token is used to inject the object whose value should be set into `MatInput`. If none is\n * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide\n * themselves for this token, in order to make `MatInput` delegate the getting and setting of the\n * value to them.\n */\nexport const MAT_INPUT_VALUE_ACCESSOR =\n    new InjectionToken<{value: any}>('MAT_INPUT_VALUE_ACCESSOR');\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 {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {getSupportedInputTypes, Platform} from '@angular/cdk/platform';\nimport {AutofillMonitor} from '@angular/cdk/text-field';\nimport {\n  AfterViewInit,\n  Directive,\n  DoCheck,\n  ElementRef,\n  HostListener,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Self,\n} from '@angular/core';\nimport {FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {\n  CanUpdateErrorState,\n  ErrorStateMatcher,\n  mixinErrorState,\n} from '@angular/material/core';\nimport {MatFormFieldControl, MatFormField, MAT_FORM_FIELD} from '@angular/material/form-field';\nimport {Subject} from 'rxjs';\nimport {getMatInputUnsupportedTypeError} from './input-errors';\nimport {MAT_INPUT_VALUE_ACCESSOR} from './input-value-accessor';\n\n\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = [\n  'button',\n  'checkbox',\n  'file',\n  'hidden',\n  'image',\n  'radio',\n  'range',\n  'reset',\n  'submit'\n];\n\nlet nextUniqueId = 0;\n\n// Boilerplate for applying mixins to MatInput.\n/** @docs-private */\nconst _MatInputBase = mixinErrorState(class {\n  constructor(public _defaultErrorStateMatcher: ErrorStateMatcher,\n              public _parentForm: NgForm,\n              public _parentFormGroup: FormGroupDirective,\n              /** @docs-private */\n              public ngControl: NgControl) {}\n});\n\n/** Directive that allows a native input to work inside a `MatFormField`. */\n@Directive({\n  selector: `input[matInput], textarea[matInput], select[matNativeControl],\n      input[matNativeControl], textarea[matNativeControl]`,\n  exportAs: 'matInput',\n  host: {\n    /**\n     * @breaking-change 8.0.0 remove .mat-form-field-autofill-control in favor of AutofillMonitor.\n     */\n    'class': 'mat-input-element mat-form-field-autofill-control',\n    '[class.mat-input-server]': '_isServer',\n    // Native input properties that are overwritten by Angular inputs need to be synced with\n    // the native input element. Otherwise property bindings for those don't work.\n    '[attr.id]': 'id',\n    // At the time of writing, we have a lot of customer tests that look up the input based on its\n    // placeholder. Since we sometimes omit the placeholder attribute from the DOM to prevent screen\n    // readers from reading it twice, we have to keep it somewhere in the DOM for the lookup.\n    '[attr.data-placeholder]': 'placeholder',\n    '[disabled]': 'disabled',\n    '[required]': 'required',\n    '[attr.readonly]': 'readonly && !_isNativeSelect || null',\n    '[class.mat-native-select-inline]': '_isInlineSelect()',\n    // Only mark the input as invalid for assistive technology if it has a value since the\n    // state usually overlaps with `aria-required` when the input is empty and can be redundant.\n    '[attr.aria-invalid]': '(empty && required) ? null : errorState',\n    '[attr.aria-required]': 'required',\n  },\n  providers: [{provide: MatFormFieldControl, useExisting: MatInput}],\n})\nexport class MatInput extends _MatInputBase implements MatFormFieldControl<any>, OnChanges,\n    OnDestroy, AfterViewInit, DoCheck, CanUpdateErrorState {\n  protected _uid = `mat-input-${nextUniqueId++}`;\n  protected _previousNativeValue: any;\n  private _inputValueAccessor: {value: any};\n  private _previousPlaceholder: string | null;\n\n  /** Whether the component is being rendered on the server. */\n  readonly _isServer: boolean;\n\n  /** Whether the component is a native html select. */\n  readonly _isNativeSelect: boolean;\n\n  /** Whether the component is a textarea. */\n  readonly _isTextarea: boolean;\n\n  /** Whether the input is inside of a form field. */\n  readonly _isInFormField: boolean;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  focused: boolean = false;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  override readonly stateChanges: Subject<void> = new Subject<void>();\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  controlType: string = 'mat-input';\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  autofilled = false;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get disabled(): boolean {\n    if (this.ngControl && this.ngControl.disabled !== null) {\n      return this.ngControl.disabled;\n    }\n    return this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n\n    // Browsers may not fire the blur event if the input is disabled too quickly.\n    // Reset from here to ensure that the element doesn't become stuck.\n    if (this.focused) {\n      this.focused = false;\n      this.stateChanges.next();\n    }\n  }\n  protected _disabled = false;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get id(): string { return this._id; }\n  set id(value: string) { this._id = value || this._uid; }\n  protected _id: string;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input() placeholder: string;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get required(): boolean { return this._required; }\n  set required(value: boolean) { this._required = coerceBooleanProperty(value); }\n  protected _required = false;\n\n  /** Input type of the element. */\n  @Input()\n  get type(): string { return this._type; }\n  set type(value: string) {\n    this._type = value || 'text';\n    this._validateType();\n\n    // When using Angular inputs, developers are no longer able to set the properties on the native\n    // input element. To ensure that bindings for `type` work, we need to sync the setter\n    // with the native property. Textarea elements don't support the type property or attribute.\n    if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {\n      (this._elementRef.nativeElement as HTMLInputElement).type = this._type;\n    }\n  }\n  protected _type = 'text';\n\n  /** An object used to control when error messages are shown. */\n  @Input() override errorStateMatcher: ErrorStateMatcher;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input('aria-describedby') userAriaDescribedBy: string;\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get value(): string { return this._inputValueAccessor.value; }\n  set value(value: string) {\n    if (value !== this.value) {\n      this._inputValueAccessor.value = value;\n      this.stateChanges.next();\n    }\n  }\n\n  /** Whether the element is readonly. */\n  @Input()\n  get readonly(): boolean { return this._readonly; }\n  set readonly(value: boolean) { this._readonly = coerceBooleanProperty(value); }\n  private _readonly = false;\n\n  protected _neverEmptyInputTypes = [\n    'date',\n    'datetime',\n    'datetime-local',\n    'month',\n    'time',\n    'week'\n  ].filter(t => getSupportedInputTypes().has(t));\n\n  constructor(\n      protected _elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>,\n      protected _platform: Platform,\n      @Optional() @Self() ngControl: NgControl,\n      @Optional() _parentForm: NgForm,\n      @Optional() _parentFormGroup: FormGroupDirective,\n      _defaultErrorStateMatcher: ErrorStateMatcher,\n      @Optional() @Self() @Inject(MAT_INPUT_VALUE_ACCESSOR) inputValueAccessor: any,\n      private _autofillMonitor: AutofillMonitor,\n      ngZone: NgZone,\n      // TODO: Remove this once the legacy appearance has been removed. We only need\n      // to inject the form-field for determining whether the placeholder has been promoted.\n      @Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField) {\n\n    super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n\n    const element = this._elementRef.nativeElement;\n    const nodeName = element.nodeName.toLowerCase();\n\n    // If no input value accessor was explicitly specified, use the element as the input value\n    // accessor.\n    this._inputValueAccessor = inputValueAccessor || element;\n\n    this._previousNativeValue = this.value;\n\n    // Force setter to be called in case id was not specified.\n    this.id = this.id;\n\n    // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n    // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n    // exists on iOS, we only bother to install the listener on iOS.\n    if (_platform.IOS) {\n      ngZone.runOutsideAngular(() => {\n        _elementRef.nativeElement.addEventListener('keyup', (event: Event) => {\n          const el = event.target as HTMLInputElement;\n\n          // Note: We specifically check for 0, rather than `!el.selectionStart`, because the two\n          // indicate different things. If the value is 0, it means that the caret is at the start\n          // of the input, whereas a value of `null` means that the input doesn't support\n          // manipulating the selection range. Inputs that don't support setting the selection range\n          // will throw an error so we want to avoid calling `setSelectionRange` on them. See:\n          // https://html.spec.whatwg.org/multipage/input.html#do-not-apply\n          if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {\n            // Note: Just setting `0, 0` doesn't fix the issue. Setting\n            // `1, 1` fixes it for the first time that you type text and\n            // then hold delete. Toggling to `1, 1` and then back to\n            // `0, 0` seems to completely fix it.\n            el.setSelectionRange(1, 1);\n            el.setSelectionRange(0, 0);\n          }\n        });\n      });\n    }\n\n    this._isServer = !this._platform.isBrowser;\n    this._isNativeSelect = nodeName === 'select';\n    this._isTextarea = nodeName === 'textarea';\n    this._isInFormField = !!_formField;\n\n    if (this._isNativeSelect) {\n      this.controlType = (element as HTMLSelectElement).multiple ? 'mat-native-select-multiple' :\n                                                                   'mat-native-select';\n    }\n  }\n\n  ngAfterViewInit() {\n    if (this._platform.isBrowser) {\n      this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n        this.autofilled = event.isAutofilled;\n        this.stateChanges.next();\n      });\n    }\n  }\n\n  ngOnChanges() {\n    this.stateChanges.next();\n  }\n\n  ngOnDestroy() {\n    this.stateChanges.complete();\n\n    if (this._platform.isBrowser) {\n      this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n    }\n  }\n\n  ngDoCheck() {\n    if (this.ngControl) {\n      // We need to re-evaluate this on every change detection cycle, because there are some\n      // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n      // that whatever logic is in here has to be super lean or we risk destroying the performance.\n      this.updateErrorState();\n    }\n\n    // We need to dirty-check the native element's value, because there are some cases where\n    // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n    // updating the value using `emitEvent: false`).\n    this._dirtyCheckNativeValue();\n\n    // We need to dirty-check and set the placeholder attribute ourselves, because whether it's\n    // present or not depends on a query which is prone to \"changed after checked\" errors.\n    this._dirtyCheckPlaceholder();\n  }\n\n  /** Focuses the input. */\n  focus(options?: FocusOptions): void {\n    this._elementRef.nativeElement.focus(options);\n  }\n\n  // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n  // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n  // ViewEngine they're overwritten.\n  // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n  /** Callback for the cases where the focused state of the input changes. */\n  // tslint:disable:no-host-decorator-in-concrete\n  @HostListener('focus', ['true'])\n  @HostListener('blur', ['false'])\n  // tslint:enable:no-host-decorator-in-concrete\n  _focusChanged(isFocused: boolean) {\n    if (isFocused !== this.focused) {\n      this.focused = isFocused;\n      this.stateChanges.next();\n    }\n  }\n\n  // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n  // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n  // ViewEngine they're overwritten.\n  // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n  // tslint:disable-next-line:no-host-decorator-in-concrete\n  @HostListener('input')\n  _onInput() {\n    // This is a noop function and is used to let Angular know whenever the value changes.\n    // Angular will run a new change detection each time the `input` event has been dispatched.\n    // It's necessary that Angular recognizes the value change, because when floatingLabel\n    // is set to false and Angular forms aren't used, the placeholder won't recognize the\n    // value changes and will not disappear.\n    // Listening to the input event wouldn't be necessary when the input is using the\n    // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n  }\n\n  /** Does some manual dirty checking on the native input `placeholder` attribute. */\n  private _dirtyCheckPlaceholder() {\n    // If we're hiding the native placeholder, it should also be cleared from the DOM, otherwise\n    // screen readers will read it out twice: once from the label and once from the attribute.\n    // TODO: can be removed once we get rid of the `legacy` style for the form field, because it's\n    // the only one that supports promoting the placeholder to a label.\n    const placeholder = this._formField?._hideControlPlaceholder?.() ? null : this.placeholder;\n    if (placeholder !== this._previousPlaceholder) {\n      const element = this._elementRef.nativeElement;\n      this._previousPlaceholder = placeholder;\n      placeholder ?\n          element.setAttribute('placeholder', placeholder) : element.removeAttribute('placeholder');\n    }\n  }\n\n  /** Does some manual dirty checking on the native input `value` property. */\n  protected _dirtyCheckNativeValue() {\n    const newValue = this._elementRef.nativeElement.value;\n\n    if (this._previousNativeValue !== newValue) {\n      this._previousNativeValue = newValue;\n      this.stateChanges.next();\n    }\n  }\n\n  /** Make sure the input is a supported type. */\n  protected _validateType() {\n    if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatInputUnsupportedTypeError(this._type);\n    }\n  }\n\n  /** Checks whether the input type is one of the types that are never empty. */\n  protected _isNeverEmpty() {\n    return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n  }\n\n  /** Checks whether the input is invalid based on the native validation. */\n  protected _isBadInput() {\n    // The `validity` property won't be present on platform-server.\n    let validity = (this._elementRef.nativeElement as HTMLInputElement).validity;\n    return validity && validity.badInput;\n  }\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  get empty(): boolean {\n    return !this._isNeverEmpty() && !this._elementRef.nativeElement.value && !this._isBadInput() &&\n        !this.autofilled;\n  }\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  get shouldLabelFloat(): boolean {\n    if (this._isNativeSelect) {\n      // For a single-selection `<select>`, the label should float when the selected option has\n      // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid\n      // overlapping the label with the options.\n      const selectElement = this._elementRef.nativeElement as HTMLSelectElement;\n      const firstOption: HTMLOptionElement | undefined = selectElement.options[0];\n\n      // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n      // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n      return this.focused || selectElement.multiple || !this.empty ||\n             !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label);\n    } else {\n      return this.focused || !this.empty;\n    }\n  }\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  setDescribedByIds(ids: string[]) {\n    if (ids.length) {\n      this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n    } else {\n      this._elementRef.nativeElement.removeAttribute('aria-describedby');\n    }\n  }\n\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  onContainerClick() {\n    // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n    // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n    // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n    if (!this.focused) {\n      this.focus();\n    }\n  }\n\n  /** Whether the form control is a native select that is displayed inline. */\n  _isInlineSelect(): boolean {\n    const element = this._elementRef.nativeElement as HTMLSelectElement;\n    return this._isNativeSelect && (element.multiple || element.size > 1);\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_readonly: BooleanInput;\n  static ngAcceptInputType_required: BooleanInput;\n\n  // Accept `any` to avoid conflicts with other directives on `<input>` that may\n  // accept different types.\n  static ngAcceptInputType_value: any;\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 {TextFieldModule} from '@angular/cdk/text-field';\nimport {NgModule} from '@angular/core';\nimport {ErrorStateMatcher, MatCommonModule} from '@angular/material/core';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatTextareaAutosize} from './autosize';\nimport {MatInput} from './input';\n\n@NgModule({\n  declarations: [MatInput, MatTextareaAutosize],\n  imports: [\n    TextFieldModule,\n    MatFormFieldModule,\n    MatCommonModule,\n  ],\n  exports: [\n    TextFieldModule,\n    // We re-export the `MatFormFieldModule` since `MatInput` will almost always\n    // be used together with `MatFormField`.\n    MatFormFieldModule,\n    MatInput,\n    MatTextareaAutosize,\n  ],\n  providers: [ErrorStateMatcher],\n})\nexport class MatInputModule {}\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 './autosize';\nexport * from './input';\nexport * from './input-errors';\nexport * from './input-module';\nexport * from './input-value-accessor';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/@angular/material/fesm2015/snack-bar.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/snack-bar.js.map	(revision fa375fed9635035b3c62cf759f42938afa14271b)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/snack-bar.js.map	(revision 8d391a12ef6baa3aefe9611a6f7c5b569977c946)
@@ -1,1 +1,1 @@
-{"version":3,"file":"snack-bar.js","sources":["../../../../../../src/material/snack-bar/snack-bar-config.ts","../../../../../../src/material/snack-bar/snack-bar-ref.ts","../../../../../../src/material/snack-bar/simple-snack-bar.ts","../../../../../../src/material/snack-bar/snack-bar-animations.ts","../../../../../../src/material/snack-bar/snack-bar-container.ts","../../../../../../src/material/snack-bar/snack-bar-module.ts","../../../../../../src/material/snack-bar/snack-bar.ts","../../../../../../src/material/snack-bar/public-api.ts","../../../../../../src/material/snack-bar/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 {ViewContainerRef, InjectionToken} from '@angular/core';\nimport {AriaLivePoliteness} from '@angular/cdk/a11y';\nimport {Direction} from '@angular/cdk/bidi';\n\n/** Injection token that can be used to access the data that was passed in to a snack bar. */\nexport const MAT_SNACK_BAR_DATA = new InjectionToken<any>('MatSnackBarData');\n\n/** Possible values for horizontalPosition on MatSnackBarConfig. */\nexport type MatSnackBarHorizontalPosition = 'start' | 'center' | 'end' | 'left' | 'right';\n\n/** Possible values for verticalPosition on MatSnackBarConfig. */\nexport type MatSnackBarVerticalPosition = 'top' | 'bottom';\n\n/**\n * Configuration used when opening a snack-bar.\n */\nexport class MatSnackBarConfig<D = any> {\n  /** The politeness level for the MatAriaLiveAnnouncer announcement. */\n  politeness?: AriaLivePoliteness = 'assertive';\n\n  /**\n   * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom\n   * component or template, the announcement message will default to the specified message.\n   */\n  announcementMessage?: string = '';\n\n  /**\n   * The view container that serves as the parent for the snackbar for the purposes of dependency\n   * injection. Note: this does not affect where the snackbar is inserted in the DOM.\n   */\n  viewContainerRef?: ViewContainerRef;\n\n  /** The length of time in milliseconds to wait before automatically dismissing the snack bar. */\n  duration?: number = 0;\n\n  /** Extra CSS classes to be added to the snack bar container. */\n  panelClass?: string | string[];\n\n  /** Text layout direction for the snack bar. */\n  direction?: Direction;\n\n  /** Data being injected into the child component. */\n  data?: D | null = null;\n\n  /** The horizontal position to place the snack bar. */\n  horizontalPosition?: MatSnackBarHorizontalPosition = 'center';\n\n  /** The vertical position to place the snack bar. */\n  verticalPosition?: MatSnackBarVerticalPosition = 'bottom';\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 {OverlayRef} from '@angular/cdk/overlay';\nimport {Observable, Subject} from 'rxjs';\nimport {_SnackBarContainer} from './snack-bar-container';\n\n\n/** Event that is emitted when a snack bar is dismissed. */\nexport interface MatSnackBarDismiss {\n  /** Whether the snack bar was dismissed using the action button. */\n  dismissedByAction: boolean;\n}\n\n/** Maximum amount of milliseconds that can be passed into setTimeout. */\nconst MAX_TIMEOUT = Math.pow(2, 31) - 1;\n\n/**\n * Reference to a snack bar dispatched from the snack bar service.\n */\nexport class MatSnackBarRef<T> {\n  /** The instance of the component making up the content of the snack bar. */\n  instance: T;\n\n  /**\n   * The instance of the component making up the content of the snack bar.\n   * @docs-private\n   */\n  containerInstance: _SnackBarContainer;\n\n  /** Subject for notifying the user that the snack bar has been dismissed. */\n  private readonly _afterDismissed = new Subject<MatSnackBarDismiss>();\n\n  /** Subject for notifying the user that the snack bar has opened and appeared. */\n  private readonly _afterOpened = new Subject<void>();\n\n  /** Subject for notifying the user that the snack bar action was called. */\n  private readonly _onAction = new Subject<void>();\n\n  /**\n   * Timeout ID for the duration setTimeout call. Used to clear the timeout if the snackbar is\n   * dismissed before the duration passes.\n   */\n  private _durationTimeoutId: any;\n\n  /** Whether the snack bar was dismissed using the action button. */\n  private _dismissedByAction = false;\n\n  constructor(containerInstance: _SnackBarContainer,\n              private _overlayRef: OverlayRef) {\n    this.containerInstance = containerInstance;\n    // Dismiss snackbar on action.\n    this.onAction().subscribe(() => this.dismiss());\n    containerInstance._onExit.subscribe(() => this._finishDismiss());\n  }\n\n  /** Dismisses the snack bar. */\n  dismiss(): void {\n    if (!this._afterDismissed.closed) {\n      this.containerInstance.exit();\n    }\n    clearTimeout(this._durationTimeoutId);\n  }\n\n  /** Marks the snackbar action clicked. */\n  dismissWithAction(): void {\n    if (!this._onAction.closed) {\n      this._dismissedByAction = true;\n      this._onAction.next();\n      this._onAction.complete();\n    }\n    clearTimeout(this._durationTimeoutId);\n  }\n\n\n  /**\n   * Marks the snackbar action clicked.\n   * @deprecated Use `dismissWithAction` instead.\n   * @breaking-change 8.0.0\n   */\n  closeWithAction(): void {\n    this.dismissWithAction();\n  }\n\n  /** Dismisses the snack bar after some duration */\n  _dismissAfter(duration: number): void {\n    // Note that we need to cap the duration to the maximum value for setTimeout, because\n    // it'll revert to 1 if somebody passes in something greater (e.g. `Infinity`). See #17234.\n    this._durationTimeoutId = setTimeout(() => this.dismiss(), Math.min(duration, MAX_TIMEOUT));\n  }\n\n  /** Marks the snackbar as opened */\n  _open(): void {\n    if (!this._afterOpened.closed) {\n      this._afterOpened.next();\n      this._afterOpened.complete();\n    }\n  }\n\n  /** Cleans up the DOM after closing. */\n  private _finishDismiss(): void {\n    this._overlayRef.dispose();\n\n    if (!this._onAction.closed) {\n      this._onAction.complete();\n    }\n\n    this._afterDismissed.next({dismissedByAction: this._dismissedByAction});\n    this._afterDismissed.complete();\n    this._dismissedByAction = false;\n  }\n\n  /** Gets an observable that is notified when the snack bar is finished closing. */\n  afterDismissed(): Observable<MatSnackBarDismiss> {\n    return this._afterDismissed;\n  }\n\n  /** Gets an observable that is notified when the snack bar has opened and appeared. */\n  afterOpened(): Observable<void> {\n    return this.containerInstance._onEnter;\n  }\n\n  /** Gets an observable that is notified when the snack bar action is called. */\n  onAction(): Observable<void> {\n    return this._onAction;\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 {ChangeDetectionStrategy, Component, Inject, ViewEncapsulation} from '@angular/core';\nimport {MAT_SNACK_BAR_DATA} from './snack-bar-config';\nimport {MatSnackBarRef} from './snack-bar-ref';\n\n\n/**\n * Interface for a simple snack bar component that has a message and a single action.\n */\nexport interface TextOnlySnackBar {\n  data: {message: string, action: string};\n  snackBarRef: MatSnackBarRef<TextOnlySnackBar>;\n  action: () => void;\n  hasAction: boolean;\n}\n\n/**\n * A component used to open as the default snack bar, matching material spec.\n * This should only be used internally by the snack bar service.\n */\n@Component({\n  selector: 'simple-snack-bar',\n  templateUrl: 'simple-snack-bar.html',\n  styleUrls: ['simple-snack-bar.css'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    'class': 'mat-simple-snackbar',\n  }\n})\nexport class SimpleSnackBar implements TextOnlySnackBar {\n  /** Data that was injected into the snack bar. */\n  data: {message: string, action: string};\n\n  constructor(\n    public snackBarRef: MatSnackBarRef<SimpleSnackBar>,\n    @Inject(MAT_SNACK_BAR_DATA) data: any) {\n    this.data = data;\n  }\n\n  /** Performs the action on the snack bar. */\n  action(): void {\n    this.snackBarRef.dismissWithAction();\n  }\n\n  /** If the action button should be shown. */\n  get hasAction(): boolean {\n    return !!this.data.action;\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 Material snack bar.\n * @docs-private\n */\nexport const matSnackBarAnimations: {\n  readonly snackBarState: AnimationTriggerMetadata;\n} = {\n  /** Animation that shows and hides a snack bar. */\n  snackBarState: trigger('state', [\n    state('void, hidden', style({\n      transform: 'scale(0.8)',\n      opacity: 0,\n    })),\n    state('visible', style({\n      transform: 'scale(1)',\n      opacity: 1,\n    })),\n    transition('* => visible', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),\n    transition('* => void, * => hidden', animate('75ms cubic-bezier(0.4, 0.0, 1, 1)', style({\n      opacity: 0\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 {AnimationEvent} from '@angular/animations';\nimport {AriaLivePoliteness} from '@angular/cdk/a11y';\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  BasePortalOutlet,\n  CdkPortalOutlet,\n  ComponentPortal,\n  TemplatePortal,\n  DomPortal,\n} from '@angular/cdk/portal';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentRef,\n  ElementRef,\n  EmbeddedViewRef,\n  NgZone,\n  OnDestroy,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {take} from 'rxjs/operators';\nimport {matSnackBarAnimations} from './snack-bar-animations';\nimport {MatSnackBarConfig} from './snack-bar-config';\n\n/**\n * Internal interface for a snack bar container.\n * @docs-private\n */\nexport interface _SnackBarContainer {\n  snackBarConfig: MatSnackBarConfig;\n  readonly _onAnnounce: Subject<any>;\n  readonly _onExit: Subject<any>;\n  readonly _onEnter: Subject<any>;\n  enter: () => void;\n  exit: () => Observable<void>;\n  attachTemplatePortal: <C>(portal: TemplatePortal<C>) => EmbeddedViewRef<C>;\n  attachComponentPortal: <T>(portal: ComponentPortal<T>) => ComponentRef<T>;\n}\n\n/**\n * Internal component that wraps user-provided snack bar content.\n * @docs-private\n */\n@Component({\n  selector: 'snack-bar-container',\n  templateUrl: 'snack-bar-container.html',\n  styleUrls: ['snack-bar-container.css'],\n  // In Ivy embedded views will be change detected from their declaration place, rather than\n  // where they were stamped out. This means that we can't have the snack bar container be OnPush,\n  // because it might cause snack bars that were opened from a template not to be out of date.\n  // tslint:disable-next-line:validate-decorators\n  changeDetection: ChangeDetectionStrategy.Default,\n  encapsulation: ViewEncapsulation.None,\n  animations: [matSnackBarAnimations.snackBarState],\n  host: {\n    'class': 'mat-snack-bar-container',\n    '[@state]': '_animationState',\n    '(@state.done)': 'onAnimationEnd($event)'\n  },\n})\nexport class MatSnackBarContainer extends BasePortalOutlet\n    implements OnDestroy, _SnackBarContainer {\n  /** The number of milliseconds to wait before announcing the snack bar's content. */\n  private readonly _announceDelay: number = 150;\n\n  /** The timeout for announcing the snack bar's content. */\n  private _announceTimeoutId: any;\n\n  /** Whether the component has been destroyed. */\n  private _destroyed = false;\n\n  /** The portal outlet inside of this container into which the snack bar content will be loaded. */\n  @ViewChild(CdkPortalOutlet, {static: true}) _portalOutlet: CdkPortalOutlet;\n\n  /** Subject for notifying that the snack bar has announced to screen readers. */\n  readonly _onAnnounce: Subject<void> = new Subject();\n\n  /** Subject for notifying that the snack bar has exited from view. */\n  readonly _onExit: Subject<void> = new Subject();\n\n  /** Subject for notifying that the snack bar has finished entering the view. */\n  readonly _onEnter: Subject<void> = new Subject();\n\n  /** The state of the snack bar animations. */\n  _animationState = 'void';\n\n  /** aria-live value for the live region. */\n  _live: AriaLivePoliteness;\n\n  /**\n   * Role of the live region. This is only for Firefox as there is a known issue where Firefox +\n   * JAWS does not read out aria-live message.\n   */\n  _role?: 'status' | 'alert';\n\n  constructor(\n    private _ngZone: NgZone,\n    private _elementRef: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _platform: Platform,\n    /** The snack bar configuration. */\n    public snackBarConfig: MatSnackBarConfig) {\n\n    super();\n\n    // Use aria-live rather than a live role like 'alert' or 'status'\n    // because NVDA and JAWS have show inconsistent behavior with live roles.\n    if (snackBarConfig.politeness === 'assertive' && !snackBarConfig.announcementMessage) {\n      this._live = 'assertive';\n    } else if (snackBarConfig.politeness === 'off') {\n      this._live = 'off';\n    } else {\n      this._live = 'polite';\n    }\n\n    // Only set role for Firefox. Set role based on aria-live because setting role=\"alert\" implies\n    // aria-live=\"assertive\" which may cause issues if aria-live is set to \"polite\" above.\n    if (this._platform.FIREFOX) {\n      if (this._live === 'polite') {\n        this._role = 'status';\n      }\n      if (this._live === 'assertive') {\n        this._role = 'alert';\n      }\n    }\n  }\n\n  /** Attach a component portal as content to this snack bar container. */\n  attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n    this._assertNotAttached();\n    this._applySnackBarClasses();\n    return this._portalOutlet.attachComponentPortal(portal);\n  }\n\n  /** Attach a template portal as content to this snack bar container. */\n  attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n    this._assertNotAttached();\n    this._applySnackBarClasses();\n    return this._portalOutlet.attachTemplatePortal(portal);\n  }\n\n  /**\n   * Attaches a DOM portal to the snack bar container.\n   * @deprecated To be turned into a method.\n   * @breaking-change 10.0.0\n   */\n  override attachDomPortal = (portal: DomPortal) => {\n    this._assertNotAttached();\n    this._applySnackBarClasses();\n    return this._portalOutlet.attachDomPortal(portal);\n  }\n\n  /** Handle end of animations, updating the state of the snackbar. */\n  onAnimationEnd(event: AnimationEvent) {\n    const {fromState, toState} = event;\n\n    if ((toState === 'void' && fromState !== 'void') || toState === 'hidden') {\n      this._completeExit();\n    }\n\n    if (toState === 'visible') {\n      // Note: we shouldn't use `this` inside the zone callback,\n      // because it can cause a memory leak.\n      const onEnter = this._onEnter;\n\n      this._ngZone.run(() => {\n        onEnter.next();\n        onEnter.complete();\n      });\n    }\n  }\n\n  /** Begin animation of snack bar entrance into view. */\n  enter(): void {\n    if (!this._destroyed) {\n      this._animationState = 'visible';\n      this._changeDetectorRef.detectChanges();\n      this._screenReaderAnnounce();\n    }\n  }\n\n  /** Begin animation of the snack bar exiting from view. */\n  exit(): Observable<void> {\n    // Note: this one transitions to `hidden`, rather than `void`, in order to handle the case\n    // where multiple snack bars are opened in quick succession (e.g. two consecutive calls to\n    // `MatSnackBar.open`).\n    this._animationState = 'hidden';\n\n    // Mark this element with an 'exit' attribute to indicate that the snackbar has\n    // been dismissed and will soon be removed from the DOM. This is used by the snackbar\n    // test harness.\n    this._elementRef.nativeElement.setAttribute('mat-exit', '');\n\n    // If the snack bar hasn't been announced by the time it exits it wouldn't have been open\n    // long enough to visually read it either, so clear the timeout for announcing.\n    clearTimeout(this._announceTimeoutId);\n\n    return this._onExit;\n  }\n\n  /** Makes sure the exit callbacks have been invoked when the element is destroyed. */\n  ngOnDestroy() {\n    this._destroyed = true;\n    this._completeExit();\n  }\n\n  /**\n   * Waits for the zone to settle before removing the element. Helps prevent\n   * errors where we end up removing an element which is in the middle of an animation.\n   */\n  private _completeExit() {\n    this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n      this._onExit.next();\n      this._onExit.complete();\n    });\n  }\n\n  /** Applies the various positioning and user-configured CSS classes to the snack bar. */\n  private _applySnackBarClasses() {\n    const element: HTMLElement = this._elementRef.nativeElement;\n    const panelClasses = this.snackBarConfig.panelClass;\n\n    if (panelClasses) {\n      if (Array.isArray(panelClasses)) {\n        // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n        panelClasses.forEach(cssClass => element.classList.add(cssClass));\n      } else {\n        element.classList.add(panelClasses);\n      }\n    }\n\n    if (this.snackBarConfig.horizontalPosition === 'center') {\n      element.classList.add('mat-snack-bar-center');\n    }\n\n    if (this.snackBarConfig.verticalPosition === 'top') {\n      element.classList.add('mat-snack-bar-top');\n    }\n  }\n\n  /** Asserts that no content is already attached to the container. */\n  private _assertNotAttached() {\n    if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('Attempting to attach snack bar content after content is already attached');\n    }\n  }\n\n  /**\n   * Starts a timeout to move the snack bar content to the live region so screen readers will\n   * announce it.\n   */\n  private _screenReaderAnnounce() {\n    if (!this._announceTimeoutId) {\n      this._ngZone.runOutsideAngular(() => {\n        this._announceTimeoutId = setTimeout(() => {\n          const inertElement = this._elementRef.nativeElement.querySelector('[aria-hidden]');\n          const liveElement = this._elementRef.nativeElement.querySelector('[aria-live]');\n\n          if (inertElement && liveElement) {\n            // If an element in the snack bar content is focused before being moved\n            // track it and restore focus after moving to the live region.\n            let focusedElement: HTMLElement | null = null;\n            if (this._platform.isBrowser &&\n                document.activeElement instanceof HTMLElement &&\n                inertElement.contains(document.activeElement)) {\n              focusedElement = document.activeElement;\n            }\n\n            inertElement.removeAttribute('aria-hidden');\n            liveElement.appendChild(inertElement);\n            focusedElement?.focus();\n\n            this._onAnnounce.next();\n            this._onAnnounce.complete();\n          }\n        }, this._announceDelay);\n      });\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 {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {SimpleSnackBar} from './simple-snack-bar';\nimport {MatSnackBarContainer} from './snack-bar-container';\n\n\n@NgModule({\n  imports: [\n    OverlayModule,\n    PortalModule,\n    CommonModule,\n    MatButtonModule,\n    MatCommonModule,\n  ],\n  exports: [MatSnackBarContainer, MatCommonModule],\n  declarations: [MatSnackBarContainer, SimpleSnackBar],\n  entryComponents: [MatSnackBarContainer, SimpleSnackBar],\n})\nexport class MatSnackBarModule {}\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 {LiveAnnouncer} from '@angular/cdk/a11y';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {Overlay, OverlayConfig, OverlayRef} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, TemplatePortal} from '@angular/cdk/portal';\nimport {\n  ComponentRef,\n  EmbeddedViewRef,\n  Inject,\n  Injectable,\n  InjectionToken,\n  Injector,\n  Optional,\n  SkipSelf,\n  TemplateRef,\n  OnDestroy, Type,\n} from '@angular/core';\nimport {takeUntil} from 'rxjs/operators';\nimport {TextOnlySnackBar, SimpleSnackBar} from './simple-snack-bar';\nimport {MAT_SNACK_BAR_DATA, MatSnackBarConfig} from './snack-bar-config';\nimport {MatSnackBarContainer, _SnackBarContainer} from './snack-bar-container';\nimport {MatSnackBarModule} from './snack-bar-module';\nimport {MatSnackBarRef} from './snack-bar-ref';\n\n\n/** Injection token that can be used to specify default snack bar. */\nexport const MAT_SNACK_BAR_DEFAULT_OPTIONS =\n    new InjectionToken<MatSnackBarConfig>('mat-snack-bar-default-options', {\n      providedIn: 'root',\n      factory: MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY,\n    });\n\n/** @docs-private */\nexport function MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY(): MatSnackBarConfig {\n  return new MatSnackBarConfig();\n}\n\n/**\n * Service to dispatch Material Design snack bar messages.\n */\n@Injectable({providedIn: MatSnackBarModule})\nexport class MatSnackBar implements OnDestroy {\n  /**\n   * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\n   * If there is a parent snack-bar service, all operations should delegate to that parent\n   * via `_openedSnackBarRef`.\n   */\n  private _snackBarRefAtThisLevel: MatSnackBarRef<any> | null = null;\n\n  /** The component that should be rendered as the snack bar's simple component. */\n  protected simpleSnackBarComponent: Type<TextOnlySnackBar> = SimpleSnackBar;\n\n  /** The container component that attaches the provided template or component. */\n  protected snackBarContainerComponent: Type<_SnackBarContainer> = MatSnackBarContainer;\n\n  /** The CSS class to apply for handset mode. */\n  protected handsetCssClass = 'mat-snack-bar-handset';\n\n  /** Reference to the currently opened snackbar at *any* level. */\n  get _openedSnackBarRef(): MatSnackBarRef<any> | null {\n    const parent = this._parentSnackBar;\n    return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;\n  }\n\n  set _openedSnackBarRef(value: MatSnackBarRef<any> | null) {\n    if (this._parentSnackBar) {\n      this._parentSnackBar._openedSnackBarRef = value;\n    } else {\n      this._snackBarRefAtThisLevel = value;\n    }\n  }\n\n  constructor(\n      private _overlay: Overlay,\n      private _live: LiveAnnouncer,\n      private _injector: Injector,\n      private _breakpointObserver: BreakpointObserver,\n      @Optional() @SkipSelf() private _parentSnackBar: MatSnackBar,\n      @Inject(MAT_SNACK_BAR_DEFAULT_OPTIONS) private _defaultConfig: MatSnackBarConfig) {}\n\n  /**\n   * Creates and dispatches a snack bar with a custom component for the content, removing any\n   * currently opened snack bars.\n   *\n   * @param component Component to be instantiated.\n   * @param config Extra configuration for the snack bar.\n   */\n  openFromComponent<T>(component: ComponentType<T>, config?: MatSnackBarConfig):\n      MatSnackBarRef<T> {\n    return this._attach(component, config) as MatSnackBarRef<T>;\n  }\n\n  /**\n   * Creates and dispatches a snack bar with a custom template for the content, removing any\n   * currently opened snack bars.\n   *\n   * @param template Template to be instantiated.\n   * @param config Extra configuration for the snack bar.\n   */\n  openFromTemplate(template: TemplateRef<any>, config?: MatSnackBarConfig):\n      MatSnackBarRef<EmbeddedViewRef<any>> {\n    return this._attach(template, config);\n  }\n\n  /**\n   * Opens a snackbar with a message and an optional action.\n   * @param message The message to show in the snackbar.\n   * @param action The label for the snackbar action.\n   * @param config Additional configuration options for the snackbar.\n   */\n  open(message: string, action: string = '', config?: MatSnackBarConfig):\n      MatSnackBarRef<TextOnlySnackBar> {\n    const _config = {...this._defaultConfig, ...config};\n\n    // Since the user doesn't have access to the component, we can\n    // override the data to pass in our own message and action.\n    _config.data = {message, action};\n\n    // Since the snack bar has `role=\"alert\"`, we don't\n    // want to announce the same message twice.\n    if (_config.announcementMessage === message) {\n      _config.announcementMessage = undefined;\n    }\n\n    return this.openFromComponent(this.simpleSnackBarComponent, _config);\n  }\n\n  /**\n   * Dismisses the currently-visible snack bar.\n   */\n  dismiss(): void {\n    if (this._openedSnackBarRef) {\n      this._openedSnackBarRef.dismiss();\n    }\n  }\n\n  ngOnDestroy() {\n    // Only dismiss the snack bar at the current level on destroy.\n    if (this._snackBarRefAtThisLevel) {\n      this._snackBarRefAtThisLevel.dismiss();\n    }\n  }\n\n  /**\n   * Attaches the snack bar container component to the overlay.\n   */\n  private _attachSnackBarContainer(overlayRef: OverlayRef,\n                                     config: MatSnackBarConfig): _SnackBarContainer {\n\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n    const injector = Injector.create({\n      parent: userInjector || this._injector,\n      providers: [{provide: MatSnackBarConfig, useValue: config}]\n    });\n\n    const containerPortal =\n        new ComponentPortal(this.snackBarContainerComponent, config.viewContainerRef, injector);\n    const containerRef: ComponentRef<_SnackBarContainer> =\n        overlayRef.attach(containerPortal);\n    containerRef.instance.snackBarConfig = config;\n    return containerRef.instance;\n  }\n\n  /**\n   * Places a new component or a template as the content of the snack bar container.\n   */\n  private _attach<T>(content: ComponentType<T> | TemplateRef<T>, userConfig?: MatSnackBarConfig):\n      MatSnackBarRef<T | EmbeddedViewRef<any>> {\n\n    const config = {...new MatSnackBarConfig(), ...this._defaultConfig, ...userConfig};\n    const overlayRef = this._createOverlay(config);\n    const container = this._attachSnackBarContainer(overlayRef, config);\n    const snackBarRef = new MatSnackBarRef<T | EmbeddedViewRef<any>>(container, overlayRef);\n\n    if (content instanceof TemplateRef) {\n      const portal = new TemplatePortal(content, null!, {\n        $implicit: config.data,\n        snackBarRef\n      } as any);\n\n      snackBarRef.instance = container.attachTemplatePortal(portal);\n    } else {\n      const injector = this._createInjector(config, snackBarRef);\n      const portal = new ComponentPortal(content, undefined, injector);\n      const contentRef = container.attachComponentPortal<T>(portal);\n\n      // We can't pass this via the injector, because the injector is created earlier.\n      snackBarRef.instance = contentRef.instance;\n    }\n\n    // Subscribe to the breakpoint observer and attach the mat-snack-bar-handset class as\n    // appropriate. This class is applied to the overlay element because the overlay must expand to\n    // fill the width of the screen for full width snackbars.\n    this._breakpointObserver.observe(Breakpoints.HandsetPortrait).pipe(\n        takeUntil(overlayRef.detachments())\n    ).subscribe(state => {\n      const classList = overlayRef.overlayElement.classList;\n      state.matches ? classList.add(this.handsetCssClass) : classList.remove(this.handsetCssClass);\n    });\n\n    if (config.announcementMessage) {\n      // Wait until the snack bar contents have been announced then deliver this message.\n      container._onAnnounce.subscribe(() => {\n        this._live.announce(config.announcementMessage!, config.politeness);\n      });\n    }\n\n    this._animateSnackBar(snackBarRef, config);\n    this._openedSnackBarRef = snackBarRef;\n    return this._openedSnackBarRef;\n  }\n\n  /** Animates the old snack bar out and the new one in. */\n  private _animateSnackBar(snackBarRef: MatSnackBarRef<any>, config: MatSnackBarConfig) {\n    // When the snackbar is dismissed, clear the reference to it.\n    snackBarRef.afterDismissed().subscribe(() => {\n      // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.\n      if (this._openedSnackBarRef == snackBarRef) {\n        this._openedSnackBarRef = null;\n      }\n\n      if (config.announcementMessage) {\n        this._live.clear();\n      }\n    });\n\n    if (this._openedSnackBarRef) {\n      // If a snack bar is already in view, dismiss it and enter the\n      // new snack bar after exit animation is complete.\n      this._openedSnackBarRef.afterDismissed().subscribe(() => {\n        snackBarRef.containerInstance.enter();\n      });\n      this._openedSnackBarRef.dismiss();\n    } else {\n      // If no snack bar is in view, enter the new snack bar.\n      snackBarRef.containerInstance.enter();\n    }\n\n    // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.\n    if (config.duration && config.duration > 0) {\n      snackBarRef.afterOpened().subscribe(() => snackBarRef._dismissAfter(config.duration!));\n    }\n  }\n\n  /**\n   * Creates a new overlay and places it in the correct location.\n   * @param config The user-specified snack bar config.\n   */\n  private _createOverlay(config: MatSnackBarConfig): OverlayRef {\n    const overlayConfig = new OverlayConfig();\n    overlayConfig.direction = config.direction;\n\n    let positionStrategy = this._overlay.position().global();\n    // Set horizontal position.\n    const isRtl = config.direction === 'rtl';\n    const isLeft = (\n        config.horizontalPosition === 'left' ||\n        (config.horizontalPosition === 'start' && !isRtl) ||\n        (config.horizontalPosition === 'end' && isRtl));\n    const isRight = !isLeft && config.horizontalPosition !== 'center';\n    if (isLeft) {\n      positionStrategy.left('0');\n    } else if (isRight) {\n      positionStrategy.right('0');\n    } else {\n      positionStrategy.centerHorizontally();\n    }\n    // Set horizontal position.\n    if (config.verticalPosition === 'top') {\n      positionStrategy.top('0');\n    } else {\n      positionStrategy.bottom('0');\n    }\n\n    overlayConfig.positionStrategy = positionStrategy;\n    return this._overlay.create(overlayConfig);\n  }\n\n  /**\n   * Creates an injector to be used inside of a snack bar component.\n   * @param config Config that was used to create the snack bar.\n   * @param snackBarRef Reference to the snack bar.\n   */\n  private _createInjector<T>(config: MatSnackBarConfig, snackBarRef: MatSnackBarRef<T>): Injector {\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n\n    return Injector.create({\n      parent: userInjector || this._injector,\n      providers: [\n        {provide: MatSnackBarRef, useValue: snackBarRef},\n        {provide: MAT_SNACK_BAR_DATA, useValue: config.data}\n      ]\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\nexport * from './snack-bar-module';\nexport * from './snack-bar';\nexport * from './snack-bar-container';\nexport * from './snack-bar-config';\nexport * from './snack-bar-ref';\nexport * from './simple-snack-bar';\nexport * from './snack-bar-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
+{"version":3,"file":"snack-bar.js","sources":["../../../../../../src/material/snack-bar/snack-bar-config.ts","../../../../../../src/material/snack-bar/snack-bar-ref.ts","../../../../../../src/material/snack-bar/simple-snack-bar.ts","../../../../../../src/material/snack-bar/snack-bar-animations.ts","../../../../../../src/material/snack-bar/snack-bar-container.ts","../../../../../../src/material/snack-bar/snack-bar-module.ts","../../../../../../src/material/snack-bar/snack-bar.ts","../../../../../../src/material/snack-bar/public-api.ts","../../../../../../src/material/snack-bar/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 {ViewContainerRef, InjectionToken} from '@angular/core';\nimport {AriaLivePoliteness} from '@angular/cdk/a11y';\nimport {Direction} from '@angular/cdk/bidi';\n\n/** Injection token that can be used to access the data that was passed in to a snack bar. */\nexport const MAT_SNACK_BAR_DATA = new InjectionToken<any>('MatSnackBarData');\n\n/** Possible values for horizontalPosition on MatSnackBarConfig. */\nexport type MatSnackBarHorizontalPosition = 'start' | 'center' | 'end' | 'left' | 'right';\n\n/** Possible values for verticalPosition on MatSnackBarConfig. */\nexport type MatSnackBarVerticalPosition = 'top' | 'bottom';\n\n/**\n * Configuration used when opening a snack-bar.\n */\nexport class MatSnackBarConfig<D = any> {\n  /** The politeness level for the MatAriaLiveAnnouncer announcement. */\n  politeness?: AriaLivePoliteness = 'assertive';\n\n  /**\n   * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom\n   * component or template, the announcement message will default to the specified message.\n   */\n  announcementMessage?: string = '';\n\n  /**\n   * The view container that serves as the parent for the snackbar for the purposes of dependency\n   * injection. Note: this does not affect where the snackbar is inserted in the DOM.\n   */\n  viewContainerRef?: ViewContainerRef;\n\n  /** The length of time in milliseconds to wait before automatically dismissing the snack bar. */\n  duration?: number = 0;\n\n  /** Extra CSS classes to be added to the snack bar container. */\n  panelClass?: string | string[];\n\n  /** Text layout direction for the snack bar. */\n  direction?: Direction;\n\n  /** Data being injected into the child component. */\n  data?: D | null = null;\n\n  /** The horizontal position to place the snack bar. */\n  horizontalPosition?: MatSnackBarHorizontalPosition = 'center';\n\n  /** The vertical position to place the snack bar. */\n  verticalPosition?: MatSnackBarVerticalPosition = 'bottom';\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 {OverlayRef} from '@angular/cdk/overlay';\nimport {Observable, Subject} from 'rxjs';\nimport {_SnackBarContainer} from './snack-bar-container';\n\n\n/** Event that is emitted when a snack bar is dismissed. */\nexport interface MatSnackBarDismiss {\n  /** Whether the snack bar was dismissed using the action button. */\n  dismissedByAction: boolean;\n}\n\n/** Maximum amount of milliseconds that can be passed into setTimeout. */\nconst MAX_TIMEOUT = Math.pow(2, 31) - 1;\n\n/**\n * Reference to a snack bar dispatched from the snack bar service.\n */\nexport class MatSnackBarRef<T> {\n  /** The instance of the component making up the content of the snack bar. */\n  instance: T;\n\n  /**\n   * The instance of the component making up the content of the snack bar.\n   * @docs-private\n   */\n  containerInstance: _SnackBarContainer;\n\n  /** Subject for notifying the user that the snack bar has been dismissed. */\n  private readonly _afterDismissed = new Subject<MatSnackBarDismiss>();\n\n  /** Subject for notifying the user that the snack bar has opened and appeared. */\n  private readonly _afterOpened = new Subject<void>();\n\n  /** Subject for notifying the user that the snack bar action was called. */\n  private readonly _onAction = new Subject<void>();\n\n  /**\n   * Timeout ID for the duration setTimeout call. Used to clear the timeout if the snackbar is\n   * dismissed before the duration passes.\n   */\n  private _durationTimeoutId: number;\n\n  /** Whether the snack bar was dismissed using the action button. */\n  private _dismissedByAction = false;\n\n  constructor(containerInstance: _SnackBarContainer,\n              private _overlayRef: OverlayRef) {\n    this.containerInstance = containerInstance;\n    // Dismiss snackbar on action.\n    this.onAction().subscribe(() => this.dismiss());\n    containerInstance._onExit.subscribe(() => this._finishDismiss());\n  }\n\n  /** Dismisses the snack bar. */\n  dismiss(): void {\n    if (!this._afterDismissed.closed) {\n      this.containerInstance.exit();\n    }\n    clearTimeout(this._durationTimeoutId);\n  }\n\n  /** Marks the snackbar action clicked. */\n  dismissWithAction(): void {\n    if (!this._onAction.closed) {\n      this._dismissedByAction = true;\n      this._onAction.next();\n      this._onAction.complete();\n    }\n    clearTimeout(this._durationTimeoutId);\n  }\n\n\n  /**\n   * Marks the snackbar action clicked.\n   * @deprecated Use `dismissWithAction` instead.\n   * @breaking-change 8.0.0\n   */\n  closeWithAction(): void {\n    this.dismissWithAction();\n  }\n\n  /** Dismisses the snack bar after some duration */\n  _dismissAfter(duration: number): void {\n    // Note that we need to cap the duration to the maximum value for setTimeout, because\n    // it'll revert to 1 if somebody passes in something greater (e.g. `Infinity`). See #17234.\n    this._durationTimeoutId = setTimeout(() => this.dismiss(), Math.min(duration, MAX_TIMEOUT));\n  }\n\n  /** Marks the snackbar as opened */\n  _open(): void {\n    if (!this._afterOpened.closed) {\n      this._afterOpened.next();\n      this._afterOpened.complete();\n    }\n  }\n\n  /** Cleans up the DOM after closing. */\n  private _finishDismiss(): void {\n    this._overlayRef.dispose();\n\n    if (!this._onAction.closed) {\n      this._onAction.complete();\n    }\n\n    this._afterDismissed.next({dismissedByAction: this._dismissedByAction});\n    this._afterDismissed.complete();\n    this._dismissedByAction = false;\n  }\n\n  /** Gets an observable that is notified when the snack bar is finished closing. */\n  afterDismissed(): Observable<MatSnackBarDismiss> {\n    return this._afterDismissed;\n  }\n\n  /** Gets an observable that is notified when the snack bar has opened and appeared. */\n  afterOpened(): Observable<void> {\n    return this.containerInstance._onEnter;\n  }\n\n  /** Gets an observable that is notified when the snack bar action is called. */\n  onAction(): Observable<void> {\n    return this._onAction;\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 {ChangeDetectionStrategy, Component, Inject, ViewEncapsulation} from '@angular/core';\nimport {MAT_SNACK_BAR_DATA} from './snack-bar-config';\nimport {MatSnackBarRef} from './snack-bar-ref';\n\n\n/**\n * Interface for a simple snack bar component that has a message and a single action.\n */\nexport interface TextOnlySnackBar {\n  data: {message: string, action: string};\n  snackBarRef: MatSnackBarRef<TextOnlySnackBar>;\n  action: () => void;\n  hasAction: boolean;\n}\n\n/**\n * A component used to open as the default snack bar, matching material spec.\n * This should only be used internally by the snack bar service.\n */\n@Component({\n  selector: 'simple-snack-bar',\n  templateUrl: 'simple-snack-bar.html',\n  styleUrls: ['simple-snack-bar.css'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    'class': 'mat-simple-snackbar',\n  }\n})\nexport class SimpleSnackBar implements TextOnlySnackBar {\n  /** Data that was injected into the snack bar. */\n  data: {message: string, action: string};\n\n  constructor(\n    public snackBarRef: MatSnackBarRef<SimpleSnackBar>,\n    @Inject(MAT_SNACK_BAR_DATA) data: any) {\n    this.data = data;\n  }\n\n  /** Performs the action on the snack bar. */\n  action(): void {\n    this.snackBarRef.dismissWithAction();\n  }\n\n  /** If the action button should be shown. */\n  get hasAction(): boolean {\n    return !!this.data.action;\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 Material snack bar.\n * @docs-private\n */\nexport const matSnackBarAnimations: {\n  readonly snackBarState: AnimationTriggerMetadata;\n} = {\n  /** Animation that shows and hides a snack bar. */\n  snackBarState: trigger('state', [\n    state('void, hidden', style({\n      transform: 'scale(0.8)',\n      opacity: 0,\n    })),\n    state('visible', style({\n      transform: 'scale(1)',\n      opacity: 1,\n    })),\n    transition('* => visible', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),\n    transition('* => void, * => hidden', animate('75ms cubic-bezier(0.4, 0.0, 1, 1)', style({\n      opacity: 0\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 {AnimationEvent} from '@angular/animations';\nimport {AriaLivePoliteness} from '@angular/cdk/a11y';\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  BasePortalOutlet,\n  CdkPortalOutlet,\n  ComponentPortal,\n  TemplatePortal,\n  DomPortal,\n} from '@angular/cdk/portal';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentRef,\n  ElementRef,\n  EmbeddedViewRef,\n  NgZone,\n  OnDestroy,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {take} from 'rxjs/operators';\nimport {matSnackBarAnimations} from './snack-bar-animations';\nimport {MatSnackBarConfig} from './snack-bar-config';\n\n/**\n * Internal interface for a snack bar container.\n * @docs-private\n */\nexport interface _SnackBarContainer {\n  snackBarConfig: MatSnackBarConfig;\n  readonly _onAnnounce: Subject<any>;\n  readonly _onExit: Subject<any>;\n  readonly _onEnter: Subject<any>;\n  enter: () => void;\n  exit: () => Observable<void>;\n  attachTemplatePortal: <C>(portal: TemplatePortal<C>) => EmbeddedViewRef<C>;\n  attachComponentPortal: <T>(portal: ComponentPortal<T>) => ComponentRef<T>;\n}\n\n/**\n * Internal component that wraps user-provided snack bar content.\n * @docs-private\n */\n@Component({\n  selector: 'snack-bar-container',\n  templateUrl: 'snack-bar-container.html',\n  styleUrls: ['snack-bar-container.css'],\n  // In Ivy embedded views will be change detected from their declaration place, rather than\n  // where they were stamped out. This means that we can't have the snack bar container be OnPush,\n  // because it might cause snack bars that were opened from a template not to be out of date.\n  // tslint:disable-next-line:validate-decorators\n  changeDetection: ChangeDetectionStrategy.Default,\n  encapsulation: ViewEncapsulation.None,\n  animations: [matSnackBarAnimations.snackBarState],\n  host: {\n    'class': 'mat-snack-bar-container',\n    '[@state]': '_animationState',\n    '(@state.done)': 'onAnimationEnd($event)'\n  },\n})\nexport class MatSnackBarContainer extends BasePortalOutlet\n    implements OnDestroy, _SnackBarContainer {\n  /** The number of milliseconds to wait before announcing the snack bar's content. */\n  private readonly _announceDelay: number = 150;\n\n  /** The timeout for announcing the snack bar's content. */\n  private _announceTimeoutId: number;\n\n  /** Whether the component has been destroyed. */\n  private _destroyed = false;\n\n  /** The portal outlet inside of this container into which the snack bar content will be loaded. */\n  @ViewChild(CdkPortalOutlet, {static: true}) _portalOutlet: CdkPortalOutlet;\n\n  /** Subject for notifying that the snack bar has announced to screen readers. */\n  readonly _onAnnounce: Subject<void> = new Subject();\n\n  /** Subject for notifying that the snack bar has exited from view. */\n  readonly _onExit: Subject<void> = new Subject();\n\n  /** Subject for notifying that the snack bar has finished entering the view. */\n  readonly _onEnter: Subject<void> = new Subject();\n\n  /** The state of the snack bar animations. */\n  _animationState = 'void';\n\n  /** aria-live value for the live region. */\n  _live: AriaLivePoliteness;\n\n  /**\n   * Role of the live region. This is only for Firefox as there is a known issue where Firefox +\n   * JAWS does not read out aria-live message.\n   */\n  _role?: 'status' | 'alert';\n\n  constructor(\n    private _ngZone: NgZone,\n    private _elementRef: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _platform: Platform,\n    /** The snack bar configuration. */\n    public snackBarConfig: MatSnackBarConfig) {\n\n    super();\n\n    // Use aria-live rather than a live role like 'alert' or 'status'\n    // because NVDA and JAWS have show inconsistent behavior with live roles.\n    if (snackBarConfig.politeness === 'assertive' && !snackBarConfig.announcementMessage) {\n      this._live = 'assertive';\n    } else if (snackBarConfig.politeness === 'off') {\n      this._live = 'off';\n    } else {\n      this._live = 'polite';\n    }\n\n    // Only set role for Firefox. Set role based on aria-live because setting role=\"alert\" implies\n    // aria-live=\"assertive\" which may cause issues if aria-live is set to \"polite\" above.\n    if (this._platform.FIREFOX) {\n      if (this._live === 'polite') {\n        this._role = 'status';\n      }\n      if (this._live === 'assertive') {\n        this._role = 'alert';\n      }\n    }\n  }\n\n  /** Attach a component portal as content to this snack bar container. */\n  attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n    this._assertNotAttached();\n    this._applySnackBarClasses();\n    return this._portalOutlet.attachComponentPortal(portal);\n  }\n\n  /** Attach a template portal as content to this snack bar container. */\n  attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n    this._assertNotAttached();\n    this._applySnackBarClasses();\n    return this._portalOutlet.attachTemplatePortal(portal);\n  }\n\n  /**\n   * Attaches a DOM portal to the snack bar container.\n   * @deprecated To be turned into a method.\n   * @breaking-change 10.0.0\n   */\n  override attachDomPortal = (portal: DomPortal) => {\n    this._assertNotAttached();\n    this._applySnackBarClasses();\n    return this._portalOutlet.attachDomPortal(portal);\n  }\n\n  /** Handle end of animations, updating the state of the snackbar. */\n  onAnimationEnd(event: AnimationEvent) {\n    const {fromState, toState} = event;\n\n    if ((toState === 'void' && fromState !== 'void') || toState === 'hidden') {\n      this._completeExit();\n    }\n\n    if (toState === 'visible') {\n      // Note: we shouldn't use `this` inside the zone callback,\n      // because it can cause a memory leak.\n      const onEnter = this._onEnter;\n\n      this._ngZone.run(() => {\n        onEnter.next();\n        onEnter.complete();\n      });\n    }\n  }\n\n  /** Begin animation of snack bar entrance into view. */\n  enter(): void {\n    if (!this._destroyed) {\n      this._animationState = 'visible';\n      this._changeDetectorRef.detectChanges();\n      this._screenReaderAnnounce();\n    }\n  }\n\n  /** Begin animation of the snack bar exiting from view. */\n  exit(): Observable<void> {\n    // Note: this one transitions to `hidden`, rather than `void`, in order to handle the case\n    // where multiple snack bars are opened in quick succession (e.g. two consecutive calls to\n    // `MatSnackBar.open`).\n    this._animationState = 'hidden';\n\n    // Mark this element with an 'exit' attribute to indicate that the snackbar has\n    // been dismissed and will soon be removed from the DOM. This is used by the snackbar\n    // test harness.\n    this._elementRef.nativeElement.setAttribute('mat-exit', '');\n\n    // If the snack bar hasn't been announced by the time it exits it wouldn't have been open\n    // long enough to visually read it either, so clear the timeout for announcing.\n    clearTimeout(this._announceTimeoutId);\n\n    return this._onExit;\n  }\n\n  /** Makes sure the exit callbacks have been invoked when the element is destroyed. */\n  ngOnDestroy() {\n    this._destroyed = true;\n    this._completeExit();\n  }\n\n  /**\n   * Waits for the zone to settle before removing the element. Helps prevent\n   * errors where we end up removing an element which is in the middle of an animation.\n   */\n  private _completeExit() {\n    this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n      this._onExit.next();\n      this._onExit.complete();\n    });\n  }\n\n  /** Applies the various positioning and user-configured CSS classes to the snack bar. */\n  private _applySnackBarClasses() {\n    const element: HTMLElement = this._elementRef.nativeElement;\n    const panelClasses = this.snackBarConfig.panelClass;\n\n    if (panelClasses) {\n      if (Array.isArray(panelClasses)) {\n        // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n        panelClasses.forEach(cssClass => element.classList.add(cssClass));\n      } else {\n        element.classList.add(panelClasses);\n      }\n    }\n\n    if (this.snackBarConfig.horizontalPosition === 'center') {\n      element.classList.add('mat-snack-bar-center');\n    }\n\n    if (this.snackBarConfig.verticalPosition === 'top') {\n      element.classList.add('mat-snack-bar-top');\n    }\n  }\n\n  /** Asserts that no content is already attached to the container. */\n  private _assertNotAttached() {\n    if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('Attempting to attach snack bar content after content is already attached');\n    }\n  }\n\n  /**\n   * Starts a timeout to move the snack bar content to the live region so screen readers will\n   * announce it.\n   */\n  private _screenReaderAnnounce() {\n    if (!this._announceTimeoutId) {\n      this._ngZone.runOutsideAngular(() => {\n        this._announceTimeoutId = setTimeout(() => {\n          const inertElement = this._elementRef.nativeElement.querySelector('[aria-hidden]');\n          const liveElement = this._elementRef.nativeElement.querySelector('[aria-live]');\n\n          if (inertElement && liveElement) {\n            // If an element in the snack bar content is focused before being moved\n            // track it and restore focus after moving to the live region.\n            let focusedElement: HTMLElement | null = null;\n            if (this._platform.isBrowser &&\n                document.activeElement instanceof HTMLElement &&\n                inertElement.contains(document.activeElement)) {\n              focusedElement = document.activeElement;\n            }\n\n            inertElement.removeAttribute('aria-hidden');\n            liveElement.appendChild(inertElement);\n            focusedElement?.focus();\n\n            this._onAnnounce.next();\n            this._onAnnounce.complete();\n          }\n        }, this._announceDelay);\n      });\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 {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {SimpleSnackBar} from './simple-snack-bar';\nimport {MatSnackBarContainer} from './snack-bar-container';\n\n\n@NgModule({\n  imports: [\n    OverlayModule,\n    PortalModule,\n    CommonModule,\n    MatButtonModule,\n    MatCommonModule,\n  ],\n  exports: [MatSnackBarContainer, MatCommonModule],\n  declarations: [MatSnackBarContainer, SimpleSnackBar],\n  entryComponents: [MatSnackBarContainer, SimpleSnackBar],\n})\nexport class MatSnackBarModule {}\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 {LiveAnnouncer} from '@angular/cdk/a11y';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {Overlay, OverlayConfig, OverlayRef} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, TemplatePortal} from '@angular/cdk/portal';\nimport {\n  ComponentRef,\n  EmbeddedViewRef,\n  Inject,\n  Injectable,\n  InjectionToken,\n  Injector,\n  Optional,\n  SkipSelf,\n  TemplateRef,\n  OnDestroy, Type,\n} from '@angular/core';\nimport {takeUntil} from 'rxjs/operators';\nimport {TextOnlySnackBar, SimpleSnackBar} from './simple-snack-bar';\nimport {MAT_SNACK_BAR_DATA, MatSnackBarConfig} from './snack-bar-config';\nimport {MatSnackBarContainer, _SnackBarContainer} from './snack-bar-container';\nimport {MatSnackBarModule} from './snack-bar-module';\nimport {MatSnackBarRef} from './snack-bar-ref';\n\n\n/** Injection token that can be used to specify default snack bar. */\nexport const MAT_SNACK_BAR_DEFAULT_OPTIONS =\n    new InjectionToken<MatSnackBarConfig>('mat-snack-bar-default-options', {\n      providedIn: 'root',\n      factory: MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY,\n    });\n\n/** @docs-private */\nexport function MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY(): MatSnackBarConfig {\n  return new MatSnackBarConfig();\n}\n\n/**\n * Service to dispatch Material Design snack bar messages.\n */\n@Injectable({providedIn: MatSnackBarModule})\nexport class MatSnackBar implements OnDestroy {\n  /**\n   * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\n   * If there is a parent snack-bar service, all operations should delegate to that parent\n   * via `_openedSnackBarRef`.\n   */\n  private _snackBarRefAtThisLevel: MatSnackBarRef<any> | null = null;\n\n  /** The component that should be rendered as the snack bar's simple component. */\n  protected simpleSnackBarComponent: Type<TextOnlySnackBar> = SimpleSnackBar;\n\n  /** The container component that attaches the provided template or component. */\n  protected snackBarContainerComponent: Type<_SnackBarContainer> = MatSnackBarContainer;\n\n  /** The CSS class to apply for handset mode. */\n  protected handsetCssClass = 'mat-snack-bar-handset';\n\n  /** Reference to the currently opened snackbar at *any* level. */\n  get _openedSnackBarRef(): MatSnackBarRef<any> | null {\n    const parent = this._parentSnackBar;\n    return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;\n  }\n\n  set _openedSnackBarRef(value: MatSnackBarRef<any> | null) {\n    if (this._parentSnackBar) {\n      this._parentSnackBar._openedSnackBarRef = value;\n    } else {\n      this._snackBarRefAtThisLevel = value;\n    }\n  }\n\n  constructor(\n      private _overlay: Overlay,\n      private _live: LiveAnnouncer,\n      private _injector: Injector,\n      private _breakpointObserver: BreakpointObserver,\n      @Optional() @SkipSelf() private _parentSnackBar: MatSnackBar,\n      @Inject(MAT_SNACK_BAR_DEFAULT_OPTIONS) private _defaultConfig: MatSnackBarConfig) {}\n\n  /**\n   * Creates and dispatches a snack bar with a custom component for the content, removing any\n   * currently opened snack bars.\n   *\n   * @param component Component to be instantiated.\n   * @param config Extra configuration for the snack bar.\n   */\n  openFromComponent<T>(component: ComponentType<T>, config?: MatSnackBarConfig):\n      MatSnackBarRef<T> {\n    return this._attach(component, config) as MatSnackBarRef<T>;\n  }\n\n  /**\n   * Creates and dispatches a snack bar with a custom template for the content, removing any\n   * currently opened snack bars.\n   *\n   * @param template Template to be instantiated.\n   * @param config Extra configuration for the snack bar.\n   */\n  openFromTemplate(template: TemplateRef<any>, config?: MatSnackBarConfig):\n      MatSnackBarRef<EmbeddedViewRef<any>> {\n    return this._attach(template, config);\n  }\n\n  /**\n   * Opens a snackbar with a message and an optional action.\n   * @param message The message to show in the snackbar.\n   * @param action The label for the snackbar action.\n   * @param config Additional configuration options for the snackbar.\n   */\n  open(message: string, action: string = '', config?: MatSnackBarConfig):\n      MatSnackBarRef<TextOnlySnackBar> {\n    const _config = {...this._defaultConfig, ...config};\n\n    // Since the user doesn't have access to the component, we can\n    // override the data to pass in our own message and action.\n    _config.data = {message, action};\n\n    // Since the snack bar has `role=\"alert\"`, we don't\n    // want to announce the same message twice.\n    if (_config.announcementMessage === message) {\n      _config.announcementMessage = undefined;\n    }\n\n    return this.openFromComponent(this.simpleSnackBarComponent, _config);\n  }\n\n  /**\n   * Dismisses the currently-visible snack bar.\n   */\n  dismiss(): void {\n    if (this._openedSnackBarRef) {\n      this._openedSnackBarRef.dismiss();\n    }\n  }\n\n  ngOnDestroy() {\n    // Only dismiss the snack bar at the current level on destroy.\n    if (this._snackBarRefAtThisLevel) {\n      this._snackBarRefAtThisLevel.dismiss();\n    }\n  }\n\n  /**\n   * Attaches the snack bar container component to the overlay.\n   */\n  private _attachSnackBarContainer(overlayRef: OverlayRef,\n                                     config: MatSnackBarConfig): _SnackBarContainer {\n\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n    const injector = Injector.create({\n      parent: userInjector || this._injector,\n      providers: [{provide: MatSnackBarConfig, useValue: config}]\n    });\n\n    const containerPortal =\n        new ComponentPortal(this.snackBarContainerComponent, config.viewContainerRef, injector);\n    const containerRef: ComponentRef<_SnackBarContainer> =\n        overlayRef.attach(containerPortal);\n    containerRef.instance.snackBarConfig = config;\n    return containerRef.instance;\n  }\n\n  /**\n   * Places a new component or a template as the content of the snack bar container.\n   */\n  private _attach<T>(content: ComponentType<T> | TemplateRef<T>, userConfig?: MatSnackBarConfig):\n      MatSnackBarRef<T | EmbeddedViewRef<any>> {\n\n    const config = {...new MatSnackBarConfig(), ...this._defaultConfig, ...userConfig};\n    const overlayRef = this._createOverlay(config);\n    const container = this._attachSnackBarContainer(overlayRef, config);\n    const snackBarRef = new MatSnackBarRef<T | EmbeddedViewRef<any>>(container, overlayRef);\n\n    if (content instanceof TemplateRef) {\n      const portal = new TemplatePortal(content, null!, {\n        $implicit: config.data,\n        snackBarRef\n      } as any);\n\n      snackBarRef.instance = container.attachTemplatePortal(portal);\n    } else {\n      const injector = this._createInjector(config, snackBarRef);\n      const portal = new ComponentPortal(content, undefined, injector);\n      const contentRef = container.attachComponentPortal<T>(portal);\n\n      // We can't pass this via the injector, because the injector is created earlier.\n      snackBarRef.instance = contentRef.instance;\n    }\n\n    // Subscribe to the breakpoint observer and attach the mat-snack-bar-handset class as\n    // appropriate. This class is applied to the overlay element because the overlay must expand to\n    // fill the width of the screen for full width snackbars.\n    this._breakpointObserver.observe(Breakpoints.HandsetPortrait).pipe(\n        takeUntil(overlayRef.detachments())\n    ).subscribe(state => {\n      const classList = overlayRef.overlayElement.classList;\n      state.matches ? classList.add(this.handsetCssClass) : classList.remove(this.handsetCssClass);\n    });\n\n    if (config.announcementMessage) {\n      // Wait until the snack bar contents have been announced then deliver this message.\n      container._onAnnounce.subscribe(() => {\n        this._live.announce(config.announcementMessage!, config.politeness);\n      });\n    }\n\n    this._animateSnackBar(snackBarRef, config);\n    this._openedSnackBarRef = snackBarRef;\n    return this._openedSnackBarRef;\n  }\n\n  /** Animates the old snack bar out and the new one in. */\n  private _animateSnackBar(snackBarRef: MatSnackBarRef<any>, config: MatSnackBarConfig) {\n    // When the snackbar is dismissed, clear the reference to it.\n    snackBarRef.afterDismissed().subscribe(() => {\n      // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.\n      if (this._openedSnackBarRef == snackBarRef) {\n        this._openedSnackBarRef = null;\n      }\n\n      if (config.announcementMessage) {\n        this._live.clear();\n      }\n    });\n\n    if (this._openedSnackBarRef) {\n      // If a snack bar is already in view, dismiss it and enter the\n      // new snack bar after exit animation is complete.\n      this._openedSnackBarRef.afterDismissed().subscribe(() => {\n        snackBarRef.containerInstance.enter();\n      });\n      this._openedSnackBarRef.dismiss();\n    } else {\n      // If no snack bar is in view, enter the new snack bar.\n      snackBarRef.containerInstance.enter();\n    }\n\n    // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.\n    if (config.duration && config.duration > 0) {\n      snackBarRef.afterOpened().subscribe(() => snackBarRef._dismissAfter(config.duration!));\n    }\n  }\n\n  /**\n   * Creates a new overlay and places it in the correct location.\n   * @param config The user-specified snack bar config.\n   */\n  private _createOverlay(config: MatSnackBarConfig): OverlayRef {\n    const overlayConfig = new OverlayConfig();\n    overlayConfig.direction = config.direction;\n\n    let positionStrategy = this._overlay.position().global();\n    // Set horizontal position.\n    const isRtl = config.direction === 'rtl';\n    const isLeft = (\n        config.horizontalPosition === 'left' ||\n        (config.horizontalPosition === 'start' && !isRtl) ||\n        (config.horizontalPosition === 'end' && isRtl));\n    const isRight = !isLeft && config.horizontalPosition !== 'center';\n    if (isLeft) {\n      positionStrategy.left('0');\n    } else if (isRight) {\n      positionStrategy.right('0');\n    } else {\n      positionStrategy.centerHorizontally();\n    }\n    // Set horizontal position.\n    if (config.verticalPosition === 'top') {\n      positionStrategy.top('0');\n    } else {\n      positionStrategy.bottom('0');\n    }\n\n    overlayConfig.positionStrategy = positionStrategy;\n    return this._overlay.create(overlayConfig);\n  }\n\n  /**\n   * Creates an injector to be used inside of a snack bar component.\n   * @param config Config that was used to create the snack bar.\n   * @param snackBarRef Reference to the snack bar.\n   */\n  private _createInjector<T>(config: MatSnackBarConfig, snackBarRef: MatSnackBarRef<T>): Injector {\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n\n    return Injector.create({\n      parent: userInjector || this._injector,\n      providers: [\n        {provide: MatSnackBarRef, useValue: snackBarRef},\n        {provide: MAT_SNACK_BAR_DATA, useValue: config.data}\n      ]\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\nexport * from './snack-bar-module';\nexport * from './snack-bar';\nexport * from './snack-bar-container';\nexport * from './snack-bar-config';\nexport * from './snack-bar-ref';\nexport * from './simple-snack-bar';\nexport * from './snack-bar-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/@angular/material/fesm2015/tooltip.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/tooltip.js.map	(revision fa375fed9635035b3c62cf759f42938afa14271b)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/tooltip.js.map	(revision 8d391a12ef6baa3aefe9611a6f7c5b569977c946)
@@ -1,1 +1,1 @@
-{"version":3,"file":"tooltip.js","sources":["../../../../../../src/material/tooltip/tooltip-animations.ts","../../../../../../src/material/tooltip/tooltip.ts","../../../../../../src/material/tooltip/tooltip-module.ts","../../../../../../src/material/tooltip/public-api.ts","../../../../../../src/material/tooltip/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 */\nimport {\n  animate,\n  AnimationTriggerMetadata,\n  keyframes,\n  state,\n  style,\n  transition,\n  trigger,\n} from '@angular/animations';\n\n/**\n * Animations used by MatTooltip.\n * @docs-private\n */\nexport const matTooltipAnimations: {\n  readonly tooltipState: AnimationTriggerMetadata;\n} = {\n  /** Animation that transitions a tooltip in and out. */\n  tooltipState: trigger('state', [\n    state('initial, void, hidden', style({opacity: 0, transform: 'scale(0)'})),\n    state('visible', style({transform: 'scale(1)'})),\n    transition('* => visible', animate('200ms cubic-bezier(0, 0, 0.2, 1)', keyframes([\n      style({opacity: 0, transform: 'scale(0)', offset: 0}),\n      style({opacity: 0.5, transform: 'scale(0.99)', offset: 0.5}),\n      style({opacity: 1, transform: 'scale(1)', offset: 1})\n    ]))),\n    transition('* => hidden', animate('100ms cubic-bezier(0, 0, 0.2, 1)', style({opacity: 0}))),\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 {AnimationEvent} from '@angular/animations';\nimport {AriaDescriber, FocusMonitor} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty, NumberInput} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {BreakpointObserver, Breakpoints, BreakpointState} from '@angular/cdk/layout';\nimport {\n  ConnectedPosition,\n  FlexibleConnectedPositionStrategy,\n  HorizontalConnectionPos,\n  OriginConnectionPosition,\n  Overlay,\n  OverlayConnectionPosition,\n  OverlayRef,\n  ScrollStrategy,\n  VerticalConnectionPos,\n  ConnectionPositionPair,\n} from '@angular/cdk/overlay';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {ScrollDispatcher} from '@angular/cdk/scrolling';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Directive,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  Optional,\n  ViewContainerRef,\n  ViewEncapsulation,\n  AfterViewInit,\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {Observable, Subject} from 'rxjs';\nimport {take, takeUntil} from 'rxjs/operators';\n\nimport {matTooltipAnimations} from './tooltip-animations';\n\n\n/** Possible positions for a tooltip. */\nexport type TooltipPosition = 'left' | 'right' | 'above' | 'below' | 'before' | 'after';\n\n/**\n * Options for how the tooltip trigger should handle touch gestures.\n * See `MatTooltip.touchGestures` for more information.\n */\nexport type TooltipTouchGestures = 'auto' | 'on' | 'off';\n\n/** Possible visibility states of a tooltip. */\nexport type TooltipVisibility = 'initial' | 'visible' | 'hidden';\n\n/** Time in ms to throttle repositioning after scroll events. */\nexport const SCROLL_THROTTLE_MS = 20;\n\n/**\n * CSS class that will be attached to the overlay panel.\n * @deprecated\n * @breaking-change 13.0.0 remove this variable\n */\nexport const TOOLTIP_PANEL_CLASS = 'mat-tooltip-panel';\n\nconst PANEL_CLASS = 'tooltip-panel';\n\n/** Options used to bind passive event listeners. */\nconst passiveListenerOptions = normalizePassiveListenerOptions({passive: true});\n\n/**\n * Time between the user putting the pointer on a tooltip\n * trigger and the long press event being fired.\n */\nconst LONGPRESS_DELAY = 500;\n\n/**\n * Creates an error to be thrown if the user supplied an invalid tooltip position.\n * @docs-private\n */\nexport function getMatTooltipInvalidPositionError(position: string) {\n  return Error(`Tooltip position \"${position}\" is invalid.`);\n}\n\n/** Injection token that determines the scroll handling while a tooltip is visible. */\nexport const MAT_TOOLTIP_SCROLL_STRATEGY =\n    new InjectionToken<() => ScrollStrategy>('mat-tooltip-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n  return () => overlay.scrollStrategies.reposition({scrollThrottle: SCROLL_THROTTLE_MS});\n}\n\n/** @docs-private */\nexport const MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n  provide: MAT_TOOLTIP_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY,\n};\n\n/** Default `matTooltip` options that can be overridden. */\nexport interface MatTooltipDefaultOptions {\n  showDelay: number;\n  hideDelay: number;\n  touchendHideDelay: number;\n  touchGestures?: TooltipTouchGestures;\n  position?: TooltipPosition;\n}\n\n/** Injection token to be used to override the default options for `matTooltip`. */\nexport const MAT_TOOLTIP_DEFAULT_OPTIONS =\n    new InjectionToken<MatTooltipDefaultOptions>('mat-tooltip-default-options', {\n      providedIn: 'root',\n      factory: MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY\n    });\n\n/** @docs-private */\nexport function MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY(): MatTooltipDefaultOptions {\n  return {\n    showDelay: 0,\n    hideDelay: 0,\n    touchendHideDelay: 1500,\n  };\n}\n\n\n@Directive()\nexport abstract class _MatTooltipBase<T extends _TooltipComponentBase> implements OnDestroy,\n  AfterViewInit {\n  _overlayRef: OverlayRef | null;\n  _tooltipInstance: T | null;\n\n  private _portal: ComponentPortal<T>;\n  private _position: TooltipPosition = 'below';\n  private _disabled: boolean = false;\n  private _tooltipClass: string|string[]|Set<string>|{[key: string]: any};\n  private _scrollStrategy: () => ScrollStrategy;\n  private _viewInitialized = false;\n  private _pointerExitEventsInitialized = false;\n  protected abstract readonly _tooltipComponent: ComponentType<T>;\n  protected _viewportMargin = 8;\n  private _currentPosition: TooltipPosition;\n  protected readonly _cssClassPrefix: string = 'mat';\n\n  /** Allows the user to define the position of the tooltip relative to the parent element */\n  @Input('matTooltipPosition')\n  get position(): TooltipPosition { return this._position; }\n  set position(value: TooltipPosition) {\n    if (value !== this._position) {\n      this._position = value;\n\n      if (this._overlayRef) {\n        this._updatePosition(this._overlayRef);\n        this._tooltipInstance?.show(0);\n        this._overlayRef.updatePosition();\n      }\n    }\n  }\n\n  /** Disables the display of the tooltip. */\n  @Input('matTooltipDisabled')\n  get disabled(): boolean { return this._disabled; }\n  set disabled(value) {\n    this._disabled = coerceBooleanProperty(value);\n\n    // If tooltip is disabled, hide immediately.\n    if (this._disabled) {\n      this.hide(0);\n    } else {\n      this._setupPointerEnterEventsIfNeeded();\n    }\n  }\n\n  /** The default delay in ms before showing the tooltip after show is called */\n  @Input('matTooltipShowDelay') showDelay: number = this._defaultOptions.showDelay;\n\n  /** The default delay in ms before hiding the tooltip after hide is called */\n  @Input('matTooltipHideDelay') hideDelay: number = this._defaultOptions.hideDelay;\n\n  /**\n   * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive\n   * uses a long press gesture to show and hide, however it can conflict with the native browser\n   * gestures. To work around the conflict, Angular Material disables native gestures on the\n   * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable\n   * elements). The different values for this option configure the touch event handling as follows:\n   * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native\n   *   browser gestures on particular elements. In particular, it allows text selection on inputs\n   *   and textareas, and preserves the native browser dragging on elements marked as `draggable`.\n   * - `on` - Enables touch gestures for all elements and disables native\n   *   browser gestures with no exceptions.\n   * - `off` - Disables touch gestures. Note that this will prevent the tooltip from\n   *   showing on touch devices.\n   */\n  @Input('matTooltipTouchGestures') touchGestures: TooltipTouchGestures = 'auto';\n\n  /** The message to be displayed in the tooltip */\n  @Input('matTooltip')\n  get message() { return this._message; }\n  set message(value: string) {\n    this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this._message, 'tooltip');\n\n    // If the message is not a string (e.g. number), convert it to a string and trim it.\n    // Must convert with `String(value)`, not `${value}`, otherwise Closure Compiler optimises\n    // away the string-conversion: https://github.com/angular/components/issues/20684\n    this._message = value != null ? String(value).trim() : '';\n\n    if (!this._message && this._isTooltipVisible()) {\n      this.hide(0);\n    } else {\n      this._setupPointerEnterEventsIfNeeded();\n      this._updateTooltipMessage();\n      this._ngZone.runOutsideAngular(() => {\n        // The `AriaDescriber` has some functionality that avoids adding a description if it's the\n        // same as the `aria-label` of an element, however we can't know whether the tooltip trigger\n        // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the\n        // issue by deferring the description by a tick so Angular has time to set the `aria-label`.\n        Promise.resolve().then(() => {\n          this._ariaDescriber.describe(this._elementRef.nativeElement, this.message, 'tooltip');\n        });\n      });\n    }\n  }\n  private _message = '';\n\n  /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\n  @Input('matTooltipClass')\n  get tooltipClass() { return this._tooltipClass; }\n  set tooltipClass(value: string|string[]|Set<string>|{[key: string]: any}) {\n    this._tooltipClass = value;\n    if (this._tooltipInstance) {\n      this._setTooltipClass(this._tooltipClass);\n    }\n  }\n\n  /** Manually-bound passive event listeners. */\n  private readonly _passiveListeners:\n      (readonly [string, EventListenerOrEventListenerObject])[] = [];\n\n  /** Reference to the current document. */\n  private _document: Document;\n\n  /** Timer started at the last `touchstart` event. */\n  private _touchstartTimeout: any;\n\n  /** Emits when the component is destroyed. */\n  private readonly _destroyed = new Subject<void>();\n\n  constructor(\n    private _overlay: Overlay,\n    private _elementRef: ElementRef<HTMLElement>,\n    private _scrollDispatcher: ScrollDispatcher,\n    private _viewContainerRef: ViewContainerRef,\n    private _ngZone: NgZone,\n    private _platform: Platform,\n    private _ariaDescriber: AriaDescriber,\n    private _focusMonitor: FocusMonitor,\n    scrollStrategy: any,\n    protected _dir: Directionality,\n    private _defaultOptions: MatTooltipDefaultOptions,\n    @Inject(DOCUMENT) _document: any) {\n\n    this._scrollStrategy = scrollStrategy;\n    this._document = _document;\n\n    if (_defaultOptions) {\n      if (_defaultOptions.position) {\n        this.position = _defaultOptions.position;\n      }\n\n      if (_defaultOptions.touchGestures) {\n        this.touchGestures = _defaultOptions.touchGestures;\n      }\n    }\n\n    _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n      if (this._overlayRef) {\n        this._updatePosition(this._overlayRef);\n      }\n    });\n\n    _ngZone.runOutsideAngular(() => {\n      _elementRef.nativeElement.addEventListener('keydown', this._handleKeydown);\n    });\n  }\n\n  ngAfterViewInit() {\n    // This needs to happen after view init so the initial values for all inputs have been set.\n    this._viewInitialized = true;\n    this._setupPointerEnterEventsIfNeeded();\n\n    this._focusMonitor.monitor(this._elementRef)\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(origin => {\n        // Note that the focus monitor runs outside the Angular zone.\n        if (!origin) {\n          this._ngZone.run(() => this.hide(0));\n        } else if (origin === 'keyboard') {\n          this._ngZone.run(() => this.show());\n        }\n    });\n  }\n\n  /**\n   * Dispose the tooltip when destroyed.\n   */\n  ngOnDestroy() {\n    const nativeElement = this._elementRef.nativeElement;\n\n    clearTimeout(this._touchstartTimeout);\n\n    if (this._overlayRef) {\n      this._overlayRef.dispose();\n      this._tooltipInstance = null;\n    }\n\n    // Clean up the event listeners set in the constructor\n    nativeElement.removeEventListener('keydown', this._handleKeydown);\n    this._passiveListeners.forEach(([event, listener]) => {\n      nativeElement.removeEventListener(event, listener, passiveListenerOptions);\n    });\n    this._passiveListeners.length = 0;\n\n    this._destroyed.next();\n    this._destroyed.complete();\n\n    this._ariaDescriber.removeDescription(nativeElement, this.message, 'tooltip');\n    this._focusMonitor.stopMonitoring(nativeElement);\n  }\n\n  /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\n  show(delay: number = this.showDelay): void {\n    if (this.disabled || !this.message || (this._isTooltipVisible() &&\n      !this._tooltipInstance!._showTimeoutId && !this._tooltipInstance!._hideTimeoutId)) {\n        return;\n    }\n\n    const overlayRef = this._createOverlay();\n    this._detach();\n    this._portal = this._portal ||\n       new ComponentPortal(this._tooltipComponent, this._viewContainerRef);\n    this._tooltipInstance = overlayRef.attach(this._portal).instance;\n    this._tooltipInstance.afterHidden()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(() => this._detach());\n    this._setTooltipClass(this._tooltipClass);\n    this._updateTooltipMessage();\n    this._tooltipInstance!.show(delay);\n  }\n\n  /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\n  hide(delay: number = this.hideDelay): void {\n    if (this._tooltipInstance) {\n      this._tooltipInstance.hide(delay);\n    }\n  }\n\n  /** Shows/hides the tooltip */\n  toggle(): void {\n    this._isTooltipVisible() ? this.hide() : this.show();\n  }\n\n  /** Returns true if the tooltip is currently visible to the user */\n  _isTooltipVisible(): boolean {\n    return !!this._tooltipInstance && this._tooltipInstance.isVisible();\n  }\n\n  /**\n   * Handles the keydown events on the host element.\n   * Needs to be an arrow function so that we can use it in addEventListener.\n   */\n  private _handleKeydown = (event: KeyboardEvent) => {\n    if (this._isTooltipVisible() && event.keyCode === ESCAPE && !hasModifierKey(event)) {\n      event.preventDefault();\n      event.stopPropagation();\n      this._ngZone.run(() => this.hide(0));\n    }\n  }\n\n  /** Create the overlay config and position strategy */\n  private _createOverlay(): OverlayRef {\n    if (this._overlayRef) {\n      return this._overlayRef;\n    }\n\n    const scrollableAncestors =\n        this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);\n\n    // Create connected position strategy that listens for scroll events to reposition.\n    const strategy = this._overlay.position()\n                         .flexibleConnectedTo(this._elementRef)\n                         .withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`)\n                         .withFlexibleDimensions(false)\n                         .withViewportMargin(this._viewportMargin)\n                         .withScrollableContainers(scrollableAncestors);\n\n    strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe(change => {\n      this._updateCurrentPositionClass(change.connectionPair);\n\n      if (this._tooltipInstance) {\n        if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {\n          // After position changes occur and the overlay is clipped by\n          // a parent scrollable then close the tooltip.\n          this._ngZone.run(() => this.hide(0));\n        }\n      }\n    });\n\n    this._overlayRef = this._overlay.create({\n      direction: this._dir,\n      positionStrategy: strategy,\n      panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}`,\n      scrollStrategy: this._scrollStrategy()\n    });\n\n    this._updatePosition(this._overlayRef);\n\n    this._overlayRef.detachments()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(() => this._detach());\n\n    this._overlayRef.outsidePointerEvents()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(() => this._tooltipInstance?._handleBodyInteraction());\n\n    return this._overlayRef;\n  }\n\n  /** Detaches the currently-attached tooltip. */\n  private _detach() {\n    if (this._overlayRef && this._overlayRef.hasAttached()) {\n      this._overlayRef.detach();\n    }\n\n    this._tooltipInstance = null;\n  }\n\n  /** Updates the position of the current tooltip. */\n  private _updatePosition(overlayRef: OverlayRef) {\n    const position = overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n    const origin = this._getOrigin();\n    const overlay = this._getOverlayPosition();\n\n    position.withPositions([\n      this._addOffset({...origin.main, ...overlay.main}),\n      this._addOffset({...origin.fallback, ...overlay.fallback})\n    ]);\n  }\n\n  /** Adds the configured offset to a position. Used as a hook for child classes. */\n  protected _addOffset(position: ConnectedPosition): ConnectedPosition {\n    return position;\n  }\n\n  /**\n   * Returns the origin position and a fallback position based on the user's position preference.\n   * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).\n   */\n  _getOrigin(): {main: OriginConnectionPosition, fallback: OriginConnectionPosition} {\n    const isLtr = !this._dir || this._dir.value == 'ltr';\n    const position = this.position;\n    let originPosition: OriginConnectionPosition;\n\n    if (position == 'above' || position == 'below') {\n      originPosition = {originX: 'center', originY: position == 'above' ? 'top' : 'bottom'};\n    } else if (\n      position == 'before' ||\n      (position == 'left' && isLtr) ||\n      (position == 'right' && !isLtr)) {\n      originPosition = {originX: 'start', originY: 'center'};\n    } else if (\n      position == 'after' ||\n      (position == 'right' && isLtr) ||\n      (position == 'left' && !isLtr)) {\n      originPosition = {originX: 'end', originY: 'center'};\n    } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      throw getMatTooltipInvalidPositionError(position);\n    }\n\n    const {x, y} = this._invertPosition(originPosition!.originX, originPosition!.originY);\n\n    return {\n      main: originPosition!,\n      fallback: {originX: x, originY: y}\n    };\n  }\n\n  /** Returns the overlay position and a fallback position based on the user's preference */\n  _getOverlayPosition(): {main: OverlayConnectionPosition, fallback: OverlayConnectionPosition} {\n    const isLtr = !this._dir || this._dir.value == 'ltr';\n    const position = this.position;\n    let overlayPosition: OverlayConnectionPosition;\n\n    if (position == 'above') {\n      overlayPosition = {overlayX: 'center', overlayY: 'bottom'};\n    } else if (position == 'below') {\n      overlayPosition = {overlayX: 'center', overlayY: 'top'};\n    } else if (\n      position == 'before' ||\n      (position == 'left' && isLtr) ||\n      (position == 'right' && !isLtr)) {\n      overlayPosition = {overlayX: 'end', overlayY: 'center'};\n    } else if (\n      position == 'after' ||\n      (position == 'right' && isLtr) ||\n      (position == 'left' && !isLtr)) {\n      overlayPosition = {overlayX: 'start', overlayY: 'center'};\n    } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      throw getMatTooltipInvalidPositionError(position);\n    }\n\n    const {x, y} = this._invertPosition(overlayPosition!.overlayX, overlayPosition!.overlayY);\n\n    return {\n      main: overlayPosition!,\n      fallback: {overlayX: x, overlayY: y}\n    };\n  }\n\n  /** Updates the tooltip message and repositions the overlay according to the new message length */\n  private _updateTooltipMessage() {\n    // Must wait for the message to be painted to the tooltip so that the overlay can properly\n    // calculate the correct positioning based on the size of the text.\n    if (this._tooltipInstance) {\n      this._tooltipInstance.message = this.message;\n      this._tooltipInstance._markForCheck();\n\n      this._ngZone.onMicrotaskEmpty.pipe(\n        take(1),\n        takeUntil(this._destroyed)\n      ).subscribe(() => {\n        if (this._tooltipInstance) {\n          this._overlayRef!.updatePosition();\n        }\n      });\n    }\n  }\n\n  /** Updates the tooltip class */\n  private _setTooltipClass(tooltipClass: string|string[]|Set<string>|{[key: string]: any}) {\n    if (this._tooltipInstance) {\n      this._tooltipInstance.tooltipClass = tooltipClass;\n      this._tooltipInstance._markForCheck();\n    }\n  }\n\n  /** Inverts an overlay position. */\n  private _invertPosition(x: HorizontalConnectionPos, y: VerticalConnectionPos) {\n    if (this.position === 'above' || this.position === 'below') {\n      if (y === 'top') {\n        y = 'bottom';\n      } else if (y === 'bottom') {\n        y = 'top';\n      }\n    } else {\n      if (x === 'end') {\n        x = 'start';\n      } else if (x === 'start') {\n        x = 'end';\n      }\n    }\n\n    return {x, y};\n  }\n\n  /** Updates the class on the overlay panel based on the current position of the tooltip. */\n  private _updateCurrentPositionClass(connectionPair: ConnectionPositionPair): void {\n    const {overlayY, originX, originY} = connectionPair;\n    let newPosition: TooltipPosition;\n\n    // If the overlay is in the middle along the Y axis,\n    // it means that it's either before or after.\n    if (overlayY === 'center') {\n      // Note that since this information is used for styling, we want to\n      // resolve `start` and `end` to their real values, otherwise consumers\n      // would have to remember to do it themselves on each consumption.\n      if (this._dir && this._dir.value === 'rtl') {\n        newPosition = originX === 'end' ? 'left' : 'right';\n      } else {\n        newPosition = originX === 'start' ? 'left' : 'right';\n      }\n    } else {\n      newPosition = overlayY === 'bottom' && originY === 'top' ? 'above' : 'below';\n    }\n\n    if (newPosition !== this._currentPosition) {\n      const overlayRef = this._overlayRef;\n\n      if (overlayRef) {\n        const classPrefix = `${this._cssClassPrefix}-${PANEL_CLASS}-`;\n        overlayRef.removePanelClass(classPrefix + this._currentPosition);\n        overlayRef.addPanelClass(classPrefix + newPosition);\n      }\n\n      this._currentPosition = newPosition;\n    }\n  }\n\n  /** Binds the pointer events to the tooltip trigger. */\n  private _setupPointerEnterEventsIfNeeded() {\n    // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.\n    if (this._disabled || !this.message || !this._viewInitialized ||\n        this._passiveListeners.length) {\n      return;\n    }\n\n    // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n    // first tap from firing its click event or can cause the tooltip to open for clicks.\n    if (this._platformSupportsMouseEvents()) {\n      this._passiveListeners\n          .push(['mouseenter', () => {\n            this._setupPointerExitEventsIfNeeded();\n            this.show();\n          }]);\n    } else if (this.touchGestures !== 'off') {\n      this._disableNativeGesturesIfNecessary();\n\n      this._passiveListeners\n          .push(['touchstart', () => {\n            // Note that it's important that we don't `preventDefault` here,\n            // because it can prevent click events from firing on the element.\n            this._setupPointerExitEventsIfNeeded();\n            clearTimeout(this._touchstartTimeout);\n            this._touchstartTimeout = setTimeout(() => this.show(), LONGPRESS_DELAY);\n          }]);\n    }\n\n    this._addListeners(this._passiveListeners);\n  }\n\n  private _setupPointerExitEventsIfNeeded() {\n    if (this._pointerExitEventsInitialized) {\n      return;\n    }\n    this._pointerExitEventsInitialized = true;\n\n    const exitListeners: (readonly [string, EventListenerOrEventListenerObject])[] = [];\n    if (this._platformSupportsMouseEvents()) {\n      exitListeners.push(\n        ['mouseleave', () => this.hide()],\n        ['wheel', event => this._wheelListener(event as WheelEvent)]\n      );\n    } else if (this.touchGestures !== 'off') {\n      this._disableNativeGesturesIfNecessary();\n      const touchendListener = () => {\n        clearTimeout(this._touchstartTimeout);\n        this.hide(this._defaultOptions.touchendHideDelay);\n      };\n\n      exitListeners.push(\n        ['touchend', touchendListener],\n        ['touchcancel', touchendListener],\n      );\n    }\n\n    this._addListeners(exitListeners);\n    this._passiveListeners.push(...exitListeners);\n  }\n\n  private _addListeners(\n      listeners: (readonly [string, EventListenerOrEventListenerObject])[]) {\n    listeners.forEach(([event, listener]) => {\n      this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);\n    });\n  }\n\n  private _platformSupportsMouseEvents() {\n    return !this._platform.IOS && !this._platform.ANDROID;\n  }\n\n  /** Listener for the `wheel` event on the element. */\n  private _wheelListener(event: WheelEvent) {\n    if (this._isTooltipVisible()) {\n      const elementUnderPointer = this._document.elementFromPoint(event.clientX, event.clientY);\n      const element = this._elementRef.nativeElement;\n\n      // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it\n      // won't fire if the user scrolls away using the wheel without moving their cursor. We\n      // work around it by finding the element under the user's cursor and closing the tooltip\n      // if it's not the trigger.\n      if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {\n        this.hide();\n      }\n    }\n  }\n\n  /** Disables the native browser gestures, based on how the tooltip has been configured. */\n  private _disableNativeGesturesIfNecessary() {\n    const gestures = this.touchGestures;\n\n    if (gestures !== 'off') {\n      const element = this._elementRef.nativeElement;\n      const style = element.style;\n\n      // If gestures are set to `auto`, we don't disable text selection on inputs and\n      // textareas, because it prevents the user from typing into them on iOS Safari.\n      if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {\n        style.userSelect = (style as any).msUserSelect = style.webkitUserSelect =\n            (style as any).MozUserSelect = 'none';\n      }\n\n      // If we have `auto` gestures and the element uses native HTML dragging,\n      // we don't set `-webkit-user-drag` because it prevents the native behavior.\n      if (gestures === 'on' || !element.draggable) {\n        (style as any).webkitUserDrag = 'none';\n      }\n\n      style.touchAction = 'none';\n      style.webkitTapHighlightColor = 'transparent';\n    }\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_hideDelay: NumberInput;\n  static ngAcceptInputType_showDelay: NumberInput;\n}\n\n/**\n * Directive that attaches a material design tooltip to the host element. Animates the showing and\n * hiding of a tooltip provided position (defaults to below the element).\n *\n * https://material.io/design/components/tooltips.html\n */\n@Directive({\n  selector: '[matTooltip]',\n  exportAs: 'matTooltip',\n  host: {\n    'class': 'mat-tooltip-trigger'\n  }\n})\nexport class MatTooltip extends _MatTooltipBase<TooltipComponent> {\n  protected readonly _tooltipComponent = TooltipComponent;\n\n  constructor(\n    overlay: Overlay,\n    elementRef: ElementRef<HTMLElement>,\n    scrollDispatcher: ScrollDispatcher,\n    viewContainerRef: ViewContainerRef,\n    ngZone: NgZone,\n    platform: Platform,\n    ariaDescriber: AriaDescriber,\n    focusMonitor: FocusMonitor,\n    @Inject(MAT_TOOLTIP_SCROLL_STRATEGY) scrollStrategy: any,\n    @Optional() dir: Directionality,\n    @Optional() @Inject(MAT_TOOLTIP_DEFAULT_OPTIONS) defaultOptions: MatTooltipDefaultOptions,\n    @Inject(DOCUMENT) _document: any) {\n\n    super(overlay, elementRef, scrollDispatcher, viewContainerRef, ngZone, platform, ariaDescriber,\n      focusMonitor, scrollStrategy, dir, defaultOptions, _document);\n  }\n}\n\n@Directive()\nexport abstract class _TooltipComponentBase implements OnDestroy {\n  /** Message to display in the tooltip */\n  message: string;\n\n  /** Classes to be added to the tooltip. Supports the same syntax as `ngClass`. */\n  tooltipClass: string|string[]|Set<string>|{[key: string]: any};\n\n  /** The timeout ID of any current timer set to show the tooltip */\n  _showTimeoutId: any;\n\n  /** The timeout ID of any current timer set to hide the tooltip */\n  _hideTimeoutId: any;\n\n  /** Property watched by the animation framework to show or hide the tooltip */\n  _visibility: TooltipVisibility = 'initial';\n\n  /** Whether interactions on the page should close the tooltip */\n  private _closeOnInteraction: boolean = false;\n\n  /** Subject for notifying that the tooltip has been hidden from the view */\n  private readonly _onHide: Subject<void> = new Subject();\n\n  constructor(private _changeDetectorRef: ChangeDetectorRef) {}\n\n  /**\n   * Shows the tooltip with an animation originating from the provided origin\n   * @param delay Amount of milliseconds to the delay showing the tooltip.\n   */\n  show(delay: number): void {\n    // Cancel the delayed hide if it is scheduled\n    clearTimeout(this._hideTimeoutId);\n\n    // Body interactions should cancel the tooltip if there is a delay in showing.\n    this._closeOnInteraction = true;\n    this._showTimeoutId = setTimeout(() => {\n      this._visibility = 'visible';\n      this._showTimeoutId = undefined;\n      this._onShow();\n\n      // Mark for check so if any parent component has set the\n      // ChangeDetectionStrategy to OnPush it will be checked anyways\n      this._markForCheck();\n    }, delay);\n  }\n\n  /**\n   * Begins the animation to hide the tooltip after the provided delay in ms.\n   * @param delay Amount of milliseconds to delay showing the tooltip.\n   */\n  hide(delay: number): void {\n    // Cancel the delayed show if it is scheduled\n    clearTimeout(this._showTimeoutId);\n\n    this._hideTimeoutId = setTimeout(() => {\n      this._visibility = 'hidden';\n      this._hideTimeoutId = undefined;\n\n      // Mark for check so if any parent component has set the\n      // ChangeDetectionStrategy to OnPush it will be checked anyways\n      this._markForCheck();\n    }, delay);\n  }\n\n  /** Returns an observable that notifies when the tooltip has been hidden from view. */\n  afterHidden(): Observable<void> {\n    return this._onHide;\n  }\n\n  /** Whether the tooltip is being displayed. */\n  isVisible(): boolean {\n    return this._visibility === 'visible';\n  }\n\n  ngOnDestroy() {\n    clearTimeout(this._showTimeoutId);\n    clearTimeout(this._hideTimeoutId);\n    this._onHide.complete();\n  }\n\n  _animationStart() {\n    this._closeOnInteraction = false;\n  }\n\n  _animationDone(event: AnimationEvent): void {\n    const toState = event.toState as TooltipVisibility;\n\n    if (toState === 'hidden' && !this.isVisible()) {\n      this._onHide.next();\n    }\n\n    if (toState === 'visible' || toState === 'hidden') {\n      this._closeOnInteraction = true;\n    }\n  }\n\n  /**\n   * Interactions on the HTML body should close the tooltip immediately as defined in the\n   * material design spec.\n   * https://material.io/design/components/tooltips.html#behavior\n   */\n  _handleBodyInteraction(): void {\n    if (this._closeOnInteraction) {\n      this.hide(0);\n    }\n  }\n\n  /**\n   * Marks that the tooltip needs to be checked in the next change detection run.\n   * Mainly used for rendering the initial text before positioning a tooltip, which\n   * can be problematic in components with OnPush change detection.\n   */\n  _markForCheck(): void {\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /**\n   * Callback for when the timeout in this.show() gets completed.\n   * This method is only needed by the mdc-tooltip, and so it is only implemented\n   * in the mdc-tooltip, not here.\n   */\n  protected _onShow(): void {}\n}\n\n/**\n * Internal component that wraps the tooltip's content.\n * @docs-private\n */\n@Component({\n  selector: 'mat-tooltip-component',\n  templateUrl: 'tooltip.html',\n  styleUrls: ['tooltip.css'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  animations: [matTooltipAnimations.tooltipState],\n  host: {\n    // Forces the element to have a layout in IE and Edge. This fixes issues where the element\n    // won't be rendered if the animations are disabled or there is no web animations polyfill.\n    '[style.zoom]': '_visibility === \"visible\" ? 1 : null',\n    'aria-hidden': 'true',\n  }\n})\nexport class TooltipComponent extends _TooltipComponentBase {\n  /** Stream that emits whether the user has a handset-sized display.  */\n  _isHandset: Observable<BreakpointState> = this._breakpointObserver.observe(Breakpoints.Handset);\n\n  constructor(\n    changeDetectorRef: ChangeDetectorRef,\n    private _breakpointObserver: BreakpointObserver) {\n    super(changeDetectorRef);\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 {OverlayModule} from '@angular/cdk/overlay';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {\n  MatTooltip,\n  TooltipComponent,\n  MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER,\n} from './tooltip';\n\n@NgModule({\n  imports: [\n    A11yModule,\n    CommonModule,\n    OverlayModule,\n    MatCommonModule,\n  ],\n  exports: [MatTooltip, TooltipComponent, MatCommonModule, CdkScrollableModule],\n  declarations: [MatTooltip, TooltipComponent],\n  entryComponents: [TooltipComponent],\n  providers: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER]\n})\nexport class MatTooltipModule {}\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 './tooltip-module';\nexport * from './tooltip';\nexport * from './tooltip-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
+{"version":3,"file":"tooltip.js","sources":["../../../../../../src/material/tooltip/tooltip-animations.ts","../../../../../../src/material/tooltip/tooltip.ts","../../../../../../src/material/tooltip/tooltip-module.ts","../../../../../../src/material/tooltip/public-api.ts","../../../../../../src/material/tooltip/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 */\nimport {\n  animate,\n  AnimationTriggerMetadata,\n  keyframes,\n  state,\n  style,\n  transition,\n  trigger,\n} from '@angular/animations';\n\n/**\n * Animations used by MatTooltip.\n * @docs-private\n */\nexport const matTooltipAnimations: {\n  readonly tooltipState: AnimationTriggerMetadata;\n} = {\n  /** Animation that transitions a tooltip in and out. */\n  tooltipState: trigger('state', [\n    state('initial, void, hidden', style({opacity: 0, transform: 'scale(0)'})),\n    state('visible', style({transform: 'scale(1)'})),\n    transition('* => visible', animate('200ms cubic-bezier(0, 0, 0.2, 1)', keyframes([\n      style({opacity: 0, transform: 'scale(0)', offset: 0}),\n      style({opacity: 0.5, transform: 'scale(0.99)', offset: 0.5}),\n      style({opacity: 1, transform: 'scale(1)', offset: 1})\n    ]))),\n    transition('* => hidden', animate('100ms cubic-bezier(0, 0, 0.2, 1)', style({opacity: 0}))),\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 {AnimationEvent} from '@angular/animations';\nimport {AriaDescriber, FocusMonitor} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty, NumberInput} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {BreakpointObserver, Breakpoints, BreakpointState} from '@angular/cdk/layout';\nimport {\n  ConnectedPosition,\n  FlexibleConnectedPositionStrategy,\n  HorizontalConnectionPos,\n  OriginConnectionPosition,\n  Overlay,\n  OverlayConnectionPosition,\n  OverlayRef,\n  ScrollStrategy,\n  VerticalConnectionPos,\n  ConnectionPositionPair,\n} from '@angular/cdk/overlay';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {ScrollDispatcher} from '@angular/cdk/scrolling';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Directive,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  Optional,\n  ViewContainerRef,\n  ViewEncapsulation,\n  AfterViewInit,\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {Observable, Subject} from 'rxjs';\nimport {take, takeUntil} from 'rxjs/operators';\n\nimport {matTooltipAnimations} from './tooltip-animations';\n\n\n/** Possible positions for a tooltip. */\nexport type TooltipPosition = 'left' | 'right' | 'above' | 'below' | 'before' | 'after';\n\n/**\n * Options for how the tooltip trigger should handle touch gestures.\n * See `MatTooltip.touchGestures` for more information.\n */\nexport type TooltipTouchGestures = 'auto' | 'on' | 'off';\n\n/** Possible visibility states of a tooltip. */\nexport type TooltipVisibility = 'initial' | 'visible' | 'hidden';\n\n/** Time in ms to throttle repositioning after scroll events. */\nexport const SCROLL_THROTTLE_MS = 20;\n\n/**\n * CSS class that will be attached to the overlay panel.\n * @deprecated\n * @breaking-change 13.0.0 remove this variable\n */\nexport const TOOLTIP_PANEL_CLASS = 'mat-tooltip-panel';\n\nconst PANEL_CLASS = 'tooltip-panel';\n\n/** Options used to bind passive event listeners. */\nconst passiveListenerOptions = normalizePassiveListenerOptions({passive: true});\n\n/**\n * Time between the user putting the pointer on a tooltip\n * trigger and the long press event being fired.\n */\nconst LONGPRESS_DELAY = 500;\n\n/**\n * Creates an error to be thrown if the user supplied an invalid tooltip position.\n * @docs-private\n */\nexport function getMatTooltipInvalidPositionError(position: string) {\n  return Error(`Tooltip position \"${position}\" is invalid.`);\n}\n\n/** Injection token that determines the scroll handling while a tooltip is visible. */\nexport const MAT_TOOLTIP_SCROLL_STRATEGY =\n    new InjectionToken<() => ScrollStrategy>('mat-tooltip-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n  return () => overlay.scrollStrategies.reposition({scrollThrottle: SCROLL_THROTTLE_MS});\n}\n\n/** @docs-private */\nexport const MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n  provide: MAT_TOOLTIP_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY,\n};\n\n/** Default `matTooltip` options that can be overridden. */\nexport interface MatTooltipDefaultOptions {\n  showDelay: number;\n  hideDelay: number;\n  touchendHideDelay: number;\n  touchGestures?: TooltipTouchGestures;\n  position?: TooltipPosition;\n}\n\n/** Injection token to be used to override the default options for `matTooltip`. */\nexport const MAT_TOOLTIP_DEFAULT_OPTIONS =\n    new InjectionToken<MatTooltipDefaultOptions>('mat-tooltip-default-options', {\n      providedIn: 'root',\n      factory: MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY\n    });\n\n/** @docs-private */\nexport function MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY(): MatTooltipDefaultOptions {\n  return {\n    showDelay: 0,\n    hideDelay: 0,\n    touchendHideDelay: 1500,\n  };\n}\n\n\n@Directive()\nexport abstract class _MatTooltipBase<T extends _TooltipComponentBase> implements OnDestroy,\n  AfterViewInit {\n  _overlayRef: OverlayRef | null;\n  _tooltipInstance: T | null;\n\n  private _portal: ComponentPortal<T>;\n  private _position: TooltipPosition = 'below';\n  private _disabled: boolean = false;\n  private _tooltipClass: string|string[]|Set<string>|{[key: string]: any};\n  private _scrollStrategy: () => ScrollStrategy;\n  private _viewInitialized = false;\n  private _pointerExitEventsInitialized = false;\n  protected abstract readonly _tooltipComponent: ComponentType<T>;\n  protected _viewportMargin = 8;\n  private _currentPosition: TooltipPosition;\n  protected readonly _cssClassPrefix: string = 'mat';\n\n  /** Allows the user to define the position of the tooltip relative to the parent element */\n  @Input('matTooltipPosition')\n  get position(): TooltipPosition { return this._position; }\n  set position(value: TooltipPosition) {\n    if (value !== this._position) {\n      this._position = value;\n\n      if (this._overlayRef) {\n        this._updatePosition(this._overlayRef);\n        this._tooltipInstance?.show(0);\n        this._overlayRef.updatePosition();\n      }\n    }\n  }\n\n  /** Disables the display of the tooltip. */\n  @Input('matTooltipDisabled')\n  get disabled(): boolean { return this._disabled; }\n  set disabled(value) {\n    this._disabled = coerceBooleanProperty(value);\n\n    // If tooltip is disabled, hide immediately.\n    if (this._disabled) {\n      this.hide(0);\n    } else {\n      this._setupPointerEnterEventsIfNeeded();\n    }\n  }\n\n  /** The default delay in ms before showing the tooltip after show is called */\n  @Input('matTooltipShowDelay') showDelay: number = this._defaultOptions.showDelay;\n\n  /** The default delay in ms before hiding the tooltip after hide is called */\n  @Input('matTooltipHideDelay') hideDelay: number = this._defaultOptions.hideDelay;\n\n  /**\n   * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive\n   * uses a long press gesture to show and hide, however it can conflict with the native browser\n   * gestures. To work around the conflict, Angular Material disables native gestures on the\n   * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable\n   * elements). The different values for this option configure the touch event handling as follows:\n   * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native\n   *   browser gestures on particular elements. In particular, it allows text selection on inputs\n   *   and textareas, and preserves the native browser dragging on elements marked as `draggable`.\n   * - `on` - Enables touch gestures for all elements and disables native\n   *   browser gestures with no exceptions.\n   * - `off` - Disables touch gestures. Note that this will prevent the tooltip from\n   *   showing on touch devices.\n   */\n  @Input('matTooltipTouchGestures') touchGestures: TooltipTouchGestures = 'auto';\n\n  /** The message to be displayed in the tooltip */\n  @Input('matTooltip')\n  get message() { return this._message; }\n  set message(value: string) {\n    this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this._message, 'tooltip');\n\n    // If the message is not a string (e.g. number), convert it to a string and trim it.\n    // Must convert with `String(value)`, not `${value}`, otherwise Closure Compiler optimises\n    // away the string-conversion: https://github.com/angular/components/issues/20684\n    this._message = value != null ? String(value).trim() : '';\n\n    if (!this._message && this._isTooltipVisible()) {\n      this.hide(0);\n    } else {\n      this._setupPointerEnterEventsIfNeeded();\n      this._updateTooltipMessage();\n      this._ngZone.runOutsideAngular(() => {\n        // The `AriaDescriber` has some functionality that avoids adding a description if it's the\n        // same as the `aria-label` of an element, however we can't know whether the tooltip trigger\n        // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the\n        // issue by deferring the description by a tick so Angular has time to set the `aria-label`.\n        Promise.resolve().then(() => {\n          this._ariaDescriber.describe(this._elementRef.nativeElement, this.message, 'tooltip');\n        });\n      });\n    }\n  }\n  private _message = '';\n\n  /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\n  @Input('matTooltipClass')\n  get tooltipClass() { return this._tooltipClass; }\n  set tooltipClass(value: string|string[]|Set<string>|{[key: string]: any}) {\n    this._tooltipClass = value;\n    if (this._tooltipInstance) {\n      this._setTooltipClass(this._tooltipClass);\n    }\n  }\n\n  /** Manually-bound passive event listeners. */\n  private readonly _passiveListeners:\n      (readonly [string, EventListenerOrEventListenerObject])[] = [];\n\n  /** Reference to the current document. */\n  private _document: Document;\n\n  /** Timer started at the last `touchstart` event. */\n  private _touchstartTimeout: number;\n\n  /** Emits when the component is destroyed. */\n  private readonly _destroyed = new Subject<void>();\n\n  constructor(\n    private _overlay: Overlay,\n    private _elementRef: ElementRef<HTMLElement>,\n    private _scrollDispatcher: ScrollDispatcher,\n    private _viewContainerRef: ViewContainerRef,\n    private _ngZone: NgZone,\n    private _platform: Platform,\n    private _ariaDescriber: AriaDescriber,\n    private _focusMonitor: FocusMonitor,\n    scrollStrategy: any,\n    protected _dir: Directionality,\n    private _defaultOptions: MatTooltipDefaultOptions,\n    @Inject(DOCUMENT) _document: any) {\n\n    this._scrollStrategy = scrollStrategy;\n    this._document = _document;\n\n    if (_defaultOptions) {\n      if (_defaultOptions.position) {\n        this.position = _defaultOptions.position;\n      }\n\n      if (_defaultOptions.touchGestures) {\n        this.touchGestures = _defaultOptions.touchGestures;\n      }\n    }\n\n    _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n      if (this._overlayRef) {\n        this._updatePosition(this._overlayRef);\n      }\n    });\n\n    _ngZone.runOutsideAngular(() => {\n      _elementRef.nativeElement.addEventListener('keydown', this._handleKeydown);\n    });\n  }\n\n  ngAfterViewInit() {\n    // This needs to happen after view init so the initial values for all inputs have been set.\n    this._viewInitialized = true;\n    this._setupPointerEnterEventsIfNeeded();\n\n    this._focusMonitor.monitor(this._elementRef)\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(origin => {\n        // Note that the focus monitor runs outside the Angular zone.\n        if (!origin) {\n          this._ngZone.run(() => this.hide(0));\n        } else if (origin === 'keyboard') {\n          this._ngZone.run(() => this.show());\n        }\n    });\n  }\n\n  /**\n   * Dispose the tooltip when destroyed.\n   */\n  ngOnDestroy() {\n    const nativeElement = this._elementRef.nativeElement;\n\n    clearTimeout(this._touchstartTimeout);\n\n    if (this._overlayRef) {\n      this._overlayRef.dispose();\n      this._tooltipInstance = null;\n    }\n\n    // Clean up the event listeners set in the constructor\n    nativeElement.removeEventListener('keydown', this._handleKeydown);\n    this._passiveListeners.forEach(([event, listener]) => {\n      nativeElement.removeEventListener(event, listener, passiveListenerOptions);\n    });\n    this._passiveListeners.length = 0;\n\n    this._destroyed.next();\n    this._destroyed.complete();\n\n    this._ariaDescriber.removeDescription(nativeElement, this.message, 'tooltip');\n    this._focusMonitor.stopMonitoring(nativeElement);\n  }\n\n  /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\n  show(delay: number = this.showDelay): void {\n    if (this.disabled || !this.message || (this._isTooltipVisible() &&\n      !this._tooltipInstance!._showTimeoutId && !this._tooltipInstance!._hideTimeoutId)) {\n        return;\n    }\n\n    const overlayRef = this._createOverlay();\n    this._detach();\n    this._portal = this._portal ||\n       new ComponentPortal(this._tooltipComponent, this._viewContainerRef);\n    this._tooltipInstance = overlayRef.attach(this._portal).instance;\n    this._tooltipInstance.afterHidden()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(() => this._detach());\n    this._setTooltipClass(this._tooltipClass);\n    this._updateTooltipMessage();\n    this._tooltipInstance!.show(delay);\n  }\n\n  /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\n  hide(delay: number = this.hideDelay): void {\n    if (this._tooltipInstance) {\n      this._tooltipInstance.hide(delay);\n    }\n  }\n\n  /** Shows/hides the tooltip */\n  toggle(): void {\n    this._isTooltipVisible() ? this.hide() : this.show();\n  }\n\n  /** Returns true if the tooltip is currently visible to the user */\n  _isTooltipVisible(): boolean {\n    return !!this._tooltipInstance && this._tooltipInstance.isVisible();\n  }\n\n  /**\n   * Handles the keydown events on the host element.\n   * Needs to be an arrow function so that we can use it in addEventListener.\n   */\n  private _handleKeydown = (event: KeyboardEvent) => {\n    if (this._isTooltipVisible() && event.keyCode === ESCAPE && !hasModifierKey(event)) {\n      event.preventDefault();\n      event.stopPropagation();\n      this._ngZone.run(() => this.hide(0));\n    }\n  }\n\n  /** Create the overlay config and position strategy */\n  private _createOverlay(): OverlayRef {\n    if (this._overlayRef) {\n      return this._overlayRef;\n    }\n\n    const scrollableAncestors =\n        this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);\n\n    // Create connected position strategy that listens for scroll events to reposition.\n    const strategy = this._overlay.position()\n                         .flexibleConnectedTo(this._elementRef)\n                         .withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`)\n                         .withFlexibleDimensions(false)\n                         .withViewportMargin(this._viewportMargin)\n                         .withScrollableContainers(scrollableAncestors);\n\n    strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe(change => {\n      this._updateCurrentPositionClass(change.connectionPair);\n\n      if (this._tooltipInstance) {\n        if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {\n          // After position changes occur and the overlay is clipped by\n          // a parent scrollable then close the tooltip.\n          this._ngZone.run(() => this.hide(0));\n        }\n      }\n    });\n\n    this._overlayRef = this._overlay.create({\n      direction: this._dir,\n      positionStrategy: strategy,\n      panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}`,\n      scrollStrategy: this._scrollStrategy()\n    });\n\n    this._updatePosition(this._overlayRef);\n\n    this._overlayRef.detachments()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(() => this._detach());\n\n    this._overlayRef.outsidePointerEvents()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(() => this._tooltipInstance?._handleBodyInteraction());\n\n    return this._overlayRef;\n  }\n\n  /** Detaches the currently-attached tooltip. */\n  private _detach() {\n    if (this._overlayRef && this._overlayRef.hasAttached()) {\n      this._overlayRef.detach();\n    }\n\n    this._tooltipInstance = null;\n  }\n\n  /** Updates the position of the current tooltip. */\n  private _updatePosition(overlayRef: OverlayRef) {\n    const position = overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n    const origin = this._getOrigin();\n    const overlay = this._getOverlayPosition();\n\n    position.withPositions([\n      this._addOffset({...origin.main, ...overlay.main}),\n      this._addOffset({...origin.fallback, ...overlay.fallback})\n    ]);\n  }\n\n  /** Adds the configured offset to a position. Used as a hook for child classes. */\n  protected _addOffset(position: ConnectedPosition): ConnectedPosition {\n    return position;\n  }\n\n  /**\n   * Returns the origin position and a fallback position based on the user's position preference.\n   * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).\n   */\n  _getOrigin(): {main: OriginConnectionPosition, fallback: OriginConnectionPosition} {\n    const isLtr = !this._dir || this._dir.value == 'ltr';\n    const position = this.position;\n    let originPosition: OriginConnectionPosition;\n\n    if (position == 'above' || position == 'below') {\n      originPosition = {originX: 'center', originY: position == 'above' ? 'top' : 'bottom'};\n    } else if (\n      position == 'before' ||\n      (position == 'left' && isLtr) ||\n      (position == 'right' && !isLtr)) {\n      originPosition = {originX: 'start', originY: 'center'};\n    } else if (\n      position == 'after' ||\n      (position == 'right' && isLtr) ||\n      (position == 'left' && !isLtr)) {\n      originPosition = {originX: 'end', originY: 'center'};\n    } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      throw getMatTooltipInvalidPositionError(position);\n    }\n\n    const {x, y} = this._invertPosition(originPosition!.originX, originPosition!.originY);\n\n    return {\n      main: originPosition!,\n      fallback: {originX: x, originY: y}\n    };\n  }\n\n  /** Returns the overlay position and a fallback position based on the user's preference */\n  _getOverlayPosition(): {main: OverlayConnectionPosition, fallback: OverlayConnectionPosition} {\n    const isLtr = !this._dir || this._dir.value == 'ltr';\n    const position = this.position;\n    let overlayPosition: OverlayConnectionPosition;\n\n    if (position == 'above') {\n      overlayPosition = {overlayX: 'center', overlayY: 'bottom'};\n    } else if (position == 'below') {\n      overlayPosition = {overlayX: 'center', overlayY: 'top'};\n    } else if (\n      position == 'before' ||\n      (position == 'left' && isLtr) ||\n      (position == 'right' && !isLtr)) {\n      overlayPosition = {overlayX: 'end', overlayY: 'center'};\n    } else if (\n      position == 'after' ||\n      (position == 'right' && isLtr) ||\n      (position == 'left' && !isLtr)) {\n      overlayPosition = {overlayX: 'start', overlayY: 'center'};\n    } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      throw getMatTooltipInvalidPositionError(position);\n    }\n\n    const {x, y} = this._invertPosition(overlayPosition!.overlayX, overlayPosition!.overlayY);\n\n    return {\n      main: overlayPosition!,\n      fallback: {overlayX: x, overlayY: y}\n    };\n  }\n\n  /** Updates the tooltip message and repositions the overlay according to the new message length */\n  private _updateTooltipMessage() {\n    // Must wait for the message to be painted to the tooltip so that the overlay can properly\n    // calculate the correct positioning based on the size of the text.\n    if (this._tooltipInstance) {\n      this._tooltipInstance.message = this.message;\n      this._tooltipInstance._markForCheck();\n\n      this._ngZone.onMicrotaskEmpty.pipe(\n        take(1),\n        takeUntil(this._destroyed)\n      ).subscribe(() => {\n        if (this._tooltipInstance) {\n          this._overlayRef!.updatePosition();\n        }\n      });\n    }\n  }\n\n  /** Updates the tooltip class */\n  private _setTooltipClass(tooltipClass: string|string[]|Set<string>|{[key: string]: any}) {\n    if (this._tooltipInstance) {\n      this._tooltipInstance.tooltipClass = tooltipClass;\n      this._tooltipInstance._markForCheck();\n    }\n  }\n\n  /** Inverts an overlay position. */\n  private _invertPosition(x: HorizontalConnectionPos, y: VerticalConnectionPos) {\n    if (this.position === 'above' || this.position === 'below') {\n      if (y === 'top') {\n        y = 'bottom';\n      } else if (y === 'bottom') {\n        y = 'top';\n      }\n    } else {\n      if (x === 'end') {\n        x = 'start';\n      } else if (x === 'start') {\n        x = 'end';\n      }\n    }\n\n    return {x, y};\n  }\n\n  /** Updates the class on the overlay panel based on the current position of the tooltip. */\n  private _updateCurrentPositionClass(connectionPair: ConnectionPositionPair): void {\n    const {overlayY, originX, originY} = connectionPair;\n    let newPosition: TooltipPosition;\n\n    // If the overlay is in the middle along the Y axis,\n    // it means that it's either before or after.\n    if (overlayY === 'center') {\n      // Note that since this information is used for styling, we want to\n      // resolve `start` and `end` to their real values, otherwise consumers\n      // would have to remember to do it themselves on each consumption.\n      if (this._dir && this._dir.value === 'rtl') {\n        newPosition = originX === 'end' ? 'left' : 'right';\n      } else {\n        newPosition = originX === 'start' ? 'left' : 'right';\n      }\n    } else {\n      newPosition = overlayY === 'bottom' && originY === 'top' ? 'above' : 'below';\n    }\n\n    if (newPosition !== this._currentPosition) {\n      const overlayRef = this._overlayRef;\n\n      if (overlayRef) {\n        const classPrefix = `${this._cssClassPrefix}-${PANEL_CLASS}-`;\n        overlayRef.removePanelClass(classPrefix + this._currentPosition);\n        overlayRef.addPanelClass(classPrefix + newPosition);\n      }\n\n      this._currentPosition = newPosition;\n    }\n  }\n\n  /** Binds the pointer events to the tooltip trigger. */\n  private _setupPointerEnterEventsIfNeeded() {\n    // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.\n    if (this._disabled || !this.message || !this._viewInitialized ||\n        this._passiveListeners.length) {\n      return;\n    }\n\n    // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n    // first tap from firing its click event or can cause the tooltip to open for clicks.\n    if (this._platformSupportsMouseEvents()) {\n      this._passiveListeners\n          .push(['mouseenter', () => {\n            this._setupPointerExitEventsIfNeeded();\n            this.show();\n          }]);\n    } else if (this.touchGestures !== 'off') {\n      this._disableNativeGesturesIfNecessary();\n\n      this._passiveListeners\n          .push(['touchstart', () => {\n            // Note that it's important that we don't `preventDefault` here,\n            // because it can prevent click events from firing on the element.\n            this._setupPointerExitEventsIfNeeded();\n            clearTimeout(this._touchstartTimeout);\n            this._touchstartTimeout = setTimeout(() => this.show(), LONGPRESS_DELAY);\n          }]);\n    }\n\n    this._addListeners(this._passiveListeners);\n  }\n\n  private _setupPointerExitEventsIfNeeded() {\n    if (this._pointerExitEventsInitialized) {\n      return;\n    }\n    this._pointerExitEventsInitialized = true;\n\n    const exitListeners: (readonly [string, EventListenerOrEventListenerObject])[] = [];\n    if (this._platformSupportsMouseEvents()) {\n      exitListeners.push(\n        ['mouseleave', () => this.hide()],\n        ['wheel', event => this._wheelListener(event as WheelEvent)]\n      );\n    } else if (this.touchGestures !== 'off') {\n      this._disableNativeGesturesIfNecessary();\n      const touchendListener = () => {\n        clearTimeout(this._touchstartTimeout);\n        this.hide(this._defaultOptions.touchendHideDelay);\n      };\n\n      exitListeners.push(\n        ['touchend', touchendListener],\n        ['touchcancel', touchendListener],\n      );\n    }\n\n    this._addListeners(exitListeners);\n    this._passiveListeners.push(...exitListeners);\n  }\n\n  private _addListeners(\n      listeners: (readonly [string, EventListenerOrEventListenerObject])[]) {\n    listeners.forEach(([event, listener]) => {\n      this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);\n    });\n  }\n\n  private _platformSupportsMouseEvents() {\n    return !this._platform.IOS && !this._platform.ANDROID;\n  }\n\n  /** Listener for the `wheel` event on the element. */\n  private _wheelListener(event: WheelEvent) {\n    if (this._isTooltipVisible()) {\n      const elementUnderPointer = this._document.elementFromPoint(event.clientX, event.clientY);\n      const element = this._elementRef.nativeElement;\n\n      // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it\n      // won't fire if the user scrolls away using the wheel without moving their cursor. We\n      // work around it by finding the element under the user's cursor and closing the tooltip\n      // if it's not the trigger.\n      if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {\n        this.hide();\n      }\n    }\n  }\n\n  /** Disables the native browser gestures, based on how the tooltip has been configured. */\n  private _disableNativeGesturesIfNecessary() {\n    const gestures = this.touchGestures;\n\n    if (gestures !== 'off') {\n      const element = this._elementRef.nativeElement;\n      const style = element.style;\n\n      // If gestures are set to `auto`, we don't disable text selection on inputs and\n      // textareas, because it prevents the user from typing into them on iOS Safari.\n      if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {\n        style.userSelect = (style as any).msUserSelect = style.webkitUserSelect =\n            (style as any).MozUserSelect = 'none';\n      }\n\n      // If we have `auto` gestures and the element uses native HTML dragging,\n      // we don't set `-webkit-user-drag` because it prevents the native behavior.\n      if (gestures === 'on' || !element.draggable) {\n        (style as any).webkitUserDrag = 'none';\n      }\n\n      style.touchAction = 'none';\n      style.webkitTapHighlightColor = 'transparent';\n    }\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_hideDelay: NumberInput;\n  static ngAcceptInputType_showDelay: NumberInput;\n}\n\n/**\n * Directive that attaches a material design tooltip to the host element. Animates the showing and\n * hiding of a tooltip provided position (defaults to below the element).\n *\n * https://material.io/design/components/tooltips.html\n */\n@Directive({\n  selector: '[matTooltip]',\n  exportAs: 'matTooltip',\n  host: {\n    'class': 'mat-tooltip-trigger'\n  }\n})\nexport class MatTooltip extends _MatTooltipBase<TooltipComponent> {\n  protected readonly _tooltipComponent = TooltipComponent;\n\n  constructor(\n    overlay: Overlay,\n    elementRef: ElementRef<HTMLElement>,\n    scrollDispatcher: ScrollDispatcher,\n    viewContainerRef: ViewContainerRef,\n    ngZone: NgZone,\n    platform: Platform,\n    ariaDescriber: AriaDescriber,\n    focusMonitor: FocusMonitor,\n    @Inject(MAT_TOOLTIP_SCROLL_STRATEGY) scrollStrategy: any,\n    @Optional() dir: Directionality,\n    @Optional() @Inject(MAT_TOOLTIP_DEFAULT_OPTIONS) defaultOptions: MatTooltipDefaultOptions,\n    @Inject(DOCUMENT) _document: any) {\n\n    super(overlay, elementRef, scrollDispatcher, viewContainerRef, ngZone, platform, ariaDescriber,\n      focusMonitor, scrollStrategy, dir, defaultOptions, _document);\n  }\n}\n\n@Directive()\nexport abstract class _TooltipComponentBase implements OnDestroy {\n  /** Message to display in the tooltip */\n  message: string;\n\n  /** Classes to be added to the tooltip. Supports the same syntax as `ngClass`. */\n  tooltipClass: string|string[]|Set<string>|{[key: string]: any};\n\n  /** The timeout ID of any current timer set to show the tooltip */\n  _showTimeoutId: number | undefined;\n\n  /** The timeout ID of any current timer set to hide the tooltip */\n  _hideTimeoutId: number | undefined;\n\n  /** Property watched by the animation framework to show or hide the tooltip */\n  _visibility: TooltipVisibility = 'initial';\n\n  /** Whether interactions on the page should close the tooltip */\n  private _closeOnInteraction: boolean = false;\n\n  /** Subject for notifying that the tooltip has been hidden from the view */\n  private readonly _onHide: Subject<void> = new Subject();\n\n  constructor(private _changeDetectorRef: ChangeDetectorRef) {}\n\n  /**\n   * Shows the tooltip with an animation originating from the provided origin\n   * @param delay Amount of milliseconds to the delay showing the tooltip.\n   */\n  show(delay: number): void {\n    // Cancel the delayed hide if it is scheduled\n    clearTimeout(this._hideTimeoutId);\n\n    // Body interactions should cancel the tooltip if there is a delay in showing.\n    this._closeOnInteraction = true;\n    this._showTimeoutId = setTimeout(() => {\n      this._visibility = 'visible';\n      this._showTimeoutId = undefined;\n      this._onShow();\n\n      // Mark for check so if any parent component has set the\n      // ChangeDetectionStrategy to OnPush it will be checked anyways\n      this._markForCheck();\n    }, delay);\n  }\n\n  /**\n   * Begins the animation to hide the tooltip after the provided delay in ms.\n   * @param delay Amount of milliseconds to delay showing the tooltip.\n   */\n  hide(delay: number): void {\n    // Cancel the delayed show if it is scheduled\n    clearTimeout(this._showTimeoutId);\n\n    this._hideTimeoutId = setTimeout(() => {\n      this._visibility = 'hidden';\n      this._hideTimeoutId = undefined;\n\n      // Mark for check so if any parent component has set the\n      // ChangeDetectionStrategy to OnPush it will be checked anyways\n      this._markForCheck();\n    }, delay);\n  }\n\n  /** Returns an observable that notifies when the tooltip has been hidden from view. */\n  afterHidden(): Observable<void> {\n    return this._onHide;\n  }\n\n  /** Whether the tooltip is being displayed. */\n  isVisible(): boolean {\n    return this._visibility === 'visible';\n  }\n\n  ngOnDestroy() {\n    clearTimeout(this._showTimeoutId);\n    clearTimeout(this._hideTimeoutId);\n    this._onHide.complete();\n  }\n\n  _animationStart() {\n    this._closeOnInteraction = false;\n  }\n\n  _animationDone(event: AnimationEvent): void {\n    const toState = event.toState as TooltipVisibility;\n\n    if (toState === 'hidden' && !this.isVisible()) {\n      this._onHide.next();\n    }\n\n    if (toState === 'visible' || toState === 'hidden') {\n      this._closeOnInteraction = true;\n    }\n  }\n\n  /**\n   * Interactions on the HTML body should close the tooltip immediately as defined in the\n   * material design spec.\n   * https://material.io/design/components/tooltips.html#behavior\n   */\n  _handleBodyInteraction(): void {\n    if (this._closeOnInteraction) {\n      this.hide(0);\n    }\n  }\n\n  /**\n   * Marks that the tooltip needs to be checked in the next change detection run.\n   * Mainly used for rendering the initial text before positioning a tooltip, which\n   * can be problematic in components with OnPush change detection.\n   */\n  _markForCheck(): void {\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /**\n   * Callback for when the timeout in this.show() gets completed.\n   * This method is only needed by the mdc-tooltip, and so it is only implemented\n   * in the mdc-tooltip, not here.\n   */\n  protected _onShow(): void {}\n}\n\n/**\n * Internal component that wraps the tooltip's content.\n * @docs-private\n */\n@Component({\n  selector: 'mat-tooltip-component',\n  templateUrl: 'tooltip.html',\n  styleUrls: ['tooltip.css'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  animations: [matTooltipAnimations.tooltipState],\n  host: {\n    // Forces the element to have a layout in IE and Edge. This fixes issues where the element\n    // won't be rendered if the animations are disabled or there is no web animations polyfill.\n    '[style.zoom]': '_visibility === \"visible\" ? 1 : null',\n    'aria-hidden': 'true',\n  }\n})\nexport class TooltipComponent extends _TooltipComponentBase {\n  /** Stream that emits whether the user has a handset-sized display.  */\n  _isHandset: Observable<BreakpointState> = this._breakpointObserver.observe(Breakpoints.Handset);\n\n  constructor(\n    changeDetectorRef: ChangeDetectorRef,\n    private _breakpointObserver: BreakpointObserver) {\n    super(changeDetectorRef);\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 {OverlayModule} from '@angular/cdk/overlay';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {\n  MatTooltip,\n  TooltipComponent,\n  MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER,\n} from './tooltip';\n\n@NgModule({\n  imports: [\n    A11yModule,\n    CommonModule,\n    OverlayModule,\n    MatCommonModule,\n  ],\n  exports: [MatTooltip, TooltipComponent, MatCommonModule, CdkScrollableModule],\n  declarations: [MatTooltip, TooltipComponent],\n  entryComponents: [TooltipComponent],\n  providers: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER]\n})\nexport class MatTooltipModule {}\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 './tooltip-module';\nexport * from './tooltip';\nexport * from './tooltip-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
