{"version":3,"file":"danielzach-ng-mat-datetimepicker.mjs","sources":["../../datepicker/src/lib/core/date-adapter.ts","../../datepicker/src/lib/core/date-formats.ts","../../datepicker/src/lib/core/native-date-adapter.ts","../../datepicker/src/lib/core/native-date-formats.ts","../../datepicker/src/lib/core/index.ts","../../datepicker/src/lib/moment-adapter/moment-date-adapter.ts","../../datepicker/src/lib/moment-adapter/moment-date-formats.ts","../../datepicker/src/lib/moment-adapter/index.ts","../../datepicker/src/lib/datepicker-errors.ts","../../datepicker/src/lib/clock-view.ts","../../datepicker/src/lib/clock-view.html","../../datepicker/src/lib/datepicker-animations.ts","../../datepicker/src/lib/calendar-body.ts","../../datepicker/src/lib/calendar-body.html","../../datepicker/src/lib/month-view.ts","../../datepicker/src/lib/month-view.html","../../datepicker/src/lib/year-view.ts","../../datepicker/src/lib/year-view.html","../../datepicker/src/lib/years-view.ts","../../datepicker/src/lib/years-view.html","../../datepicker/src/lib/datepicker-intl.ts","../../datepicker/src/lib/calendar.ts","../../datepicker/src/lib/calendar.html","../../datepicker/src/lib/datepicker.ts","../../datepicker/src/lib/datepicker-content.html","../../datepicker/src/lib/datepicker-input.ts","../../datepicker/src/lib/datepicker-toggle.ts","../../datepicker/src/lib/datepicker-toggle.html","../../datepicker/src/lib/datepicker-module.ts","../../datepicker/src/lib/public-api.ts","../../datepicker/src/lib/danielzach-ng-mat-datetimepicker.ts"],"sourcesContent":["/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { inject, InjectionToken, LOCALE_ID } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\n/** InjectionToken for datepicker that can be used to override default locale code. */\r\nexport const MAT_DATE_LOCALE = new InjectionToken<string>('MAT_DATE_LOCALE', {\r\n  providedIn: 'root',\r\n  factory: MAT_DATE_LOCALE_FACTORY\r\n});\r\n\r\n/** @docs-private */\r\nexport function MAT_DATE_LOCALE_FACTORY(): string {\r\n  return inject(LOCALE_ID);\r\n}\r\n\r\n/**\r\n * No longer needed since MAT_DATE_LOCALE has been changed to a scoped injectable.\r\n * If you are importing and providing this in your code you can simply remove it.\r\n * @deprecated\r\n * @deletion-target 7.0.0\r\n */\r\nexport const MAT_DATE_LOCALE_PROVIDER = { provide: MAT_DATE_LOCALE, useExisting: LOCALE_ID };\r\n\r\n/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\r\nexport abstract class DateAdapter<D> {\r\n  /** The locale to use for all dates. */\r\n  protected locale: any;\r\n\r\n  /** A stream that emits when the locale changes. */\r\n  get localeChanges(): Observable<void> {\r\n    return this._localeChanges;\r\n  }\r\n  protected _localeChanges = new Subject<void>();\r\n\r\n  /**\r\n   * Gets the year component of the given date.\r\n   * @param date The date to extract the year from.\r\n   * @returns The year component.\r\n   */\r\n  abstract getYear(date: D): number;\r\n\r\n  /**\r\n   * Gets the month component of the given date.\r\n   * @param date The date to extract the month from.\r\n   * @returns The month component (0-indexed, 0 = January).\r\n   */\r\n  abstract getMonth(date: D): number;\r\n\r\n  abstract getHours(date: D): number;\r\n\r\n  abstract setHours(date: D, value: number): void;\r\n\r\n  abstract getMinutes(date: D): number;\r\n\r\n  abstract setMinutes(date: D, value: number): void;\r\n\r\n  abstract setSeconds(date: D, value: number, ms?: number): void;\r\n\r\n  /**\r\n   * Gets the date of the month component of the given date.\r\n   * @param date The date to extract the date of the month from.\r\n   * @returns The month component (1-indexed, 1 = first of month).\r\n   */\r\n  abstract getDate(date: D): number;\r\n\r\n  /**\r\n   * Gets the day of the week component of the given date.\r\n   * @param date The date to extract the day of the week from.\r\n   * @returns The month component (0-indexed, 0 = Sunday).\r\n   */\r\n  abstract getDayOfWeek(date: D): number;\r\n\r\n  /**\r\n   * Gets a list of names for the months.\r\n   * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\r\n   * @returns An ordered list of all month names, starting with January.\r\n   */\r\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\r\n\r\n  /**\r\n   * Gets a list of names for the dates of the month.\r\n   * @returns An ordered list of all date of the month names, starting with '1'.\r\n   */\r\n  abstract getDateNames(): string[];\r\n\r\n  abstract getHourNames(): string[];\r\n\r\n  abstract getMinuteNames(): string[];\r\n\r\n  /**\r\n   * Gets a list of names for the days of the week.\r\n   * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\r\n   * @returns An ordered list of all weekday names, starting with Sunday.\r\n   */\r\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\r\n\r\n  /**\r\n   * Gets the name for the year of the given date.\r\n   * @param date The date to get the year name for.\r\n   * @returns The name of the given year (e.g. '2017').\r\n   */\r\n  abstract getYearName(date: D): string;\r\n\r\n  /**\r\n   * Gets the first day of the week.\r\n   * @returns The first day of the week (0-indexed, 0 = Sunday).\r\n   */\r\n  abstract getFirstDayOfWeek(): number;\r\n\r\n  /**\r\n   * Gets the number of days in the month of the given date.\r\n   * @param date The date whose month should be checked.\r\n   * @returns The number of days in the month of the given date.\r\n   */\r\n  abstract getNumDaysInMonth(date: D): number;\r\n\r\n  /**\r\n   * Clones the given date.\r\n   * @param date The date to clone\r\n   * @returns A new date equal to the given date.\r\n   */\r\n  abstract clone(date: D): D;\r\n\r\n  /**\r\n   * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\r\n   * month and date.\r\n   * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\r\n   * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\r\n   * @param date The date of month of the date. Must be an integer 1 - length of the given month.\r\n   * @returns The new date, or null if invalid.\r\n   */\r\n  abstract createDate(year: number, month: number, date: number, hours?: number, minutes?: number): D;\r\n\r\n  /**\r\n   * Gets today's date.\r\n   * @returns Today's date.\r\n   */\r\n  abstract today(): D;\r\n\r\n  /**\r\n   * Parses a date from a user-provided value.\r\n   * @param value The value to parse.\r\n   * @param parseFormat The expected format of the value being parsed\r\n   *     (type is implementation-dependent).\r\n   * @returns The parsed date.\r\n   */\r\n  abstract parse(value: any, parseFormat: any): D | null;\r\n\r\n  /**\r\n   * Formats a date as a string according to the given format.\r\n   * @param date The value to format.\r\n   * @param displayFormat The format to use to display the date as a string.\r\n   * @returns The formatted date string.\r\n   */\r\n  abstract format(date: D, displayFormat: any): string;\r\n\r\n  /**\r\n   * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\r\n   * calendar for each year and then finding the closest date in the new month. For example when\r\n   * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\r\n   * @param date The date to add years to.\r\n   * @param years The number of years to add (may be negative).\r\n   * @returns A new date equal to the given one with the specified number of years added.\r\n   */\r\n  abstract addCalendarYears(date: D, years: number): D;\r\n\r\n  /**\r\n   * Adds the given number of months to the date. Months are counted as if flipping a page on the\r\n   * calendar for each month and then finding the closest date in the new month. For example when\r\n   * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\r\n   * @param date The date to add months to.\r\n   * @param months The number of months to add (may be negative).\r\n   * @returns A new date equal to the given one with the specified number of months added.\r\n   */\r\n  abstract addCalendarMonths(date: D, months: number): D;\r\n\r\n  /**\r\n   * Adds the given number of days to the date. Days are counted as if moving one cell on the\r\n   * calendar for each day.\r\n   * @param date The date to add days to.\r\n   * @param days The number of days to add (may be negative).\r\n   * @returns A new date equal to the given one with the specified number of days added.\r\n   */\r\n  abstract addCalendarDays(date: D, days: number): D;\r\n\r\n  abstract addCalendarHours(date: D, hours: number): D;\r\n\r\n  abstract addCalendarMinutes(date: D, minutes: number): D;\r\n\r\n  /**\r\n   * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\r\n   * This method is used to generate date strings that are compatible with native HTML attributes\r\n   * such as the `min` or `max` attribute of an `<input>`.\r\n   * @param date The date to get the ISO date string for.\r\n   * @returns The ISO date string date string.\r\n   */\r\n  abstract toIso8601(date: D): string;\r\n\r\n  /**\r\n   * Checks whether the given object is considered a date instance by this DateAdapter.\r\n   * @param obj The object to check\r\n   * @returns Whether the object is a date instance.\r\n   */\r\n  abstract isDateInstance(obj: any): boolean;\r\n\r\n  /**\r\n   * Checks whether the given date is valid.\r\n   * @param date The date to check.\r\n   * @returns Whether the date is valid.\r\n   */\r\n  abstract isValid(date: D): boolean;\r\n\r\n  /**\r\n   * Gets date instance that is not valid.\r\n   * @returns An invalid date.\r\n   */\r\n  abstract invalid(): D;\r\n\r\n  /**\r\n   * Attempts to deserialize a value to a valid date object. This is different from parsing in that\r\n   * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\r\n   * string). The default implementation does not allow any deserialization, it simply checks that\r\n   * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\r\n   * method on all of it's `@Input()` properties that accept dates. It is therefore possible to\r\n   * support passing values from your backend directly to these properties by overriding this method\r\n   * to also deserialize the format used by your backend.\r\n   * @param value The value to be deserialized into a date object.\r\n   * @returns The deserialized date object, either a valid date, null if the value can be\r\n   *     deserialized into a null date (e.g. the empty string), or an invalid date.\r\n   */\r\n  deserialize(value: any): D | null {\r\n    if (value == null || (this.isDateInstance(value) && this.isValid(value))) {\r\n      return value;\r\n    }\r\n    return this.invalid();\r\n  }\r\n\r\n  /**\r\n   * Sets the locale used for all dates.\r\n   * @param locale The new locale.\r\n   */\r\n  setLocale(locale: any) {\r\n    this.locale = locale;\r\n    this._localeChanges.next();\r\n  }\r\n\r\n  /**\r\n   * Compares two dates.\r\n   * @param first The first date to compare.\r\n   * @param second The second date to compare.\r\n   * @param unit Unit deep of the comparision.\r\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\r\n   *     a number greater than 0 if the first date is later.\r\n   */\r\n  compareDate(first: D, second: D, unit = 'minute'): number {\r\n    let f = this.getYear(first).toString();\r\n    let s = this.getYear(second).toString();\r\n\r\n    if (['y', 'year', 'years'].indexOf(unit) >= 0) {\r\n      return Number(f) - Number(s);\r\n    } else {\r\n      f = f.concat(('00' + this.getMonth(first)).slice(-2));\r\n      s = s.concat(('00' + this.getMonth(second)).slice(-2));\r\n    }\r\n\r\n    if (['M', 'month', 'months'].indexOf(unit) >= 0) {\r\n      return Number(f) - Number(s);\r\n    } else {\r\n      f = f.concat(('00' + this.getDate(first)).slice(-2));\r\n      s = s.concat(('00' + this.getDate(second)).slice(-2));\r\n    }\r\n\r\n    if (['d', 'day', 'days'].indexOf(unit) >= 0) {\r\n      return Number(f) - Number(s);\r\n    } else {\r\n      f = f.concat(('00' + this.getHours(first)).slice(-2));\r\n      s = s.concat(('00' + this.getHours(second)).slice(-2));\r\n    }\r\n\r\n    if (['h', 'hour', 'hours'].indexOf(unit) >= 0) {\r\n      return Number(f) - Number(s);\r\n    } else {\r\n      f = f.concat(('00' + this.getMinutes(first)).slice(-2));\r\n      s = s.concat(('00' + this.getMinutes(second)).slice(-2));\r\n    }\r\n\r\n    return Number(f) - Number(s);\r\n  }\r\n\r\n  /**\r\n   * Checks if two dates are equal.\r\n   * @param first The first date to check.\r\n   * @param second The second date to check.\r\n   * @param unit Unit deep of the comparision.\r\n   * @returns Whether the two dates are equal.\r\n   *     Null dates are considered equal to other null dates.\r\n   */\r\n  sameDate(first: D | null, second: D | null, unit = 'minute'): boolean {\r\n    return first && second ? !this.compareDate(first, second, unit) : first === second;\r\n  }\r\n\r\n  /**\r\n   * Clamp the given date between min and max dates.\r\n   * @param date The date to clamp.\r\n   * @param min The minimum value to allow. If null or omitted no min is enforced.\r\n   * @param max The maximum value to allow. If null or omitted no max is enforced.\r\n   * @param unit Unit deep of the comparision.\r\n   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\r\n   *     otherwise `date`.\r\n   */\r\n  clampDate(date: D | null, min?: D | null, max?: D | null, unit = 'minute'): D | null {\r\n    if (!date) {\r\n      return null;\r\n    }\r\n    if (min && this.compareDate(date, min, unit) < 0) {\r\n      return min;\r\n    }\r\n    if (max && this.compareDate(date, max, unit) > 0) {\r\n      return max;\r\n    }\r\n    return date;\r\n  }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport interface MatDateFormats {\r\n  parse: {\r\n    date: any;\r\n    datetime: any;\r\n    time: any;\r\n  };\r\n  display: {\r\n    date: any;\r\n    datetime: any;\r\n    time: any;\r\n    dateA11yLabel: any;\r\n    monthDayLabel: any;\r\n    monthDayA11yLabel: any;\r\n    monthYearLabel: any;\r\n    monthYearA11yLabel: any;\r\n    timeLabel: any;\r\n  };\r\n}\r\n\r\nexport const MAT_DATE_FORMATS = new InjectionToken<MatDateFormats>('mat-date-formats');\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { DateAdapter, MAT_DATE_LOCALE } from './date-adapter';\r\n\r\n// TODO(mmalerba): Remove when we no longer support safari 9.\r\n/** Whether the browser supports the Intl API. */\r\nconst SUPPORTS_INTL_API = typeof Intl !== 'undefined';\r\n\r\n/** The default month names to use if Intl API is not available. */\r\nconst DEFAULT_MONTH_NAMES = {\r\n  long: [\r\n    'January',\r\n    'February',\r\n    'March',\r\n    'April',\r\n    'May',\r\n    'June',\r\n    'July',\r\n    'August',\r\n    'September',\r\n    'October',\r\n    'November',\r\n    'December'\r\n  ],\r\n  short: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\r\n};\r\n\r\n/** The default date names to use if Intl API is not available. */\r\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\r\n\r\n/** The default hour names to use if Intl API is not available. */\r\nconst DEFAULT_HOUR_NAMES = range(24, String);\r\n\r\n/** The default minute names to use if Intl API is not available. */\r\nconst DEFAULT_MINUTE_NAMES = range(60, String);\r\n\r\n/** The default day of the week names to use if Intl API is not available. */\r\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\r\n  long: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n  short: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n  narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S']\r\n};\r\n\r\n/**\r\n * Matches strings that have the form of a valid RFC 3339 string\r\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\r\n * because the regex will match strings an with out of bounds month, date, etc.\r\n */\r\nconst ISO_8601_REGEX = /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\r\n\r\n/** Creates an array and fills it with values. */\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n  const valuesArray = Array(length);\r\n  for (let i = 0; i < length; i++) {\r\n    valuesArray[i] = valueFunction(i);\r\n  }\r\n  return valuesArray;\r\n}\r\n\r\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\r\n@Injectable()\r\nexport class NativeDateAdapter extends DateAdapter<Date> {\r\n  /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\r\n  private readonly _clampDate: boolean;\r\n\r\n  /**\r\n   * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\r\n   * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\r\n   * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\r\n   * will produce `'8/13/1800'`.\r\n   *\r\n   * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now\r\n   * getting the string representation of a Date object from it's utc representation. We're keeping\r\n   * it here for sometime, just for precaution, in case we decide to revert some of these changes\r\n   * though.\r\n   */\r\n  useUtcForDisplay: boolean = true;\r\n\r\n  constructor(\r\n    platform: Platform,\r\n    @Optional()\r\n    @Inject(MAT_DATE_LOCALE)\r\n    matDateLocale: string\r\n  ) {\r\n    super();\r\n    super.setLocale(matDateLocale);\r\n\r\n    // IE does its own time zone correction, so we disable this on IE.\r\n    this.useUtcForDisplay = !platform.TRIDENT;\r\n    this._clampDate = platform.TRIDENT || platform.EDGE;\r\n  }\r\n\r\n  getYear(date: Date): number {\r\n    return date.getFullYear();\r\n  }\r\n\r\n  getMonth(date: Date): number {\r\n    return date.getMonth();\r\n  }\r\n\r\n  getDate(date: Date): number {\r\n    return date.getDate();\r\n  }\r\n\r\n  getHours(date: Date): number {\r\n    return date.getHours();\r\n  }\r\n\r\n  setHours(date: Date, value: number): void {\r\n    date.setHours(value);\r\n  }\r\n\r\n  getMinutes(date: Date): number {\r\n    return date.getMinutes();\r\n  }\r\n\r\n  setMinutes(date: Date, value: number): void {\r\n    date.setMinutes(value);\r\n  }\r\n\r\n  setSeconds(date: Date, value: number, ms?: number): void {\r\n    date.setSeconds(value, ms);\r\n  }\r\n\r\n  getDayOfWeek(date: Date): number {\r\n    return date.getDay();\r\n  }\r\n\r\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    if (SUPPORTS_INTL_API) {\r\n      const dtf = new Intl.DateTimeFormat(this.locale, { month: style, timeZone: 'utc' });\r\n      return range(12, i => this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));\r\n    }\r\n    return DEFAULT_MONTH_NAMES[style];\r\n  }\r\n\r\n  getDateNames(): string[] {\r\n    if (SUPPORTS_INTL_API) {\r\n      const dtf = new Intl.DateTimeFormat(this.locale, { day: 'numeric', timeZone: 'utc' });\r\n      return range(31, i => this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, 0, i + 1))));\r\n    }\r\n    return DEFAULT_DATE_NAMES;\r\n  }\r\n\r\n  getHourNames(): string[] {\r\n    if (SUPPORTS_INTL_API) {\r\n      const dtf = new Intl.DateTimeFormat(this.locale, { hour: 'numeric', timeZone: 'utc' });\r\n      return range(24, i => this._stripDirectionalityCharacters(dtf.format(new Date(2017, 0, 0, i))));\r\n    }\r\n    return DEFAULT_HOUR_NAMES;\r\n  }\r\n\r\n  getMinuteNames(): string[] {\r\n    if (SUPPORTS_INTL_API) {\r\n      const dtf = new Intl.DateTimeFormat(this.locale, { minute: 'numeric', timeZone: 'utc' });\r\n      return range(60, i => this._stripDirectionalityCharacters(dtf.format(new Date(2017, 0, 0, 0, i))));\r\n    }\r\n    return DEFAULT_MINUTE_NAMES;\r\n  }\r\n\r\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    if (SUPPORTS_INTL_API) {\r\n      const dtf = new Intl.DateTimeFormat(this.locale, { weekday: style, timeZone: 'utc' });\r\n      return range(7, i => this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, 0, i + 1))));\r\n    }\r\n    return DEFAULT_DAY_OF_WEEK_NAMES[style];\r\n  }\r\n\r\n  getYearName(date: Date): string {\r\n    if (SUPPORTS_INTL_API) {\r\n      const dtf = new Intl.DateTimeFormat(this.locale, { year: 'numeric', timeZone: 'utc' });\r\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\r\n    }\r\n    return String(this.getYear(date));\r\n  }\r\n\r\n  getFirstDayOfWeek(): number {\r\n    // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\r\n    return 0;\r\n  }\r\n\r\n  getNumDaysInMonth(date: Date): number {\r\n    return this.getDate(this._createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0));\r\n  }\r\n\r\n  clone(date: Date): Date {\r\n    return this.createDate(\r\n      this.getYear(date),\r\n      this.getMonth(date),\r\n      this.getDate(date),\r\n      this.getHours(date),\r\n      this.getMinutes(date)\r\n    );\r\n  }\r\n\r\n  createDate(year: number, month: number, date: number, hours?: number, minutes?: number): Date {\r\n    // Check for invalid month and date (except upper bound on date which we have to check after\r\n    // creating the Date).\r\n    if (month < 0 || month > 11) {\r\n      throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\r\n    }\r\n\r\n    if (date < 1) {\r\n      throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\r\n    }\r\n\r\n    const result = this._createDateWithOverflow(year, month, date, hours, minutes);\r\n\r\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\r\n    if (result.getMonth() !== month) {\r\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  today(): Date {\r\n    return new Date();\r\n  }\r\n\r\n  parse(value: any): Date | null {\r\n    // We have no way using the native JS Date to set the parse format or locale, so we ignore these\r\n    // parameters.\r\n    if (typeof value === 'number') {\r\n      return new Date(value);\r\n    }\r\n    return value ? new Date(Date.parse(value)) : null;\r\n  }\r\n\r\n  format(date: Date, displayFormat: Object): string {\r\n    if (!this.isValid(date)) {\r\n      throw Error('NativeDateAdapter: Cannot format invalid date.');\r\n    }\r\n\r\n    if (SUPPORTS_INTL_API) {\r\n      // On IE and Edge the i18n API will throw a hard error that can crash the entire app\r\n      // if we attempt to format a date whose year is less than 1 or greater than 9999.\r\n      if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {\r\n        date = this.clone(date);\r\n        date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));\r\n      }\r\n\r\n      displayFormat = { ...displayFormat, timeZone: 'utc' };\r\n\r\n      const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\r\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\r\n    }\r\n    return this._stripDirectionalityCharacters(date.toDateString());\r\n  }\r\n\r\n  addCalendarYears(date: Date, years: number): Date {\r\n    return this.addCalendarMonths(date, years * 12);\r\n  }\r\n\r\n  addCalendarMonths(date: Date, months: number): Date {\r\n    let newDate = this._createDateWithOverflow(\r\n      this.getYear(date),\r\n      this.getMonth(date) + months,\r\n      this.getDate(date),\r\n      this.getHours(date),\r\n      this.getMinutes(date)\r\n    );\r\n\r\n    // It's possible to wind up in the wrong month if the original month has more days than the new\r\n    // month. In this case we want to go to the last day of the desired month.\r\n    // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\r\n    // guarantee this.\r\n    if (this.getMonth(newDate) !== ((this.getMonth(date) + months) % 12 + 12) % 12) {\r\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\r\n    }\r\n\r\n    return newDate;\r\n  }\r\n\r\n  addCalendarDays(date: Date, days: number): Date {\r\n    return this._createDateWithOverflow(\r\n      this.getYear(date),\r\n      this.getMonth(date),\r\n      this.getDate(date) + days,\r\n      this.getHours(date),\r\n      this.getMinutes(date)\r\n    );\r\n  }\r\n\r\n  addCalendarHours(date: Date, hours: number): Date {\r\n    return this._createDateWithOverflow(\r\n      this.getYear(date),\r\n      this.getMonth(date),\r\n      this.getDate(date),\r\n      this.getHours(date) + hours,\r\n      this.getMinutes(date)\r\n    );\r\n  }\r\n\r\n  addCalendarMinutes(date: Date, minutes: number): Date {\r\n    return this._createDateWithOverflow(\r\n      this.getYear(date),\r\n      this.getMonth(date),\r\n      this.getDate(date),\r\n      this.getHours(date),\r\n      this.getMinutes(date) + minutes\r\n    );\r\n  }\r\n\r\n  toIso8601(date: Date): string {\r\n    return [date.getUTCFullYear(), this._2digit(date.getUTCMonth() + 1), this._2digit(date.getUTCDate())].join('-');\r\n  }\r\n\r\n  /**\r\n   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\r\n   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\r\n   * invalid date for all other values.\r\n   */\r\n  deserialize(value: any): Date | null {\r\n    if (typeof value === 'string') {\r\n      if (!value) {\r\n        return null;\r\n      }\r\n      // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\r\n      // string is the right format first.\r\n      if (ISO_8601_REGEX.test(value)) {\r\n        let date = new Date(value);\r\n        if (this.isValid(date)) {\r\n          return date;\r\n        }\r\n      }\r\n    }\r\n    return super.deserialize(value);\r\n  }\r\n\r\n  isDateInstance(obj: any) {\r\n    return obj instanceof Date;\r\n  }\r\n\r\n  isValid(date: Date) {\r\n    return !isNaN(date.getTime());\r\n  }\r\n\r\n  invalid(): Date {\r\n    return new Date(NaN);\r\n  }\r\n\r\n  /** Creates a date but allows the month and date to overflow. */\r\n  private _createDateWithOverflow(year: number, month: number, date: number, hours?: number, minutes?: number) {\r\n    const result = new Date(year, month, date, hours, minutes, 0);\r\n\r\n    // We need to correct for the fact that JS native Date treats years in range [0, 99] as\r\n    // abbreviations for 19xx.\r\n    if (year >= 0 && year < 100) {\r\n      result.setFullYear(this.getYear(result) - 1900);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Pads a number to make it two digits.\r\n   * @param n The number to pad.\r\n   * @returns The padded number.\r\n   */\r\n  private _2digit(n: number) {\r\n    return ('00' + n).slice(-2);\r\n  }\r\n\r\n  /**\r\n   * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\r\n   * other browsers do not. We remove them to make output consistent and because they interfere with\r\n   * date parsing.\r\n   * @param str The string to strip direction characters from.\r\n   * @returns The stripped string.\r\n   */\r\n  private _stripDirectionalityCharacters(str: string) {\r\n    return str.replace(/[\\u200e\\u200f]/g, '');\r\n  }\r\n\r\n  /**\r\n   * When converting Date object to string, javascript built-in functions may return wrong\r\n   * results because it applies its internal DST rules. The DST rules around the world change\r\n   * very frequently, and the current valid rule is not always valid in previous years though.\r\n   * We work around this problem building a new Date object which has its internal UTC\r\n   * representation with the local date and time.\r\n   * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have\r\n   *    timeZone set to 'utc' to work fine.\r\n   * @param date Date from which we want to get the string representation according to dtf\r\n   * @returns A Date object with its UTC representation based on the passed in date info\r\n   */\r\n  private _format(dtf: Intl.DateTimeFormat, date: Date) {\r\n    const d = new Date(\r\n      Date.UTC(\r\n        date.getFullYear(),\r\n        date.getMonth(),\r\n        date.getDate(),\r\n        date.getHours(),\r\n        date.getMinutes(),\r\n        date.getSeconds(),\r\n        date.getMilliseconds()\r\n      )\r\n    );\r\n    return dtf.format(d);\r\n  }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { MatDateFormats } from './date-formats';\r\n\r\nexport const MAT_NATIVE_DATE_FORMATS: MatDateFormats = {\r\n  parse: {\r\n    date: null,\r\n    datetime: null,\r\n    time: null\r\n  },\r\n  display: {\r\n    date: { year: 'numeric', month: 'numeric', day: 'numeric' },\r\n    datetime: {\r\n      year: 'numeric',\r\n      month: 'numeric',\r\n      day: 'numeric',\r\n      hours: 'numeric',\r\n      minutes: 'numeric'\r\n    },\r\n    time: { hours: 'numeric', minutes: 'numeric' },\r\n    dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\r\n    monthDayLabel: { month: 'short', day: 'numeric' },\r\n    monthDayA11yLabel: { month: 'long', day: 'numeric' },\r\n    monthYearLabel: { year: 'numeric', month: 'short' },\r\n    monthYearA11yLabel: { year: 'numeric', month: 'long' },\r\n    timeLabel: { hours: 'numeric', minutes: 'numeric' }\r\n  }\r\n};\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { PlatformModule } from '@angular/cdk/platform';\r\nimport { NgModule } from '@angular/core';\r\nimport { DateAdapter } from './date-adapter';\r\nimport { MAT_DATE_FORMATS } from './date-formats';\r\nimport { NativeDateAdapter } from './native-date-adapter';\r\nimport { MAT_NATIVE_DATE_FORMATS } from './native-date-formats';\r\n\r\nexport * from './date-adapter';\r\nexport * from './date-formats';\r\nexport * from './native-date-adapter';\r\nexport * from './native-date-formats';\r\n\r\n@NgModule({\r\n  imports: [PlatformModule],\r\n  providers: [{ provide: DateAdapter, useClass: NativeDateAdapter }]\r\n})\r\nexport class NativeDateModule {}\r\n\r\n@NgModule({\r\n  imports: [NativeDateModule],\r\n  providers: [{ provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS }]\r\n})\r\nexport class MatNativeDateModule {}\r\n","/**\r\n * @license\r\n * Copyright Google Inc. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { DateAdapter, MAT_DATE_LOCALE } from '../core/index';\r\n\r\n// TODO(mmalerba): See if we can clean this up at some point.\r\nimport * as momentNs from 'moment-timezone';\r\nexport type Moment = momentNs.Moment;\r\nconst moment = momentNs;\r\n\r\n/** Creates an array and fills it with values. */\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n  const valuesArray = Array(length);\r\n  for (let i = 0; i < length; i++) {\r\n    valuesArray[i] = valueFunction(i);\r\n  }\r\n  return valuesArray;\r\n}\r\n\r\n/** Adapts Moment.js Dates for use with Angular Material. */\r\n@Injectable()\r\nexport class MomentDateAdapter extends DateAdapter<Moment> {\r\n  // Note: all of the methods that accept a `Moment` input parameter immediately call `this.clone`\r\n  // on it. This is to ensure that we're working with a `Moment` that has the correct locale setting\r\n  // while avoiding mutating the original object passed to us. Just calling `.locale(...)` on the\r\n  // input would mutate the object.\r\n\r\n  private _localeData: {\r\n    firstDayOfWeek: number;\r\n    longMonths: string[];\r\n    shortMonths: string[];\r\n    dates: string[];\r\n    longDaysOfWeek: string[];\r\n    shortDaysOfWeek: string[];\r\n    narrowDaysOfWeek: string[];\r\n  };\r\n\r\n  constructor(\r\n    @Optional()\r\n    @Inject(MAT_DATE_LOCALE)\r\n    dateLocale: string\r\n  ) {\r\n    super();\r\n    this.setLocale(dateLocale || moment.locale());\r\n  }\r\n\r\n  setLocale(locale: string) {\r\n    super.setLocale(locale);\r\n\r\n    const momentLocaleData = moment.localeData(locale);\r\n    this._localeData = {\r\n      firstDayOfWeek: momentLocaleData.firstDayOfWeek(),\r\n      longMonths: momentLocaleData.months(),\r\n      shortMonths: momentLocaleData.monthsShort(),\r\n      dates: range(31, i => this.createDate(2017, 0, i + 1).format('D')),\r\n      longDaysOfWeek: momentLocaleData.weekdays(),\r\n      shortDaysOfWeek: momentLocaleData.weekdaysShort(),\r\n      narrowDaysOfWeek: momentLocaleData.weekdaysMin()\r\n    };\r\n  }\r\n\r\n  getYear(date: Moment): number {\r\n    return this.clone(date).year();\r\n  }\r\n\r\n  getMonth(date: Moment): number {\r\n    return this.clone(date).month();\r\n  }\r\n\r\n  getDate(date: Moment): number {\r\n    return this.clone(date).date();\r\n  }\r\n\r\n  getHours(date: Moment): number {\r\n    return this.clone(date).hours();\r\n  }\r\n\r\n  setHours(date: Moment, value: number): void {\r\n    date.hours(value);\r\n  }\r\n\r\n  getMinutes(date: Moment): number {\r\n    return this.clone(date).minutes();\r\n  }\r\n\r\n  setMinutes(date: Moment, value: number): void {\r\n    date.minutes(value);\r\n  }\r\n\r\n  setSeconds(date: Moment, value: number, ms?: number): void {\r\n    date.seconds(value);\r\n    if (ms) {\r\n      date.milliseconds(ms);\r\n    }\r\n  }\r\n\r\n  getDayOfWeek(date: Moment): number {\r\n    return this.clone(date).day();\r\n  }\r\n\r\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    // Moment.js doesn't support narrow month names, so we just use short if narrow is requested.\r\n    return style === 'long' ? this._localeData.longMonths : this._localeData.shortMonths;\r\n  }\r\n\r\n  getDateNames(): string[] {\r\n    return this._localeData.dates;\r\n  }\r\n\r\n  getHourNames(): string[] {\r\n    // TODO SUPPORTS_INTL_API\r\n    return range(24, String);\r\n  }\r\n\r\n  getMinuteNames(): string[] {\r\n    // TODO SUPPORTS_INTL_API\r\n    return range(60, String);\r\n  }\r\n\r\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    if (style === 'long') {\r\n      return this._localeData.longDaysOfWeek;\r\n    }\r\n    if (style === 'short') {\r\n      return this._localeData.shortDaysOfWeek;\r\n    }\r\n    return this._localeData.narrowDaysOfWeek;\r\n  }\r\n\r\n  getYearName(date: Moment): string {\r\n    return this.clone(date).format('YYYY');\r\n  }\r\n\r\n  getFirstDayOfWeek(): number {\r\n    return this._localeData.firstDayOfWeek;\r\n  }\r\n\r\n  getNumDaysInMonth(date: Moment): number {\r\n    return this.clone(date).daysInMonth();\r\n  }\r\n\r\n  clone(date: Moment): Moment {\r\n    const obj = date ? moment(date) : moment();\r\n    return obj.locale(this.locale);\r\n  }\r\n\r\n  createDate(year: number, month: number, date: number, hours?: number, minutes?: number): Moment {\r\n    // Moment.js will create an invalid date if any of the components are out of bounds, but we\r\n    // explicitly check each case so we can throw more descriptive errors.\r\n    if (month < 0 || month > 11) {\r\n      throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\r\n    }\r\n\r\n    if (date < 1) {\r\n      throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\r\n    }\r\n\r\n    const result = moment({ year, month, date, hours, minutes, seconds: 0 });\r\n\r\n    // If the result isn't valid, the date must have been out of bounds for this month.\r\n    if (!result.isValid()) {\r\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\r\n    }\r\n\r\n    return result.locale(this.locale);\r\n  }\r\n\r\n  today(): Moment {\r\n    return moment().locale(this.locale);\r\n  }\r\n\r\n  parse(value: any, parseFormat: string | string[]): Moment | null {\r\n    if (parseFormat && value && typeof value === 'string') {\r\n      return moment(value, parseFormat, this.locale, true);\r\n    }\r\n    return value ? moment(value).locale(this.locale) : null;\r\n  }\r\n\r\n  format(date: Moment, displayFormat: string): string {\r\n    date = this.clone(date);\r\n    if (!this.isValid(date)) {\r\n      throw Error('MomentDateAdapter: Cannot format invalid date.');\r\n    }\r\n    return date.format(displayFormat);\r\n  }\r\n\r\n  addCalendarYears(date: Moment, years: number): Moment {\r\n    return this.clone(date).add({ years });\r\n  }\r\n\r\n  addCalendarMonths(date: Moment, months: number): Moment {\r\n    return this.clone(date).add({ months });\r\n  }\r\n\r\n  addCalendarDays(date: Moment, days: number): Moment {\r\n    return this.clone(date).add({ days });\r\n  }\r\n\r\n  addCalendarHours(date: Moment, hours: number): Moment {\r\n    return this.clone(date).add({ hours });\r\n  }\r\n\r\n  addCalendarMinutes(date: Moment, minutes: number): Moment {\r\n    return this.clone(date).add({ minutes });\r\n  }\r\n\r\n  toIso8601(date: Moment): string {\r\n    return this.clone(date).format();\r\n  }\r\n\r\n  /**\r\n   * Returns the given value if given a valid Moment or null. Deserializes valid ISO 8601 strings\r\n   * (https://www.ietf.org/rfc/rfc3339.txt) and valid Date objects into valid Moments and empty\r\n   * string into null. Returns an invalid date for all other values.\r\n   */\r\n  deserialize(value: any): Moment | null {\r\n    let date;\r\n    if (value instanceof Date) {\r\n      date = moment(value);\r\n    }\r\n    if (typeof value === 'string') {\r\n      if (!value) {\r\n        return null;\r\n      }\r\n      date = moment(value, moment.ISO_8601).locale(this.locale);\r\n    }\r\n    if (date && this.isValid(date)) {\r\n      return date;\r\n    }\r\n    return super.deserialize(value);\r\n  }\r\n\r\n  isDateInstance(obj: any): boolean {\r\n    return moment.isMoment(obj) ? this.clone(obj).isValid() : moment(obj).isValid();\r\n  }\r\n\r\n  isValid(date: Moment): boolean {\r\n    return this.clone(date).isValid();\r\n  }\r\n\r\n  invalid(): Moment {\r\n    return moment.invalid();\r\n  }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google Inc. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { MatDateFormats } from '../core/index';\r\n\r\nexport const MAT_MOMENT_DATE_FORMATS: MatDateFormats = {\r\n  parse: {\r\n    date: ['YYYY-MM-DD', 'YYYY/MM/DD', 'll'],\r\n    datetime: ['YYYY-MM-DD HH:mm', 'YYYY/MM/DD HH:mm', 'll h:mma'],\r\n    time: ['H:mm', 'HH:mm', 'h:mm a', 'hh:mm a']\r\n  },\r\n  display: {\r\n    date: 'll',\r\n    datetime: 'll h:mma',\r\n    time: 'h:mm a',\r\n    dateA11yLabel: 'LL',\r\n    monthDayLabel: 'MMM D',\r\n    monthDayA11yLabel: 'MMMM D',\r\n    monthYearLabel: 'MMMM YYYY',\r\n    monthYearA11yLabel: 'MMMM YYYY',\r\n    timeLabel: 'HH:mm'\r\n  }\r\n};\r\n","/**\r\n * @license\r\n * Copyright Google Inc. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '../core/index';\r\nimport { MomentDateAdapter } from './moment-date-adapter';\r\nimport { MAT_MOMENT_DATE_FORMATS } from './moment-date-formats';\r\n\r\nexport * from './moment-date-adapter';\r\nexport * from './moment-date-formats';\r\n\r\n@NgModule({\r\n  providers: [{ provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] }]\r\n})\r\nexport class MomentDateModule {}\r\n\r\n@NgModule({\r\n  imports: [MomentDateModule],\r\n  providers: [{ provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS }]\r\n})\r\nexport class MatMomentDateModule {}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/** @docs-private */\r\nexport function createMissingDateImplError(provider: string) {\r\n  return Error(\r\n    `MatDatepicker: No provider found for ${provider}. You must import one of the following ` +\r\n      `modules at your application root: MatNativeDateModule, MatMomentDateModule ` +\r\n      `or provide a custom implementation.`\r\n  );\r\n}\r\n","import {\r\n  AfterContentInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  Optional,\r\n  Output,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { MAT_DATE_FORMATS, MatDateFormats } from './core/index';\r\nimport { DateAdapter } from './core/index';\r\nimport { createMissingDateImplError } from './datepicker-errors';\r\n\r\nexport const CLOCK_RADIUS = 50;\r\nexport const CLOCK_INNER_RADIUS = 27.5;\r\nexport const CLOCK_OUTER_RADIUS = 41.25;\r\nexport const CLOCK_TICK_RADIUS = 7.0833;\r\n\r\nexport type ClockView = 'hour' | 'minute';\r\n\r\n/**\r\n * A clock that is used as part of the datepicker.\r\n * @docs-private\r\n */\r\n@Component({\r\n  selector: 'mat-clock-view',\r\n  templateUrl: 'clock-view.html',\r\n  exportAs: 'matClockView',\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    role: 'clock',\r\n    '(mousedown)': '_handleMousedown($event)',\r\n  },\r\n  preserveWhitespaces: false,\r\n})\r\nexport class MatClockView<D> implements AfterContentInit {\r\n  /**\r\n   * The time to display in this clock view. (the rest is ignored)\r\n   */\r\n  @Input()\r\n  get activeDate(): D {\r\n    return this._activeDate;\r\n  }\r\n  set activeDate(value: D) {\r\n    const oldActiveDate = this._activeDate;\r\n    const validDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\r\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\r\n\r\n    if (oldActiveDate && this._dateAdapter.compareDate(oldActiveDate, this._activeDate, 'minute')) {\r\n      this._init();\r\n    }\r\n  }\r\n  private _activeDate: D;\r\n\r\n  // The currently selected date.\r\n  @Input()\r\n  get selected(): D | null {\r\n    return this._selected;\r\n  }\r\n  set selected(value: D | null) {\r\n    this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _selected: D | null;\r\n\r\n  /** The minimum selectable date. */\r\n  @Input()\r\n  get minDate(): D | null {\r\n    return this._minDate;\r\n  }\r\n  set minDate(value: D | null) {\r\n    this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _minDate: D | null;\r\n\r\n  /** The maximum selectable date. */\r\n  @Input()\r\n  get maxDate(): D | null {\r\n    return this._maxDate;\r\n  }\r\n  set maxDate(value: D | null) {\r\n    this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _maxDate: D | null;\r\n\r\n  // A function used to filter which dates are selectable.\r\n  @Input() dateFilter: (date: D, unit?: string) => boolean;\r\n\r\n  @Input() clockStep = 1;\r\n\r\n  @Input() twelveHour = false;\r\n\r\n  // Whether the clock is in hour view.\r\n  @Input() hourView = true;\r\n\r\n  // Emits when the final time was selected.\r\n  @Output() readonly selectedTime = new EventEmitter<D>();\r\n\r\n  // Emits when the currently selected date changes.\r\n  @Output() readonly selectedChange = new EventEmitter<D>();\r\n\r\n  // Emits when the currently selected date changes.\r\n  @Output() readonly changeView = new EventEmitter<void>();\r\n\r\n  // Hours and Minutes representing the clock view.\r\n  _hours: Array<any> = [];\r\n  _minutes: Array<any> = [];\r\n\r\n  _selectedHour: number | null;\r\n  _selectedMinute: number | null;\r\n  _anteMeridian: boolean;\r\n\r\n  private mouseMoveListener: any;\r\n  private mouseUpListener: any;\r\n\r\n  get _hand(): any {\r\n    this._selectedHour = this._dateAdapter.getHours(this.activeDate);\r\n    this._selectedMinute = this._dateAdapter.getMinutes(this.activeDate);\r\n    let radius = CLOCK_OUTER_RADIUS;\r\n    let deg = 0;\r\n\r\n    if (this.twelveHour) {\r\n      this._selectedHour = this._selectedHour < 12 ? this._selectedHour : this._selectedHour - 12;\r\n      this._selectedHour = this._selectedHour === 0 ? 12 : this._selectedHour;\r\n    }\r\n\r\n    if (this.hourView) {\r\n      const outer = this._selectedHour > 0 && this._selectedHour < 13;\r\n      radius = outer ? CLOCK_OUTER_RADIUS : CLOCK_INNER_RADIUS;\r\n      if (this.twelveHour) {\r\n        radius = CLOCK_OUTER_RADIUS;\r\n      }\r\n      deg = Math.round(this._selectedHour * (360 / (24 / 2)));\r\n    } else {\r\n      deg = Math.round(this._selectedMinute * (360 / 60));\r\n    }\r\n\r\n    return {\r\n      transform: `rotate(${deg}deg)`,\r\n      height: `${radius}%`,\r\n      'margin-top': `${50 - radius}%`,\r\n    };\r\n  }\r\n\r\n  constructor(\r\n    private _changeDetectorRef: ChangeDetectorRef,\r\n    private _element: ElementRef,\r\n    @Optional() public _dateAdapter: DateAdapter<D>,\r\n    @Optional()\r\n    @Inject(MAT_DATE_FORMATS)\r\n    private _dateFormats: MatDateFormats\r\n  ) {\r\n    if (!this._dateAdapter) {\r\n      throw createMissingDateImplError('DateAdapter');\r\n    }\r\n    if (!this._dateFormats) {\r\n      throw createMissingDateImplError('MAT_DATE_FORMATS');\r\n    }\r\n\r\n    this.mouseMoveListener = (event: any) => {\r\n      this._handleMousemove(event);\r\n    };\r\n    this.mouseUpListener = () => {\r\n      this._handleMouseup();\r\n    };\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this._init();\r\n  }\r\n\r\n  // Handles mousedown events on the clock body.\r\n  _handleMousedown(event: any) {\r\n    this.setTime(event);\r\n    document.addEventListener('mousemove', this.mouseMoveListener);\r\n    document.addEventListener('touchmove', this.mouseMoveListener);\r\n    document.addEventListener('mouseup', this.mouseUpListener);\r\n    document.addEventListener('touchend', this.mouseUpListener);\r\n  }\r\n\r\n  _handleMousemove(event: any) {\r\n    event.preventDefault();\r\n    this.setTime(event);\r\n  }\r\n\r\n  _handleMouseup() {\r\n    document.removeEventListener('mousemove', this.mouseMoveListener);\r\n    document.removeEventListener('touchmove', this.mouseMoveListener);\r\n    document.removeEventListener('mouseup', this.mouseUpListener);\r\n    document.removeEventListener('touchend', this.mouseUpListener);\r\n  }\r\n\r\n  // Initializes this clock view.\r\n  _init() {\r\n    this._hours.length = 0;\r\n    this._minutes.length = 0;\r\n\r\n    const hourNames = this._dateAdapter.getHourNames();\r\n    const minuteNames = this._dateAdapter.getMinuteNames();\r\n\r\n    if (this.twelveHour) {\r\n      this._anteMeridian = this._dateAdapter.getHours(this.activeDate) < 12;\r\n\r\n      for (let i = 0; i < hourNames.length / 2; i++) {\r\n        const radian = (i / 6) * Math.PI;\r\n        const radius = CLOCK_OUTER_RADIUS;\r\n        const date = this._dateAdapter.createDate(\r\n          this._dateAdapter.getYear(this.activeDate),\r\n          this._dateAdapter.getMonth(this.activeDate),\r\n          this._dateAdapter.getDate(this.activeDate),\r\n          this._anteMeridian ? i : i + 12\r\n        );\r\n        this._hours.push({\r\n          value: i,\r\n          displayValue: i === 0 ? '12' : hourNames[i],\r\n          enabled: !this.dateFilter || this.dateFilter(date, 'hour'),\r\n          top: CLOCK_RADIUS - Math.cos(radian) * radius - CLOCK_TICK_RADIUS,\r\n          left: CLOCK_RADIUS + Math.sin(radian) * radius - CLOCK_TICK_RADIUS,\r\n        });\r\n      }\r\n    } else {\r\n      for (let i = 0; i < hourNames.length; i++) {\r\n        const radian = (i / 6) * Math.PI;\r\n        const outer = i > 0 && i < 13;\r\n        const radius = outer ? CLOCK_OUTER_RADIUS : CLOCK_INNER_RADIUS;\r\n        const date = this._dateAdapter.createDate(\r\n          this._dateAdapter.getYear(this.activeDate),\r\n          this._dateAdapter.getMonth(this.activeDate),\r\n          this._dateAdapter.getDate(this.activeDate),\r\n          i\r\n        );\r\n        this._hours.push({\r\n          value: i,\r\n          displayValue: hourNames[i],\r\n          enabled: !this.dateFilter || this.dateFilter(date, 'hour'),\r\n          top: CLOCK_RADIUS - Math.cos(radian) * radius - CLOCK_TICK_RADIUS,\r\n          left: CLOCK_RADIUS + Math.sin(radian) * radius - CLOCK_TICK_RADIUS,\r\n          fontSize: i > 0 && i < 13 ? '' : '80%',\r\n        });\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < minuteNames.length; i += 5) {\r\n      const radian = (i / 30) * Math.PI;\r\n      const date = this._dateAdapter.createDate(\r\n        this._dateAdapter.getYear(this.activeDate),\r\n        this._dateAdapter.getMonth(this.activeDate),\r\n        this._dateAdapter.getDate(this.activeDate),\r\n        this._dateAdapter.getHours(this.activeDate),\r\n        i\r\n      );\r\n      this._minutes.push({\r\n        value: i,\r\n        displayValue: i === 0 ? '00' : minuteNames[i],\r\n        enabled: !this.dateFilter || this.dateFilter(date, 'minute'),\r\n        top: CLOCK_RADIUS - Math.cos(radian) * CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS,\r\n        left: CLOCK_RADIUS + Math.sin(radian) * CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS,\r\n      });\r\n    }\r\n\r\n    this._changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  // Set Time\r\n  private setTime(event: any) {\r\n    const trigger = this._element.nativeElement;\r\n    const triggerRect = trigger.getBoundingClientRect();\r\n    const width = trigger.offsetWidth;\r\n    const height = trigger.offsetHeight;\r\n    const pageX = event.pageX !== undefined ? event.pageX : event.touches[0].pageX;\r\n    const pageY = event.pageY !== undefined ? event.pageY : event.touches[0].pageY;\r\n    const x = width / 2 - (pageX - triggerRect.left - window.pageXOffset);\r\n    const y = height / 2 - (pageY - triggerRect.top - window.pageYOffset);\r\n    const unit = Math.PI / (this.hourView ? 6 : this.clockStep ? 30 / this.clockStep : 30);\r\n    const z = Math.sqrt(x * x + y * y);\r\n    const outer = this.hourView && z > (width * (CLOCK_OUTER_RADIUS / 100) + width * (CLOCK_INNER_RADIUS / 100)) / 2;\r\n\r\n    let radian = Math.atan2(-x, y);\r\n    if (radian < 0) {\r\n      radian = Math.PI * 2 + radian;\r\n    }\r\n    let value = Math.round(radian / unit);\r\n\r\n    const date = this._dateAdapter.clone(this.activeDate);\r\n\r\n    if (this.hourView) {\r\n      if (value === 12) {\r\n        value = 0;\r\n      }\r\n      value = this.twelveHour\r\n        ? this._anteMeridian\r\n          ? value\r\n          : value + 12\r\n        : outer\r\n        ? value === 0\r\n          ? 12\r\n          : value\r\n        : value === 0\r\n        ? 0\r\n        : value + 12;\r\n      this._dateAdapter.setHours(date, value);\r\n    } else {\r\n      if (this.clockStep) {\r\n        value *= this.clockStep;\r\n      }\r\n      if (value === 60) {\r\n        value = 0;\r\n      }\r\n      this._dateAdapter.setMinutes(date, value);\r\n    }\r\n\r\n    // validate if the resulting value is disabled and do not take action\r\n    if (this.dateFilter && !this.dateFilter(date, this.hourView ? 'hour' : 'minute')) {\r\n      return;\r\n    }\r\n\r\n    this.activeDate = date;\r\n    if (this.hourView) {\r\n      this.changeView.emit();\r\n      this.selectedChange.emit(this.activeDate);\r\n    } else {\r\n      this.selectedTime.emit(this.activeDate);\r\n    }\r\n  }\r\n\r\n  _focusActiveCell() {}\r\n\r\n  /**\r\n   * @param obj The object to check.\r\n   * @returns The given object if it is both a date instance and valid, otherwise null.\r\n   */\r\n  private _getValidDateOrNull(obj: any): D | null {\r\n    return this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj) ? obj : null;\r\n  }\r\n}\r\n","<div class=\"mat-clock\">\r\n  <div class=\"mat-clock-center\"></div>\r\n  <div class=\"mat-clock-hand\" [ngStyle]=\"_hand\"></div>\r\n\r\n  <div class=\"mat-clock-hours\" [class.active]=\"hourView\">\r\n    <div *ngFor=\"let item of _hours\"\r\n      class=\"mat-clock-cell\"\r\n      [class.mat-clock-cell-selected]=\"_selectedHour == item.value\"\r\n      [class.mat-clock-cell-disabled]=\"!item.enabled\"\r\n      [style.top.%]=\"item.top\"\r\n      [style.left.%]=\"item.left\"\r\n      [style.fontSize]=\"item.fontSize\">\r\n      {{ item.displayValue }}\r\n    </div>\r\n  </div>\r\n\r\n  <div class=\"mat-clock-minutes\" [class.active]=\"!hourView\">\r\n    <div *ngFor=\"let item of _minutes\"\r\n      class=\"mat-clock-cell\"\r\n      [class.mat-clock-cell-selected]=\"_selectedMinute == item.value\"\r\n      [class.mat-clock-cell-disabled]=\"!item.enabled\"\r\n      [style.top.%]=\"item.top\"\r\n      [style.left.%]=\"item.left\">\r\n      {{ item.displayValue }}\r\n    </div>\r\n  </div>\r\n</div>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\nimport { animate, state, style, transition, trigger, AnimationTriggerMetadata, keyframes } from '@angular/animations';\r\n\r\n/** Animations used by the Material datepicker. */\r\nexport const matDatepickerAnimations: {\r\n  readonly slideCalendar: AnimationTriggerMetadata;\r\n  readonly controlActive: AnimationTriggerMetadata;\r\n  readonly transformPanel: AnimationTriggerMetadata;\r\n  readonly fadeInCalendar: AnimationTriggerMetadata;\r\n} = {\r\n  /* Month view slide */\r\n  slideCalendar: trigger('slideCalendar', [\r\n    transition('* => left', [\r\n      animate(\r\n        180,\r\n        keyframes([\r\n          style({ transform: 'translateX(50%)', offset: 0.5, opacity: 0 }),\r\n          style({ transform: 'translateX(-50%)', offset: 0.51, opacity: 0 }),\r\n          style({ transform: 'translateX(0)', offset: 1, opacity: 1 })\r\n        ])\r\n      )\r\n    ]),\r\n    transition('* => right', [\r\n      animate(\r\n        180,\r\n        keyframes([\r\n          style({ transform: 'translateX(-50%)', offset: 0.5, opacity: 0 }),\r\n          style({ transform: 'translateX(50%)', offset: 0.51, opacity: 0 }),\r\n          style({ transform: 'translateX(0)', offset: 1, opacity: 1 })\r\n        ])\r\n      )\r\n    ])\r\n  ]),\r\n\r\n  /* Active control */\r\n  controlActive: trigger('controlActive', [\r\n    transition('* => active', [\r\n      animate(\r\n        '0.4s linear',\r\n        keyframes([\r\n          style({ transform: 'scale(0.9)' }),\r\n          style({ transform: 'scale(1.1)' }),\r\n          style({ transform: 'scale(1)' })\r\n        ])\r\n      )\r\n    ])\r\n  ]),\r\n\r\n  /** Transforms the height of the datepicker's calendar. */\r\n  transformPanel: trigger('transformPanel', [\r\n    state(\r\n      'void',\r\n      style({\r\n        opacity: 0,\r\n        transform: 'scale(1, 0.8)'\r\n      })\r\n    ),\r\n    transition(\r\n      'void => enter',\r\n      animate(\r\n        '120ms cubic-bezier(0, 0, 0.2, 1)',\r\n        style({\r\n          opacity: 1,\r\n          transform: 'scale(1, 1)'\r\n        })\r\n      )\r\n    ),\r\n    transition('* => void', animate('100ms linear', style({ opacity: 0 })))\r\n  ]),\r\n\r\n  /** Fades in the content of the calendar. */\r\n  fadeInCalendar: trigger('fadeInCalendar', [\r\n    state('void', style({ opacity: 0 })),\r\n    state('enter', style({ opacity: 1 })),\r\n\r\n    // TODO(crisbeto): this animation should be removed since it isn't quite on spec, but we\r\n    // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\r\n    transition('void => *', animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'))\r\n  ])\r\n};\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  NgZone,\r\n  Output,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { take } from 'rxjs/operators';\r\n\r\n/**\r\n * An internal class that represents the data corresponding to a single calendar cell.\r\n * @docs-private\r\n */\r\nexport class MatCalendarCell {\r\n  constructor(public value: number, public displayValue: string, public ariaLabel: string, public enabled: boolean) {}\r\n}\r\n\r\n/**\r\n * An internal component used to display calendar data in a table.\r\n * @docs-private\r\n */\r\n@Component({\r\n  selector: '[mat-calendar-body]',\r\n  templateUrl: 'calendar-body.html',\r\n  // styleUrls: ['calendar-body.scss'],\r\n  host: {\r\n    class: 'mat-calendar-body',\r\n    role: 'grid',\r\n    'aria-readonly': 'true'\r\n  },\r\n  exportAs: 'matCalendarBody',\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  preserveWhitespaces: false\r\n})\r\nexport class MatCalendarBody {\r\n  /** The label for the table. (e.g. \"Jan 2017\"). */\r\n  @Input()\r\n  label: string;\r\n\r\n  /** The cells to display in the table. */\r\n  @Input()\r\n  rows: MatCalendarCell[][];\r\n\r\n  /** The value in the table that corresponds to today. */\r\n  @Input()\r\n  todayValue: number;\r\n\r\n  /** The value in the table that is active. */\r\n  @Input()\r\n  activeValue: number;\r\n\r\n  /** The value in the table that is currently selected. */\r\n  @Input()\r\n  selectedValue: number;\r\n\r\n  /** The minimum number of free cells needed to fit the label in the first row. */\r\n  @Input()\r\n  labelMinRequiredCells: number;\r\n\r\n  /** The number of columns in the table. */\r\n  @Input()\r\n  numCols = 7;\r\n\r\n  /** Whether to allow selection of disabled cells. */\r\n  @Input()\r\n  allowDisabledSelection = false;\r\n\r\n  /** The cell number of the active cell in the table. */\r\n  @Input()\r\n  activeCell = 0;\r\n\r\n  /**\r\n   * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\r\n   * maintained even as the table resizes.\r\n   */\r\n  @Input()\r\n  cellAspectRatio = 0.55;\r\n\r\n  /** Emits when a new value is selected. */\r\n  @Output()\r\n  readonly selectedValueChange = new EventEmitter<number>();\r\n\r\n  constructor(private _elementRef: ElementRef<HTMLElement>, private _ngZone: NgZone) {}\r\n\r\n  _cellClicked(cell: MatCalendarCell): void {\r\n    if (!this.allowDisabledSelection && !cell.enabled) {\r\n      return;\r\n    }\r\n    this.selectedValueChange.emit(cell.value);\r\n  }\r\n\r\n  /** The number of blank cells to put at the beginning for the first row. */\r\n  get _firstRowOffset(): number {\r\n    return this.rows && this.rows.length && this.rows[0].length ? this.numCols - this.rows[0].length : 0;\r\n  }\r\n\r\n  _isActiveCell(rowIndex: number, colIndex: number): boolean {\r\n    let cellNumber = rowIndex * this.numCols + colIndex;\r\n\r\n    // Account for the fact that the first row may not have as many cells.\r\n    if (rowIndex) {\r\n      cellNumber -= this._firstRowOffset;\r\n    }\r\n\r\n    return cellNumber === this.activeCell;\r\n  }\r\n\r\n  /** Focuses the active cell after the microtask queue is empty. */\r\n  _focusActiveCell() {\r\n    this._ngZone.runOutsideAngular(() => {\r\n      this._ngZone.onStable\r\n        .asObservable()\r\n        .pipe(take(1))\r\n        .subscribe(() => {\r\n          const activeCell: HTMLElement | null = this._elementRef.nativeElement.querySelector(\r\n            '.mat-calendar-body-active'\r\n          );\r\n\r\n          if (activeCell) {\r\n            activeCell.focus();\r\n          }\r\n        });\r\n    });\r\n  }\r\n}\r\n","<!--\r\n  If there's not enough space in the first row, create a separate label row. We mark this row as\r\n  aria-hidden because we don't want it to be read out as one of the weeks in the month.\r\n-->\r\n<tr *ngIf=\"label && _firstRowOffset < labelMinRequiredCells\" aria-hidden=\"true\">\r\n  <td class=\"mat-calendar-body-label\"\r\n      [attr.colspan]=\"numCols\"\r\n      [style.paddingTop.%]=\"50 * cellAspectRatio / numCols\"\r\n      [style.paddingBottom.%]=\"50 * cellAspectRatio / numCols\">\r\n    {{ label }}\r\n  </td>\r\n</tr>\r\n\r\n<!-- Create the first row separately so we can include a special spacer cell. -->\r\n<tr *ngFor=\"let row of rows; let rowIndex = index\" role=\"row\">\r\n  <!--\r\n    We mark this cell as aria-hidden so it doesn't get read out as one of the days in the week.\r\n    The aspect ratio of the table cells is maintained by setting the top and bottom padding as a\r\n    percentage of the width (a variant of the trick described here:\r\n    https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\r\n  -->\r\n  <td *ngIf=\"rowIndex === 0 && _firstRowOffset\"\r\n      aria-hidden=\"true\"\r\n      class=\"mat-calendar-body-label\"\r\n      [attr.colspan]=\"_firstRowOffset\"\r\n      [style.paddingTop.%]=\"50 * cellAspectRatio / numCols\"\r\n      [style.paddingBottom.%]=\"50 * cellAspectRatio / numCols\">\r\n    {{ _firstRowOffset >= labelMinRequiredCells ? label : '' }}\r\n  </td>\r\n  <td *ngFor=\"let item of row; let colIndex = index\"\r\n      role=\"gridcell\"\r\n      class=\"mat-calendar-body-cell\"\r\n      [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\r\n      [class.mat-calendar-body-disabled]=\"!item.enabled\"\r\n      [class.mat-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\r\n      [attr.aria-label]=\"item.ariaLabel\"\r\n      [attr.aria-disabled]=\"!item.enabled || null\"\r\n      (click)=\"_cellClicked(item)\"\r\n      [style.width.%]=\"100 / numCols\"\r\n      [style.paddingTop.%]=\"50 * cellAspectRatio / numCols\"\r\n      [style.paddingBottom.%]=\"50 * cellAspectRatio / numCols\">\r\n    <div class=\"mat-calendar-body-cell-background\"\r\n         [class.mat-calendar-body-selected]=\"selectedValue === item.value\"\r\n         [class.mat-calendar-body-active]=\"activeValue === item.value\"\r\n         [class.mat-calendar-body-today]=\"todayValue === item.value\">\r\n    </div>\r\n    <span class=\"mat-calendar-body-cell-content\">{{ item.displayValue }}</span>\r\n  </td>\r\n</tr>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport {\r\n  DOWN_ARROW,\r\n  END,\r\n  ENTER,\r\n  HOME,\r\n  LEFT_ARROW,\r\n  PAGE_DOWN,\r\n  PAGE_UP,\r\n  RIGHT_ARROW,\r\n  SPACE,\r\n  UP_ARROW\r\n} from '@angular/cdk/keycodes';\r\nimport {\r\n  AfterContentInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  Optional,\r\n  Output,\r\n  ViewEncapsulation,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { MatCalendarBody, MatCalendarCell } from './calendar-body';\r\nimport { MAT_DATE_FORMATS, MatDateFormats } from './core/index';\r\nimport { DateAdapter } from './core/index';\r\nimport { matDatepickerAnimations } from './datepicker-animations';\r\nimport { createMissingDateImplError } from './datepicker-errors';\r\n\r\nconst DAYS_PER_WEEK = 7;\r\n\r\n/**\r\n * An internal component used to display a single month in the datepicker.\r\n * @docs-private\r\n */\r\n@Component({\r\n  selector: 'mat-month-view',\r\n  templateUrl: 'month-view.html',\r\n  exportAs: 'matMonthView',\r\n  animations: [matDatepickerAnimations.slideCalendar],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  preserveWhitespaces: false\r\n})\r\nexport class MatMonthView<D> implements AfterContentInit {\r\n  /**\r\n   * The date to display in this month view (everything other than the month and year is ignored).\r\n   */\r\n  @Input()\r\n  get activeDate(): D {\r\n    return this._activeDate;\r\n  }\r\n  set activeDate(value: D) {\r\n    const oldActiveDate = this._activeDate;\r\n    const validDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\r\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\r\n    this._activeValue = this._getDateInCurrentMonth(this.activeDate);\r\n\r\n    if (oldActiveDate && !this._hasSameMonthAndYear(oldActiveDate, this._activeDate)) {\r\n      this._init();\r\n    }\r\n  }\r\n  private _activeDate: D;\r\n\r\n  /** The currently selected date. */\r\n  @Input()\r\n  get selected(): D | null {\r\n    return this._selected;\r\n  }\r\n  set selected(value: D | null) {\r\n    this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n    this._selectedDate = this._getDateInCurrentMonth(this._selected);\r\n  }\r\n  private _selected: D | null;\r\n\r\n  /** The minimum selectable date. */\r\n  @Input()\r\n  get minDate(): D | null {\r\n    return this._minDate;\r\n  }\r\n  set minDate(value: D | null) {\r\n    this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _minDate: D | null;\r\n\r\n  /** The maximum selectable date. */\r\n  @Input()\r\n  get maxDate(): D | null {\r\n    return this._maxDate;\r\n  }\r\n  set maxDate(value: D | null) {\r\n    this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _maxDate: D | null;\r\n\r\n  /** A function used to filter which dates are selectable. */\r\n  @Input()\r\n  dateFilter: (date: D, unit?: string) => boolean;\r\n\r\n  /** Animations handler */\r\n  @Input()\r\n  animationDir: string;\r\n\r\n  /** Emits when a new date is selected. */\r\n  @Output()\r\n  readonly selectedChange = new EventEmitter<D | null>();\r\n\r\n  /** Emits when any date is selected. */\r\n  @Output()\r\n  readonly _userSelection = new EventEmitter<void>();\r\n\r\n  /** Emits when any date is activated. */\r\n  @Output()\r\n  readonly activeDateChange = new EventEmitter<D>();\r\n\r\n  /** The body of calendar table */\r\n  @ViewChild(MatCalendarBody, { static: true })\r\n  _matCalendarBody: MatCalendarBody;\r\n\r\n  /** The label for this month (e.g. \"January 2017\"). */\r\n  _monthLabel: string;\r\n\r\n  /** Grid of calendar cells representing the dates of the month. */\r\n  _weeks: MatCalendarCell[][];\r\n\r\n  /** The number of blank cells in the first row before the 1st of the month. */\r\n  _firstWeekOffset: number;\r\n\r\n  /** The active date on the calendar. */\r\n  _activeValue: number | null;\r\n\r\n  /**\r\n   * The date of the month that the currently selected Date falls on.\r\n   * Null if the currently selected Date is in another month.\r\n   */\r\n  _selectedDate: number | null;\r\n\r\n  /** The date of the month that today falls on. Null if today is in another month. */\r\n  _todayDate: number | null;\r\n\r\n  /** The names of the weekdays. */\r\n  _weekdays: { long: string; narrow: string }[];\r\n\r\n  constructor(\r\n    private _changeDetectorRef: ChangeDetectorRef,\r\n    @Optional()\r\n    @Inject(MAT_DATE_FORMATS)\r\n    private _dateFormats: MatDateFormats,\r\n    @Optional() public _dateAdapter: DateAdapter<D>,\r\n    @Optional() private _dir?: Directionality\r\n  ) {\r\n    if (!this._dateAdapter) {\r\n      throw createMissingDateImplError('DateAdapter');\r\n    }\r\n    if (!this._dateFormats) {\r\n      throw createMissingDateImplError('MAT_DATE_FORMATS');\r\n    }\r\n\r\n    const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();\r\n    const narrowWeekdays = this._dateAdapter.getDayOfWeekNames('narrow');\r\n    const longWeekdays = this._dateAdapter.getDayOfWeekNames('long');\r\n\r\n    // Rotate the labels for days of the week based on the configured first day of the week.\r\n    const weekdays = longWeekdays.map((long, i) => {\r\n      return { long, narrow: narrowWeekdays[i].slice(0, 1) };\r\n    });\r\n    this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this._init();\r\n  }\r\n\r\n  /** Handles when a new date is selected. */\r\n  _dateSelected(date: number) {\r\n    if (this._selectedDate !== date) {\r\n      const selectedYear = this._dateAdapter.getYear(this.activeDate);\r\n      const selectedMonth = this._dateAdapter.getMonth(this.activeDate);\r\n      const selectedHours = this._dateAdapter.getHours(this.activeDate);\r\n      const selectedMinutes = this._dateAdapter.getMinutes(this.activeDate);\r\n      const selectedDate = this._dateAdapter.createDate(\r\n        selectedYear,\r\n        selectedMonth,\r\n        date,\r\n        selectedHours,\r\n        selectedMinutes\r\n      );\r\n\r\n      this.selectedChange.emit(selectedDate);\r\n    }\r\n\r\n    this._userSelection.emit();\r\n  }\r\n\r\n  /** Handles keydown events on the calendar body when calendar is in month view. */\r\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\r\n    // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\r\n    // disabled ones from being selected. This may not be ideal, we should look into whether\r\n    // navigation should skip over disabled dates, and if so, how to implement that efficiently.\r\n\r\n    const oldActiveDate = this._activeDate;\r\n\r\n    const isRtl = this._isRtl();\r\n\r\n    switch (event.keyCode) {\r\n      case LEFT_ARROW:\r\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? 1 : -1);\r\n        break;\r\n      case RIGHT_ARROW:\r\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? -1 : 1);\r\n        break;\r\n      case UP_ARROW:\r\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -7);\r\n        break;\r\n      case DOWN_ARROW:\r\n        this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 7);\r\n        break;\r\n      case HOME:\r\n        this.activeDate = this._dateAdapter.addCalendarDays(\r\n          this._activeDate,\r\n          1 - this._dateAdapter.getDate(this._activeDate)\r\n        );\r\n        break;\r\n      case END:\r\n        this.activeDate = this._dateAdapter.addCalendarDays(\r\n          this._activeDate,\r\n          this._dateAdapter.getNumDaysInMonth(this._activeDate) - this._dateAdapter.getDate(this._activeDate)\r\n        );\r\n        break;\r\n      case PAGE_UP:\r\n        this.activeDate = event.altKey\r\n          ? this._dateAdapter.addCalendarYears(this._activeDate, -1)\r\n          : this._dateAdapter.addCalendarMonths(this._activeDate, -1);\r\n        break;\r\n      case PAGE_DOWN:\r\n        this.activeDate = event.altKey\r\n          ? this._dateAdapter.addCalendarYears(this._activeDate, 1)\r\n          : this._dateAdapter.addCalendarMonths(this._activeDate, 1);\r\n        break;\r\n      case ENTER:\r\n      case SPACE:\r\n        if (!this.dateFilter || this.dateFilter(this._activeDate)) {\r\n          this._dateSelected(this._dateAdapter.getDate(this._activeDate));\r\n          this._userSelection.emit();\r\n          // Prevent unexpected default actions such as form submission.\r\n          event.preventDefault();\r\n        }\r\n        return;\r\n      default:\r\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\r\n        return;\r\n    }\r\n\r\n    if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\r\n      this.activeDateChange.emit(this.activeDate);\r\n    }\r\n\r\n    this._focusActiveCell();\r\n    // Prevent unexpected default actions such as form submission.\r\n    event.preventDefault();\r\n  }\r\n\r\n  /** Initializes this month view. */\r\n  _init() {\r\n    this._activeValue = this._getDateInCurrentMonth(this.activeDate);\r\n    this._selectedDate = this._getDateInCurrentMonth(this.selected);\r\n    this._todayDate = this._getDateInCurrentMonth(this._dateAdapter.today());\r\n    this._monthLabel = this._dateAdapter\r\n      .getMonthNames('short')\r\n      [this._dateAdapter.getMonth(this.activeDate)].toLocaleUpperCase();\r\n\r\n    const firstOfMonth = this._dateAdapter.createDate(\r\n      this._dateAdapter.getYear(this.activeDate),\r\n      this._dateAdapter.getMonth(this.activeDate),\r\n      1\r\n    );\r\n    this._firstWeekOffset =\r\n      (DAYS_PER_WEEK + this._dateAdapter.getDayOfWeek(firstOfMonth) - this._dateAdapter.getFirstDayOfWeek()) %\r\n      DAYS_PER_WEEK;\r\n\r\n    this._createWeekCells();\r\n    this._changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  /** Focuses the active cell after the microtask queue is empty. */\r\n  _focusActiveCell() {\r\n    this._matCalendarBody._focusActiveCell();\r\n  }\r\n\r\n  /** Creates MatCalendarCells for the dates in this month. */\r\n  private _createWeekCells() {\r\n    const daysInMonth = this._dateAdapter.getNumDaysInMonth(this.activeDate);\r\n    const dateNames = this._dateAdapter.getDateNames();\r\n    this._weeks = [[]];\r\n    for (let i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {\r\n      if (cell === DAYS_PER_WEEK) {\r\n        this._weeks.push([]);\r\n        cell = 0;\r\n      }\r\n      const date = this._dateAdapter.createDate(\r\n        this._dateAdapter.getYear(this.activeDate),\r\n        this._dateAdapter.getMonth(this.activeDate),\r\n        i + 1\r\n      );\r\n      const enabled = this._shouldEnableDate(date);\r\n      const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.dateA11yLabel);\r\n      this._weeks[this._weeks.length - 1].push(new MatCalendarCell(i + 1, dateNames[i], ariaLabel, enabled));\r\n    }\r\n  }\r\n\r\n  /** Date filter for the month */\r\n  private _shouldEnableDate(date: D): boolean {\r\n    return (\r\n      !!date &&\r\n      (!this.dateFilter || this.dateFilter(date, 'day')) &&\r\n      (!this.minDate || this._dateAdapter.compareDate(date, this.minDate, 'day') >= 0) &&\r\n      (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate, 'day') <= 0)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Gets the date in this month that the given Date falls on.\r\n   * Returns null if the given Date is in another month.\r\n   */\r\n  private _getDateInCurrentMonth(date: D | null): number | null {\r\n    return date && this._hasSameMonthAndYear(date, this.activeDate) ? this._dateAdapter.getDate(date) : null;\r\n  }\r\n\r\n  /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\r\n  private _hasSameMonthAndYear(d1: D | null, d2: D | null): boolean {\r\n    return !!(d1 && d2 && this._dateAdapter.compareDate(d1, d2, 'month') === 0);\r\n  }\r\n\r\n  /**\r\n   * @param obj The object to check.\r\n   * @returns The given object if it is both a date instance and valid, otherwise null.\r\n   */\r\n  private _getValidDateOrNull(obj: any): D | null {\r\n    return this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj) ? obj : null;\r\n  }\r\n\r\n  /** Determines whether the user has the RTL layout direction. */\r\n  private _isRtl() {\r\n    return this._dir && this._dir.value === 'rtl';\r\n  }\r\n}\r\n","<table class=\"mat-calendar-table\">\r\n  <thead class=\"mat-calendar-table-header\">\r\n    <tr><th *ngFor=\"let day of _weekdays\" [attr.aria-label]=\"day.long\">{{ day.narrow }}</th></tr>\r\n  </thead>\r\n  <tbody mat-calendar-body\r\n    [@slideCalendar]=\"animationDir\"\r\n    role=\"grid\"\r\n    [rows]=\"_weeks\"\r\n    [todayValue]=\"_todayDate\"\r\n    [activeValue]=\"_activeValue\"\r\n    [selectedValue]=\"_selectedDate\"\r\n    [labelMinRequiredCells]=\"3\"\r\n    [activeCell]=\"_dateAdapter.getDate(activeDate) - 1\"\r\n    (selectedValueChange)=\"_dateSelected($event)\"\r\n    (keydown)=\"_handleCalendarBodyKeydown($event)\">\r\n  </tbody>\r\n</table>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport {\r\n  DOWN_ARROW,\r\n  END,\r\n  ENTER,\r\n  HOME,\r\n  LEFT_ARROW,\r\n  PAGE_DOWN,\r\n  PAGE_UP,\r\n  RIGHT_ARROW,\r\n  SPACE,\r\n  UP_ARROW\r\n} from '@angular/cdk/keycodes';\r\nimport {\r\n  AfterContentInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  Optional,\r\n  Output,\r\n  ViewChild,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { MatCalendarBody, MatCalendarCell } from './calendar-body';\r\nimport { MAT_DATE_FORMATS, MatDateFormats } from './core/index';\r\nimport { DateAdapter } from './core/index';\r\nimport { matDatepickerAnimations } from './datepicker-animations';\r\nimport { createMissingDateImplError } from './datepicker-errors';\r\n\r\n/**\r\n * An internal component used to display a single year in the datepicker.\r\n * @docs-private\r\n */\r\n@Component({\r\n  selector: 'mat-year-view',\r\n  templateUrl: 'year-view.html',\r\n  exportAs: 'matYearView',\r\n  animations: [matDatepickerAnimations.slideCalendar],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  preserveWhitespaces: false\r\n})\r\nexport class MatYearView<D> implements AfterContentInit {\r\n  /** The date to display in this year view (everything other than the year is ignored). */\r\n  @Input()\r\n  get activeDate(): D {\r\n    return this._activeDate;\r\n  }\r\n  set activeDate(value: D) {\r\n    const oldActiveDate = this._activeDate;\r\n    const validDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\r\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\r\n\r\n    if (oldActiveDate && this._dateAdapter.getYear(oldActiveDate) !== this._dateAdapter.getYear(this._activeDate)) {\r\n      this._init();\r\n    }\r\n  }\r\n  private _activeDate: D;\r\n\r\n  /** The currently selected date. */\r\n  @Input()\r\n  get selected(): D | null {\r\n    return this._selected;\r\n  }\r\n  set selected(value: D | null) {\r\n    this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n    this._selectedMonth = this._getMonthInCurrentYear(this._selected);\r\n  }\r\n  private _selected: D | null;\r\n\r\n  /** The minimum selectable date. */\r\n  @Input()\r\n  get minDate(): D | null {\r\n    return this._minDate;\r\n  }\r\n  set minDate(value: D | null) {\r\n    this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _minDate: D | null;\r\n\r\n  /** The maximum selectable date. */\r\n  @Input()\r\n  get maxDate(): D | null {\r\n    return this._maxDate;\r\n  }\r\n  set maxDate(value: D | null) {\r\n    this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _maxDate: D | null;\r\n\r\n  /** A function used to filter which dates are selectable. */\r\n  @Input()\r\n  dateFilter: (date: D, unit?: string) => boolean;\r\n\r\n  /** Animations handler */\r\n  @Input()\r\n  animationDir: string;\r\n\r\n  /** Emits when a new month is selected. */\r\n  @Output()\r\n  readonly selectedChange = new EventEmitter<D>();\r\n\r\n  /** Emits when any date is activated. */\r\n  @Output()\r\n  readonly activeDateChange = new EventEmitter<D>();\r\n\r\n  /** The body of calendar table */\r\n  @ViewChild(MatCalendarBody, { static: true })\r\n  _matCalendarBody: MatCalendarBody;\r\n\r\n  /** Grid of calendar cells representing the months of the year. */\r\n  _months: MatCalendarCell[][];\r\n\r\n  /** The label for this year (e.g. \"2017\"). */\r\n  _yearLabel: string;\r\n\r\n  /** The month in this year that today falls on. Null if today is in a different year. */\r\n  _todayMonth: number | null;\r\n\r\n  /**\r\n   * The month in this year that the selected Date falls on.\r\n   * Null if the selected Date is in a different year.\r\n   */\r\n  _selectedMonth: number | null;\r\n\r\n  constructor(\r\n    private _changeDetectorRef: ChangeDetectorRef,\r\n    @Optional()\r\n    @Inject(MAT_DATE_FORMATS)\r\n    private _dateFormats: MatDateFormats,\r\n    @Optional() public _dateAdapter: DateAdapter<D>,\r\n    @Optional() private _dir?: Directionality\r\n  ) {\r\n    if (!this._dateAdapter) {\r\n      throw createMissingDateImplError('DateAdapter');\r\n    }\r\n    if (!this._dateFormats) {\r\n      throw createMissingDateImplError('MAT_DATE_FORMATS');\r\n    }\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this._init();\r\n  }\r\n\r\n  /** Handles when a new month is selected. */\r\n  _monthSelected(month: number) {\r\n    const daysInMonth = this._dateAdapter.getNumDaysInMonth(\r\n      this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1)\r\n    );\r\n    const selectedYear = this._dateAdapter.getYear(this.activeDate);\r\n    const selectedDay = this._dateAdapter.getDate(this.activeDate);\r\n    const selectedHours = this._dateAdapter.getHours(this.activeDate);\r\n    const selectedMinutes = this._dateAdapter.getMinutes(this.activeDate);\r\n    const date = this._dateAdapter.createDate(\r\n      selectedYear,\r\n      month,\r\n      Math.min(selectedDay, daysInMonth),\r\n      selectedHours,\r\n      selectedMinutes\r\n    );\r\n    this.selectedChange.emit(date);\r\n  }\r\n\r\n  /** Initializes this year view. */\r\n  _init() {\r\n    this._selectedMonth = this._getMonthInCurrentYear(this.selected);\r\n    this._todayMonth = this._getMonthInCurrentYear(this._dateAdapter.today());\r\n    this._yearLabel = this._dateAdapter.getYearName(this.activeDate);\r\n\r\n    const monthNames = this._dateAdapter.getMonthNames('short');\r\n    // First row of months only contains 5 elements so we can fit the year label on the same row.\r\n    this._months = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]].map(row =>\r\n      row.map(month => this._createCellForMonth(month, monthNames[month]))\r\n    );\r\n\r\n    this._changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * Gets the month in this year that the given Date falls on.\r\n   * Returns null if the given Date is in another year.\r\n   */\r\n  private _getMonthInCurrentYear(date: D | null) {\r\n    return date && this._dateAdapter.getYear(date) === this._dateAdapter.getYear(this.activeDate)\r\n      ? this._dateAdapter.getMonth(date)\r\n      : null;\r\n  }\r\n\r\n  /** Creates an MatCalendarCell for the given month. */\r\n  private _createCellForMonth(month: number, monthName: string) {\r\n    const ariaLabel = this._dateAdapter.format(\r\n      this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1),\r\n      this._dateFormats.display.monthYearA11yLabel\r\n    );\r\n    return new MatCalendarCell(month, monthName.toLocaleUpperCase(), ariaLabel, this._shouldEnableMonth(month));\r\n  }\r\n\r\n  /** Whether the given month is enabled. */\r\n  private _shouldEnableMonth(month: number) {\r\n    const activeYear = this._dateAdapter.getYear(this.activeDate);\r\n\r\n    if (\r\n      month === undefined ||\r\n      month === null ||\r\n      this._isYearAndMonthAfterMaxDate(activeYear, month) ||\r\n      this._isYearAndMonthBeforeMinDate(activeYear, month)\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.dateFilter) {\r\n      return true;\r\n    }\r\n\r\n    const firstOfMonth = this._dateAdapter.createDate(activeYear, month, 1);\r\n\r\n    // If any date in the month is enabled count the month as enabled.\r\n    for (let d = firstOfMonth; this._dateAdapter.getMonth(d) == month; d = this._dateAdapter.addCalendarDays(d, 1)) {\r\n      if (this.dateFilter(d, 'day')) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Tests whether the combination month/year is after this.maxDate, considering\r\n   * just the month and year of this.maxDate\r\n   */\r\n  private _isYearAndMonthAfterMaxDate(year: number, month: number) {\r\n    if (this.maxDate) {\r\n      const maxYear = this._dateAdapter.getYear(this.maxDate);\r\n      const maxMonth = this._dateAdapter.getMonth(this.maxDate);\r\n\r\n      return year > maxYear || (year === maxYear && month > maxMonth);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Tests whether the combination month/year is before this.minDate, considering\r\n   * just the month and year of this.minDate\r\n   */\r\n  private _isYearAndMonthBeforeMinDate(year: number, month: number) {\r\n    if (this.minDate) {\r\n      const minYear = this._dateAdapter.getYear(this.minDate);\r\n      const minMonth = this._dateAdapter.getMonth(this.minDate);\r\n\r\n      return year < minYear || (year === minYear && month < minMonth);\r\n    }\r\n  }\r\n\r\n  /** Handles keydown events on the calendar body when calendar is in year view. */\r\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\r\n    // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\r\n    // disabled ones from being selected. This may not be ideal, we should look into whether\r\n    // navigation should skip over disabled dates, and if so, how to implement that efficiently.\r\n\r\n    const oldActiveDate = this._activeDate;\r\n\r\n    const isRtl = this._isRtl();\r\n\r\n    switch (event.keyCode) {\r\n      case LEFT_ARROW:\r\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? 1 : -1);\r\n        break;\r\n      case RIGHT_ARROW:\r\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? -1 : 1);\r\n        break;\r\n      case UP_ARROW:\r\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -4);\r\n        break;\r\n      case DOWN_ARROW:\r\n        this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 4);\r\n        break;\r\n      case HOME:\r\n        this.activeDate = this._dateAdapter.addCalendarMonths(\r\n          this._activeDate,\r\n          this._dateAdapter.getMonth(this._activeDate)\r\n        );\r\n        break;\r\n      case END:\r\n        this.activeDate = this._dateAdapter.addCalendarMonths(\r\n          this._activeDate,\r\n          11 - this._dateAdapter.getMonth(this._activeDate)\r\n        );\r\n        break;\r\n      case PAGE_UP:\r\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\r\n        break;\r\n      case PAGE_DOWN:\r\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\r\n        break;\r\n      case ENTER:\r\n      case SPACE:\r\n        this._monthSelected(this._dateAdapter.getMonth(this._activeDate));\r\n        break;\r\n      default:\r\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\r\n        return;\r\n    }\r\n\r\n    if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\r\n      this.activeDateChange.emit(this.activeDate);\r\n    }\r\n\r\n    this._focusActiveCell();\r\n    // Prevent unexpected default actions such as form submission.\r\n    event.preventDefault();\r\n  }\r\n\r\n  _focusActiveCell() {\r\n    this._matCalendarBody._focusActiveCell();\r\n  }\r\n\r\n  /**\r\n   * @param obj The object to check.\r\n   * @returns The given object if it is both a date instance and valid, otherwise null.\r\n   */\r\n  private _getValidDateOrNull(obj: any): D | null {\r\n    return this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj) ? obj : null;\r\n  }\r\n\r\n  /** Determines whether the user has the RTL layout direction. */\r\n  private _isRtl() {\r\n    return this._dir && this._dir.value === 'rtl';\r\n  }\r\n}\r\n","<table class=\"mat-calendar-table\">\r\n  <tbody mat-calendar-body\r\n    [@slideCalendar]=\"animationDir\"\r\n    role=\"grid\"\r\n    allowDisabledSelection=\"true\"\r\n    [rows]=\"_months\"\r\n    [todayValue]=\"_todayMonth\"\r\n    [selectedValue]=\"_selectedMonth\"\r\n    [labelMinRequiredCells]=\"2\"\r\n    [numCols]=\"4\"\r\n    [cellAspectRatio]=\"4 / 7\"\r\n    [activeCell]=\"_dateAdapter.getMonth(activeDate)\"\r\n    (selectedValueChange)=\"_monthSelected($event)\"\r\n    (keydown)=\"_handleCalendarBodyKeydown($event)\">\r\n  </tbody>\r\n</table>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { DOWN_ARROW, ENTER, UP_ARROW } from '@angular/cdk/keycodes';\r\nimport {\r\n  AfterContentInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  Optional,\r\n  Output,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { Subscription ,  of as obsOf, fromEvent } from 'rxjs';\r\nimport { mergeMap, sampleTime } from 'rxjs/operators';\r\nimport { MAT_DATE_FORMATS, MatDateFormats } from './core/index';\r\nimport { DateAdapter } from './core/index';\r\nimport { createMissingDateImplError } from './datepicker-errors';\r\n\r\nconst YEAR_LINE_HEIGHT = 35;\r\nconst YEAR_SIZE = 40;\r\n\r\n/**\r\n * An internal component used to display a year selector in the datepicker.\r\n * @docs-private\r\n */\r\n@Component({\r\n  selector: 'mat-years-view',\r\n  templateUrl: 'years-view.html',\r\n  exportAs: 'matYearsView',\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  preserveWhitespaces: false\r\n})\r\nexport class MatYearsView<D> implements AfterContentInit, OnDestroy {\r\n  /** The date to display in this view (everything other than the year is ignored). */\r\n  @Input()\r\n  get activeDate(): D {\r\n    return this._activeDate;\r\n  }\r\n  set activeDate(value: D) {\r\n    let oldActiveDate = this._activeDate;\r\n    const validDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\r\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\r\n\r\n    if (oldActiveDate && this._dateAdapter.getYear(oldActiveDate) != this._dateAdapter.getYear(this._activeDate)) {\r\n      this._init();\r\n    }\r\n  }\r\n  private _activeDate: D;\r\n\r\n  /** The currently selected date. */\r\n  @Input()\r\n  get selected(): D | null {\r\n    return this._selected;\r\n  }\r\n  set selected(value: D | null) {\r\n    this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n    this._selectedYear = this._selected && this._dateAdapter.getYear(this._selected);\r\n  }\r\n  private _selected: D | null;\r\n\r\n  /** The minimum selectable date. */\r\n  @Input()\r\n  get minDate(): D | null {\r\n    return this._minDate;\r\n  }\r\n  set minDate(value: D | null) {\r\n    this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _minDate: D | null;\r\n\r\n  /** The maximum selectable date. */\r\n  @Input()\r\n  get maxDate(): D | null {\r\n    return this._maxDate;\r\n  }\r\n  set maxDate(value: D | null) {\r\n    this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _maxDate: D | null;\r\n\r\n  /** A function used to filter which dates are selectable. */\r\n  @Input()\r\n  dateFilter: (date: D, unit?: string) => boolean;\r\n\r\n  /** Emits when a new month is selected. */\r\n  @Output()\r\n  readonly selectedChange = new EventEmitter<D>();\r\n\r\n  /** List of years. */\r\n  _years: Array<{ value: number; enabled: boolean }> = [];\r\n\r\n  /** The selected year. */\r\n  _selectedYear: number | null;\r\n\r\n  /** Scroller subscription. */\r\n  _disposeScroller: Subscription;\r\n\r\n  constructor(\r\n    private _changeDetectorRef: ChangeDetectorRef,\r\n    private element: ElementRef,\r\n    @Optional() public _dateAdapter: DateAdapter<D>,\r\n    @Optional()\r\n    @Inject(MAT_DATE_FORMATS)\r\n    private _dateFormats: MatDateFormats\r\n  ) {\r\n    if (!this._dateAdapter) {\r\n      throw createMissingDateImplError('DateAdapter');\r\n    }\r\n    if (!this._dateFormats) {\r\n      throw createMissingDateImplError('MAT_DATE_FORMATS');\r\n    }\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    const lastPosition = { scrolled: 0 };\r\n    this._disposeScroller = fromEvent(this.element.nativeElement, 'scroll')\r\n      .pipe(\r\n        sampleTime(300),\r\n        mergeMap((ev: any) => obsOf(this._calculatePoints()))\r\n      )\r\n      .subscribe((pos: any) => this._handleScroll(pos, lastPosition));\r\n\r\n    this._init();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._disposeScroller.unsubscribe();\r\n  }\r\n\r\n  abs(value: number) {\r\n    return Math.abs(value);\r\n  }\r\n\r\n  /** Initializes this year view. */\r\n  _init() {\r\n    this._selectedYear = this._dateAdapter.getYear(this.selected ? this.selected : this.activeDate);\r\n\r\n    const date = this._dateAdapter.createDate(\r\n      this._selectedYear,\r\n      this._dateAdapter.getMonth(this.activeDate),\r\n      this._dateAdapter.getDate(this.activeDate),\r\n      this._dateAdapter.getHours(this.activeDate),\r\n      this._dateAdapter.getMinutes(this.activeDate)\r\n    );\r\n    this._years = [\r\n      {\r\n        value: this._selectedYear,\r\n        enabled: !this.dateFilter || this.dateFilter(date, 'minute')\r\n      }\r\n    ];\r\n\r\n    this._populateYears();\r\n\r\n    setTimeout(() => {\r\n      this.element.nativeElement.scrollTop -= this.element.nativeElement.offsetHeight / 2 - YEAR_LINE_HEIGHT / 2;\r\n    }, 20);\r\n  }\r\n\r\n  _populateYears(down = false) {\r\n    if ((!down && !this._years[0].enabled) || (down && !this._years[this._years.length - 1].enabled)) {\r\n      return;\r\n    }\r\n\r\n    const selectedMonth = this._dateAdapter.getMonth(this.activeDate);\r\n    const selectedDay = this._dateAdapter.getDate(this.activeDate);\r\n    const selectedHours = this._dateAdapter.getHours(this.activeDate);\r\n    const selectedMinutes = this._dateAdapter.getMinutes(this.activeDate);\r\n\r\n    let scroll = 0;\r\n    for (let y = 1; y <= YEAR_SIZE / 2; y++) {\r\n      let year = this._years[this._years.length - 1].value;\r\n      let date = this._dateAdapter.createDate(year + 1, selectedMonth, selectedDay, selectedHours, selectedMinutes);\r\n      this._years.push({\r\n        value: year + 1,\r\n        enabled: !this.dateFilter || this.dateFilter(date, 'minute')\r\n      });\r\n\r\n      year = this._years[0].value;\r\n      date = this._dateAdapter.createDate(year - 1, selectedMonth, selectedDay, selectedHours, selectedMinutes);\r\n      this._years.unshift({\r\n        value: year - 1,\r\n        enabled: !this.dateFilter || this.dateFilter(date, 'minute')\r\n      });\r\n\r\n      scroll += YEAR_LINE_HEIGHT;\r\n    }\r\n\r\n    setTimeout(() => {\r\n      this.element.nativeElement.scrollTop += down ? YEAR_LINE_HEIGHT : scroll;\r\n    }, 10);\r\n\r\n    this._changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  _yearSelected(year: number) {\r\n    const selectedMonth = this._dateAdapter.getMonth(this.activeDate);\r\n    const selectedDay = this._dateAdapter.getDate(this.activeDate);\r\n    const selectedHours = this._dateAdapter.getHours(this.activeDate);\r\n    const selectedMinutes = this._dateAdapter.getMinutes(this.activeDate);\r\n    this.selectedChange.emit(\r\n      this._dateAdapter.createDate(year, selectedMonth, selectedDay, selectedHours, selectedMinutes)\r\n    );\r\n  }\r\n\r\n  _calculatePoints() {\r\n    const el = this.element.nativeElement;\r\n    return {\r\n      height: el.offsetHeight,\r\n      scrolled: el.scrollTop,\r\n      total: el.scrollHeight\r\n    };\r\n  }\r\n\r\n  _handleScroll(position, lastPosition) {\r\n    if (position.scrolled === 0 && lastPosition.scrolled > 0) {\r\n      this._populateYears(false);\r\n    } else if (position.height + position.scrolled === position.total) {\r\n      this._populateYears(true);\r\n    }\r\n    lastPosition.scrolled = position.scrolled;\r\n  }\r\n\r\n  /** Handles keydown events on the calendar body when calendar is in multi-year view. */\r\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\r\n    // TODO handle @angular/cdk/keycode\r\n    switch (event.keyCode) {\r\n      case UP_ARROW:\r\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -1);\r\n        break;\r\n      case DOWN_ARROW:\r\n        this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, 1);\r\n        break;\r\n      case ENTER:\r\n        this._yearSelected(this._dateAdapter.getYear(this._activeDate));\r\n        break;\r\n      default:\r\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\r\n        return;\r\n    }\r\n\r\n    this._focusActiveCell();\r\n    // Prevent unexpected default actions such as form submission.\r\n    event.preventDefault();\r\n  }\r\n\r\n  _focusActiveCell() {}\r\n\r\n  /**\r\n   * @param obj The object to check.\r\n   * @returns The given object if it is both a date instance and valid, otherwise null.\r\n   */\r\n  private _getValidDateOrNull(obj: any): D | null {\r\n    return this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj) ? obj : null;\r\n  }\r\n}\r\n","<div class=\"mat-calendar-years\" (keydown)=\"_handleCalendarBodyKeydown($event)\">\r\n  <span *ngFor=\"let year of _years\"\r\n  [class]=\"'mat-calendar-years-item mat-calendar-years-item-diff' + abs(year.value - _selectedYear)\"\r\n  [class.mat-calendar-years-item-active]=\"year.value === _selectedYear\"\r\n  [class.mat-calendar-years-item-disabled]=\"!year.enabled\"\r\n  (click)=\"year.enabled ? _yearSelected(year.value) : null\">\r\n    {{ year.value }}\r\n  </span>\r\n</div>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\nexport interface MatDatepickerIntlCatalog {\r\n  calendarLabel: string;\r\n  openCalendarLabel: string;\r\n  prevMonthLabel: string;\r\n  nextMonthLabel: string;\r\n  prevYearLabel: string;\r\n  nextYearLabel: string;\r\n  setToAMLabel: string;\r\n  setToPMLabel: string;\r\n  switchToMinuteViewLabel: string;\r\n  switchToHourViewLabel: string;\r\n  switchToMonthViewLabel: string;\r\n  switchToYearViewLabel: string;\r\n  switchToYearsViewLabel: string;\r\n  buttonSubmitText: string;\r\n  buttonSubmitLabel: string;\r\n  buttonCancelText: string;\r\n  buttonCancelLabel: string;\r\n}\r\n\r\n/** Datepicker data that requires internationalization. */\r\n@Injectable({ providedIn: 'root' })\r\nexport class MatDatepickerIntl implements MatDatepickerIntlCatalog {\r\n  /**\r\n   * Stream that emits whenever the labels here are changed. Use this to notify\r\n   * components if the labels have changed after initialization.\r\n   */\r\n  readonly changes = new Subject<void>();\r\n\r\n  /** A label for the calendar popup (used by screen readers). */\r\n  calendarLabel = 'Calendar';\r\n\r\n  /** A label for the button used to open the calendar popup (used by screen readers). */\r\n  openCalendarLabel = 'Open calendar';\r\n\r\n  /** A label for the previous month button (used by screen readers). */\r\n  prevMonthLabel = 'Previous month';\r\n\r\n  /** A label for the next month button (used by screen readers). */\r\n  nextMonthLabel = 'Next month';\r\n\r\n  /** A label for the previous year button (used by screen readers). */\r\n  prevYearLabel = 'Previous year';\r\n\r\n  /** A label for the next year button (used by screen readers). */\r\n  nextYearLabel = 'Next year';\r\n\r\n  /** A label for the 'AM' button (used by screen readers). */\r\n  setToAMLabel = 'Set date to AM';\r\n\r\n  /** A label for the 'PM' button (used by screen readers). */\r\n  setToPMLabel = 'Set date to PM';\r\n\r\n  /** A label for the 'switch to minute view' button (used by screen readers). */\r\n  switchToMinuteViewLabel = 'Change to minute view';\r\n\r\n  /** A label for the 'switch to hour view' button (used by screen readers). */\r\n  switchToHourViewLabel = 'Change to hour view';\r\n\r\n  /** A label for the 'switch to month view' button (used by screen readers). */\r\n  switchToMonthViewLabel = 'Change to month view';\r\n\r\n  /** A label for the 'switch to year view' button (used by screen readers). */\r\n  switchToYearViewLabel = 'Change to year view';\r\n\r\n  /** A label for the 'switch to years view' button (used by screen readers). */\r\n  switchToYearsViewLabel = 'Change to years view';\r\n\r\n  /** Text for the 'submit' button. */\r\n  buttonSubmitText = 'Ok';\r\n\r\n  /** A label for the 'submit' button (used by screen readers). */\r\n  buttonSubmitLabel = 'Choose the current date';\r\n\r\n  /** Text for the 'cancel' button. */\r\n  buttonCancelText = 'Cancel';\r\n\r\n  /** A label for the 'cancel' button (used by screen readers). */\r\n  buttonCancelLabel = 'Cancel the date selection';\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport {\r\n  AfterContentInit,\r\n  AfterViewChecked,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  Optional,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { MatClockView } from './clock-view';\r\nimport { MAT_DATE_FORMATS, MatDateFormats } from './core/index';\r\nimport { DateAdapter } from './core/index';\r\nimport { matDatepickerAnimations } from './datepicker-animations';\r\nimport { createMissingDateImplError } from './datepicker-errors';\r\nimport { MatDatepickerIntl } from './datepicker-intl';\r\nimport { MatMonthView } from './month-view';\r\nimport { MatYearView } from './year-view';\r\nimport { MatYearsView } from './years-view';\r\n\r\n/**\r\n * Possible views for the calendar.\r\n * @docs-private\r\n */\r\nexport type MatCalendarView = 'clock' | 'month' | 'year' | 'years';\r\n\r\n/**\r\n * Possible return types.\r\n * @docs-private\r\n */\r\nexport type MatCalendarType = 'date' | 'datetime' | 'time';\r\n\r\n/**\r\n * A calendar that is used as part of the datepicker.\r\n * @docs-private\r\n */\r\n@Component({\r\n  selector: 'mat-calendar',\r\n  templateUrl: 'calendar.html',\r\n  // styleUrls: ['calendar.css'],\r\n  host: {\r\n    class: 'mat-calendar'\r\n  },\r\n  animations: [matDatepickerAnimations.controlActive, matDatepickerAnimations.slideCalendar],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  preserveWhitespaces: false\r\n})\r\nexport class MatCalendar<D> implements AfterContentInit, AfterViewChecked, OnChanges, OnDestroy {\r\n  private _intlChanges: Subscription;\r\n\r\n  /**\r\n   * Used for scheduling that focus should be moved to the active cell on the next tick.\r\n   * We need to schedule it, rather than do it immediately, because we have to wait\r\n   * for Angular to re-evaluate the view children.\r\n   */\r\n  private _moveFocusOnNextTick = false;\r\n\r\n  /** A date representing the period (month or year) to start the calendar in. */\r\n  @Input()\r\n  get startAt(): D | null {\r\n    return this._startAt;\r\n  }\r\n  set startAt(value: D | null) {\r\n    this._startAt = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _startAt: D | null;\r\n\r\n  /** The type of value handled by the calendar. */\r\n  @Input()\r\n  type: MatCalendarType = 'date';\r\n\r\n  /** Which view the calendar should be started in. */\r\n  @Input()\r\n  startView: MatCalendarView = 'month';\r\n\r\n  /** Current calendar view */\r\n  view: MatCalendarView;\r\n\r\n  /** The currently selected date. */\r\n  @Input()\r\n  get selected(): D | null {\r\n    return this._selected;\r\n  }\r\n  set selected(value: D | null) {\r\n    this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n    this.activeDate = this._selected;\r\n  }\r\n  private _selected: D | null;\r\n\r\n  /** The minimum selectable date. */\r\n  @Input()\r\n  get minDate(): D | null {\r\n    return this._minDate;\r\n  }\r\n  set minDate(value: D | null) {\r\n    this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _minDate: D | null;\r\n\r\n  /** The maximum selectable date. */\r\n  @Input()\r\n  get maxDate(): D | null {\r\n    return this._maxDate;\r\n  }\r\n  set maxDate(value: D | null) {\r\n    this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _maxDate: D | null;\r\n\r\n  /** A function used to filter which dates are selectable. */\r\n  @Input()\r\n  dateFilter: (date: D, unit?: string) => boolean;\r\n\r\n  /** Clock interval */\r\n  @Input()\r\n  clockStep = 1;\r\n\r\n  /** Clock hour format */\r\n  @Input()\r\n  twelveHour = false;\r\n\r\n  /** Emits when the currently selected date changes. */\r\n  @Output()\r\n  selectedChange = new EventEmitter<D>();\r\n\r\n  /** Emits when any date is selected. */\r\n  @Output()\r\n  _userSelection = new EventEmitter<void>();\r\n\r\n  /** Reference to the current clock view component. */\r\n  @ViewChild(MatClockView)\r\n  clockView: MatClockView<D>;\r\n\r\n  /** Reference to the current month view component. */\r\n  @ViewChild(MatMonthView)\r\n  monthView: MatMonthView<D>;\r\n\r\n  /** Reference to the current year view component. */\r\n  @ViewChild(MatYearView)\r\n  yearView: MatYearView<D>;\r\n\r\n  /** Reference to the current years view component. */\r\n  @ViewChild(MatYearsView)\r\n  yearsView: MatYearsView<D>;\r\n\r\n  /** Date filter for the month and year views. */\r\n  _dateFilterForViews = (date: D, unit = 'minute') => {\r\n    return (\r\n      !!date &&\r\n      (!this.dateFilter || this.dateFilter(date)) &&\r\n      (!this.minDate || this._dateAdapter.compareDate(date, this.minDate, unit) >= 0) &&\r\n      (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate, unit) <= 0)\r\n    );\r\n  };\r\n\r\n  /**\r\n   * The current active date. This determines which time period is shown and which date is\r\n   * highlighted when using keyboard navigation.\r\n   */\r\n  get activeDate(): D {\r\n    return this._clampedActiveDate;\r\n  }\r\n  set activeDate(value: D) {\r\n    const oldActiveDate = this._clampedActiveDate;\r\n    this._clampedActiveDate = this._dateAdapter.clampDate(value, this.minDate, this.maxDate);\r\n    this._isAm = this._dateAdapter.getHours(this._clampedActiveDate) < 12;\r\n\r\n    const unit = this.view === 'year' ? 'year' : 'month';\r\n    const diff = this._dateAdapter.compareDate(oldActiveDate, this._clampedActiveDate, unit);\r\n    if (diff) {\r\n      this._animationDir = diff > 0 ? 'left' : 'right';\r\n    }\r\n\r\n    // update the labels\r\n    const day = this._dateAdapter.getDayOfWeek(this.activeDate);\r\n    let hours = this._dateAdapter.getHours(this.activeDate);\r\n    if (this.twelveHour) {\r\n      hours = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\r\n    }\r\n    const minutes = this._dateAdapter.getMinutes(this.activeDate);\r\n\r\n    switch (this.view) {\r\n      case 'year':\r\n        this._periodButtonText = this._dateAdapter.getYearName(this.activeDate);\r\n        break;\r\n      default:\r\n        this._periodButtonText = this._dateAdapter.format(this.activeDate, this._dateFormats.display.monthYearLabel);\r\n    }\r\n    this._yearButtonText = this._dateAdapter.getYear(this.activeDate).toString();\r\n    this._monthdayButtonText = this._dateAdapter.format(this.activeDate, this._dateFormats.display.monthDayLabel);\r\n    this._dayButtonText = this._dateAdapter.getDayOfWeekNames('short')[day];\r\n    this._hourButtonText = hours.toString();\r\n    this._minuteButtonText = ('00' + minutes).slice(-2);\r\n\r\n    this.stateChanges.next();\r\n  }\r\n  private _clampedActiveDate: D;\r\n\r\n  /** Whether the calendar is in month view. */\r\n  get currentView(): MatCalendarView {\r\n    return this._currentView;\r\n  }\r\n  set currentView(value: MatCalendarView) {\r\n    this._currentView = value;\r\n    this._moveFocusOnNextTick = true;\r\n  }\r\n  private _currentView: MatCalendarView;\r\n\r\n  /**\r\n   * Emits whenever there is a state change that the header may need to respond to.\r\n   */\r\n  stateChanges = new Subject<void>();\r\n\r\n  /** Animations handler */\r\n  _animationDir: string;\r\n\r\n  /** Whether the active date is AM or not */\r\n  _isAm: boolean;\r\n\r\n  /** Whether the calendar process the time. */\r\n  _hasTime: boolean;\r\n\r\n  /** Whether the calendar is in hour view. */\r\n  _hourView: boolean = true;\r\n\r\n  /** The label for the calendar header buttons. */\r\n  _yearButtonText: string;\r\n\r\n  _dayButtonText: string;\r\n\r\n  _monthdayButtonText: string;\r\n\r\n  _hourButtonText: string;\r\n\r\n  _minuteButtonText: string;\r\n\r\n  /** The label for the current calendar view. */\r\n  _periodButtonText: string;\r\n\r\n  _periodButtonLabel: string;\r\n\r\n  /** The label for the the previous button. */\r\n  _prevButtonLabel: string;\r\n\r\n  /** The label for the the next button. */\r\n  _nextButtonLabel: string;\r\n\r\n  constructor(\r\n    public _intl: MatDatepickerIntl,\r\n    @Optional() private _dateAdapter: DateAdapter<D>,\r\n    @Optional()\r\n    @Inject(MAT_DATE_FORMATS)\r\n    private _dateFormats: MatDateFormats,\r\n    private _changeDetectorRef: ChangeDetectorRef\r\n  ) {\r\n    if (!this._dateAdapter) {\r\n      throw createMissingDateImplError('DateAdapter');\r\n    }\r\n\r\n    if (!this._dateFormats) {\r\n      throw createMissingDateImplError('MAT_DATE_FORMATS');\r\n    }\r\n\r\n    this._intlChanges = _intl.changes.subscribe(() => {\r\n      _changeDetectorRef.markForCheck();\r\n      this.stateChanges.next();\r\n    });\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this.activeDate = this.startAt || this._dateAdapter.today();\r\n\r\n    this.changeView(this.startView, false);\r\n  }\r\n\r\n  ngAfterViewChecked() {\r\n    if (this._moveFocusOnNextTick) {\r\n      this._moveFocusOnNextTick = false;\r\n      this.focusActiveCell();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._intlChanges.unsubscribe();\r\n    this.stateChanges.complete();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    this._hasTime = this.type.indexOf('time') >= 0;\r\n    const change = changes.selected || changes.minDate || changes.maxDate || changes.dateFilter;\r\n\r\n    if (change && !change.firstChange) {\r\n      const view = this._getCurrentViewComponent();\r\n      if (view) {\r\n        // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\r\n        // passed down to the view via data bindings which won't be up-to-date when we call `_init`.\r\n        this._changeDetectorRef.detectChanges();\r\n        view._init();\r\n      }\r\n    }\r\n\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  changeView(view, focus = true) {\r\n    switch (view) {\r\n      case 'year':\r\n        this._periodButtonText = this._dateAdapter.getYearName(this.activeDate);\r\n        this._periodButtonLabel = this._intl.switchToYearsViewLabel;\r\n        this._nextButtonLabel = this._intl.nextYearLabel;\r\n        this._prevButtonLabel = this._intl.prevYearLabel;\r\n        break;\r\n      case 'month':\r\n        this._periodButtonText = this._dateAdapter.format(this.activeDate, this._dateFormats.display.monthYearLabel);\r\n        this._periodButtonLabel = this._intl.switchToYearViewLabel;\r\n        this._nextButtonLabel = this._intl.nextMonthLabel;\r\n        this._prevButtonLabel = this._intl.prevMonthLabel;\r\n    }\r\n\r\n    this.view = view;\r\n    if (focus) {\r\n      this._moveFocusOnNextTick = true;\r\n    }\r\n  }\r\n\r\n  focusActiveCell() {\r\n    this._getCurrentViewComponent()._focusActiveCell();\r\n  }\r\n\r\n  _submitClicked(): void {\r\n    this.selectedChange.emit(this.activeDate);\r\n    this._userSelection.emit();\r\n  }\r\n\r\n  _cancelClicked(): void {\r\n    this._userSelection.emit();\r\n  }\r\n\r\n  /** Handles date selection in the clock view. */\r\n  _timeChanged(date: D): void {\r\n    this.selected = date;\r\n  }\r\n\r\n  _timeSelected(date: D): void {\r\n    // if (this.autoOk && this.type === 'time') {\r\n    //   this.selectedChange.emit(date);\r\n    //   this._userSelection.emit();\r\n    // }\r\n    this.selected = date;\r\n  }\r\n\r\n  /** Handles date selection in the month view. */\r\n  _dateSelected(date: D): void {\r\n    this.selected = date;\r\n    if (this._hasTime) {\r\n      this.changeView('clock');\r\n    }\r\n  }\r\n\r\n  /** Handles month selection in the year view. */\r\n  _monthSelected(month: D): void {\r\n    this.selected = month;\r\n    this.changeView('month');\r\n  }\r\n\r\n  _yearSelected(year: D): void {\r\n    this.selected = year;\r\n    this.changeView('year');\r\n  }\r\n\r\n  /** Handles user clicks on the period label. */\r\n  _currentPeriodClicked(): void {\r\n    this.changeView(this.view === 'month' ? 'year' : 'years');\r\n  }\r\n\r\n  /** Handles user clicks on the previous button. */\r\n  _previousClicked(): void {\r\n    this._navCalendar(-1);\r\n  }\r\n\r\n  /** Handles user clicks on the next button. */\r\n  _nextClicked(): void {\r\n    this._navCalendar(1);\r\n  }\r\n\r\n  /** Handles user clicks on the time labels. */\r\n  _showHourView(): void {\r\n    if (this._hasTime) {\r\n      this._hourView = true;\r\n      this.changeView('clock');\r\n    }\r\n  }\r\n\r\n  _showMinuteView(): void {\r\n    this._hourView = false;\r\n    this.changeView('clock');\r\n  }\r\n\r\n  _toggleAmPm(am): void {\r\n    if (this._isAm !== am) {\r\n      const date = this._dateAdapter.addCalendarHours(this.activeDate, this._isAm ? 12 : -12);\r\n      if (this._dateFilterForViews(date, 'minute')) {\r\n        this.selected = date;\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Whether the previous period button is enabled. */\r\n  _previousEnabled(): boolean {\r\n    if (!this.minDate) {\r\n      return true;\r\n    }\r\n    return !this.minDate || !this._isSameView(this.activeDate, this.minDate);\r\n  }\r\n\r\n  /** Whether the next period button is enabled. */\r\n  _nextEnabled(): boolean {\r\n    return !this.maxDate || !this._isSameView(this.activeDate, this.maxDate);\r\n  }\r\n\r\n  /** Handles calendar diffs. */\r\n  _navCalendar(diff): void {\r\n    switch (this.view) {\r\n      case 'year':\r\n        this.activeDate = this._dateAdapter.addCalendarYears(this.activeDate, diff);\r\n        break;\r\n      case 'month':\r\n        this.activeDate = this._dateAdapter.addCalendarMonths(this.activeDate, diff);\r\n        break;\r\n      case 'clock':\r\n        this.activeDate = this._hourView\r\n          ? this._dateAdapter.addCalendarHours(this.activeDate, diff)\r\n          : this._dateAdapter.addCalendarMinutes(this.activeDate, diff);\r\n        break;\r\n    }\r\n  }\r\n\r\n  /** Whether the two dates represent the same view in the current view mode (month or year). */\r\n  private _isSameView(date1: D, date2: D): boolean {\r\n    switch (this.view) {\r\n      case 'year':\r\n        return this._dateAdapter.getYear(date1) === this._dateAdapter.getYear(date2);\r\n      case 'month':\r\n        const monthYear = this._dateFormats.display.monthYearLabel;\r\n        return this._dateAdapter.format(date1, monthYear) === this._dateAdapter.format(date2, monthYear);\r\n      case 'clock':\r\n        const hourMinute = this._dateFormats.display.timeLabel;\r\n        return this._dateAdapter.format(date1, hourMinute) === this._dateAdapter.format(date2, hourMinute);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param obj The object to check.\r\n   * @returns The given object if it is both a date instance and valid, otherwise null.\r\n   */\r\n  private _getValidDateOrNull(obj: any): D | null {\r\n    return this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj) ? obj : null;\r\n  }\r\n\r\n  /** Returns the component instance that corresponds to the current calendar view. */\r\n  private _getCurrentViewComponent() {\r\n    return this.clockView || this.monthView || this.yearView || this.yearsView;\r\n  }\r\n}\r\n","<div [class]=\"'mat-calendar-header mat-calendar-type-' + type\">\r\n\r\n  <div class=\"mat-calendar-header-date\">\r\n    <button class=\"mat-calendar-header-date-year mat-calendar-control\"\r\n    [class.mat-calendar-control-active]=\"view == 'years'\"\r\n    [@controlActive]=\"view == 'years' ? 'active' : ''\"\r\n    [attr.aria-label]=\"_intl.switchToYearViewLabel\"\r\n    (click)=\"changeView('years')\">\r\n      {{ _yearButtonText }}\r\n    </button>\r\n\r\n    <button class=\"mat-calendar-header-date-month mat-calendar-control\"\r\n    [class.mat-calendar-control-active]=\"view == 'month' || view == 'year'\"\r\n    [@controlActive]=\"view == 'month' || view == 'year' ? 'active' : ''\"\r\n    [attr.aria-label]=\"_intl.switchToMonthViewLabel\"\r\n    (click)=\"changeView('month')\">\r\n      <span class=\"mat-calendar-header-date-dayname\">{{ _dayButtonText }}, </span>\r\n      <span class=\"mat-calendar-header-date-monthday\">{{ _monthdayButtonText }}</span>\r\n    </button>\r\n  </div>\r\n\r\n  <div class=\"mat-calendar-header-time\">\r\n    <div class=\"mat-calendar-header-time-hour\">\r\n      <button class=\"mat-calendar-control\"\r\n      [class.mat-calendar-control-active]=\"view == 'clock' && _hourView\"\r\n      [@controlActive]=\"view == 'clock' && _hourView ? 'active' : ''\"\r\n      [attr.aria-label]=\"_intl.switchToHourViewLabel\"\r\n      (click)=\"_showHourView()\">\r\n        {{ _hourButtonText }}\r\n      </button>\r\n      <span>:</span>\r\n      <button class=\"mat-calendar-control\"\r\n      [class.mat-calendar-control-active]=\"view == 'clock' && !_hourView\"\r\n      [@controlActive]=\"view == 'clock' && !_hourView ? 'active' : ''\"\r\n      [attr.aria-label]=\"_intl.switchToMinuteViewLabel\"\r\n      (click)=\"_showMinuteView()\">\r\n        {{ _minuteButtonText }}\r\n      </button>\r\n    </div>\r\n    <div class=\"mat-calendar-header-time-ampm\" *ngIf=\"twelveHour\">\r\n      <button class=\"mat-calendar-control\"\r\n      [class.mat-calendar-control-active]=\"_isAm\"\r\n      [@controlActive]=\"_isAm ? 'active' : ''\"\r\n      [attr.aria-label]=\"_intl.setToAMLabel\"\r\n      (click)=\"_toggleAmPm(true)\">\r\n        AM\r\n      </button>\r\n      <button class=\"mat-calendar-control\"\r\n      [class.mat-calendar-control-active]=\"!_isAm\"\r\n      [@controlActive]=\"!_isAm ? 'active' : ''\"\r\n      [attr.aria-label]=\"_intl.setToPMLabel\"\r\n      (click)=\"_toggleAmPm(false)\">\r\n        PM\r\n      </button>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div [class]=\"'mat-calendar-content mat-calendar-view-' + view\">\r\n\r\n  <div class=\"mat-calendar-heading\" *ngIf=\"view === 'month' || view === 'year'\">\r\n    <button mat-icon-button class=\"mat-calendar-previous-button\"\r\n      (click)=\"_previousClicked()\" [attr.disabled]=\"!_previousEnabled() ? '' : null\"\r\n      [attr.aria-label]=\"_prevButtonLabel\">\r\n    </button>\r\n\r\n    <button class=\"mat-calendar-heading-period mat-calendar-control mat-calendar-control-active\"\r\n    [@slideCalendar]=\"_animationDir\" (@slideCalendar.done)=\"_animationDir = ''\"\r\n    (click)=\"_currentPeriodClicked()\"\r\n    [attr.aria-label]=\"_periodButtonLabel\">\r\n      <strong>{{ _periodButtonText }}</strong>\r\n    </button>\r\n\r\n    <button mat-icon-button class=\"mat-calendar-next-button\"\r\n      (click)=\"_nextClicked()\" [attr.disabled]=\"!_nextEnabled() ? '' : null\"\r\n      [attr.aria-label]=\"_nextButtonLabel\">\r\n    </button>\r\n  </div>\r\n\r\n  <div class=\"mat-calendar-main\" [ngSwitch]=\"view\" cdkMonitorSubtreeFocus tabindex=\"-1\">\r\n\r\n    <mat-clock-view\r\n      *ngSwitchCase=\"'clock'\"\r\n      [(activeDate)]=\"activeDate\"\r\n      [selected]=\"selected\"\r\n      [dateFilter]=\"_dateFilterForViews\"\r\n      [clockStep]=\"clockStep\"\r\n      [twelveHour]=\"twelveHour\"\r\n      [hourView]=\"_hourView\"\r\n      (selectedTime)=\"_timeSelected($event)\"\r\n      (selectedChange)=\"_timeChanged($event)\"\r\n      (changeView)=\"_hourView = !_hourView\">\r\n    </mat-clock-view>\r\n\r\n    <mat-month-view\r\n      *ngSwitchCase=\"'month'\"\r\n      [(activeDate)]=\"activeDate\"\r\n      [selected]=\"selected\"\r\n      [dateFilter]=\"_dateFilterForViews\"\r\n      [maxDate]=\"maxDate\"\r\n      [minDate]=\"minDate\"\r\n      [animationDir]=\"_animationDir\"\r\n      (selectedChange)=\"_dateSelected($event)\"\r\n      (_userSelection)=\"_showHourView()\">\r\n    </mat-month-view>\r\n\r\n    <mat-year-view\r\n      *ngSwitchCase=\"'year'\"\r\n      [(activeDate)]=\"activeDate\"\r\n      [selected]=\"selected\"\r\n      [dateFilter]=\"_dateFilterForViews\"\r\n      [maxDate]=\"maxDate\"\r\n      [minDate]=\"minDate\"\r\n      [animationDir]=\"_animationDir\"\r\n      (selectedChange)=\"_monthSelected($event)\">\r\n    </mat-year-view>\r\n\r\n    <mat-years-view\r\n      *ngSwitchCase=\"'years'\"\r\n      [(activeDate)]=\"activeDate\"\r\n      [selected]=\"selected\"\r\n      [dateFilter]=\"_dateFilterForViews\"\r\n      [maxDate]=\"maxDate\"\r\n      [minDate]=\"minDate\"\r\n      (selectedChange)=\"_yearSelected($event)\">\r\n    </mat-years-view>\r\n  </div>\r\n\r\n  <div class=\"mat-calendar-footer\">\r\n    <button mat-button\r\n    (click)=\"_cancelClicked()\"\r\n    [attr.aria-label]=\"_intl.buttonCancelLabel\">\r\n      {{ _intl.buttonCancelText }}\r\n    </button>\r\n\r\n    <button mat-button\r\n    (click)=\"_submitClicked()\"\r\n    [attr.aria-label]=\"_intl.buttonSubmitLabel\">\r\n      {{ _intl.buttonSubmitText }}\r\n    </button>\r\n  </div>\r\n</div>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { ESCAPE, UP_ARROW } from '@angular/cdk/keycodes';\r\nimport { Overlay, OverlayConfig, OverlayRef, PositionStrategy, ScrollStrategy } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ComponentRef,\r\n  EventEmitter,\r\n  Inject,\r\n  InjectionToken,\r\n  Input,\r\n  NgZone,\r\n  OnDestroy,\r\n  OnInit,\r\n  Optional,\r\n  Output,\r\n  ViewChild,\r\n  ViewContainerRef,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { take, filter } from 'rxjs/operators';\r\nimport { merge, Subject, Subscription } from 'rxjs';\r\nimport { MatCalendar, MatCalendarType, MatCalendarView } from './calendar';\r\nimport { DateAdapter } from './core/index';\r\nimport { matDatepickerAnimations } from './datepicker-animations';\r\nimport { createMissingDateImplError } from './datepicker-errors';\r\nimport { MatDatepickerInput } from './datepicker-input';\r\n\r\n/** Used to generate a unique ID for each datepicker instance. */\r\nlet datepickerUid = 0;\r\n\r\n/** Injection token that determines the scroll handling while the calendar is open. */\r\nexport const MAT_DATEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\r\n  'mat-datepicker-scroll-strategy'\r\n);\r\n\r\n/** @docs-private */\r\nexport function MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\r\n  return () => overlay.scrollStrategies.reposition();\r\n}\r\n\r\n/** @docs-private */\r\nexport const MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\r\n  provide: MAT_DATEPICKER_SCROLL_STRATEGY,\r\n  deps: [Overlay],\r\n  useFactory: MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY\r\n};\r\n\r\n/**\r\n * Component used as the content for the datepicker dialog and popup. We use this instead of using\r\n * MatCalendar directly as the content so we can control the initial focus. This also gives us a\r\n * place to put additional features of the popup that are not part of the calendar itself in the\r\n * future. (e.g. confirmation buttons).\r\n * @docs-private\r\n */\r\n@Component({\r\n  selector: 'mat-datepicker-content',\r\n  templateUrl: 'datepicker-content.html',\r\n  // styleUrls: ['datepicker-content.scss'],\r\n  host: {\r\n    class: 'mat-datepicker-content',\r\n    '[@transformPanel]': '\"enter\"',\r\n    '[class.mat-datepicker-content-touch]': 'datepicker.touchUi',\r\n    '(keydown)': '_handleKeydown($event)'\r\n  },\r\n  animations: [matDatepickerAnimations.transformPanel, matDatepickerAnimations.fadeInCalendar],\r\n  exportAs: 'matDatepickerContent',\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  preserveWhitespaces: false\r\n})\r\nexport class MatDatepickerContent<D> implements AfterViewInit {\r\n  /** Reference to the internal calendar component. */\r\n  @ViewChild(MatCalendar, { static: true })\r\n  _calendar: MatCalendar<D>;\r\n\r\n  /** Reference to the datepicker that created the overlay. */\r\n  datepicker: MatDatepicker<D>;\r\n\r\n  /** Whether the datepicker is above or below the input. */\r\n  _isAbove: boolean;\r\n\r\n  ngAfterViewInit() {\r\n    this._calendar.focusActiveCell();\r\n  }\r\n\r\n  /**\r\n   * Handles keydown event on datepicker content.\r\n   * @param event The event.\r\n   */\r\n  _handleKeydown(event: KeyboardEvent): void {\r\n    if (event.keyCode === ESCAPE) {\r\n      this.datepicker.close();\r\n      event.preventDefault();\r\n      event.stopPropagation();\r\n    }\r\n  }\r\n}\r\n\r\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\r\n// template reference variables (e.g. #d vs #d=\"matDatepicker\"). We can change this to a directive\r\n// if angular adds support for `exportAs: '$implicit'` on directives.\r\n/** Component responsible for managing the datepicker popup/dialog. */\r\n@Component({\r\n  selector: 'mat-datepicker',\r\n  template: '',\r\n  exportAs: 'matDatepicker',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  preserveWhitespaces: false\r\n})\r\nexport class MatDatepicker<D> implements OnInit, OnDestroy {\r\n  /** The date to open the calendar to initially. */\r\n  @Input()\r\n  get startAt(): D | null {\r\n    // If an explicit startAt is set we start there, otherwise we start at whatever the currently\r\n    // selected value is.\r\n    return this._startAt || (this._datepickerInput ? this._datepickerInput.value : null);\r\n  }\r\n  set startAt(value: D | null) {\r\n    this._startAt = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n  private _startAt: D | null;\r\n\r\n  /** The type of value handled by the calendar. */\r\n  @Input()\r\n  type: MatCalendarType = 'date';\r\n\r\n  /** Which view the calendar should be started in. */\r\n  @Input()\r\n  startView: MatCalendarView = 'month';\r\n\r\n  /** Clock interval */\r\n  @Input()\r\n  clockStep = 1;\r\n\r\n  /** Clock hour format */\r\n  @Input()\r\n  twelveHour = true;\r\n\r\n  @Input()\r\n  color?: string;\r\n\r\n  /**\r\n   * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\r\n   * than a popup and elements have more padding to allow for bigger touch targets.\r\n   */\r\n  @Input()\r\n  get touchUi(): boolean {\r\n    return this._touchUi;\r\n  }\r\n  set touchUi(value: boolean) {\r\n    this._touchUi = coerceBooleanProperty(value);\r\n  }\r\n  private _touchUi = true;\r\n\r\n  /** Whether the datepicker pop-up should be disabled. */\r\n  @Input()\r\n  get disabled(): boolean {\r\n    return this._disabled === undefined && this._datepickerInput ? this._datepickerInput.disabled : !!this._disabled;\r\n  }\r\n  set disabled(value: boolean) {\r\n    const newValue = coerceBooleanProperty(value);\r\n\r\n    if (newValue !== this._disabled) {\r\n      this._disabled = newValue;\r\n      this._disabledChange.next(newValue);\r\n    }\r\n  }\r\n  private _disabled: boolean;\r\n\r\n  /** Whether the datepicker is connected to a date type one */\r\n  @Input()\r\n  set matDatepicker(value: MatDatepicker<D>) {\r\n    if (value) {\r\n      this._datepicker = value;\r\n    }\r\n  }\r\n  _datepicker: MatDatepicker<D>;\r\n\r\n  /** Classes to be passed to the date picker panel. Supports the same syntax as `ngClass`. */\r\n  @Input()\r\n  panelClass: string | string[];\r\n\r\n  /** Emits when the datepicker has been opened. */\r\n  @Output('opened')\r\n  openedStream: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  /** Emits when the datepicker has been closed. */\r\n  @Output('closed')\r\n  closedStream: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  /** Whether the calendar is open. */\r\n  @Input()\r\n  get opened(): boolean {\r\n    return this._opened;\r\n  }\r\n  set opened(value: boolean) {\r\n    value ? this.open() : this.close();\r\n  }\r\n  private _opened = false;\r\n\r\n  /** The id for the datepicker calendar. */\r\n  id = `mat-datepicker-${datepickerUid++}`;\r\n\r\n  /** The currently selected date. */\r\n  get _selected(): D | null {\r\n    return this._validSelected;\r\n  }\r\n  set _selected(value: D | null) {\r\n    const valid = this._dateAdapter.clampDate(value, this._minDate, this._maxDate);\r\n    if (valid) {\r\n      // round the minutes\r\n      let minutes = this._dateAdapter.getMinutes(valid);\r\n      minutes = Math.round(minutes / this.clockStep) * this.clockStep;\r\n      this._dateAdapter.setMinutes(valid, minutes);\r\n      this._dateAdapter.setSeconds(valid, 0);\r\n    }\r\n    this._validSelected = valid;\r\n  }\r\n  private _validSelected: D | null = null;\r\n\r\n  /** The minimum selectable date. */\r\n  get _minDate(): D | null {\r\n    return this._datepickerInput && this._datepickerInput.min;\r\n  }\r\n\r\n  /** The maximum selectable date. */\r\n  get _maxDate(): D | null {\r\n    return this._datepickerInput && this._datepickerInput.max;\r\n  }\r\n\r\n  get _dateFilter(): (date: D | null, unit?: string) => boolean {\r\n    return this._datepickerInput && this._datepickerInput._dateFilter;\r\n  }\r\n\r\n  /** A reference to the overlay when the calendar is opened as a popup. */\r\n  _popupRef: OverlayRef;\r\n\r\n  /** A reference to the dialog when the calendar is opened as a dialog. */\r\n  private _dialogRef: MatDialogRef<MatDatepickerContent<D>> | null;\r\n\r\n  /** A portal containing the calendar for this datepicker. */\r\n  private _calendarPortal: ComponentPortal<MatDatepickerContent<D>>;\r\n\r\n  /** Reference to the component instantiated in popup mode. */\r\n  private _popupComponentRef: ComponentRef<MatDatepickerContent<D>> | null;\r\n\r\n  /** The element that was focused before the datepicker was opened. */\r\n  private _focusedElementBeforeOpen: HTMLElement | null = null;\r\n\r\n  /** Subscription to value changes in the associated input element. */\r\n  private _inputSubscription = Subscription.EMPTY;\r\n\r\n  /** The input element this datepicker is associated with. */\r\n  _datepickerInput: MatDatepickerInput<D>;\r\n\r\n  /** Emits when the datepicker is disabled. */\r\n  readonly _disabledChange = new Subject<boolean>();\r\n\r\n  /** Emits new selected date when selected date changes. */\r\n  readonly _selectedChanged = new Subject<D>();\r\n\r\n  constructor(\r\n    private _dialog: MatDialog,\r\n    private _overlay: Overlay,\r\n    private _ngZone: NgZone,\r\n    private _viewContainerRef: ViewContainerRef,\r\n    @Inject(MAT_DATEPICKER_SCROLL_STRATEGY) private _scrollStrategy,\r\n    @Optional() public _dateAdapter: DateAdapter<D>,\r\n    @Optional() private _dir: Directionality,\r\n    @Optional()\r\n    @Inject(DOCUMENT)\r\n    private _document: any\r\n  ) {\r\n    if (!this._dateAdapter) {\r\n      throw createMissingDateImplError('DateAdapter');\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n    // prevent inconsistent type and view\r\n    switch (this.type) {\r\n      case 'date':\r\n        this.startView = this.startView !== 'clock' ? this.startView : 'month';\r\n        break;\r\n      case 'time':\r\n        this.startView = 'clock';\r\n        break;\r\n      default:\r\n        this.startView = this.startView;\r\n    }\r\n\r\n    if (this._datepicker) {\r\n      this._datepicker._selectedChanged.subscribe((date: D) => {\r\n        const value = this._dateAdapter.createDate(\r\n          this._dateAdapter.getYear(date),\r\n          this._dateAdapter.getMonth(date),\r\n          this._dateAdapter.getDate(date),\r\n          this._selected ? this._dateAdapter.getHours(this._selected) : 0,\r\n          this._selected ? this._dateAdapter.getMinutes(this._selected) : 0\r\n        );\r\n        // update the corresponding changes\r\n        this.select(value);\r\n      });\r\n    }\r\n\r\n    // refresh the input\r\n    this._datepickerInput.value = this._selected;\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.close();\r\n    this._inputSubscription.unsubscribe();\r\n    this._selectedChanged.complete();\r\n    this._disabledChange.complete();\r\n\r\n    if (this._popupRef) {\r\n      this._popupRef.dispose();\r\n      this._popupComponentRef = null;\r\n    }\r\n  }\r\n\r\n  /** Selects the given date */\r\n  select(date: D): void {\r\n    const oldValue = this._selected;\r\n    this._selected = date;\r\n    const unit = this.type.indexOf('time') >= 0 ? 'minute' : 'day';\r\n    if (!this._dateAdapter.sameDate(oldValue, this._selected, unit)) {\r\n      this._selectedChanged.next(date);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Register an input with this datepicker.\r\n   * @param input The datepicker input to register with this datepicker.\r\n   */\r\n  _registerInput(input: MatDatepickerInput<D>): void {\r\n    if (this._datepickerInput) {\r\n      throw Error('A MatDatepicker can only be associated with a single input.');\r\n    }\r\n    this._datepickerInput = input;\r\n    this._inputSubscription = this._datepickerInput._valueChange.subscribe(\r\n      (value: D | null) =>\r\n        (this._selected = value && this._dateAdapter.isDateInstance(value) ? this._dateAdapter.clone(value) : null)\r\n    );\r\n  }\r\n\r\n  /** Open the calendar. */\r\n  open(): void {\r\n    if (this._opened || this.disabled) {\r\n      return;\r\n    }\r\n    if (!this._datepickerInput) {\r\n      throw Error('Attempted to open an MatDatepicker with no associated input.');\r\n    }\r\n    if (this._document) {\r\n      this._focusedElementBeforeOpen = this._document.activeElement;\r\n    }\r\n\r\n    this.touchUi ? this._openAsDialog() : this._openAsPopup();\r\n    this._opened = true;\r\n    this.openedStream.emit();\r\n  }\r\n\r\n  reset(value?: D | null) {\r\n    this._datepickerInput.reset(value);\r\n  }\r\n\r\n  /** Close the calendar. */\r\n  close(): void {\r\n    if (!this._opened) {\r\n      return;\r\n    }\r\n    if (this._popupRef && this._popupRef.hasAttached()) {\r\n      this._popupRef.detach();\r\n    }\r\n    if (this._dialogRef) {\r\n      this._dialogRef.close();\r\n      this._dialogRef = null;\r\n    }\r\n    if (this._calendarPortal && this._calendarPortal.isAttached) {\r\n      this._calendarPortal.detach();\r\n    }\r\n\r\n    const completeClose = () => {\r\n      // The `_opened` could've been reset already if\r\n      // we got two events in quick succession.\r\n      if (this._opened) {\r\n        this._opened = false;\r\n        this.closedStream.emit();\r\n        this._focusedElementBeforeOpen = null;\r\n      }\r\n    };\r\n\r\n    if (this._focusedElementBeforeOpen && typeof this._focusedElementBeforeOpen.focus === 'function') {\r\n      // Because IE moves focus asynchronously, we can't count on it being restored before we've\r\n      // marked the datepicker as closed. If the event fires out of sequence and the element that\r\n      // we're refocusing opens the datepicker on focus, the user could be stuck with not being\r\n      // able to close the calendar at all. We work around it by making the logic, that marks\r\n      // the datepicker as closed, async as well.\r\n      this._focusedElementBeforeOpen.focus();\r\n      setTimeout(completeClose);\r\n    } else {\r\n      completeClose();\r\n    }\r\n  }\r\n\r\n  /** Open the calendar as a dialog. */\r\n  private _openAsDialog(): void {\r\n    // Usually this would be handled by `open` which ensures that we can only have one overlay\r\n    // open at a time, however since we reset the variables in async handlers some overlays\r\n    // may slip through if the user opens and closes multiple times in quick succession (e.g.\r\n    // by holding down the enter key).\r\n    if (this._dialogRef) {\r\n      this._dialogRef.close();\r\n    }\r\n\r\n    this._dialogRef = this._dialog.open<MatDatepickerContent<D>>(MatDatepickerContent, {\r\n      direction: this._dir ? this._dir.value : 'ltr',\r\n      viewContainerRef: this._viewContainerRef,\r\n      panelClass: 'mat-datepicker-dialog'\r\n    });\r\n\r\n    this._dialogRef.afterClosed().subscribe(() => this.close());\r\n    this._dialogRef.componentInstance.datepicker = this;\r\n  }\r\n\r\n  /** Open the calendar as a popup. */\r\n  private _openAsPopup(): void {\r\n    if (!this._calendarPortal) {\r\n      this._calendarPortal = new ComponentPortal<MatDatepickerContent<D>>(MatDatepickerContent, this._viewContainerRef);\r\n    }\r\n\r\n    if (!this._popupRef) {\r\n      this._createPopup();\r\n    }\r\n\r\n    if (!this._popupRef.hasAttached()) {\r\n      this._popupComponentRef = this._popupRef.attach(this._calendarPortal);\r\n      this._popupComponentRef.instance.datepicker = this;\r\n\r\n      // Update the position once the calendar has rendered.\r\n      this._ngZone.onStable\r\n        .asObservable()\r\n        .pipe(take(1))\r\n        .subscribe(() => {\r\n          this._popupRef.updatePosition();\r\n        });\r\n    }\r\n  }\r\n\r\n  /** Create the popup. */\r\n  private _createPopup(): void {\r\n    const overlayConfig = new OverlayConfig({\r\n      positionStrategy: this._createPopupPositionStrategy(),\r\n      hasBackdrop: true,\r\n      backdropClass: 'mat-overlay-transparent-backdrop',\r\n      direction: this._dir,\r\n      scrollStrategy: this._scrollStrategy(),\r\n      panelClass: 'mat-datepicker-popup'\r\n    });\r\n\r\n    this._popupRef = this._overlay.create(overlayConfig);\r\n    this._popupRef.overlayElement.setAttribute('role', 'dialog');\r\n\r\n    merge(\r\n      this._popupRef.backdropClick(),\r\n      this._popupRef.detachments(),\r\n      this._popupRef.keydownEvents().pipe(\r\n        filter(event => {\r\n          // Closing on alt + up is only valid when there's an input associated with the datepicker.\r\n          return event.keyCode === ESCAPE || (this._datepickerInput && event.altKey && event.keyCode === UP_ARROW);\r\n        })\r\n      )\r\n    ).subscribe(() => this.close());\r\n  }\r\n\r\n  /** Create the popup PositionStrategy. */\r\n  private _createPopupPositionStrategy(): PositionStrategy {\r\n    return this._overlay\r\n      .position()\r\n      .flexibleConnectedTo(this._datepickerInput.getConnectedOverlayOrigin())\r\n      .withTransformOriginOn('.mat-datepicker-content')\r\n      .withFlexibleDimensions(false)\r\n      .withViewportMargin(8)\r\n      .withPush(false)\r\n      .withPositions([\r\n        {\r\n          originX: 'start',\r\n          originY: 'bottom',\r\n          overlayX: 'start',\r\n          overlayY: 'top'\r\n        },\r\n        {\r\n          originX: 'start',\r\n          originY: 'top',\r\n          overlayX: 'start',\r\n          overlayY: 'bottom'\r\n        },\r\n        {\r\n          originX: 'end',\r\n          originY: 'bottom',\r\n          overlayX: 'end',\r\n          overlayY: 'top'\r\n        },\r\n        {\r\n          originX: 'end',\r\n          originY: 'top',\r\n          overlayX: 'end',\r\n          overlayY: 'bottom'\r\n        }\r\n      ]);\r\n  }\r\n\r\n  /**\r\n   * @param obj The object to check.\r\n   * @returns The given object if it is both a date instance and valid, otherwise null.\r\n   */\r\n  private _getValidDateOrNull(obj: any): D | null {\r\n    return this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj) ? obj : null;\r\n  }\r\n}\r\n","<mat-calendar cdkTrapFocus\r\n    [id]=\"datepicker.id\"\r\n    [ngClass]=\"datepicker.panelClass\"\r\n    [type]=\"datepicker.type\"\r\n    [startAt]=\"datepicker.startAt\"\r\n    [startView]=\"datepicker.startView\"\r\n    [clockStep]=\"datepicker.clockStep\"\r\n    [twelveHour]=\"datepicker.twelveHour\"\r\n    [minDate]=\"datepicker._minDate\"\r\n    [maxDate]=\"datepicker._maxDate\"\r\n    [dateFilter]=\"datepicker._dateFilter\"\r\n    [selected]=\"datepicker._selected\"\r\n    [@fadeInCalendar]=\"'enter'\"\r\n    (selectedChange)=\"datepicker.select($event)\"\r\n    (_userSelection)=\"datepicker.close()\">\r\n</mat-calendar>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { DOWN_ARROW } from '@angular/cdk/keycodes';\r\nimport {\r\n  AfterContentInit,\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  forwardRef,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  Optional,\r\n  Output\r\n} from '@angular/core';\r\nimport {\r\n  AbstractControl,\r\n  ControlValueAccessor,\r\n  NG_VALIDATORS,\r\n  NG_VALUE_ACCESSOR,\r\n  ValidationErrors,\r\n  Validator,\r\n  ValidatorFn,\r\n  Validators\r\n} from '@angular/forms';\r\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\r\nimport { MatFormField } from '@angular/material/form-field';\r\nimport { Subscription } from 'rxjs';\r\nimport { DateAdapter } from './core/index';\r\nimport { MAT_DATE_FORMATS, MatDateFormats } from './core/index';\r\nimport { MatDatepicker } from './datepicker';\r\nimport { createMissingDateImplError } from './datepicker-errors';\r\n\r\nexport const MAT_DATEPICKER_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => MatDatepickerInput),\r\n  multi: true\r\n};\r\n\r\nexport const MAT_DATEPICKER_VALIDATORS: any = {\r\n  provide: NG_VALIDATORS,\r\n  useExisting: forwardRef(() => MatDatepickerInput),\r\n  multi: true\r\n};\r\n\r\n/**\r\n * An event used for datepicker input and change events. We don't always have access to a native\r\n * input or change event because the event may have been triggered by the user clicking on the\r\n * calendar popup. For consistency, we always use MatDatepickerInputEvent instead.\r\n */\r\nexport class MatDatepickerInputEvent<D> {\r\n  /** The new value for the target datepicker input. */\r\n  value: D | null;\r\n\r\n  constructor(\r\n    /** Reference to the datepicker input component that emitted the event. */\r\n    public target: MatDatepickerInput<D>,\r\n    /** Reference to the native input element associated with the datepicker input. */\r\n    public targetElement: HTMLElement\r\n  ) {\r\n    this.value = this.target.value;\r\n  }\r\n}\r\n\r\n/** Directive used to connect an input to a MatDatepicker. */\r\n@Directive({\r\n  selector: 'input[matDatepicker]',\r\n  providers: [\r\n    MAT_DATEPICKER_VALUE_ACCESSOR,\r\n    MAT_DATEPICKER_VALIDATORS,\r\n    { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput }\r\n  ],\r\n  host: {\r\n    '[attr.aria-haspopup]': 'true',\r\n    '[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',\r\n    '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\r\n    '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\r\n    '[attr.disabled]': 'disabled',\r\n    '(input)': '_onInput($event.target.value)',\r\n    '(change)': '_onChange()',\r\n    '(blur)': '_onBlur()',\r\n    '(keydown)': '_onKeydown($event)'\r\n  },\r\n  exportAs: 'matDatepickerInput'\r\n})\r\nexport class MatDatepickerInput<D> implements AfterContentInit, ControlValueAccessor, OnDestroy, Validator {\r\n  /** The datepicker that this input is associated with. */\r\n  @Input()\r\n  set matDatepicker(value: MatDatepicker<D>) {\r\n    if (!value) {\r\n      return;\r\n    }\r\n\r\n    this._datepicker = value;\r\n    this._datepicker._registerInput(this);\r\n    this._datepickerSubscription.unsubscribe();\r\n\r\n    this._datepickerSubscription = this._datepicker._selectedChanged.subscribe((selected: D) => {\r\n      this.value = selected;\r\n      this._cvaOnChange(selected);\r\n      this._onTouched();\r\n      this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\r\n      this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\r\n    });\r\n  }\r\n  _datepicker: MatDatepicker<D>;\r\n\r\n  /** Function that can be used to filter out dates within the datepicker. */\r\n  @Input()\r\n  set matDatepickerFilter(filter: (date: D | null, unit?: string) => boolean) {\r\n    this._dateFilter = filter;\r\n    this._validatorOnChange();\r\n  }\r\n  _dateFilter: (date: D | null, unit?: string) => boolean;\r\n\r\n  /** The value of the input. */\r\n  @Input()\r\n  get value(): D | null {\r\n    return this._value;\r\n  }\r\n  set value(value: D | null) {\r\n    value = this._dateAdapter.deserialize(value);\r\n    this._lastValueValid = !value || this._dateAdapter.isValid(value);\r\n    value = this._getValidDateOrNull(value);\r\n\r\n    const oldDate = this.value;\r\n    this._value = value;\r\n    this._formatValue(value);\r\n\r\n    if (!this._dateAdapter.sameDate(oldDate, value)) {\r\n      this._valueChange.emit(value);\r\n    }\r\n  }\r\n  private _value: D | null;\r\n  private _firstValue: D | null;\r\n\r\n  /** The minimum valid date. */\r\n  @Input()\r\n  get min(): D | null {\r\n    return this._min;\r\n  }\r\n  set min(value: D | null) {\r\n    this._min = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n    this._validatorOnChange();\r\n  }\r\n  private _min: D | null;\r\n\r\n  /** The maximum valid date. */\r\n  @Input()\r\n  get max(): D | null {\r\n    return this._max;\r\n  }\r\n  set max(value: D | null) {\r\n    this._max = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n    this._validatorOnChange();\r\n  }\r\n  private _max: D | null;\r\n\r\n  /** Whether the datepicker-input is disabled. */\r\n  @Input()\r\n  get disabled(): boolean {\r\n    return !!this._disabled;\r\n  }\r\n  set disabled(value: boolean) {\r\n    const newValue = coerceBooleanProperty(value);\r\n    const element = this._elementRef.nativeElement;\r\n\r\n    if (this._disabled !== newValue) {\r\n      this._disabled = newValue;\r\n      this._disabledChange.emit(newValue);\r\n    }\r\n\r\n    // We need to null check the `blur` method, because it's undefined during SSR.\r\n    if (newValue && element.blur) {\r\n      // Normally, native input elements automatically blur if they turn disabled. This behavior\r\n      // is problematic, because it would mean that it triggers another change detection cycle,\r\n      // which then causes a changed after checked error if the input element was focused before.\r\n      element.blur();\r\n    }\r\n  }\r\n  private _disabled: boolean;\r\n\r\n  /** Emits when a `change` event is fired on this `<input>`. */\r\n  @Output()\r\n  readonly dateChange = new EventEmitter<MatDatepickerInputEvent<D>>();\r\n\r\n  /** Emits when an `input` event is fired on this `<input>`. */\r\n  @Output()\r\n  readonly dateInput = new EventEmitter<MatDatepickerInputEvent<D>>();\r\n\r\n  /** Emits when the value changes (either due to user input or programmatic change). */\r\n  _valueChange = new EventEmitter<D | null>();\r\n\r\n  /** Emits when the disabled state has changed */\r\n  _disabledChange = new EventEmitter<boolean>();\r\n\r\n  _onTouched = () => {};\r\n\r\n  private _cvaOnChange: (value: any) => void = () => {};\r\n\r\n  private _validatorOnChange = () => {};\r\n\r\n  private _datepickerSubscription = Subscription.EMPTY;\r\n\r\n  private _localeSubscription = Subscription.EMPTY;\r\n\r\n  /** The form control validator for whether the input parses. */\r\n  private _parseValidator: ValidatorFn = (): ValidationErrors | null => {\r\n    return this._lastValueValid ? null : { matDatepickerParse: { text: this._elementRef.nativeElement.value } };\r\n  };\r\n\r\n  /** The form control validator for the min date. */\r\n  private _minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\r\n    const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\r\n    return !this.min || !controlValue || this._dateAdapter.compareDate(this.min, controlValue) <= 0\r\n      ? null\r\n      : { matDatepickerMin: { min: this.min, actual: controlValue } };\r\n  };\r\n\r\n  /** The form control validator for the max date. */\r\n  private _maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\r\n    const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\r\n    return !this.max || !controlValue || this._dateAdapter.compareDate(this.max, controlValue) >= 0\r\n      ? null\r\n      : { matDatepickerMax: { max: this.max, actual: controlValue } };\r\n  };\r\n\r\n  /** The form control validator for the date filter. */\r\n  private _filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\r\n    const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\r\n    return !this._dateFilter || !controlValue || this._dateFilter(controlValue) ? null : { matDatepickerFilter: true };\r\n  };\r\n\r\n  /** The combined form control validator for this input. */\r\n  private _validator: ValidatorFn | null = Validators.compose([\r\n    this._parseValidator,\r\n    this._minValidator,\r\n    this._maxValidator,\r\n    this._filterValidator\r\n  ]);\r\n\r\n  /** Whether the last value set on the input was valid. */\r\n  private _lastValueValid = false;\r\n\r\n  constructor(\r\n    private _elementRef: ElementRef<HTMLInputElement>,\r\n    @Optional() public _dateAdapter: DateAdapter<D>,\r\n    @Optional()\r\n    @Inject(MAT_DATE_FORMATS)\r\n    private _dateFormats: MatDateFormats,\r\n    @Optional() private _formField: MatFormField\r\n  ) {\r\n    if (!this._dateAdapter) {\r\n      throw createMissingDateImplError('DateAdapter');\r\n    }\r\n    if (!this._dateFormats) {\r\n      throw createMissingDateImplError('MAT_DATE_FORMATS');\r\n    }\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    // Update the displayed date when the locale changes.\r\n    this._localeSubscription = this._dateAdapter.localeChanges.subscribe(() => {\r\n      this.value = this.value;\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._datepickerSubscription.unsubscribe();\r\n    this._localeSubscription.unsubscribe();\r\n    this._valueChange.complete();\r\n    this._disabledChange.complete();\r\n  }\r\n\r\n  reset(value?: D | null): void {\r\n    this.value = value !== undefined ? value : this._firstValue;\r\n    this._cvaOnChange(this._value);\r\n  }\r\n\r\n  registerOnValidatorChange(fn: () => void): void {\r\n    this._validatorOnChange = fn;\r\n  }\r\n\r\n  validate(c: AbstractControl): ValidationErrors | null {\r\n    return this._validator ? this._validator(c) : null;\r\n  }\r\n\r\n  /**\r\n   * @deprecated\r\n   * @breaking-change 7.0.0 Use `getConnectedOverlayOrigin` instead\r\n   */\r\n  getPopupConnectionElementRef(): ElementRef {\r\n    return this.getConnectedOverlayOrigin();\r\n  }\r\n\r\n  /**\r\n   * Gets the element that the datepicker popup should be connected to.\r\n   * @return The element to connect the popup to.\r\n   */\r\n  getConnectedOverlayOrigin(): ElementRef {\r\n    return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\r\n  }\r\n\r\n  // Implemented as part of ControlValueAccessor\r\n  writeValue(value: D): void {\r\n    if (this._firstValue === undefined) {\r\n      this._firstValue = value;\r\n    }\r\n    this.value = value;\r\n  }\r\n\r\n  // Implemented as part of ControlValueAccessor\r\n  registerOnChange(fn: (value: any) => void): void {\r\n    this._cvaOnChange = fn;\r\n  }\r\n\r\n  // Implemented as part of ControlValueAccessor\r\n  registerOnTouched(fn: () => void): void {\r\n    this._onTouched = fn;\r\n  }\r\n\r\n  // Implemented as part of ControlValueAccessor\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  _onKeydown(event: KeyboardEvent) {\r\n    const isAltDownArrow = event.altKey && event.keyCode === DOWN_ARROW;\r\n\r\n    if (this._datepicker && isAltDownArrow && !this._elementRef.nativeElement.readOnly) {\r\n      this._datepicker.open();\r\n      event.preventDefault();\r\n    }\r\n  }\r\n\r\n  _onInput(value: string) {\r\n    const type = this._datepicker.type;\r\n    let date = this._dateAdapter.parse(value, this._dateFormats.parse[type]);\r\n    this._lastValueValid = (!value && !date) || this._dateAdapter.isValid(date);\r\n    date = this._getValidDateOrNull(date);\r\n\r\n    if (!this._dateAdapter.sameDate(date, this._value)) {\r\n      this._value = date;\r\n      this._valueChange.emit(date);\r\n      this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\r\n    }\r\n    // update on every (input) change\r\n    this._cvaOnChange(date);\r\n  }\r\n\r\n  _onChange() {\r\n    this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\r\n  }\r\n\r\n  /** Handles blur events on the input. */\r\n  _onBlur() {\r\n    // Reformat the input only if we have a valid value.\r\n    if (this.value) {\r\n      this._formatValue(this.value);\r\n    }\r\n\r\n    this._onTouched();\r\n  }\r\n\r\n  /** Formats a value and sets it on the input element. */\r\n  private _formatValue(value: D | null) {\r\n    const type = this._datepicker.type;\r\n    this._elementRef.nativeElement.value = value\r\n      ? this._dateAdapter.format(value, this._dateFormats.display[type])\r\n      : '';\r\n  }\r\n\r\n  /**\r\n   * @param obj The object to check.\r\n   * @returns The given object if it is both a date instance and valid, otherwise null.\r\n   */\r\n  private _getValidDateOrNull(obj: any): D | null {\r\n    return this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj) ? obj : null;\r\n  }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport {\r\n  AfterContentInit,\r\n  Attribute,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ContentChild,\r\n  Directive,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  SimpleChanges,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { merge, of as obsOf, Subscription } from 'rxjs';\r\nimport { MatDatepicker } from './datepicker';\r\nimport { MatDatepickerIntl } from './datepicker-intl';\r\n\r\n/** Can be used to override the icon of a `matDatepickerToggle`. */\r\n@Directive({\r\n  selector: '[matDatepickerToggleIcon]'\r\n})\r\nexport class MatDatepickerToggleIcon {}\r\n\r\n@Component({\r\n  selector: 'mat-datepicker-toggle',\r\n  templateUrl: 'datepicker-toggle.html',\r\n  // styleUrls: ['datepicker-toggle.css'],\r\n  host: {\r\n    class: 'mat-datepicker-toggle',\r\n    // Clear out the native tabindex here since we forward it to the underlying button\r\n    '[attr.tabindex]': 'null',\r\n    '[class.mat-datepicker-toggle-active]': 'datepicker && datepicker.opened',\r\n    '[class.mat-accent]': 'datepicker && datepicker.color === \"accent\"',\r\n    '[class.mat-warn]': 'datepicker && datepicker.color === \"warn\"'\r\n  },\r\n  exportAs: 'matDatepickerToggle',\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  preserveWhitespaces: false\r\n})\r\nexport class MatDatepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {\r\n  private _stateChanges = Subscription.EMPTY;\r\n\r\n  /** Datepicker instance that the button will toggle. */\r\n  @Input('for')\r\n  datepicker: MatDatepicker<D>;\r\n\r\n  /** Tabindex for the toggle. */\r\n  @Input()\r\n  tabIndex: number | null;\r\n\r\n  /** Whether the toggle button is disabled. */\r\n  @Input()\r\n  get disabled(): boolean {\r\n    return this._disabled === undefined ? this.datepicker.disabled : !!this._disabled;\r\n  }\r\n  set disabled(value: boolean) {\r\n    this._disabled = coerceBooleanProperty(value);\r\n  }\r\n  private _disabled: boolean;\r\n\r\n  /** Custom icon set by the consumer. */\r\n  @ContentChild(MatDatepickerToggleIcon, /* TODO: add static flag */ {})\r\n  _customIcon: MatDatepickerToggleIcon;\r\n\r\n  constructor(\r\n    public _intl: MatDatepickerIntl,\r\n    private _changeDetectorRef: ChangeDetectorRef,\r\n    @Attribute('tabindex') defaultTabIndex: string\r\n  ) {\r\n    const parsedTabIndex = Number(defaultTabIndex);\r\n    this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes.datepicker) {\r\n      this._watchStateChanges();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._stateChanges.unsubscribe();\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this._watchStateChanges();\r\n  }\r\n\r\n  _open(event: Event): void {\r\n    if (this.datepicker && !this.disabled) {\r\n      this.datepicker.open();\r\n      event.stopPropagation();\r\n    }\r\n  }\r\n\r\n  private _watchStateChanges() {\r\n    const datepickerDisabled = this.datepicker ? this.datepicker._disabledChange : obsOf();\r\n\r\n    const inputDisabled =\r\n      this.datepicker && this.datepicker._datepickerInput ? this.datepicker._datepickerInput._disabledChange : obsOf();\r\n\r\n    const datepickerToggled = this.datepicker\r\n      ? merge(this.datepicker.openedStream, this.datepicker.closedStream)\r\n      : obsOf();\r\n\r\n    this._stateChanges.unsubscribe();\r\n    this._stateChanges = merge(this._intl.changes, datepickerDisabled, inputDisabled, datepickerToggled).subscribe(() =>\r\n      this._changeDetectorRef.markForCheck()\r\n    );\r\n  }\r\n}\r\n","<button\r\n  mat-icon-button\r\n  type=\"button\"\r\n  aria-haspopup=\"true\"\r\n  [attr.aria-label]=\"_intl.openCalendarLabel\"\r\n  [attr.tabindex]=\"disabled ? -1 : tabIndex\"\r\n  [disabled]=\"disabled\"\r\n  (click)=\"_open($event)\">\r\n\r\n  <svg\r\n    *ngIf=\"!_customIcon\"\r\n    class=\"mat-datepicker-toggle-default-icon\"\r\n    viewBox=\"0 0 24 24\"\r\n    width=\"24px\"\r\n    height=\"24px\"\r\n    fill=\"currentColor\"\r\n    focusable=\"false\">\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n    <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"/>\r\n  </svg>\r\n\r\n  <ng-content select=\"[matDatepickerToggleIcon]\"></ng-content>\r\n</button>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatCalendar } from './calendar';\r\nimport { MatCalendarBody } from './calendar-body';\r\nimport { MatClockView } from './clock-view';\r\nimport { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MatDatepicker, MatDatepickerContent } from './datepicker';\r\nimport { MatDatepickerInput } from './datepicker-input';\r\nimport { MatDatepickerToggle, MatDatepickerToggleIcon } from './datepicker-toggle';\r\nimport { MatMonthView } from './month-view';\r\nimport { MatYearView } from './year-view';\r\nimport { MatYearsView } from './years-view';\r\n\r\n@NgModule({\r\n  imports: [CommonModule, MatButtonModule, MatDialogModule, MatIconModule, OverlayModule, A11yModule],\r\n  exports: [\r\n    MatCalendar,\r\n    MatCalendarBody,\r\n    MatDatepicker,\r\n    MatDatepickerContent,\r\n    MatDatepickerInput,\r\n    MatDatepickerToggle,\r\n    MatDatepickerToggleIcon,\r\n    MatClockView,\r\n    MatMonthView,\r\n    MatYearView,\r\n    MatYearsView\r\n  ],\r\n  declarations: [\r\n    MatCalendar,\r\n    MatCalendarBody,\r\n    MatDatepicker,\r\n    MatDatepickerContent,\r\n    MatDatepickerInput,\r\n    MatDatepickerToggle,\r\n    MatDatepickerToggleIcon,\r\n    MatClockView,\r\n    MatMonthView,\r\n    MatYearView,\r\n    MatYearsView\r\n  ],\r\n  providers: [MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER]\r\n})\r\nexport class MatDatepickerModule { }\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nexport * from './core/index';\r\nexport * from './moment-adapter/index';\r\nexport * from './datepicker-module';\r\nexport * from './calendar';\r\nexport * from './calendar-body';\r\nexport * from './clock-view';\r\nexport * from './datepicker';\r\nexport * from './datepicker-animations';\r\nexport * from './datepicker-input';\r\nexport * from './datepicker-intl';\r\nexport * from './datepicker-toggle';\r\nexport * from './month-view';\r\nexport * from './year-view';\r\nexport * from './years-view';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["range","i2","i1","i1.DateAdapter","obsOf","i6.MatClockView","i7.MatMonthView","i8.MatYearView","i9.MatYearsView","i3.MatCalendar","i4","i5","i6.DateAdapter","i7","i3"],"mappings":"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"}