Ignore:
Timestamp:
11/25/21 22:08:24 (3 years ago)
Author:
Ema <ema_spirova@…>
Branches:
master
Children:
8d391a1
Parents:
59329aa
Message:

primeNG components

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trip-planner-front/node_modules/@angular/material/fesm2015/datepicker.js.map

    r59329aa re29cc2e  
    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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"}
     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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"}
Note: See TracChangeset for help on using the changeset viewer.