ngx-mat-datetime-picker-v2
Version:
Angular Material Datetime Picker
1 lines • 269 kB
Source Map (JSON)
{"version":3,"file":"ngx-mat-datetime-picker-v2.mjs","sources":["../../../projects/datetime-picker-v2/src/lib/core/date-adapter.ts","../../../projects/datetime-picker-v2/src/lib/core/date-formats.ts","../../../projects/datetime-picker-v2/src/lib/core/native-date-adapter.ts","../../../projects/datetime-picker-v2/src/lib/core/native-date-formats.ts","../../../projects/datetime-picker-v2/src/lib/core/native-date.module.ts","../../../projects/datetime-picker-v2/src/lib/date-selection-model.ts","../../../projects/datetime-picker-v2/src/lib/date-range-selection-strategy.ts","../../../projects/datetime-picker-v2/src/lib/aria-accessible-name.ts","../../../projects/datetime-picker-v2/src/lib/datepicker-errors.ts","../../../projects/datetime-picker-v2/src/lib/datepicker-input-base.ts","../../../projects/datetime-picker-v2/src/lib/date-range-input-parts.ts","../../../projects/datetime-picker-v2/src/lib/date-range-input.ts","../../../projects/datetime-picker-v2/src/lib/date-range-input.html","../../../projects/datetime-picker-v2/src/lib/datepicker-animations.ts","../../../projects/datetime-picker-v2/src/lib/utils/date-utils.ts","../../../projects/datetime-picker-v2/src/lib/datepicker-intl.ts","../../../projects/datetime-picker-v2/src/lib/timepicker.component.ts","../../../projects/datetime-picker-v2/src/lib/timepicker.component.html","../../../projects/datetime-picker-v2/src/lib/datepicker-base.ts","../../../projects/datetime-picker-v2/src/lib/datepicker-content.html","../../../projects/datetime-picker-v2/src/lib/date-range-picker.ts","../../../projects/datetime-picker-v2/src/lib/datepicker.ts","../../../projects/datetime-picker-v2/src/lib/datepicker-actions.ts","../../../projects/datetime-picker-v2/src/lib/datepicker-input.ts","../../../projects/datetime-picker-v2/src/lib/datepicker-toggle.ts","../../../projects/datetime-picker-v2/src/lib/datepicker-toggle.html","../../../projects/datetime-picker-v2/src/lib/datepicker-module.ts","../../../projects/datetime-picker-v2/src/public-api.ts","../../../projects/datetime-picker-v2/src/ngx-mat-datetime-picker-v2.ts"],"sourcesContent":["import { DateAdapter } from '@angular/material/core';\r\n\r\nexport abstract class NgxMatDateAdapter<D> extends DateAdapter<D> {\r\n /**\r\n * Gets the hour component of the given date.\r\n * @param date The date to extract the month from.\r\n * @returns The hour component.\r\n */\r\n abstract getHour(date: D): number;\r\n\r\n /**\r\n* Gets the minute component of the given date.\r\n* @param date The date to extract the month from.\r\n* @returns The minute component.\r\n*/\r\n abstract getMinute(date: D): number;\r\n\r\n /**\r\n * Gets the second component of the given date.\r\n * @param date The date to extract the month from.\r\n * @returns The second component.\r\n */\r\n abstract getSecond(date: D): number;\r\n\r\n /**\r\n * Set the hour component of the given date.\r\n * @param date The date to extract the month from.\r\n * @param value The value to set.\r\n */\r\n abstract setHour(date: D, value: number): void;\r\n\r\n /**\r\n * Set the second component of the given date.\r\n * @param date The date to extract the month from.\r\n * @param value The value to set.\r\n */\r\n abstract setMinute(date: D, value: number): void;\r\n\r\n /**\r\n * Set the second component of the given date.\r\n * @param date The date to extract the month from.\r\n * @param value The value to set.\r\n */\r\n abstract setSecond(date: D, value: number): void;\r\n\r\n /**\r\n * Check if two date have same time\r\n * @param a Date 1\r\n * @param b Date 2\r\n */\r\n isSameTime(a: D, b: D): boolean {\r\n if (a == null || b == null) return true;\r\n return this.getHour(a) === this.getHour(b)\r\n && this.getMinute(a) === this.getMinute(b)\r\n && this.getSecond(a) === this.getSecond(b);\r\n }\r\n\r\n /**\r\n * Copy time from a date to a another date\r\n * @param toDate \r\n * @param fromDate \r\n */\r\n copyTime(toDate: D, fromDate: D) {\r\n this.setHour(toDate, this.getHour(fromDate));\r\n this.setMinute(toDate, this.getMinute(fromDate));\r\n this.setSecond(toDate, this.getSecond(fromDate));\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 * @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 compareDateWithTime(first: D, second: D, showSeconds?: boolean): number {\r\n let res = super.compareDate(first, second) ||\r\n this.getHour(first) - this.getHour(second) ||\r\n this.getMinute(first) - this.getMinute(second);\r\n if (showSeconds) {\r\n res = res || this.getSecond(first) - this.getSecond(second);\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Set time by using default values\r\n * @param defaultTime List default values [hour, minute, second]\r\n */\r\n setTimeByDefaultValues(date: D, defaultTime: number[]) {\r\n if (!Array.isArray(defaultTime)) {\r\n throw Error('@Input DefaultTime should be an array');\r\n }\r\n this.setHour(date, defaultTime[0] || 0);\r\n this.setMinute(date, defaultTime[1] || 0);\r\n this.setSecond(date, defaultTime[2] || 0);\r\n }\r\n\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n\r\nexport type NgxMatDateFormats = {\r\n\tparse: {\r\n\t\tdateInput: any;\r\n\t};\r\n\tdisplay: {\r\n\t\tdateInput: any;\r\n\t\tmonthLabel?: any;\r\n\t\tmonthYearLabel: any;\r\n\t\tdateA11yLabel: any;\r\n\t\tmonthYearA11yLabel: any;\r\n\t};\r\n};\r\n\r\nexport const NGX_MAT_DATE_FORMATS = new InjectionToken<NgxMatDateFormats>('ngx-mat-date-formats');\r\n","\r\n\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { NgxMatDateAdapter } 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\nlet SUPPORTS_INTL_API: boolean;\r\n\r\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\r\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\r\n// the consumer is providing a polyfilled `Map`. See:\r\n// https://github.com/Microsoft/ChakraCore/issues/3189\r\n// https://github.com/angular/components/issues/15687\r\ntry {\r\n SUPPORTS_INTL_API = typeof Intl != 'undefined';\r\n} catch {\r\n SUPPORTS_INTL_API = false;\r\n}\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', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\r\n 'October', 'November', '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\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\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/**\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 =\r\n /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\r\n\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 NgxMatNativeDateAdapter extends NgxMatDateAdapter<Date> {\r\n\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 its 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(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: string, platform: Platform) {\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 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 =>\r\n 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(\r\n this._format(dtf, new Date(2017, 0, i + 1))));\r\n }\r\n return DEFAULT_DATE_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(\r\n 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(\r\n this.getYear(date), this.getMonth(date) + 1, 0));\r\n }\r\n\r\n clone(date: Date): Date {\r\n return new Date(date.getTime());\r\n }\r\n\r\n createDate(year: number, month: number, date: 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 let result = this._createDateWithOverflow(year, month, date);\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), this.getMonth(date) + months, this.getDate(date));\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), this.getMonth(date), this.getDate(date) + days);\r\n }\r\n\r\n toIso8601(date: Date): string {\r\n return [\r\n date.getUTCFullYear(),\r\n this._2digit(date.getUTCMonth() + 1),\r\n this._2digit(date.getUTCDate())\r\n ].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 getHour(date: Date): number {\r\n return date.getHours();\r\n }\r\n getMinute(date: Date): number {\r\n return date.getMinutes();\r\n }\r\n getSecond(date: Date): number {\r\n return date.getSeconds()\r\n }\r\n\r\n setHour(date: Date, value: number): void {\r\n date.setHours(value);\r\n }\r\n setMinute(date: Date, value: number): void {\r\n date.setMinutes(value);\r\n }\r\n setSecond(date: Date, value: number): void {\r\n date.setSeconds(value);\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) {\r\n const result = new Date(year, month, date);\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 // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\r\n // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\r\n const d = new Date();\r\n d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\r\n d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\r\n return dtf.format(d);\r\n }\r\n}\r\n","import { NgxMatDateFormats } from './date-formats';\r\n\r\n\r\nconst DEFAULT_DATE_INPUT = {\r\n year: 'numeric', month: 'numeric', day: 'numeric',\r\n hour12: false, hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\"\r\n}\r\n\r\nexport const NGX_MAT_NATIVE_DATE_FORMATS: NgxMatDateFormats = {\r\n parse: {\r\n dateInput: DEFAULT_DATE_INPUT,\r\n },\r\n display: {\r\n dateInput: DEFAULT_DATE_INPUT,\r\n monthYearLabel: { year: 'numeric', month: 'short' },\r\n dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\r\n monthYearA11yLabel: { year: 'numeric', month: 'long' },\r\n }\r\n};\r\n","\r\n\r\nimport { PlatformModule } from '@angular/cdk/platform';\r\nimport { NgModule } from '@angular/core';\r\nimport { NgxMatDateAdapter } from './date-adapter';\r\nimport { NgxMatNativeDateAdapter } from './native-date-adapter';\r\nimport { NGX_MAT_NATIVE_DATE_FORMATS } from './native-date-formats';\r\nimport { NGX_MAT_DATE_FORMATS } from './date-formats';\r\n\r\n\r\n@NgModule({\r\n imports: [PlatformModule],\r\n providers: [\r\n { provide: NgxMatDateAdapter, useClass: NgxMatNativeDateAdapter },\r\n ],\r\n})\r\nexport class NgxNativeDateModule { }\r\n\r\n@NgModule({\r\n imports: [NgxNativeDateModule],\r\n providers: [{ provide: NGX_MAT_DATE_FORMATS, useValue: NGX_MAT_NATIVE_DATE_FORMATS }],\r\n})\r\nexport class NgxMatNativeDateModule { }\r\n","\r\n\r\nimport { FactoryProvider, Injectable, OnDestroy, Optional, SkipSelf } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { NgxMatDateAdapter } from './core/date-adapter';\r\n\r\n/** A class representing a range of dates. */\r\nexport class NgxDateRange<D> {\r\n /**\r\n * Ensures that objects with a `start` and `end` property can't be assigned to a variable that\r\n * expects a `DateRange`\r\n */\r\n // tslint:disable-next-line:no-unused-variable\r\n private _disableStructuralEquivalency: never;\r\n\r\n constructor(\r\n /** The start date of the range. */\r\n readonly start: D | null,\r\n /** The end date of the range. */\r\n readonly end: D | null,\r\n ) { }\r\n}\r\n\r\n/**\r\n * Conditionally picks the date type, if a DateRange is passed in.\r\n * @docs-private\r\n */\r\nexport type NgxExtractDateTypeFromSelection<T> = T extends NgxDateRange<infer D> ? D : NonNullable<T>;\r\n\r\n/**\r\n * Event emitted by the date selection model when its selection changes.\r\n * @docs-private\r\n */\r\nexport interface NgxDateSelectionModelChange<S> {\r\n /** New value for the selection. */\r\n selection: S;\r\n\r\n /** Object that triggered the change. */\r\n source: unknown;\r\n\r\n /** Previous value */\r\n oldValue?: S;\r\n}\r\n\r\n/**\r\n * A selection model containing a date selection.\r\n * @docs-private\r\n */\r\n@Injectable()\r\nexport abstract class NgxMatDateSelectionModel<S, D = NgxExtractDateTypeFromSelection<S>>\r\n implements OnDestroy {\r\n private readonly _selectionChanged = new Subject<NgxDateSelectionModelChange<S>>();\r\n\r\n /** Emits when the selection has changed. */\r\n selectionChanged: Observable<NgxDateSelectionModelChange<S>> = this._selectionChanged;\r\n\r\n protected constructor(\r\n /** The current selection. */\r\n readonly selection: S,\r\n protected _adapter: NgxMatDateAdapter<D>,\r\n ) {\r\n this.selection = selection;\r\n }\r\n\r\n /**\r\n * Updates the current selection in the model.\r\n * @param value New selection that should be assigned.\r\n * @param source Object that triggered the selection change.\r\n */\r\n updateSelection(value: S, source: unknown) {\r\n const oldValue = (this as { selection: S }).selection;\r\n (this as { selection: S }).selection = value;\r\n this._selectionChanged.next({ selection: value, source, oldValue });\r\n }\r\n\r\n ngOnDestroy() {\r\n this._selectionChanged.complete();\r\n }\r\n\r\n protected _isValidDateInstance(date: D): boolean {\r\n return this._adapter.isDateInstance(date) && this._adapter.isValid(date);\r\n }\r\n\r\n /** Adds a date to the current selection. */\r\n abstract add(date: D | null): void;\r\n\r\n /** Checks whether the current selection is valid. */\r\n abstract isValid(): boolean;\r\n\r\n /** Checks whether the current selection is complete. */\r\n abstract isComplete(): boolean;\r\n\r\n /** Clones the selection model. */\r\n abstract clone(): NgxMatDateSelectionModel<S, D>;\r\n}\r\n\r\n/**\r\n * A selection model that contains a single date.\r\n * @docs-private\r\n */\r\n@Injectable()\r\nexport class NgxMatSingleDateSelectionModel<D> extends NgxMatDateSelectionModel<D | null, D> {\r\n constructor(adapter: NgxMatDateAdapter<D>) {\r\n super(null, adapter);\r\n }\r\n\r\n /**\r\n * Adds a date to the current selection. In the case of a single date selection, the added date\r\n * simply overwrites the previous selection\r\n */\r\n add(date: D | null) {\r\n super.updateSelection(date, this);\r\n }\r\n\r\n /** Checks whether the current selection is valid. */\r\n isValid(): boolean {\r\n return this.selection != null && this._isValidDateInstance(this.selection);\r\n }\r\n\r\n /**\r\n * Checks whether the current selection is complete. In the case of a single date selection, this\r\n * is true if the current selection is not null.\r\n */\r\n isComplete() {\r\n return this.selection != null;\r\n }\r\n\r\n /** Clones the selection model. */\r\n clone() {\r\n const clone = new NgxMatSingleDateSelectionModel<D>(this._adapter);\r\n clone.updateSelection(this.selection, this);\r\n return clone;\r\n }\r\n}\r\n\r\n/**\r\n * A selection model that contains a date range.\r\n * @docs-private\r\n */\r\n@Injectable()\r\nexport class NgxMatRangeDateSelectionModel<D> extends NgxMatDateSelectionModel<NgxDateRange<D>, D> {\r\n constructor(adapter: NgxMatDateAdapter<D>) {\r\n super(new NgxDateRange<D>(null, null), adapter);\r\n }\r\n\r\n /**\r\n * Adds a date to the current selection. In the case of a date range selection, the added date\r\n * fills in the next `null` value in the range. If both the start and the end already have a date,\r\n * the selection is reset so that the given date is the new `start` and the `end` is null.\r\n */\r\n add(date: D | null): void {\r\n let { start, end } = this.selection;\r\n\r\n if (start == null) {\r\n start = date;\r\n } else if (end == null) {\r\n end = date;\r\n } else {\r\n start = date;\r\n end = null;\r\n }\r\n\r\n super.updateSelection(new NgxDateRange<D>(start, end), this);\r\n }\r\n\r\n /** Checks whether the current selection is valid. */\r\n isValid(): boolean {\r\n const { start, end } = this.selection;\r\n\r\n // Empty ranges are valid.\r\n if (start == null && end == null) {\r\n return true;\r\n }\r\n\r\n // Complete ranges are only valid if both dates are valid and the start is before the end.\r\n if (start != null && end != null) {\r\n return (\r\n this._isValidDateInstance(start) &&\r\n this._isValidDateInstance(end) &&\r\n this._adapter.compareDate(start, end) <= 0\r\n );\r\n }\r\n\r\n // Partial ranges are valid if the start/end is valid.\r\n return (\r\n (start == null || this._isValidDateInstance(start)) &&\r\n (end == null || this._isValidDateInstance(end))\r\n );\r\n }\r\n\r\n /**\r\n * Checks whether the current selection is complete. In the case of a date range selection, this\r\n * is true if the current selection has a non-null `start` and `end`.\r\n */\r\n isComplete(): boolean {\r\n return this.selection.start != null && this.selection.end != null;\r\n }\r\n\r\n /** Clones the selection model. */\r\n clone() {\r\n const clone = new NgxMatRangeDateSelectionModel<D>(this._adapter);\r\n clone.updateSelection(this.selection, this);\r\n return clone;\r\n }\r\n}\r\n\r\n/** @docs-private */\r\nexport function NGX_MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY(\r\n parent: NgxMatSingleDateSelectionModel<unknown>,\r\n adapter: NgxMatDateAdapter<unknown>,\r\n) {\r\n return parent || new NgxMatSingleDateSelectionModel(adapter);\r\n}\r\n\r\n/**\r\n * Used to provide a single selection model to a component.\r\n * @docs-private\r\n */\r\nexport const NGX_MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER: FactoryProvider = {\r\n provide: NgxMatDateSelectionModel,\r\n deps: [[new Optional(), new SkipSelf(), NgxMatDateSelectionModel], NgxMatDateAdapter],\r\n useFactory: NGX_MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY,\r\n};\r\n\r\n/** @docs-private */\r\nexport function NGX_MAT_RANGE_DATE_SELECTION_MODEL_FACTORY(\r\n parent: NgxMatSingleDateSelectionModel<unknown>,\r\n adapter: NgxMatDateAdapter<unknown>,\r\n) {\r\n return parent || new NgxMatRangeDateSelectionModel(adapter);\r\n}\r\n\r\n/**\r\n * Used to provide a range selection model to a component.\r\n * @docs-private\r\n */\r\nexport const NGX_MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER: FactoryProvider = {\r\n provide: NgxMatDateSelectionModel,\r\n deps: [[new Optional(), new SkipSelf(), NgxMatDateSelectionModel], NgxMatDateAdapter],\r\n useFactory: NGX_MAT_RANGE_DATE_SELECTION_MODEL_FACTORY,\r\n};\r\n","import { FactoryProvider, Injectable, InjectionToken, Optional, SkipSelf } from '@angular/core';\r\nimport { NgxMatDateAdapter } from './core/date-adapter';\r\nimport { NgxDateRange } from './date-selection-model';\r\n\r\n/** Injection token used to customize the date range selection behavior. */\r\nexport const NGX_MAT_DATE_RANGE_SELECTION_STRATEGY = new InjectionToken<\r\n NgxMatDateRangeSelectionStrategy<any>\r\n>('NGX_MAT_DATE_RANGE_SELECTION_STRATEGY');\r\n\r\n/** Object that can be provided in order to customize the date range selection behavior. */\r\nexport interface NgxMatDateRangeSelectionStrategy<D> {\r\n /**\r\n * Called when the user has finished selecting a value.\r\n * @param date Date that was selected. Will be null if the user cleared the selection.\r\n * @param currentRange Range that is currently show in the calendar.\r\n * @param event DOM event that triggered the selection. Currently only corresponds to a `click`\r\n * event, but it may get expanded in the future.\r\n */\r\n selectionFinished(date: D | null, currentRange: NgxDateRange<D>, event: Event): NgxDateRange<D>;\r\n\r\n /**\r\n * Called when the user has activated a new date (e.g. by hovering over\r\n * it or moving focus) and the calendar tries to display a date range.\r\n *\r\n * @param activeDate Date that the user has activated. Will be null if the user moved\r\n * focus to an element that's no a calendar cell.\r\n * @param currentRange Range that is currently shown in the calendar.\r\n * @param event DOM event that caused the preview to be changed. Will be either a\r\n * `mouseenter`/`mouseleave` or `focus`/`blur` depending on how the user is navigating.\r\n */\r\n createPreview(activeDate: D | null, currentRange: NgxDateRange<D>, event: Event): NgxDateRange<D>;\r\n\r\n /**\r\n * Called when the user has dragged a date in the currently selected range to another\r\n * date. Returns the date updated range that should result from this interaction.\r\n *\r\n * @param dateOrigin The date the user started dragging from.\r\n * @param originalRange The originally selected date range.\r\n * @param newDate The currently targeted date in the drag operation.\r\n * @param event DOM event that triggered the updated drag state. Will be\r\n * `mouseenter`/`mouseup` or `touchmove`/`touchend` depending on the device type.\r\n */\r\n createDrag?(\r\n dragOrigin: D,\r\n originalRange: NgxDateRange<D>,\r\n newDate: D,\r\n event: Event,\r\n ): NgxDateRange<D> | null;\r\n}\r\n\r\n/** Provides the default date range selection behavior. */\r\n@Injectable()\r\nexport class DefaultNgxMatCalendarRangeStrategy<D> implements NgxMatDateRangeSelectionStrategy<D> {\r\n constructor(private _dateAdapter: NgxMatDateAdapter<D>) { }\r\n\r\n selectionFinished(date: D, currentRange: NgxDateRange<D>) {\r\n let { start, end } = currentRange;\r\n\r\n if (start == null) {\r\n start = date;\r\n } else if (end == null && date && this._dateAdapter.compareDate(date, start) >= 0) {\r\n end = date;\r\n } else {\r\n start = date;\r\n end = null;\r\n }\r\n\r\n return new NgxDateRange<D>(start, end);\r\n }\r\n\r\n createPreview(activeDate: D | null, currentRange: NgxDateRange<D>) {\r\n let start: D | null = null;\r\n let end: D | null = null;\r\n\r\n if (currentRange.start && !currentRange.end && activeDate) {\r\n start = currentRange.start;\r\n end = activeDate;\r\n }\r\n\r\n return new NgxDateRange<D>(start, end);\r\n }\r\n\r\n createDrag(dragOrigin: D, originalRange: NgxDateRange<D>, newDate: D) {\r\n let start = originalRange.start;\r\n let end = originalRange.end;\r\n\r\n if (!start || !end) {\r\n // Can't drag from an incomplete range.\r\n return null;\r\n }\r\n\r\n const adapter = this._dateAdapter;\r\n\r\n const isRange = adapter.compareDate(start, end) !== 0;\r\n const diffYears = adapter.getYear(newDate) - adapter.getYear(dragOrigin);\r\n const diffMonths = adapter.getMonth(newDate) - adapter.getMonth(dragOrigin);\r\n const diffDays = adapter.getDate(newDate) - adapter.getDate(dragOrigin);\r\n\r\n if (isRange && adapter.sameDate(dragOrigin, originalRange.start)) {\r\n start = newDate;\r\n if (adapter.compareDate(newDate, end) > 0) {\r\n end = adapter.addCalendarYears(end, diffYears);\r\n end = adapter.addCalendarMonths(end, diffMonths);\r\n end = adapter.addCalendarDays(end, diffDays);\r\n }\r\n } else if (isRange && adapter.sameDate(dragOrigin, originalRange.end)) {\r\n end = newDate;\r\n if (adapter.compareDate(newDate, start) < 0) {\r\n start = adapter.addCalendarYears(start, diffYears);\r\n start = adapter.addCalendarMonths(start, diffMonths);\r\n start = adapter.addCalendarDays(start, diffDays);\r\n }\r\n } else {\r\n start = adapter.addCalendarYears(start, diffYears);\r\n start = adapter.addCalendarMonths(start, diffMonths);\r\n start = adapter.addCalendarDays(start, diffDays);\r\n end = adapter.addCalendarYears(end, diffYears);\r\n end = adapter.addCalendarMonths(end, diffMonths);\r\n end = adapter.addCalendarDays(end, diffDays);\r\n }\r\n\r\n return new NgxDateRange<D>(start, end);\r\n }\r\n}\r\n\r\n/** @docs-private */\r\nexport function NGX_MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY(\r\n parent: NgxMatDateRangeSelectionStrategy<unknown>,\r\n adapter: NgxMatDateAdapter<unknown>,\r\n) {\r\n return parent || new DefaultNgxMatCalendarRangeStrategy(adapter);\r\n}\r\n\r\nexport const NGX_MAT_CALENDAR_RANGE_STRATEGY_PROVIDER: FactoryProvider = {\r\n provide: NGX_MAT_DATE_RANGE_SELECTION_STRATEGY,\r\n deps: [[new Optional(), new SkipSelf(), NGX_MAT_DATE_RANGE_SELECTION_STRATEGY], NgxMatDateAdapter],\r\n useFactory: NGX_MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY,\r\n};\r\n","\r\n\r\n// This file contains the `_computeAriaAccessibleName` function, which computes what the *expected*\r\n// ARIA accessible name would be for a given element. Implements a subset of ARIA specification\r\n// [Accessible Name and Description Computation 1.2](https://www.w3.org/TR/accname-1.2/).\r\n//\r\n// Specification accname-1.2 can be summarized by returning the result of the first method\r\n// available.\r\n//\r\n// 1. `aria-labelledby` attribute\r\n// ```\r\n// <!-- example using aria-labelledby-->\r\n// <label id='label-id'>Start Date</label>\r\n// <input aria-labelledby='label-id'/>\r\n// ```\r\n// 2. `aria-label` attribute (e.g. `<input aria-label=\"Departure\"/>`)\r\n// 3. Label with `for`/`id`\r\n// ```\r\n// <!-- example using for/id -->\r\n// <label for=\"current-node\">Label</label>\r\n// <input id=\"current-node\"/>\r\n// ```\r\n// 4. `placeholder` attribute (e.g. `<input placeholder=\"06/03/1990\"/>`)\r\n// 5. `title` attribute (e.g. `<input title=\"Check-In\"/>`)\r\n// 6. text content\r\n// ```\r\n// <!-- example using text content -->\r\n// <label for=\"current-node\"><span>Departure</span> Date</label>\r\n// <input id=\"current-node\"/>\r\n// ```\r\n\r\n/**\r\n * Computes the *expected* ARIA accessible name for argument element based on [accname-1.2\r\n * specification](https://www.w3.org/TR/accname-1.2/). Implements a subset of accname-1.2,\r\n * and should only be used for the Datepicker's specific use case.\r\n *\r\n * Intended use:\r\n * This is not a general use implementation. Only implements the parts of accname-1.2 that are\r\n * required for the Datepicker's specific use case. This function is not intended for any other\r\n * use.\r\n *\r\n * Limitations:\r\n * - Only covers the needs of `matStartDate` and `matEndDate`. Does not support other use cases.\r\n * - See NOTES's in implementation for specific details on what parts of the accname-1.2\r\n * specification are not implemented.\r\n *\r\n * @param element {HTMLInputElement} native <input/> element of `matStartDate` or\r\n * `matEndDate` component. Corresponds to the 'Root Element' from accname-1.2\r\n *\r\n * @return expected ARIA accessible name of argument <input/>\r\n */\r\nexport function _computeAriaAccessibleName(\r\n element: HTMLInputElement | HTMLTextAreaElement,\r\n): string {\r\n return _computeAriaAccessibleNameInternal(element, true);\r\n}\r\n\r\n/**\r\n * Determine if argument node is an Element based on `nodeType` property. This function is safe to\r\n * use with server-side rendering.\r\n */\r\nfunction ssrSafeIsElement(node: Node): node is Element {\r\n return node.nodeType === Node.ELEMENT_NODE;\r\n}\r\n\r\n/**\r\n * Determine if argument node is an HTMLInputElement based on `nodeName` property. This funciton is\r\n * safe to use with server-side rendering.\r\n */\r\nfunction ssrSafeIsHTMLInputElement(node: Node): node is HTMLInputElement {\r\n return node.nodeName === 'INPUT';\r\n}\r\n\r\n/**\r\n * Determine if argument node is an HTMLTextAreaElement based on `nodeName` property. This\r\n * funciton is safe to use with server-side rendering.\r\n */\r\nfunction ssrSafeIsHTMLTextAreaElement(node: Node): node is HTMLTextAreaElement {\r\n return node.nodeName === 'TEXTAREA';\r\n}\r\n\r\n/**\r\n * Calculate the expected ARIA accessible name for given DOM Node. Given DOM Node may be either the\r\n * \"Root node\" passed to `_computeAriaAccessibleName` or \"Current node\" as result of recursion.\r\n *\r\n * @return the accessible name of argument DOM Node\r\n *\r\n * @param currentNode node to determine accessible name of\r\n * @param isDirectlyReferenced true if `currentNode` is the root node to calculate ARIA accessible\r\n * name of. False if it is a result of recursion.\r\n */\r\nfunction _computeAriaAccessibleNameInternal(\r\n currentNode: Node,\r\n isDirectlyReferenced: boolean,\r\n): string {\r\n // NOTE: this differs from accname-1.2 specification.\r\n // - Does not implement Step 1. of accname-1.2: '''If `currentNode`'s role prohibits naming,\r\n // return the empty string (\"\")'''.\r\n // - Does not implement Step 2.A. of accname-1.2: '''if current node is hidden and not directly\r\n // referenced by aria-labelledby... return the empty string.'''\r\n\r\n // acc-name-1.2 Step 2.B.: aria-labelledby\r\n if (ssrSafeIsElement(currentNode) && isDirectlyReferenced) {\r\n const labelledbyIds: string[] =\r\n currentNode.getAttribute?.('aria-labelledby')?.split(/\\s+/g) || [];\r\n const validIdRefs: HTMLElement[] = labelledbyIds.reduce((validIds, id) => {\r\n const elem = document.getElementById(id);\r\n if (elem) {\r\n validIds.push(elem);\r\n }\r\n return validIds;\r\n }, [] as HTMLElement[]);\r\n\r\n if (validIdRefs.length) {\r\n return validIdRefs\r\n .map(idRef => {\r\n return _computeAriaAccessibleNameInternal(idRef, false);\r\n })\r\n .join(' ');\r\n }\r\n }\r\n\r\n // acc-name-1.2 Step 2.C.: aria-label\r\n if (ssrSafeIsElement(currentNode)) {\r\n const ariaLabel = currentNode.getAttribute('aria-label')?.trim();\r\n\r\n if (ariaLabel) {\r\n return ariaLabel;\r\n }\r\n }\r\n\r\n // acc-name-1.2 Step 2.D. attribute or element that defines a text alternative\r\n //\r\n // NOTE: this differs from accname-1.2 specification.\r\n // Only implements Step 2.D. for `<label>`,`<input/>`, and `<textarea/>` element. Does not\r\n // implement other elements that have an attribute or element that defines a text alternative.\r\n if (ssrSafeIsHTMLInputElement(currentNode) || ssrSafeIsHTMLTextAreaElement(currentNode)) {\r\n // use label with a `for` attribute referencing the current node\r\n if (currentNode.labels?.length) {\r\n return Array.from(currentNode.labels)\r\n .map(x => _computeAriaAccessibleNameInternal(x, false))\r\n .join(' ');\r\n }\r\n\r\n // use placeholder if available\r\n const placeholder = currentNode.getAttribute('placeholder')?.trim();\r\n if (placeholder) {\r\n return placeholder;\r\n }\r\n\r\n // use title if available\r\n const title = currentNode.getAttribute('title')?.trim();\r\n if (title) {\r\n return title;\r\n }\r\n }\r\n\r\n // NOTE: this differs from accname-1.2 specification.\r\n // - does not implement acc-name-1.2 Step 2.E.: '''if the current node is a control embedded\r\n // within the label... then include the embedded control as part of the text alternative in\r\n // the following manner...'''. Step 2E applies to embedded controls such as textbox, listbox,\r\n // range, etc.\r\n // - does not implement acc-name-1.2 step 2.F.: check that '''role allows name from content''',\r\n // which applies to `currentNode` and its children.\r\n // - does not implement acc-name-1.2 Step 2.F.ii.: '''Check for CSS generated textual content'''\r\n // (e.g. :before and :after).\r\n // - does not implement acc-name-1.2 Step 2.I.: '''if the current node has a Tooltip attribute,\r\n // return its value'''\r\n\r\n // Return text content with whitespace collapsed into a single space character. Accomplish\r\n // acc-name-1.2 steps 2F, 2G, and 2H.\r\n return (currentNode.textContent || '').replace(/\\s+/g, ' ').trim();\r\n}\r\n","\r\n\r\n/** @docs-private */\r\nexport function createMissingDateImplError(provider: string) {\r\n return Error(\r\n `NgxMatDatetimePicker: No provider found for ${provider}. You must import one of the following ` +\r\n `modules at your application root: NgxMatNativeDateModule, NgxMatMomentDateModule, or provide a ` +\r\n `custom implementation.`,\r\n );\r\n}\r\n","\r\n\r\nimport { ListKeyManagerModifierKey } from '@angular/cdk/a11y';\r\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { DOWN_ARROW, hasModifierKey } from '@angular/cdk/keycodes';\r\nimport {\r\n AfterViewInit,\r\n Directive,\r\n ElementRef,\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} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport { ThemePalette } from '@angular/material/core';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { NgxMatDateAdapter } from './core/date-adapter';\r\nimport { NGX_MAT_DATE_FORMATS, NgxMatDateFormats } from './core/date-formats';\r\nimport {\r\n NgxDateSelectionModelChange,\r\n NgxExtractDateTypeFromSelection,\r\n NgxMatDateSelectionModel,\r\n} from './date-selection-model';\r\nimport { createMissingDateImplError } from './datepicker-errors';\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 NgxMatDatepickerInputEvent<D, S = unknown> {\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: NgxMatDatepickerInputBase<S, 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/** Function that can be used to filter out dates from a calendar. */\r\nexport type NgxDateFilterFn<D> = (date: D | null) => boolean;\r\n\r\n/**\r\n * Partial representation of `MatFormField` that is used for backwards-compatibility\r\n * between the legacy and non-legacy variants.\r\n */\r\nexport interface _NgxMatFormFieldPartial {\r\n getConnectedOverlayOrigin(): ElementRef;\r\n getLabelId(): string | null;\r\n color: ThemePalette;\r\n _elementRef: ElementRef;\r\n _shouldLabelFloat(): boolean;\r\n _hasFloatingLabel(): boolean;\r\n _labelId: string;\r\n}\r\n\r\n/** Base class for datepicker inputs. */\r\n@Directive()\r\nexport abstract class NgxMatDatepickerInputBase<S, D = NgxExtractDateTypeFromSelection<S>>\r\n implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy, Validator {\r\n /** Whether the component has been initialized. */\r\n private _isInitialized: boolean;\r\n\r\n /** The value of the input. */\r\n @Input()\r\n get value(): D | null {\r\n return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;\r\n }\r\n set value(value: any) {\r\n this._assignValueProgrammatically(value);\r\n }\r\n protected _model: NgxMatDateSelectionModel<S, D> | undefined;\r\n\r\n /** Whether the datepicker-input is disabled. */\r\n @Input()\r\n get disabled(): boolean {\r\n return !!this._disabled || this._parentDisabled();\r\n }\r\n set disabled(value: BooleanInput) {\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.stateChanges.next(undefined);\r\n }\r\n\r\n // We need to null check the `blur` method, because it's undefined during SSR.\r\n // In Ivy static bindings are invoked earlier, before the element is attached to the DOM.\r\n // This can cause an error to be thrown in some browsers (IE/Edge) which assert that the\r\n // element has been inserted.\r\n if (newValue && this._isInitialized && 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() readonly dateChange: EventEmitter<NgxMatDatepickerInputEvent<D, S>> = new EventEmitter<\r\n NgxMatDatepickerInputEvent<D, S>\r\n >();\r\n\r\n /** Emits when an `input` event is fired on this `<input>`. */\r\n @Output() readonly dateInput: EventEmitter<NgxMatDatepickerInputEvent<D, S>> = new EventEmitter<\r\n NgxMatDatepickerInputEvent<D, S>\r\n >();\r\n\r\n /** Emits when the internal state has changed */\r\n readonly stateChanges = new Subject<void>();\r\n\r\n _onTouched = () => { };\r\n _validatorOnChange = () => { };\r\n\r\n private _cvaOnChange: (value: any) => void = () => { };\r\n private _valueChangesSubscription = Subscription.EMPTY;\r\n private _localeSubscription = Subscription.EMPTY;\r\n\r\n /**\r\n * Since the value is kept on the model which is assigned in an Input,\r\n * we might get a value before we have a model. This property keeps track\r\n * of the value until we have somewhere to assign it.\r\n */\r\n private _pendingValue: D | null;\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\r\n ? null\r\n : { 'matDatepickerParse': { 'text': this._elementRef.nativeElement.value } };\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._dateAdapter.getValidDateOrNull(\r\n this._dateAdapter.deserialize(control.value),\r\n );\r\n return !controlValue || this._matchesFilter(controlValue)\r\n ? null\r\n : { 'matDatepickerFilter': true };\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._dateAdapter.getValidDateOrNull(\r\n this._dateAdapter.deserialize(control.value),\r\n );\r\n const min = this._getMinDate();\r\n return !min || !controlValue || this._dateAdapter.compareDateWithTime(min, controlValue) <= 0\r\n ? null\r\n : { 'matDatetimePickerMin': { 'min': 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._dateAdapter.getValidDateOrNull(\r\n this._dateAdapter.deserialize(control.value),\r\n );\r\n const max = this._getMaxDate();\r\n return !max || !controlValue || this._dateAdapter.compareDateWithTime(max, controlValue) >= 0\r\n ? null\r\n : { 'matDatetimePickerMax': { 'max': max, 'actual': controlValue } };\r\n };\r\n\r\n /** Gets the base validator functions. */\r\n protected _getValidators(): ValidatorFn[] {\r\n return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];\r\n }\r\n\r\n /** Gets the minimum date for the input. Used for validation. */\r\n abstract _getMinDate(): D | null;\r\n\r\n /** Gets the maximum date for the input. Used for validation. */\r\n abstract _getMaxDate(): D | null;\r\n\r\n /** Gets the date filter function. Used for validation. */\r\n protected abstract _getDateFilter(): NgxDateFilterFn<D> | undefined;\r\n\r\n /** Registers a date selection model with the input. */\r\n _registerModel(model: NgxMatDateSelectionModel<S, D>): void {\r\n this._model = model;\r\n this._valueChangesSubscription.unsubscribe();\r\n\r\n if (this._pendingValue) {\r\n this._assignValue(this._pendingValue);\r\n }\r\n\r\n this._valueChangesSubscription = this._model.selectionChanged.subscribe(event => {\r\n if (this._shouldHandleChangeEvent(event)) {\r\n const value = this._getValueFromModel(event.selection);\r\n this._lastValueValid = this._isValidValue(value);\r\n this._cvaOnChange(value);\r\n this._onTouched();\r\n this._formatValue(value);\r\n this.dateInput.emit(new NgxMatDatepickerInputEvent(this, this._elementRef.nativeElement));\r\n this.dateChange.emit(new NgxMatDatepickerInputEvent(this, this._elementRef.nativeElement));\r\n }\r\n });\r\n }\r\n\r\n /** Opens the popup associated with the input. */\r\n protected abstract _openPopup(): void;\r\n\r\n /** Assigns a value to the input's model. */\r\n protected abstract _assignValueToModel(model: D | null): void;\r\n\r\n /** Converts a value from the model into a native value for the input. */\r\n protected abstract _getValueFromModel(modelValue: S): D | null;\r\n\r\n /** Combined form control validator for this input. */\r\n protected abstract _validator: ValidatorFn | null;\r\n\r\n /** Predicate that determines whether the input should handle a particular change event. */\r\n protected abstract _shouldHandleChangeEvent(event: NgxDateSelectionModelChange<S>): boolean;\r\n\r\n /** Whether the last value set on the input was valid. */\r\n protected _lastValueValid = false;\r\n\r\n constructor(\r\n protected _elementRef: ElementRef<HTMLInputElement>,\r\n @Optional() public _dateAdapter: NgxMatDateAdapter<D>,\r\n @Optional() @Inject(NGX_MAT_DATE_FORMATS) private _dateFormats: NgxMatDateFormats,\r\n ) {\r\n if (!this._dateAdapter) {\r\n throw createMissingDateImplError('NgxMatDateAdapter');\r\n }\r\n if (!this._dateFormats) {\r\n throw createMissingDateImplError('NGX_MAT_DATE_FORMATS');\r\n }\r\n\r\n // Update the displayed date when the locale changes.\r\n this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\r\n this._assignValueProgrammatically(this.value);\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._isInitialized = true;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (dateInputsHaveChanged(changes, this._dateAdapter)) {\r\n this.stateChanges.next(undefined);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this._valueChangesSubscription.unsubscribe();\r\n this._localeSubscription.unsubscribe();\r\n this.stateChanges.complete();\r\n }\r\n\r\n /** @docs-private */\r\n registerOnValidatorChange(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n\r\n /** @docs-private */\r\n validate(c: AbstractControl): ValidationErrors | null {\r\n return this._validator ? this._validator(c) : null;\r\n }\r\n\r\n // Implemented as part of ControlValueAccessor.\r\n writeValue(value: D): void {\r\n this._assignValueProgrammatically(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 ctrlShiftMetaModifiers: ListKeyManagerModifierKey[] = ['ctrlKey', 'shiftKey', 'metaKey'];\r\n const isAltDownArrow =\r\n hasModifierKey(event, 'altKey') &&\r\n event.keyCode === DOWN_ARROW &&\r\n ctrlShiftMetaModifiers.every((modifier: ListKeyManagerModifierKey) => !hasModifierKey(event, modifier));\r\n\r\n if (isAltDownArrow && !this._elementRef.nativeElement.readOnly) {\r\n this._openPopup();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n _onInput(value: string) {\r\n const lastValueWasValid = this._lastValueValid;\r\n let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);\r\n this._lastValueValid = this._isValidValue(date);\r\n date = this._dateAdapter.getValidDateOrNull(date);\r\n\r\n const isSameTime = this._dateAdapter.isSameTime(date, this.value);\r\n const isSameDate = this._dateAdapter.sameDate(date, this.value);\r\n const isSame = isSameDate && isSameTime;\r\n\r\n const hasChanged = !isSame;\r\n\r\n // We need to fire the CVA change event for all\r\n // nulls, otherwise the validators won't run.\r\n if (!date || hasChanged) {\r\n this._cvaOnChange(date);\r\n } else {\r\n // Call the CVA change handler for invalid values\r\n // since this is what marks the control as dirty.\r\n if (value && !this.value) {\r\n this._cvaOnChange(date);\r\n }\r\n\r\n if (lastValueWasValid !== this._lastValueValid) {\r\n this._validatorOnChange();\r\n }\r\n }\r\n\r\n if (hasChanged) {\r\n this._assignValue(date);\r\n this.dateInput.emit(new NgxMatDatepickerInputEvent(this, this._elementRef.nativeElement));\r\n }\r\n }\r\n\r\n _onChange() {\r\n this.dateChange.emit(new NgxMatDatepickerInputEvent(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 protected _formatValue(value: D | null) {\r\n this._elementRef.nativeElement.value =\r\n value != null ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '';\r\n }\r\n\r\n /** Assigns a value to the model. */\r\n private _assignValue(value: D | null) {\r\n // We may get some incoming values before the model was\r\n // assigned. Save the value so that we can assign it later.\r\n if (this._model) {\r\n this._assignValueToModel(value);\r\n this._pendingValue = null;\r\n } else {\r\n this._pendingValue = value;\r\n }\r\n }\r\n\r\n /** Whether a value is considered valid. */\r\n private _isValidValue(value: D | null): boolean {\r\n return !value || this._dateAdapter.isValid(value);\r\n }\r\n\r\n /**\r\n * Checks whether a parent control is disabled. This is in place so that it can be overridden\r\n * by inputs extending this one which can be placed inside of a group that can be disabled.\r\n */\r\n protected _parentDisabled() {\r\n return false;\r\n }\r\n\r\n /** Programmatically assigns a value to the input. */\r\n protected _assignValueProgrammatically(value: D | null) {\r\n value = this._dateAdapter.deserialize(value);\r\n this._lastValueValid = this._isValidValue(value);\r\n value = this._dateAdapter.getValidDateOrNull(value);\r\n this._assignValue(value);\r\n this._formatValue(value);\r\n }\r\n\r\n /** Gets whether a value matches the current date filter. */\r\n _matchesFilter(value: D | null): boolean {\r\n const filter = this._getDateFilter();\r\n return !filter || filter(value);\r\n }\r\n}\r\n\r\n/**\r\n * Checks whether the `SimpleChanges` object from an `ngOnChanges`\r\n * callback has any changes, accounting for date objects.\r\n */\r\nexport function dateInputsHaveChanged(\r\n changes: SimpleChanges,\r\n adapter: NgxMatDateAdapter<unknown>,\r\n): boolean {\r\n const keys = Object.keys(changes);\r\n\r\n for (let key of keys) {\r\n const { previousValue, currentValue } = changes[key];\r\n\r\n if (adapter.isDateInstance(previousValue) && adapter.isDateInstance(currentValue)) {\r\n if (!adapter.sameDate(previousValue, currentValue)) {\r\n return true;\r\n }\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n","import { Directionality } from \"@angular/cdk/bidi\";\r\nimport { BACKSPACE, LEFT_ARROW, RIGHT_ARROW } from \"@angular/cdk/keycodes\";\r\nimport {\r\n Directive,\r\n DoCheck,\r\n ElementRef,\r\n Inject,\r\n InjectionToken,\r\n Injector,\r\n OnInit,\r\n Optional,\r\n inject,\r\n} from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n FormGroupDirective,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n NgForm,\r\n ValidationErrors,\r\n ValidatorFn,\r\n Validators,\r\n} from \"@angular/forms\";\r\nimport { ErrorStateMatcher } from \"@angular/material/core\";\r\nimport { _computeAriaAccessibleName } from \"./aria-accessible-name\";\r\nimport { NgxMatDateAdapter } from \"./core/date-adapter\";\r\nimport { NGX_MAT_DATE_FORMATS, NgxMatDateFormats } from \"./core/date-formats\";\r\nimport {\r\n NgxDateRange,\r\n NgxDateSelectionModelChange,\r\n} from \"./date-selection-model\";\r\nimport {\r\n NgxDateFilterFn,\r\n NgxMatDatepickerInputBase,\r\n} from \"./datepicker-input-base\";\r\n\r\n/** Parent component that should be wrapped around `MatStartDate` and `MatEndDate`. */\r\nexport interface NgxMatDateRangeInputParent<D> {\r\n id: string;\r\n min: D | null;\r\n max: D | null;\r\n dateFilter: NgxDateFilterFn<D>;\r\n rangePicker: {\r\n opened: boolean;\r\n id: string;\r\n };\r\n _startInput: NgxMatDateRangeInputPartBase<D>;\r\n _endInput: NgxMatDateRangeInputPartBase<D>;\r\n _groupDisabled: boolean;\r\n _handleChildValueChange(): void;\r\n _openDatepicker(): void;\r\n}\r\n\r\n/**\r\n * Used to provide the date range input wrapper component\r\n * to the parts without circular dependencies.\r\n */\r\nexport const NGX_MAT_DATE_RANGE_INPUT_PARENT = new InjectionToken<\r\n NgxMatDateRangeInputParent<unknown>\r\n>(\"NGX_MAT_DATE_RANGE_INPUT_PARENT\");\r\n\r\n/**\r\n * Base class for the individual inputs that can be projected inside a `mat-date-range-input`.\r\n */\r\n@Directive()\r\nabstract class NgxMatDateRangeInputPartBase<D>\r\n extends NgxMatDatepickerInputBase<NgxDateRange<D>>\r\n implements OnInit, DoCheck\r\n{\r\n /**\r\n * Form control bound to this input part.\r\n * @docs-private\r\n */\r\n ngControl: NgControl;\r\n\r\n /** @docs-private */\r\n\r\n protected abstract override _validator: ValidatorFn | null;\r\n protected abstract override _assignValueToModel(value: D | null): void;\r\n protected abstract override _getValueFromModel(\r\n modelValue: NgxDateRange<D>\r\n ): D | null;\r\n\r\n protected readonly _dir = inject(Directionality, { optional: true });\r\n\r\n private _errorState: boolean = false;\r\n constructor(\r\n @Inject(NGX_MAT_DATE_RANGE_INPUT_PARENT)\r\n public _rangeInput: NgxMatDateRangeInputParent<D>,\r\n public override _elementRef: ElementRef<HTMLInputElement>,\r\n public _defaultErrorStateMatcher: ErrorStateMatcher,\r\n private _injector: Injector,\r\n @Optional() public _parentForm: NgForm,\r\n @Optional() public _parentFormGroup: FormGroupDirective,\r\n @Optional() dateAdapter: NgxMatDateAdapter<D>,\r\n @Optional() @Inject(NGX_MAT_DATE_FORMATS) dateFormats: NgxMatDateFormats\r\n ) {\r\n super(_elementRef, dateAdapter, dateFormats);\r\n }\r\n\r\n ngOnInit() {\r\n // We need the date input to provide itself as a `ControlValueAccessor` and a `Validator`, while\r\n // injecting its `NgControl` so that the error state is handled correctly. This introduces a\r\n // circular dependency, because both `ControlValueAccessor` and `Validator` depend on the input\r\n // itself. Usually we can work around it for the CVA, but there's no API to do it for the\r\n // validator. We work around it here by injecting the `NgControl` in `ngOnInit`, after\r\n // everything has been resolved.\r\n // tslint:disable-next-line:no-bitwise\r\n const ngControl = this._injector.get(NgControl, null, {\r\n optional: true,\r\n self: true,\r\n });\r\n\r\n if (ngControl) {\r\n this.ngControl = ngControl;\r\n }\r\n }\r\n\r\n ngDoCheck() {\r\n if (this.ngControl) {\r\n // We need to re-evaluate this on every change detection cycle, because there are some\r\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\r\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\r\n this.updateErrorState();\r\n }\r\n }\r\n\r\n /** Whether the component is in an error state. */\r\n get errorState(): boolean {\r\n return this._errorState;\r\n }\r\n\r\n /** Sets the error state of the component. */\r\n set errorState(value: boolean) {\r\n this._errorState = value;\r\n this._elementRef.nativeElement.classList.toggle(\"mat-error\", value);\r\n }\r\n\r\n /** Updates the error state of the component. */\r\n updateErrorState(): void {\r\n const isInvalid = this._defaultErrorStateMatcher.isErrorState(\r\n this.ngControl as any,\r\n this._elementRef as any\r\n );\r\n this._errorState = isInvalid;\r\n this._elementRef.nativeElement.classList.toggle(\"mat-error\", isInvalid);\r\n }\r\n\r\n /** Gets whether the input is empty. */\r\n isEmpty(): boolean {\r\n return this._elementRef.nativeElement.value.length === 0;\r\n }\r\n\r\n /** Gets the placeholder of the input. */\r\n _getPlaceholder() {\r\n return this._elementRef.nativeElement.placeholder;\r\n }\r\n\r\n /** Focuses the input. */\r\n focus(): void {\r\n this._elementRef.nativeElement.focus();\r\n }\r\n\r\n /** Gets the value that should be used when mirroring the input's size. */\r\n getMirrorValue(): string {\r\n const element = this._elementRef.nativeElement;\r\n const value = element.value;\r\n return value.length > 0 ? value : element.placeholder;\r\n }\r\n\r\n /** Handles `input` events on the input element. */\r\n override _onInput(value: string) {\r\n super._onInput(value);\r\n this._rangeInput._handleChildValueChange();\r\n }\r\n\r\n /** Opens the datepicker associated with the input. */\r\n protected _openPopup(): void {\r\n this._rangeInput._openDatepicker();\r\n }\r\n\r\n /** Gets the minimum date from the range input. */\r\n _getMinDate() {\r\n return this._rangeInput.min;\r\n }\r\n\r\n /** Gets the maximum date from the range input. */\r\n _getMaxDate() {\r\n return this._rangeInput.max;\r\n }\r\n\r\n /** Gets the date filter function from the range input. */\r\n protected _getDateFilter() {\r\n return this._rangeInput.dateFilter;\r\n }\r\n\r\n protected override _parentDisabled() {\r\n return this._rangeInput._groupDisabled;\r\n }\r\n\r\n protected _shouldHandleChangeEvent({\r\n source,\r\n }: NgxDateSelectionModelChange<NgxDateRange<D>>): boolean {\r\n return (\r\n source !== this._rangeInput._startInput &&\r\n source !== this._rangeInput._endInput\r\n );\r\n }\r\n\r\n protected override _assignValueProgrammatically(value: D | null) {\r\n super._assignValueProgrammatically(value);\r\n const opposite = (\r\n this === this._rangeInput._startInput\r\n ? this._rangeInput._endInput\r\n : this._rangeInput._startInput\r\n ) as NgxMatDateRangeInputPartBase<D> | undefined;\r\n opposite?._validatorOnChange();\r\n }\r\n\r\n /** return the ARIA accessible name of the input element */\r\n _getAccessibleName(): string {\r\n return _computeAriaAccessibleName(this._elementRef.nativeElement);\r\n }\r\n}\r\n\r\n/** Input for entering the start date in a `mat-date-range-input`. */\r\n@Directive({\r\n selector: \"input[ngxMatStartDate]\",\r\n host: {\r\n class: \"mat-start-date mat-date-range-input-inner\",\r\n \"[disabled]\": \"disabled\",\r\n \"(input)\": \"_onInput($event.target.value)\",\r\n \"(change)\": \"_onChange()\",\r\n \"(keydown)\": \"_onKeydown($event)\",\r\n \"[attr.aria-haspopup]\": '_rangeInput.rangePicker ? \"dialog\" : null',\r\n \"[attr.aria-owns]\":\r\n \"(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null\",\r\n \"[attr.min]\":\r\n \"_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null\",\r\n \"[attr.max]\":\r\n \"_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null\",\r\n \"(blur)\": \"_onBlur()\",\r\n type: \"text\",\r\n },\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: NgxMatStartDate, multi: true },\r\n { provide: NG_VALIDATORS, useExisting: NgxMatStartDate, multi: true },\r\n ],\r\n // These need to be specified explicitly, because some tooling doesn't\r\n // seem to pick them up from the base class. See #20932.\r\n outputs: [\"dateChange\", \"dateInput\"],\r\n inputs: [\"errorStateMatcher\"],\r\n standalone: false,\r\n})\r\nexport class NgxMatStartDate<D> extends NgxMatDateRangeInputPartBase<D> {\r\n /** Validator that checks that the start date isn't after the end date. */\r\n private _startValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n const start = this._dateAdapter.getValidDateOrNull(\r\n this._dateAdapter.deserialize(control.value)\r\n );\r\n const end = this._model ? this._model.selection.end : null;\r\n return !start || !end || this._dateAdapter.compareDate(start, end) <= 0\r\n ? null\r\n : { matStartDateInvalid: { end: end, actual: start } };\r\n };\r\n\r\n constructor(\r\n @Inject(NGX_MAT_DATE_RANGE_INPUT_PARENT)\r\n rangeInput: NgxMatDateRangeInputParent<D>,\r\n elementRef: ElementRef<HTMLInputElement>,\r\n defaultErrorStateMatcher: ErrorStateMatcher,\r\n injector: Injector,\r\n @Optional() @Inject(NgForm) parentForm: NgForm,\r\n @Optional() @Inject(FormGroupDirective) parentFormGroup: FormGroupDirective,\r\n @Optional() dateAdapter: NgxMatDateAdapter<D>,\r\n @Optional() @Inject(NGX_MAT_DATE_FORMATS) dateFormats: NgxMatDateFormats\r\n ) {\r\n super(\r\n rangeInput,\r\n elementRef,\r\n defaultErrorStateMatcher,\r\n injector,\r\n parentForm,\r\n parentFormGroup,\r\n dateAdapter,\r\n dateFormats\r\n );\r\n }\r\n\r\n protected _validator = Validators.compose([\r\n ...super._getValidators(),\r\n this._startValidator,\r\n ]);\r\n\r\n protected _getValueFromModel(modelValue: NgxDateRange<D>) {\r\n return modelValue.start;\r\n }\r\n\r\n protected _shouldHandleChangeEvent(\r\n change: NgxDateSelectionModelChange<NgxDateRange<D>>\r\n ): boolean {\r\n if (!super._shouldHandleChangeEvent(change)) {\r\n return false;\r\n } else {\r\n return !change.oldValue?.start\r\n ? !!change.selection.start\r\n : !change.selection.start ||\r\n !!this._dateAdapter.compareDate(\r\n change.oldValue.start,\r\n change.selection.start\r\n );\r\n }\r\n }\r\n\r\n protected _assignValueToModel(value: D | null) {\r\n if (this._model) {\r\n const range = new NgxDateRange(value, this._model.selection.end);\r\n this._model.updateSelection(range, this);\r\n }\r\n }\r\n\r\n protected _formatValue(value: D | null) {\r\n super._formatValue(value);\r\n\r\n // Any time the input value is reformatted we need to tell the parent.\r\n this._rangeInput._handleChildValueChange();\r\n }\r\n\r\n _onKeydown(event: KeyboardEvent) {\r\n const endInput = this._rangeInput._endInput;\r\n const element = this._elementRef.nativeElement;\r\n const isLtr = this._dir?.value !== \"rtl\";\r\n\r\n // If the user hits RIGHT (LTR) when at the end of the input (and no\r\n // selection), move the cursor to the start of the end input.\r\n if (\r\n ((event.keyCode === RIGHT_ARROW && isLtr) ||\r\n (event.keyCode === LEFT_ARROW && !isLtr)) &&\r\n element.selectionStart === element.value.length &&\r\n element.selectionEnd === element.value.length\r\n ) {\r\n event.preventDefault();\r\n endInput._elementRef.nativeElement.setSelectionRange(0, 0);\r\n endInput.focus();\r\n } else {\r\n super._onKeydown(event);\r\n }\r\n }\r\n}\r\n\r\n/** Input for entering the end date in a `mat-date-range-input`. */\r\n@Directive({\r\n selector: \"input[ngxMatEndDate]\",\r\n host: {\r\n class: \"mat-end-date mat-date-range-input-inner\",\r\n \"[disabled]\": \"disabled\",\r\n \"(input)\": \"_onInput($event.target.value)\",\r\n \"(change)\": \"_onChange()\",\r\n \"(keydown)\": \"_onKeydown($event)\",\r\n \"[attr.aria-haspopup]\": '_rangeInput.rangePicker ? \"dialog\" : null',\r\n \"[attr.aria-owns]\":\r\n \"(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null\",\r\n \"[attr.min]\":\r\n \"_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null\",\r\n \"[attr.max]\":\r\n \"_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null\",\r\n \"(blur)\": \"_onBlur()\",\r\n type: \"text\",\r\n },\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: NgxMatEndDate, multi: true },\r\n { provide: NG_VALIDATORS, useExisting: NgxMatEndDate, multi: true },\r\n ],\r\n // These need to be specified explicitly, because some tooling doesn't\r\n // seem to pick them up from the base class. See #20932.\r\n outputs: [\"dateChange\", \"dateInput\"],\r\n inputs: [\"errorStateMatcher\"],\r\n standalone: false,\r\n})\r\nexport class NgxMatEndDate<D> extends NgxMatDateRangeInputPartBase<D> {\r\n /** Validator that checks that the end date isn't before the start date. */\r\n private _endValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n const end = this._dateAdapter.getValidDateOrNull(\r\n this._dateAdapter.deserialize(control.value)\r\n );\r\n const start = this._model ? this._model.selection.start : null;\r\n return !end || !start || this._dateAdapter.compareDate(end, start) >= 0\r\n ? null\r\n : { matEndDateInvalid: { start: start, actual: end } };\r\n };\r\n _model: any;\r\n\r\n constructor(\r\n @Inject(NGX_MAT_DATE_RANGE_INPUT_PARENT)\r\n rangeInput: NgxMatDateRangeInputParent<D>,\r\n elementRef: ElementRef<HTMLInputElement>,\r\n defaultErrorStateMatcher: ErrorStateMatcher,\r\n injector: Injector,\r\n @Optional() @Inject(NgForm) parentForm: NgForm,\r\n @Optional() @Inject(FormGroupDirective) parentFormGroup: FormGroupDirective,\r\n @Optional() dateAdapter: NgxMatDateAdapter<D>,\r\n @Optional() @Inject(NGX_MAT_DATE_FORMATS) dateFormats: NgxMatDateFormats\r\n ) {\r\n super(\r\n rangeInput,\r\n elementRef,\r\n defaultErrorStateMatcher,\r\n injector,\r\n parentForm,\r\n parentFormGroup,\r\n dateAdapter,\r\n dateFormats\r\n );\r\n }\r\n\r\n protected _validator = Validators.compose([\r\n ...super._getValidators(),\r\n this._endValidator,\r\n ]);\r\n\r\n protected _getValueFromModel(modelValue: NgxDateRange<D>) {\r\n return modelValue.end;\r\n }\r\n\r\n protected _shouldHandleChangeEvent(\r\n change: NgxDateSelectionModelChange<NgxDateRange<D>>\r\n ): boolean {\r\n if (!super._shouldHandleChangeEvent(change)) {\r\n return false;\r\n } else {\r\n return !change.oldValue?.end\r\n ? !!change.selection.end\r\n : !change.selection.end ||\r\n !!super._dateAdapter.compareDate(\r\n change.oldValue.end,\r\n change.selection.end\r\n );\r\n }\r\n }\r\n\r\n protected _assignValueToModel(value: D | null) {\r\n if (this._model) {\r\n const range = new NgxDateRange(this._model.selection.start, value);\r\n this._model.updateSelection(range, this);\r\n }\r\n }\r\n\r\n _onKeydown(event: KeyboardEvent) {\r\n const startInput = this._rangeInput._startInput;\r\n const element = this._elementRef.nativeElement;\r\n const isLtr = this._dir?.value !== \"rtl\";\r\n\r\n // If the user is pressing backspace on an empty end input, move focus back to the start.\r\n if (event.keyCode === BACKSPACE && !element.value) {\r\n startInput.focus();\r\n }\r\n // If the user hits LEFT (LTR) when at the start of the input (and no\r\n // selection), move the cursor to the end of the start input.\r\n else if (\r\n ((event.keyCode === LEFT_ARROW && isLtr) ||\r\n (event.keyCode === RIGHT_ARROW && !isLtr)) &&\r\n element.selectionStart === 0 &&\r\n element.selectionEnd === 0\r\n ) {\r\n event.preventDefault();\r\n const endPosition = startInput._elementRef.nativeElement.value.length;\r\n startInput._elementRef.nativeElement.setSelectionRange(\r\n endPosition,\r\n endPosition\r\n );\r\n startInput.focus();\r\n } else {\r\n super._onKeydown(event);\r\n }\r\n }\r\n}\r\n","import { FocusOrigin } from \"@angular/cdk/a11y\";\r\nimport { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\r\nimport {\r\n AfterContentInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n Inject,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Optional,\r\n Self,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { ControlContainer, NgControl, Validators } from \"@angular/forms\";\r\nimport { ThemePalette } from \"@angular/material/core\";\r\nimport {\r\n MAT_FORM_FIELD,\r\n MatFormFieldControl,\r\n} from \"@angular/material/form-field\";\r\nimport { Subject, Subscription, merge } from \"rxjs\";\r\nimport { NgxMatDateAdapter } from \"./core/date-adapter\";\r\nimport {\r\n NGX_MAT_DATE_RANGE_INPUT_PARENT,\r\n NgxMatDateRangeInputParent,\r\n NgxMatEndDate,\r\n NgxMatStartDate,\r\n} from \"./date-range-input-parts\";\r\nimport { NgxMatDateRangePickerInput } from \"./date-range-picker\";\r\nimport { NgxDateRange, NgxMatDateSelectionModel } from \"./date-selection-model\";\r\nimport {\r\n NgxMatDatepickerControl,\r\n NgxMatDatepickerPanel,\r\n} from \"./datepicker-base\";\r\nimport { createMissingDateImplError } from \"./datepicker-errors\";\r\nimport {\r\n NgxDateFilterFn,\r\n _NgxMatFormFieldPartial,\r\n dateInputsHaveChanged,\r\n} from \"./datepicker-input-base\";\r\n\r\nlet nextUniqueId = 0;\r\n\r\n@Component({\r\n selector: \"ngx-mat-date-range-input\",\r\n templateUrl: \"date-range-input.html\",\r\n styleUrls: [\"date-range-input.scss\"],\r\n exportAs: \"ngxMatDateRangeInput\",\r\n host: {\r\n class: \"mat-date-range-input\",\r\n \"[class.mat-date-range-input-hide-placeholders]\":\r\n \"_shouldHidePlaceholders()\",\r\n \"[class.mat-date-range-input-required]\": \"required\",\r\n \"[attr.id]\": \"id\",\r\n role: \"group\",\r\n \"[attr.aria-labelledby]\": \"_getAriaLabelledby()\",\r\n \"[attr.aria-describedby]\": \"_ariaDescribedBy\",\r\n // Used by the test harness to tie this input to its calendar. We can't depend on\r\n // `aria-owns` for this, because it's only defined while the calendar is open.\r\n \"[attr.data-mat-calendar]\": \"rangePicker ? rangePicker.id : null\",\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n { provide: MatFormFieldControl, useExisting: NgxMatDateRangeInput },\r\n {\r\n provide: NGX_MAT_DATE_RANGE_INPUT_PARENT,\r\n useExisting: NgxMatDateRangeInput,\r\n },\r\n ],\r\n standalone: false,\r\n})\r\nexport class NgxMatDateRangeInput<D>\r\n implements\r\n MatFormFieldControl<NgxDateRange<D>>,\r\n NgxMatDatepickerControl<D>,\r\n NgxMatDateRangeInputParent<D>,\r\n NgxMatDateRangePickerInput<D>,\r\n AfterContentInit,\r\n OnChanges,\r\n OnDestroy\r\n{\r\n private _closedSubscription = Subscription.EMPTY;\r\n\r\n /** Current value of the range input. */\r\n get value() {\r\n return this._model ? this._model.selection : null;\r\n }\r\n\r\n /** Unique ID for the group. */\r\n id = `mat-date-range-input-${nextUniqueId++}`;\r\n\r\n /** Whether the control is focused. */\r\n focused = false;\r\n\r\n /** Whether the control's label should float. */\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n /** Name of the form control. */\r\n controlType = \"mat-date-range-input\";\r\n\r\n /**\r\n * Implemented as a part of `MatFormFieldControl`.\r\n * Set the placeholder attribute on `matStartDate` and `matEndDate`.\r\n * @docs-private\r\n */\r\n get placeholder() {\r\n const start = this._startInput?._getPlaceholder() || \"\";\r\n const end = this._endInput?._getPlaceholder() || \"\";\r\n return start || end ? `${start} ${this.separator} ${end}` : \"\";\r\n }\r\n\r\n /** The range picker that this input is associated with. */\r\n @Input()\r\n get rangePicker() {\r\n return this._rangePicker;\r\n }\r\n set rangePicker(\r\n rangePicker: NgxMatDatepickerPanel<\r\n NgxMatDatepickerControl<D>,\r\n NgxDateRange<D>,\r\n D\r\n >\r\n ) {\r\n if (rangePicker) {\r\n this._model = rangePicker.registerInput(this);\r\n this._rangePicker = rangePicker;\r\n this._closedSubscription.unsubscribe();\r\n this._closedSubscription = rangePicker.closedStream.subscribe(() => {\r\n this._startInput?._onTouched();\r\n this._endInput?._onTouched();\r\n });\r\n this._registerModel(this._model!);\r\n }\r\n }\r\n private _rangePicker: NgxMatDatepickerPanel<\r\n NgxMatDatepickerControl<D>,\r\n NgxDateRange<D>,\r\n D\r\n >;\r\n\r\n /** Whether the input is required. */\r\n @Input()\r\n get required(): boolean {\r\n return (\r\n this._required ??\r\n (this._isTargetRequired(this) ||\r\n this._isTargetRequired(this._startInput) ||\r\n this._isTargetRequired(this._endInput)) ??\r\n false\r\n );\r\n }\r\n set required(value: BooleanInput) {\r\n this._required = coerceBooleanProperty(value);\r\n }\r\n private _required: boolean | undefined;\r\n\r\n /** Function that can be used to filter out dates within the date range picker. */\r\n @Input()\r\n get dateFilter() {\r\n return this._dateFilter;\r\n }\r\n set dateFilter(value: NgxDateFilterFn<D>) {\r\n const start = this._startInput;\r\n const end = this._endInput;\r\n const wasMatchingStart = start && start._matchesFilter(start.value);\r\n const wasMatchingEnd = end && end._matchesFilter(start.value);\r\n this._dateFilter = value;\r\n\r\n if (start && start._matchesFilter(start.value) !== wasMatchingStart) {\r\n start._validatorOnChange();\r\n }\r\n\r\n if (end && end._matchesFilter(end.value) !== wasMatchingEnd) {\r\n end._validatorOnChange();\r\n }\r\n }\r\n private _dateFilter: NgxDateFilterFn<D>;\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 const validValue = this._dateAdapter.getValidDateOrNull(\r\n this._dateAdapter.deserialize(value)\r\n );\r\n\r\n if (!this._dateAdapter.sameDate(validValue, this._min)) {\r\n this._min = validValue;\r\n this._revalidate();\r\n }\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 const validValue = this._dateAdapter.getValidDateOrNull(\r\n this._dateAdapter.deserialize(value)\r\n );\r\n\r\n if (!this._dateAdapter.sameDate(validValue, this._max)) {\r\n this._max = validValue;\r\n this._revalidate();\r\n }\r\n }\r\n private _max: D | null;\r\n\r\n /** Whether the input is disabled. */\r\n @Input()\r\n get disabled(): boolean {\r\n return this._startInput && this._endInput\r\n ? this._startInput.disabled && this._endInput.disabled\r\n : this._groupDisabled;\r\n }\r\n set disabled(value: BooleanInput) {\r\n const newValue = coerceBooleanProperty(value);\r\n\r\n if (newValue !== this._groupDisabled) {\r\n this._groupDisabled = newValue;\r\n this.stateChanges.next(undefined);\r\n }\r\n }\r\n _groupDisabled = false;\r\n\r\n /** Whether the input is in an error state. */\r\n get errorState(): boolean {\r\n if (this._startInput && this._endInput) {\r\n return this._startInput.errorState || this._endInput.errorState;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** Whether the datepicker input is empty. */\r\n get empty(): boolean {\r\n const startEmpty = this._startInput ? this._startInput.isEmpty() : false;\r\n const endEmpty = this._endInput ? this._endInput.isEmpty() : false;\r\n return startEmpty && endEmpty;\r\n }\r\n\r\n /** Value for the `aria-describedby` attribute of the inputs. */\r\n _ariaDescribedBy: string | null = null;\r\n\r\n /** Date selection model currently registered with the input. */\r\n private _model: NgxMatDateSelectionModel<NgxDateRange<D>> | undefined;\r\n\r\n /** Separator text to be shown between the inputs. */\r\n @Input() separator = \"–\";\r\n\r\n /** Start of the comparison range that should be shown in the calendar. */\r\n @Input() comparisonStart: D | null = null;\r\n\r\n /** End of the comparison range that should be shown in the calendar. */\r\n @Input() comparisonEnd: D | null = null;\r\n\r\n @ContentChild(NgxMatStartDate) _startInput: NgxMatStartDate<D>;\r\n @ContentChild(NgxMatEndDate) _endInput: NgxMatEndDate<D>;\r\n\r\n /**\r\n * Implemented as a part of `MatFormFieldControl`.\r\n * TODO(crisbeto): change type to `AbstractControlDirective` after #18206 lands.\r\n * @docs-private\r\n */\r\n ngControl: NgControl | null;\r\n\r\n /** Emits when the input's state has changed. */\r\n readonly stateChanges = new Subject<void>();\r\n\r\n constructor(\r\n private _changeDetectorRef: ChangeDetectorRef,\r\n private _elementRef: ElementRef<HTMLElement>,\r\n @Optional() @Self() @Inject(ControlContainer) control: ControlContainer,\r\n @Optional() private _dateAdapter: NgxMatDateAdapter<D>,\r\n @Optional()\r\n @Inject(MAT_FORM_FIELD)\r\n private _formField?: _NgxMatFormFieldPartial\r\n ) {\r\n if (!_dateAdapter) {\r\n throw createMissingDateImplError(\"NgxMatDateAdapter\");\r\n }\r\n\r\n // The datepicker module can be used both with MDC and non-MDC form fields. We have\r\n // to conditionally add the MDC input class so that the range picker looks correctly.\r\n if (\r\n _formField?._elementRef.nativeElement.classList.contains(\r\n \"mat-mdc-form-field\"\r\n )\r\n ) {\r\n _elementRef.nativeElement.classList.add(\r\n \"mat-mdc-input-element\",\r\n \"mat-mdc-form-field-input-control\",\r\n \"mdc-text-field__input\"\r\n );\r\n }\r\n\r\n // TODO(crisbeto): remove `as any` after #18206 lands.\r\n this.ngControl = control as any;\r\n }\r\n\r\n /**\r\n * Implemented as a part of `MatFormFieldControl`.\r\n * @docs-private\r\n */\r\n setDescribedByIds(ids: string[]): void {\r\n this._ariaDescribedBy = ids.length ? ids.join(\" \") : null;\r\n }\r\n\r\n /**\r\n * Implemented as a part of `MatFormFieldControl`.\r\n * @docs-private\r\n */\r\n onContainerClick(): void {\r\n if (!this.focused && !this.disabled) {\r\n if (!this._model || !this._model.selection.start) {\r\n this._startInput.focus();\r\n } else {\r\n this._endInput.focus();\r\n }\r\n }\r\n }\r\n\r\n ngAfterContentInit() {\r\n if (!this._startInput) {\r\n throw Error(\"mat-date-range-input must contain a matStartDate input\");\r\n }\r\n\r\n if (!this._endInput) {\r\n throw Error(\"mat-date-range-input must contain a matEndDate input\");\r\n }\r\n\r\n if (this._model) {\r\n this._registerModel(this._model);\r\n }\r\n\r\n // We don't need to unsubscribe from this, because we\r\n // know that the input streams will be completed on destroy.\r\n merge(this._startInput.stateChanges, this._endInput.stateChanges).subscribe(\r\n () => {\r\n this.stateChanges.next(undefined);\r\n }\r\n );\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (dateInputsHaveChanged(changes, this._dateAdapter)) {\r\n this.stateChanges.next(undefined);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this._closedSubscription.unsubscribe();\r\n this.stateChanges.complete();\r\n }\r\n\r\n /** Gets the date at which the calendar should start. */\r\n getStartValue(): D | null {\r\n return this.value ? this.value.start : null;\r\n }\r\n\r\n /** Gets the input's theme palette. */\r\n getThemePalette(): ThemePalette {\r\n return this._formField ? this._formField.color : undefined;\r\n }\r\n\r\n /** Gets the element to which the calendar overlay should be attached. */\r\n getConnectedOverlayOrigin(): ElementRef {\r\n return this._formField\r\n ? this._formField.getConnectedOverlayOrigin()\r\n : this._elementRef;\r\n }\r\n\r\n /** Gets the ID of an element that should be used a description for the calendar overlay. */\r\n getOverlayLabelId(): string | null {\r\n return this._formField ? this._formField.getLabelId() : null;\r\n }\r\n\r\n /** Gets the value that is used to mirror the state input. */\r\n _getInputMirrorValue(part: \"start\" | \"end\") {\r\n const input = part === \"start\" ? this._startInput : this._endInput;\r\n return input ? input.getMirrorValue() : \"\";\r\n }\r\n\r\n /** Whether the input placeholders should be hidden. */\r\n _shouldHidePlaceholders() {\r\n return this._startInput ? !this._startInput.isEmpty() : false;\r\n }\r\n\r\n /** Handles the value in one of the child inputs changing. */\r\n _handleChildValueChange() {\r\n this.stateChanges.next(undefined);\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n /** Opens the date range picker associated with the input. */\r\n _openDatepicker() {\r\n if (this._rangePicker) {\r\n this._rangePicker.open();\r\n }\r\n }\r\n\r\n /** Whether the separate text should be hidden. */\r\n _shouldHideSeparator() {\r\n return (\r\n (!this._formField ||\r\n (this._formField.getLabelId() &&\r\n !this._formField._shouldLabelFloat())) &&\r\n this.empty\r\n );\r\n }\r\n\r\n /** Gets the value for the `aria-labelledby` attribute of the inputs. */\r\n _getAriaLabelledby() {\r\n const formField = this._formField;\r\n return formField && formField._hasFloatingLabel()\r\n ? formField._labelId\r\n : null;\r\n }\r\n\r\n _getStartDateAccessibleName(): string {\r\n return this._startInput._getAccessibleName();\r\n }\r\n\r\n _getEndDateAccessibleName(): string {\r\n return this._endInput._getAccessibleName();\r\n }\r\n\r\n /** Updates the focused state of the range input. */\r\n _updateFocus(origin: FocusOrigin) {\r\n this.focused = origin !== null;\r\n this.stateChanges.next();\r\n }\r\n\r\n /** Re-runs the validators on the start/end inputs. */\r\n private _revalidate() {\r\n if (this._startInput) {\r\n this._startInput._validatorOnChange();\r\n }\r\n\r\n if (this._endInput) {\r\n this._endInput._validatorOnChange();\r\n }\r\n }\r\n\r\n /** Registers the current date selection model with the start/end inputs. */\r\n private _registerModel(model: NgxMatDateSelectionModel<NgxDateRange<D>>) {\r\n if (this._startInput) {\r\n this._startInput._registerModel(model);\r\n }\r\n\r\n if (this._endInput) {\r\n this._endInput._registerModel(model);\r\n }\r\n }\r\n\r\n /** Checks whether a specific range input directive is required. */\r\n private _isTargetRequired(\r\n target: { ngControl: NgControl | null } | null\r\n ): boolean | undefined {\r\n return target?.ngControl?.control?.hasValidator(Validators.required);\r\n }\r\n}\r\n","<div\r\n class=\"mat-date-range-input-container\"\r\n cdkMonitorSubtreeFocus\r\n (cdkFocusChange)=\"_updateFocus($event)\"\r\n>\r\n <div class=\"mat-date-range-input-wrapper\">\r\n <ng-content select=\"input[matStartDate]\"></ng-content>\r\n <span class=\"mat-date-range-input-mirror\" aria-hidden=\"true\"\r\n >{{_getInputMirrorValue('start')}}</span\r\n >\r\n </div>\r\n\r\n <span\r\n class=\"mat-date-range-input-separator\"\r\n [class.mat-date-range-input-separator-hidden]=\"_shouldHideSeparator()\"\r\n >{{separator}}</span\r\n >\r\n\r\n <div class=\"mat-date-range-input-wrapper mat-date-range-input-end-wrapper\">\r\n <ng-content select=\"input[matEndDate]\"></ng-content>\r\n <span class=\"mat-date-range-input-mirror\" aria-hidden=\"true\"\r\n >{{_getInputMirrorValue('end')}}</span\r\n >\r\n </div>\r\n</div>\r\n","\r\nimport {\r\n animate,\r\n state,\r\n style,\r\n transition,\r\n trigger,\r\n keyframes,\r\n AnimationTriggerMetadata,\r\n} from '@angular/animations';\r\n\r\n/**\r\n * Animations used by the Material datepicker.\r\n * @docs-private\r\n */\r\nexport const ngxMatDatepickerAnimations: {\r\n readonly transformPanel: AnimationTriggerMetadata;\r\n readonly fadeInCalendar: AnimationTriggerMetadata;\r\n} = {\r\n /** Transforms the height of the datepicker's calendar. */\r\n transformPanel: trigger('transformPanel', [\r\n transition(\r\n 'void => enter-dropdown',\r\n animate(\r\n '120ms cubic-bezier(0, 0, 0.2, 1)',\r\n keyframes([\r\n style({opacity: 0, transform: 'scale(1, 0.8)'}),\r\n style({opacity: 1, transform: 'scale(1, 1)'}),\r\n ]),\r\n ),\r\n ),\r\n transition(\r\n 'void => enter-dialog',\r\n animate(\r\n '150ms cubic-bezier(0, 0, 0.2, 1)',\r\n keyframes([\r\n style({opacity: 0, transform: 'scale(0.7)'}),\r\n style({transform: 'none', opacity: 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","export const LIMIT_TIMES = {\r\n minHour: 0,\r\n maxHour: 24,\r\n minMinute: 0,\r\n maxMinute: 60,\r\n minSecond: 0,\r\n maxSecond: 60,\r\n meridian: 12\r\n}\r\n\r\nexport const MERIDIANS = {\r\n AM: 'AM',\r\n PM: 'PM'\r\n}\r\n\r\nexport const DEFAULT_STEP = 1;\r\nexport const NUMERIC_REGEX = /[^0-9]/g;\r\n\r\nexport const PATTERN_INPUT_HOUR = /^(2[0-3]|[0-1][0-9]|[0-9])$/;\r\nexport const PATTERN_INPUT_MINUTE = /^([0-5][0-9]|[0-9])$/;\r\nexport const PATTERN_INPUT_SECOND = /^([0-5][0-9]|[0-9])$/;\r\n\r\nexport function formatTwoDigitTimeValue(val: number) {\r\n const txt = val.toString();\r\n return txt.length > 1 ? txt : `0${txt}`;\r\n}\r\n\r\nexport function createMissingDateImplError(provider: string) {\r\n return Error(\r\n `NgxMatDatetimePicker: No provider found for ${provider}. You must import one of the following ` +\r\n `modules at your application root: NgxMatNativeDateModule, NgxMatMomentModule, or provide a ` +\r\n `custom implementation.`);\r\n}\r\n\r\n/** Formats a range of years. */\r\nexport function formatYearRange(start: string, end: string): string {\r\n return `${start} \\u2013 ${end}`;\r\n}\r\n\r\n","\r\n\r\nimport {Injectable} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\n\r\n/** Datepicker data that requires internationalization. */\r\n@Injectable({providedIn: 'root'})\r\nexport class NgxMatDatepickerIntl {\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: Subject<void> = 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 /** Label for the button used to close the calendar popup. */\r\n closeCalendarLabel = 'Close 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 previous multi-year button (used by screen readers). */\r\n prevMultiYearLabel = 'Previous 24 years';\r\n\r\n /** A label for the next multi-year button (used by screen readers). */\r\n nextMultiYearLabel = 'Next 24 years';\r\n\r\n /** A label for the 'switch to month view' button (used by screen readers). */\r\n switchToMonthViewLabel = 'Choose date';\r\n\r\n /** A label for the 'switch to year view' button (used by screen readers). */\r\n switchToMultiYearViewLabel = 'Choose month and year';\r\n\r\n /**\r\n * A label for the first date of a range of dates (used by screen readers).\r\n * @deprecated Provide your own internationalization string.\r\n * @breaking-change 17.0.0\r\n */\r\n startDateLabel = 'Start date';\r\n\r\n /**\r\n * A label for the last date of a range of dates (used by screen readers).\r\n * @deprecated Provide your own internationalization string.\r\n * @breaking-change 17.0.0\r\n */\r\n endDateLabel = 'End date';\r\n\r\n /** Formats a range of years (used for visuals). */\r\n formatYearRange(start: string, end: string): string {\r\n return `${start} \\u2013 ${end}`;\r\n }\r\n\r\n /** Formats a label for a range of years (used by screen readers). */\r\n formatYearRangeLabel(start: string, end: string): string {\r\n return `${start} to ${end}`;\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n forwardRef,\r\n Inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Optional,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport {\r\n ControlValueAccessor,\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from \"@angular/forms\";\r\nimport { ThemePalette } from \"@angular/material/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { debounceTime, takeUntil } from \"rxjs/operators\";\r\nimport { NgxMatDateAdapter } from \"./core/date-adapter\";\r\nimport {\r\n createMissingDateImplError,\r\n DEFAULT_STEP,\r\n formatTwoDigitTimeValue,\r\n LIMIT_TIMES,\r\n MERIDIANS,\r\n NUMERIC_REGEX,\r\n PATTERN_INPUT_HOUR,\r\n PATTERN_INPUT_MINUTE,\r\n PATTERN_INPUT_SECOND,\r\n} from \"./utils/date-utils\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\n\r\n@Component({\r\n selector: \"ngx-mat-timepicker\",\r\n templateUrl: \"./timepicker.component.html\",\r\n styleUrls: [\"./timepicker.component.scss\"],\r\n host: {\r\n class: \"ngx-mat-timepicker\",\r\n },\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NgxMatTimepickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n exportAs: \"ngxMatTimepicker\",\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatSelectModule,\r\n MatFormFieldModule,\r\n ],\r\n})\r\nexport class NgxMatTimepickerComponent<D>\r\n implements ControlValueAccessor, OnInit, OnChanges\r\n{\r\n public form: FormGroup;\r\n\r\n @Input() disabled = false;\r\n @Input() showSpinners = true;\r\n @Input() stepHour: number = DEFAULT_STEP;\r\n @Input() stepMinute: number = DEFAULT_STEP;\r\n @Input() stepSecond: number = DEFAULT_STEP;\r\n @Input() showSeconds = false;\r\n @Input() disableMinute = false;\r\n @Input() enableMeridian = false;\r\n @Input() defaultTime: number[];\r\n @Input() color: ThemePalette = \"primary\";\r\n\r\n public meridian: string = MERIDIANS.AM;\r\n\r\n /** Hour */\r\n private get hour() {\r\n let val = Number(this.form.controls[\"hour\"].value);\r\n return isNaN(val) ? 0 : val;\r\n }\r\n\r\n private get minute() {\r\n let val = Number(this.form.controls[\"minute\"].value);\r\n return isNaN(val) ? 0 : val;\r\n }\r\n\r\n private get second() {\r\n let val = Number(this.form.controls[\"second\"].value);\r\n return isNaN(val) ? 0 : val;\r\n }\r\n\r\n /** Whether or not the form is valid */\r\n public get valid(): boolean {\r\n return this.form.valid;\r\n }\r\n\r\n private _onChange: any = () => {};\r\n private _onTouched: any = () => {};\r\n private _disabled: boolean;\r\n private _model: D;\r\n\r\n private _destroyed: Subject<void> = new Subject<void>();\r\n\r\n public pattern = PATTERN_INPUT_HOUR;\r\n\r\n constructor(\r\n private cd: ChangeDetectorRef,\r\n @Optional() public _dateAdapter: NgxMatDateAdapter<D>\r\n ) {\r\n if (!this._dateAdapter) {\r\n throw createMissingDateImplError(\"NgxMatDateAdapter\");\r\n }\r\n this.form = new FormGroup({\r\n hour: new FormControl(null, [\r\n Validators.required,\r\n Validators.pattern(PATTERN_INPUT_HOUR),\r\n ]),\r\n minute: new FormControl(null, [\r\n Validators.required,\r\n Validators.pattern(PATTERN_INPUT_MINUTE),\r\n ]),\r\n second: new FormControl(null, [\r\n Validators.required,\r\n Validators.pattern(PATTERN_INPUT_SECOND),\r\n ]),\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.form.valueChanges\r\n .pipe(takeUntil(this._destroyed), debounceTime(400))\r\n .subscribe((val) => {\r\n this._updateModel();\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.disabled || changes.disableMinute) {\r\n this._setDisableStates();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed.next();\r\n this._destroyed.complete();\r\n }\r\n\r\n /**\r\n * Writes a new value to the element.\r\n * @param obj\r\n */\r\n writeValue(val: D): void {\r\n if (val != null) {\r\n this._model = val;\r\n this._updateHourMinuteSecond();\r\n }\r\n }\r\n\r\n /** Registers a callback function that is called when the control's value changes in the UI. */\r\n registerOnChange(fn: (_: any) => {}): void {\r\n this._onChange = fn;\r\n }\r\n\r\n /**\r\n * Set the function to be called when the control receives a touch event.\r\n */\r\n registerOnTouched(fn: () => {}): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n /** Enables or disables the appropriate DOM element */\r\n setDisabledState(isDisabled: boolean): void {\r\n this._disabled = isDisabled;\r\n this.cd.markForCheck();\r\n }\r\n\r\n /**\r\n * Format input\r\n * @param input\r\n */\r\n public formatInput(input: HTMLInputElement) {\r\n input.value = input.value.replace(NUMERIC_REGEX, \"\");\r\n }\r\n\r\n /** Toggle meridian */\r\n public toggleMeridian() {\r\n this.meridian =\r\n this.meridian === MERIDIANS.AM ? MERIDIANS.PM : MERIDIANS.AM;\r\n this.change(\"hour\");\r\n }\r\n\r\n /** Change property of time */\r\n public change(prop: string, up?: boolean) {\r\n const next = this._getNextValueByProp(prop, up);\r\n this.form.controls[prop].setValue(formatTwoDigitTimeValue(next), {\r\n onlySelf: false,\r\n emitEvent: false,\r\n });\r\n this._updateModel();\r\n }\r\n\r\n /** Update controls of form by model */\r\n private _updateHourMinuteSecond() {\r\n let _hour = this._dateAdapter.getHour(this._model);\r\n const _minute = this._dateAdapter.getMinute(this._model);\r\n const _second = this._dateAdapter.getSecond(this._model);\r\n\r\n if (this.enableMeridian) {\r\n if (_hour >= LIMIT_TIMES.meridian) {\r\n _hour = _hour - LIMIT_TIMES.meridian;\r\n this.meridian = MERIDIANS.PM;\r\n } else {\r\n this.meridian = MERIDIANS.AM;\r\n }\r\n if (_hour === 0) {\r\n _hour = LIMIT_TIMES.meridian;\r\n }\r\n }\r\n\r\n this.form.patchValue(\r\n {\r\n hour: formatTwoDigitTimeValue(_hour),\r\n minute: formatTwoDigitTimeValue(_minute),\r\n second: formatTwoDigitTimeValue(_second),\r\n },\r\n {\r\n emitEvent: false,\r\n }\r\n );\r\n }\r\n\r\n /** Update model */\r\n private _updateModel() {\r\n let _hour = this.hour;\r\n\r\n if (this.enableMeridian) {\r\n if (this.meridian === MERIDIANS.AM && _hour === LIMIT_TIMES.meridian) {\r\n _hour = 0;\r\n } else if (\r\n this.meridian === MERIDIANS.PM &&\r\n _hour !== LIMIT_TIMES.meridian\r\n ) {\r\n _hour = _hour + LIMIT_TIMES.meridian;\r\n }\r\n }\r\n\r\n if (this._model) {\r\n const clonedModel = this._dateAdapter.clone(this._model);\r\n\r\n this._dateAdapter.setHour(clonedModel, _hour);\r\n this._dateAdapter.setMinute(clonedModel, this.minute);\r\n this._dateAdapter.setSecond(clonedModel, this.second);\r\n this._onChange(clonedModel);\r\n }\r\n }\r\n\r\n /**\r\n * Get next value by property\r\n * @param prop\r\n * @param up\r\n */\r\n private _getNextValueByProp(prop: string, up?: boolean): number {\r\n const keyProp = prop[0].toUpperCase() + prop.slice(1);\r\n const min = LIMIT_TIMES[`min${keyProp}`];\r\n let max = LIMIT_TIMES[`max${keyProp}`];\r\n\r\n if (prop === \"hour\" && this.enableMeridian) {\r\n max = LIMIT_TIMES.meridian;\r\n }\r\n\r\n let next;\r\n if (up == null) {\r\n next = this[prop] % max;\r\n if (prop === \"hour\" && this.enableMeridian) {\r\n if (next === 0) next = max;\r\n }\r\n } else {\r\n next = up\r\n ? this[prop] + this[`step${keyProp}`]\r\n : this[prop] - this[`step${keyProp}`];\r\n if (prop === \"hour\" && this.enableMeridian) {\r\n next = next % (max + 1);\r\n if (next === 0) next = up ? 1 : max;\r\n } else {\r\n next = next % max;\r\n }\r\n if (up) {\r\n next = next > max ? next - max + min : next;\r\n } else {\r\n next = next < min ? next - min + max : next;\r\n }\r\n }\r\n\r\n return next;\r\n }\r\n\r\n /**\r\n * Set disable states\r\n */\r\n private _setDisableStates() {\r\n if (this.disabled) {\r\n this.form.disable();\r\n } else {\r\n this.form.enable();\r\n if (this.disableMinute) {\r\n this.form.get(\"minute\").disable();\r\n if (this.showSeconds) {\r\n this.form.get(\"second\").disable();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <table class=\"ngx-mat-timepicker-table\">\r\n <tbody class=\"ngx-mat-timepicker-tbody\">\r\n <tr *ngIf=\"showSpinners\">\r\n <td>\r\n <button type=\"button\" mat-icon-button aria-label=\"expand_less icon\" (click)=\"change('hour', true)\"\r\n [disabled]=\"disabled\">\r\n <mat-icon>expand_less</mat-icon>\r\n </button>\r\n </td>\r\n <td></td>\r\n <td>\r\n <button type=\"button\" mat-icon-button aria-label=\"expand_less icon\" (click)=\"change('minute', true)\"\r\n [disabled]=\"disabled || disableMinute\">\r\n <mat-icon>expand_less</mat-icon>\r\n </button> </td>\r\n <td></td>\r\n <td *ngIf=\"showSeconds\">\r\n <button type=\"button\" mat-icon-button aria-label=\"expand_less icon\" (click)=\"change('second', true)\"\r\n [disabled]=\"disabled || disableMinute\">\r\n <mat-icon>expand_less</mat-icon>\r\n </button>\r\n </td>\r\n <td *ngIf=\"enableMeridian\" class=\"ngx-mat-timepicker-spacer\"></td>\r\n <td *ngIf=\"enableMeridian\"></td>\r\n </tr>\r\n\r\n <tr>\r\n <td>\r\n <mat-form-field appearance=\"fill\" [color]=\"color\">\r\n <input type=\"text\" matInput (input)=\"formatInput($any($event).target)\" maxlength=\"2\" formControlName=\"hour\"\r\n (keydown.ArrowUp)=\"change('hour', true); $event.preventDefault()\"\r\n (keydown.ArrowDown)=\"change('hour', false); $event.preventDefault()\" (blur)=\"change('hour')\">\r\n </mat-form-field>\r\n </td>\r\n <td class=\"ngx-mat-timepicker-spacer\">:</td>\r\n <td>\r\n <mat-form-field appearance=\"fill\" [color]=\"color\">\r\n <input type=\"text\" matInput (input)=\"formatInput($any($event).target)\" maxlength=\"2\"\r\n formControlName=\"minute\" (keydown.ArrowUp)=\"change('minute', true); $event.preventDefault()\"\r\n (keydown.ArrowDown)=\"change('minute', false); $event.preventDefault()\" (blur)=\"change('minute')\">\r\n </mat-form-field>\r\n </td>\r\n <td *ngIf=\"showSeconds\" class=\"ngx-mat-timepicker-spacer\">:</td>\r\n <td *ngIf=\"showSeconds\">\r\n <mat-form-field appearance=\"fill\" [color]=\"color\">\r\n <input type=\"text\" matInput (input)=\"formatInput($any($event).target)\" maxlength=\"2\"\r\n formControlName=\"second\" (keydown.ArrowUp)=\"change('second', true); $event.preventDefault()\"\r\n (keydown.ArrowDown)=\"change('second', false); $event.preventDefault()\" (blur)=\"change('second')\">\r\n </mat-form-field>\r\n </td>\r\n\r\n <td *ngIf=\"enableMeridian\" class=\"ngx-mat-timepicker-spacer\"></td>\r\n <td *ngIf=\"enableMeridian\" class=\"ngx-mat-timepicker-meridian\">\r\n <button mat-button (click)=\"toggleMeridian()\" mat-stroked-button [color]=\"color\" [disabled]=\"disabled\">\r\n {{meridian}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n <tr *ngIf=\"showSpinners\">\r\n <td>\r\n <button type=\"button\" mat-icon-button aria-label=\"expand_more icon\" (click)=\"change('hour', false)\"\r\n [disabled]=\"disabled\">\r\n <mat-icon>expand_more</mat-icon>\r\n </button> </td>\r\n <td></td>\r\n <td>\r\n <button type=\"button\" mat-icon-button aria-label=\"expand_more icon\" (click)=\"change('minute', false)\"\r\n [disabled]=\"disabled || disableMinute\">\r\n <mat-icon>expand_more</mat-icon>\r\n </button> </td>\r\n <td *ngIf=\"showSeconds\"></td>\r\n <td *ngIf=\"showSeconds\">\r\n <button type=\"button\" mat-icon-button aria-label=\"expand_more icon\" (click)=\"change('second', false)\"\r\n [disabled]=\"disabled || disableMinute\">\r\n <mat-icon>expand_more</mat-icon>\r\n </button>\r\n </td>\r\n <td *ngIf=\"enableMeridian\" class=\"ngx-mat-timepicker-spacer\"></td>\r\n <td *ngIf=\"enableMeridian\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</form>","import { AnimationEvent } from \"@angular/animations\";\r\nimport { ListKeyManagerModifierKey } from \"@angular/cdk/a11y\";\r\nimport { Directionality } from \"@angular/cdk/bidi\";\r\nimport {\r\n BooleanInput,\r\n coerceBooleanProperty,\r\n coerceStringArray,\r\n} from \"@angular/cdk/coercion\";\r\nimport {\r\n DOWN_ARROW,\r\n ESCAPE,\r\n LEFT_ARROW,\r\n PAGE_DOWN,\r\n PAGE_UP,\r\n RIGHT_ARROW,\r\n UP_ARROW,\r\n hasModifierKey,\r\n} from \"@angular/cdk/keycodes\";\r\nimport {\r\n FlexibleConnectedPositionStrategy,\r\n Overlay,\r\n OverlayConfig,\r\n OverlayRef,\r\n ScrollStrategy,\r\n} from \"@angular/cdk/overlay\";\r\nimport { _getFocusedElementPierceShadowDom } from \"@angular/cdk/platform\";\r\nimport {\r\n ComponentPortal,\r\n ComponentType,\r\n TemplatePortal,\r\n} from \"@angular/cdk/portal\";\r\nimport { DOCUMENT } from \"@angular/common\";\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentRef,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n InjectionToken,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n inject,\r\n} from \"@angular/core\";\r\nimport { ThemePalette } from \"@angular/material/core\";\r\nimport { Observable, Subject, Subscription, merge } from \"rxjs\";\r\nimport { filter, take } from \"rxjs/operators\";\r\n\r\nimport { NgxMatDateAdapter } from \"./core/date-adapter\";\r\nimport {\r\n NGX_MAT_DATE_RANGE_SELECTION_STRATEGY,\r\n NgxMatDateRangeSelectionStrategy,\r\n} from \"./date-range-selection-strategy\";\r\nimport {\r\n NgxDateRange,\r\n NgxExtractDateTypeFromSelection,\r\n NgxMatDateSelectionModel,\r\n} from \"./date-selection-model\";\r\nimport { ngxMatDatepickerAnimations } from \"./datepicker-animations\";\r\nimport { createMissingDateImplError } from \"./datepicker-errors\";\r\nimport { NgxDateFilterFn } from \"./datepicker-input-base\";\r\nimport { NgxMatDatepickerIntl } from \"./datepicker-intl\";\r\nimport { DEFAULT_STEP } from \"./utils/date-utils\";\r\nimport {\r\n DateRange,\r\n MatCalendar,\r\n MatCalendarCellClassFunction,\r\n MatCalendarUserEvent,\r\n MatCalendarView,\r\n} from \"@angular/material/datepicker\";\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 NGX_MAT_DATEPICKER_SCROLL_STRATEGY = new InjectionToken<\r\n () => ScrollStrategy\r\n>(\"ngx-mat-datepicker-scroll-strategy\");\r\n\r\n/** @docs-private */\r\nexport function NGX_MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY(\r\n overlay: Overlay\r\n): () => ScrollStrategy {\r\n return () => overlay.scrollStrategies.reposition();\r\n}\r\n\r\n/** Possible positions for the datepicker dropdown along the X axis. */\r\nexport type NgxDatepickerDropdownPositionX = \"start\" | \"end\";\r\n\r\n/** Possible positions for the datepicker dropdown along the Y axis. */\r\nexport type NgxDatepickerDropdownPositionY = \"above\" | \"below\";\r\n\r\n/** @docs-private */\r\nexport const NGX_MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\r\n provide: NGX_MAT_DATEPICKER_SCROLL_STRATEGY,\r\n deps: [Overlay],\r\n useFactory: NGX_MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY,\r\n};\r\n\r\n/**\r\n * Component used as the content for the datepicker overlay. 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 overlay 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: \"ngx-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 \"[class.mat-primary]\": 'color === \"primary\"',\r\n \"[class.mat-accent]\": 'color === \"accent\"',\r\n \"[class.mat-warn]\": 'color === \"warn\"',\r\n \"[class.app-background]\": \"true\",\r\n \"[@transformPanel]\": \"_animationState\",\r\n \"(@transformPanel.start)\": \"_handleAnimationEvent($event)\",\r\n \"(@transformPanel.done)\": \"_handleAnimationEvent($event)\",\r\n \"[class.mat-datepicker-content-touch]\": \"datepicker.touchUi\",\r\n \"[class.mat-datepicker-content-touch-with-time]\": \"!datepicker.hideTime\",\r\n },\r\n animations: [\r\n ngxMatDatepickerAnimations.transformPanel,\r\n ngxMatDatepickerAnimations.fadeInCalendar,\r\n ],\r\n exportAs: \"ngxMatDatepickerContent\",\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n inputs: [\"color\"],\r\n standalone: false,\r\n})\r\nexport class NgxMatDatepickerContent<S, D = NgxExtractDateTypeFromSelection<S>>\r\n implements OnInit, AfterViewInit, OnDestroy, OnChanges\r\n{\r\n private _subscriptions = new Subscription();\r\n private _model: NgxMatDateSelectionModel<S, D>;\r\n /** Reference to the internal calendar component. */\r\n @ViewChild(MatCalendar) _calendar: MatCalendar<D>;\r\n\r\n // Add color property with default value\r\n @Input() color: ThemePalette = \"primary\";\r\n defaultColor: ThemePalette = \"primary\";\r\n\r\n /** Reference to the datepicker that created the overlay. */\r\n datepicker: NgxMatDatepickerBase<any, S, D>;\r\n\r\n /** Start of the comparison range. */\r\n comparisonStart: D | null;\r\n\r\n /** End of the comparison range. */\r\n comparisonEnd: D | null;\r\n\r\n /** ARIA Accessible name of the `<input matStartDate/>` */\r\n startDateAccessibleName: string | null;\r\n\r\n /** ARIA Accessible name of the `<input matEndDate/>` */\r\n endDateAccessibleName: string | null;\r\n\r\n /** Whether the datepicker is above or below the input. */\r\n _isAbove: boolean;\r\n\r\n /** Current state of the animation. */\r\n _animationState: \"enter-dropdown\" | \"enter-dialog\" | \"void\";\r\n\r\n /** Emits when an animation has finished. */\r\n readonly _animationDone = new Subject<void>();\r\n\r\n /** Whether there is an in-progress animation. */\r\n _isAnimating = false;\r\n\r\n /** Text for the close button. */\r\n _closeButtonText: string;\r\n\r\n /** Whether the close button currently has focus. */\r\n _closeButtonFocused: boolean;\r\n\r\n /** Portal with projected action buttons. */\r\n _actionsPortal: TemplatePortal | null = null;\r\n\r\n /** Id of the label for the `role=\"dialog\"` element. */\r\n _dialogLabelId: string | null;\r\n\r\n get isViewMonth(): boolean {\r\n if (!this._calendar || this._calendar.currentView == null) return true;\r\n return this._calendar.currentView == \"month\";\r\n }\r\n\r\n _modelTime: D | null;\r\n\r\n constructor(\r\n public elementRef: ElementRef,\r\n private _changeDetectorRef: ChangeDetectorRef,\r\n private _globalModel: NgxMatDateSelectionModel<S, D>,\r\n private _dateAdapter: NgxMatDateAdapter<D>,\r\n @Optional()\r\n @Inject(NGX_MAT_DATE_RANGE_SELECTION_STRATEGY)\r\n private _rangeSelectionStrategy: NgxMatDateRangeSelectionStrategy<D>,\r\n intl: NgxMatDatepickerIntl\r\n ) {\r\n // super(elementRef);\r\n this._closeButtonText = intl.closeCalendarLabel;\r\n }\r\n\r\n // Helper getter that returns the current color or default\r\n get _color(): ThemePalette {\r\n return this.color || this.defaultColor;\r\n }\r\n\r\n // Update the color and apply the appropriate classes\r\n private _updateColor(newColor: ThemePalette | null): void {\r\n const color = newColor || this.defaultColor;\r\n const element = this.elementRef.nativeElement;\r\n\r\n // Remove old color class\r\n element.classList.remove(`mat-${this._color}`);\r\n\r\n // Add new color class\r\n if (color) {\r\n element.classList.add(`mat-${color}`);\r\n }\r\n\r\n // Update the color property\r\n (this as { color: ThemePalette }).color = color;\r\n }\r\n\r\n ngOnInit() {\r\n this._animationState = this.datepicker.touchUi\r\n ? \"enter-dialog\"\r\n : \"enter-dropdown\";\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[\"color\"]) {\r\n this._updateColor(changes[\"color\"].currentValue);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._subscriptions.add(\r\n this.datepicker.stateChanges.subscribe(() => {\r\n this._changeDetectorRef.markForCheck();\r\n })\r\n );\r\n // this._calendar.color = this.color;\r\n this._calendar.focusActiveCell();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._subscriptions.unsubscribe();\r\n this._animationDone.complete();\r\n }\r\n\r\n onTimeChanged(selectedDateWithTime: D | null) {\r\n const userEvent: MatCalendarUserEvent<D | null> = {\r\n value: selectedDateWithTime,\r\n event: null,\r\n };\r\n\r\n this._updateUserSelectionWithCalendarUserEvent(userEvent);\r\n }\r\n\r\n _handleUserSelection(event: MatCalendarUserEvent<D | null>) {\r\n this._updateUserSelectionWithCalendarUserEvent(event);\r\n\r\n // Delegate closing the overlay to the actions.\r\n if (this.datepicker.hideTime) {\r\n if ((!this._model || this._model.isComplete()) && !this._actionsPortal) {\r\n this.datepicker.close();\r\n }\r\n }\r\n }\r\n\r\n private _updateUserSelectionWithCalendarUserEvent(\r\n event: MatCalendarUserEvent<D | null>\r\n ) {\r\n const selection = this._model.selection;\r\n const value = event.value;\r\n const isRange = selection instanceof DateRange;\r\n\r\n // If we're selecting a range and we have a selection strategy, always pass the value through\r\n // there. Otherwise don't assign null values to the model, unless we're selecting a range.\r\n // A null value when picking a range means that the user cancelled the selection (e.g. by\r\n // pressing escape), whereas when selecting a single value it means that the value didn't\r\n // change. This isn't very intuitive, but it's here for backwards-compatibility.\r\n if (isRange && this._rangeSelectionStrategy) {\r\n const newSelection = this._rangeSelectionStrategy.selectionFinished(\r\n value,\r\n selection as unknown as NgxDateRange<D>,\r\n event.event\r\n );\r\n this._model.updateSelection(newSelection as unknown as S, this);\r\n } else {\r\n const isSameTime = this._dateAdapter.isSameTime(\r\n selection as unknown as D,\r\n value\r\n );\r\n const isSameDate = this._dateAdapter.sameDate(\r\n value,\r\n selection as unknown as D\r\n );\r\n const isSame = isSameDate && isSameTime;\r\n\r\n if (value && (isRange || !isSame)) {\r\n this._model.add(value);\r\n }\r\n }\r\n }\r\n\r\n _handleUserDragDrop(event: MatCalendarUserEvent<DateRange<D>>) {\r\n this._model.updateSelection(event.value as unknown as S, this);\r\n }\r\n\r\n _startExitAnimation() {\r\n this._animationState = \"void\";\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n _handleAnimationEvent(event: AnimationEvent) {\r\n this._isAnimating = event.phaseName === \"start\";\r\n\r\n if (!this._isAnimating) {\r\n this._animationDone.next();\r\n }\r\n }\r\n\r\n _getSelected() {\r\n this._modelTime = this._model.selection as unknown as D;\r\n return this._model.selection as unknown as D | DateRange<D> | null;\r\n }\r\n\r\n /** Applies the current pending selection to the global model. */\r\n _applyPendingSelection() {\r\n if (this._model !== this._globalModel) {\r\n this._globalModel.updateSelection(this._model.selection, this);\r\n }\r\n }\r\n\r\n /**\r\n * Assigns a new portal containing the datepicker actions.\r\n * @param portal Portal with the actions to be assigned.\r\n * @param forceRerender Whether a re-render of the portal should be triggered. This isn't\r\n * necessary if the portal is assigned during initialization, but it may be required if it's\r\n * added at a later point.\r\n */\r\n _assignActions(portal: TemplatePortal<any> | null, forceRerender: boolean) {\r\n // If we have actions, clone the model so that we have the ability to cancel the selection,\r\n // otherwise update the global model directly. Note that we want to assign this as soon as\r\n // possible, but `_actionsPortal` isn't available in the constructor so we do it in `ngOnInit`.\r\n this._model = portal ? this._globalModel.clone() : this._globalModel;\r\n this._actionsPortal = portal;\r\n\r\n if (forceRerender) {\r\n this._changeDetectorRef.detectChanges();\r\n }\r\n }\r\n}\r\n\r\n/** Form control that can be associated with a datepicker. */\r\nexport interface NgxMatDatepickerControl<D> {\r\n getStartValue(): D | null;\r\n getThemePalette(): ThemePalette;\r\n min: D | null;\r\n max: D | null;\r\n disabled: boolean;\r\n dateFilter: NgxDateFilterFn<D>;\r\n getConnectedOverlayOrigin(): ElementRef;\r\n getOverlayLabelId(): string | null;\r\n stateChanges: Observable<void>;\r\n}\r\n\r\n/** A datepicker that can be attached to a {@link NgxMatDatepickerControl}. */\r\nexport interface NgxMatDatepickerPanel<\r\n C extends NgxMatDatepickerControl<D>,\r\n S,\r\n D = NgxExtractDateTypeFromSelection<S>\r\n> {\r\n /** Stream that emits whenever the date picker is closed. */\r\n closedStream: EventEmitter<void>;\r\n /** Color palette to use on the datepicker's calendar. */\r\n color: ThemePalette;\r\n /** The input element the datepicker is associated with. */\r\n datepickerInput: C;\r\n /** Whether the datepicker pop-up should be disabled. */\r\n disabled: boolean;\r\n /** The id for the datepicker's calendar. */\r\n id: string;\r\n /** Whether the datepicker is open. */\r\n opened: boolean;\r\n /** Stream that emits whenever the date picker is opened. */\r\n openedStream: EventEmitter<void>;\r\n /** Emits when the datepicker's state changes. */\r\n stateChanges: Subject<void>;\r\n /** Opens the datepicker. */\r\n open(): void;\r\n /** Register an input with the datepicker. */\r\n registerInput(input: C): NgxMatDateSelectionModel<S, D>;\r\n}\r\n\r\n/** Base class for a datepicker. */\r\n@Directive()\r\nexport abstract class NgxMatDatepickerBase<\r\n C extends NgxMatDatepickerControl<D>,\r\n S,\r\n D = NgxExtractDateTypeFromSelection<S>\r\n> implements NgxMatDatepickerPanel<C, S, D>, OnDestroy, OnChanges\r\n{\r\n private _scrollStrategy: () => ScrollStrategy;\r\n private _inputStateChanges = Subscription.EMPTY;\r\n private _document = inject(DOCUMENT);\r\n\r\n /** An input indicating the type of the custom header component for the calendar, if set. */\r\n @Input() calendarHeaderComponent: ComponentType<any>;\r\n\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 (\r\n this._startAt ||\r\n (this.datepickerInput ? this.datepickerInput.getStartValue() : null)\r\n );\r\n }\r\n set startAt(value: D | null) {\r\n this._startAt = this._dateAdapter.getValidDateOrNull(\r\n this._dateAdapter.deserialize(value)\r\n );\r\n }\r\n private _startAt: D | null;\r\n _color: ThemePalette;\r\n\r\n /** The view that the calendar should start in. */\r\n @Input() startView: \"month\" | \"year\" | \"multi-year\" = \"month\";\r\n\r\n /** Color palette to use on the datepicker's calendar. */\r\n @Input()\r\n get color(): ThemePalette {\r\n return (\r\n this._color ||\r\n (this.datepickerInput\r\n ? this.datepickerInput.getThemePalette()\r\n : \"primary\")\r\n );\r\n }\r\n set color(value: ThemePalette) {\r\n this._color = value;\r\n }\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 dropdown 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: BooleanInput) {\r\n this._touchUi = coerceBooleanProperty(value);\r\n }\r\n private _touchUi = false;\r\n\r\n @Input()\r\n get hideTime(): boolean {\r\n return this._hideTime;\r\n }\r\n set hideTime(value: boolean) {\r\n this._hideTime = coerceBooleanProperty(value);\r\n }\r\n public _hideTime = false;\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\r\n ? this.datepickerInput.disabled\r\n : !!this._disabled;\r\n }\r\n set disabled(value: BooleanInput) {\r\n const newValue = coerceBooleanProperty(value);\r\n\r\n if (newValue !== this._disabled) {\r\n this._disabled = newValue;\r\n this.stateChanges.next(undefined);\r\n }\r\n }\r\n public _disabled: boolean;\r\n\r\n /** Preferred position of the datepicker in the X axis. */\r\n @Input()\r\n xPosition: NgxDatepickerDropdownPositionX = \"start\";\r\n\r\n /** Preferred position of the datepicker in the Y axis. */\r\n @Input()\r\n yPosition: NgxDatepickerDropdownPositionY = \"below\";\r\n\r\n /**\r\n * Whether to restore focus to the previously-focused element when the calendar is closed.\r\n * Note that automatic focus restoration is an accessibility feature and it is recommended that\r\n * you provide your own equivalent, if you decide to turn it off.\r\n */\r\n @Input()\r\n get restoreFocus(): boolean {\r\n return this._restoreFocus;\r\n }\r\n set restoreFocus(value: BooleanInput) {\r\n this._restoreFocus = coerceBooleanProperty(value);\r\n }\r\n private _restoreFocus = true;\r\n\r\n /**\r\n * Emits selected year in multiyear view.\r\n * This doesn't imply a change on the selected date.\r\n */\r\n @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\r\n\r\n /**\r\n * Emits selected month in year view.\r\n * This doesn't imply a change on the selected date.\r\n */\r\n @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\r\n\r\n /**\r\n * Emits when the current view changes.\r\n */\r\n @Output() readonly viewChanged: EventEmitter<MatCalendarView> =\r\n new EventEmitter<MatCalendarView>(true);\r\n\r\n /** Function that can be used to add custom CSS classes to dates. */\r\n @Input() dateClass: MatCalendarCellClassFunction<D>;\r\n\r\n /** Emits when the datepicker has been opened. */\r\n @Output(\"opened\") readonly openedStream = new EventEmitter<void>();\r\n\r\n /** Emits when the datepicker has been closed. */\r\n @Output(\"closed\") readonly closedStream = new EventEmitter<void>();\r\n\r\n /**\r\n * Classes to be passed to the date picker panel.\r\n * Supports string and string array values, similar to `ngClass`.\r\n */\r\n @Input()\r\n get panelClass(): string | string[] {\r\n return this._panelClass;\r\n }\r\n set panelClass(value: string | string[]) {\r\n this._panelClass = coerceStringArray(value);\r\n }\r\n private _panelClass: string[];\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: BooleanInput) {\r\n coerceBooleanProperty(value) ? this.open() : this.close();\r\n }\r\n private _opened = false;\r\n\r\n /** Whether the timepicker'spinners is shown. */\r\n @Input()\r\n get showSpinners(): boolean {\r\n return this._showSpinners;\r\n }\r\n set showSpinners(value: boolean) {\r\n this._showSpinners = value;\r\n }\r\n public _showSpinners = true;\r\n\r\n /** Whether the second part is disabled. */\r\n @Input()\r\n get showSeconds(): boolean {\r\n return this._showSeconds;\r\n }\r\n set showSeconds(value: boolean) {\r\n this._showSeconds = value;\r\n }\r\n public _showSeconds = false;\r\n\r\n /** Step hour */\r\n @Input()\r\n get stepHour(): number {\r\n return this._stepHour;\r\n }\r\n set stepHour(value: number) {\r\n this._stepHour = value;\r\n }\r\n public _stepHour: number = DEFAULT_STEP;\r\n\r\n /** Step minute */\r\n @Input()\r\n get stepMinute(): number {\r\n return this._stepMinute;\r\n }\r\n set stepMinute(value: number) {\r\n this._stepMinute = value;\r\n }\r\n public _stepMinute: number = DEFAULT_STEP;\r\n\r\n /** Step second */\r\n @Input()\r\n get stepSecond(): number {\r\n return this._stepSecond;\r\n }\r\n set stepSecond(value: number) {\r\n this._stepSecond = value;\r\n }\r\n public _stepSecond: number = DEFAULT_STEP;\r\n\r\n /** Enable meridian */\r\n @Input()\r\n get enableMeridian(): boolean {\r\n return this._enableMeridian;\r\n }\r\n set enableMeridian(value: boolean) {\r\n this._enableMeridian = value;\r\n }\r\n public _enableMeridian: boolean = false;\r\n\r\n /** disable minute */\r\n @Input()\r\n get disableMinute(): boolean {\r\n return this._disableMinute;\r\n }\r\n set disableMinute(value: boolean) {\r\n this._disableMinute = value;\r\n }\r\n public _disableMinute: boolean;\r\n\r\n /** Step second */\r\n @Input()\r\n get defaultTime(): number[] {\r\n return this._defaultTime;\r\n }\r\n set defaultTime(value: number[]) {\r\n this._defaultTime = value;\r\n }\r\n public _defaultTime: number[];\r\n\r\n /** The id for the datepicker calendar. */\r\n id: string = `mat-datepicker-${datepickerUid++}`;\r\n\r\n /** The minimum selectable date. */\r\n _getMinDate(): D | null {\r\n return this.datepickerInput && this.datepickerInput.min;\r\n }\r\n\r\n /** The maximum selectable date. */\r\n _getMaxDate(): D | null {\r\n return this.datepickerInput && this.datepickerInput.max;\r\n }\r\n\r\n _getDateFilter(): NgxDateFilterFn<D> {\r\n return this.datepickerInput && this.datepickerInput.dateFilter;\r\n }\r\n\r\n /** A reference to the overlay into which we've rendered the calendar. */\r\n private _overlayRef: OverlayRef | null;\r\n\r\n /** Reference to the component instance rendered in the overlay. */\r\n private _componentRef: ComponentRef<NgxMatDatepickerContent<S, 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 /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */\r\n private _backdropHarnessClass = `${this.id}-backdrop`;\r\n\r\n /** Currently-registered actions portal. */\r\n private _actionsPortal: TemplatePortal | null;\r\n\r\n /** The input element this datepicker is associated with. */\r\n datepickerInput: C;\r\n\r\n /** Emits when the datepicker's state changes. */\r\n readonly stateChanges = new Subject<void>();\r\n\r\n constructor(\r\n private _overlay: Overlay,\r\n private _ngZone: NgZone,\r\n private _viewContainerRef: ViewContainerRef,\r\n @Inject(NGX_MAT_DATEPICKER_SCROLL_STRATEGY) scrollStrategy: any,\r\n @Optional() private _dateAdapter: NgxMatDateAdapter<D>,\r\n @Optional() private _dir: Directionality,\r\n private _model: NgxMatDateSelectionModel<S, D>\r\n ) {\r\n if (!this._dateAdapter) {\r\n throw createMissingDateImplError(\"NgxMatDateAdapter\");\r\n }\r\n\r\n this._scrollStrategy = scrollStrategy;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const positionChange = changes[\"xPosition\"] || changes[\"yPosition\"];\r\n\r\n if (positionChange && !positionChange.firstChange && this._overlayRef) {\r\n const positionStrategy = this._overlayRef.getConfig().positionStrategy;\r\n\r\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\r\n this._setConnectedPositions(positionStrategy);\r\n\r\n if (this.opened) {\r\n this._overlayRef.updatePosition();\r\n }\r\n }\r\n }\r\n\r\n this.stateChanges.next(undefined);\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyOverlay();\r\n this.close();\r\n this._inputStateChanges.unsubscribe();\r\n this.stateChanges.complete();\r\n }\r\n\r\n /** Selects the given date */\r\n select(date: D): void {\r\n this._model.add(date);\r\n }\r\n\r\n /** Emits the selected year in multiyear view */\r\n _selectYear(normalizedYear: D): void {\r\n this.yearSelected.emit(normalizedYear);\r\n }\r\n\r\n /** Emits selected month in year view */\r\n _selectMonth(normalizedMonth: D): void {\r\n this.monthSelected.emit(normalizedMonth);\r\n }\r\n\r\n /** Emits changed view */\r\n _viewChanged(view: MatCalendarView): void {\r\n this.viewChanged.emit(view);\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 * @returns Selection model that the input should hook itself up to.\r\n */\r\n registerInput(input: C): NgxMatDateSelectionModel<S, D> {\r\n if (this.datepickerInput) {\r\n throw Error(\r\n \"A MatDatepicker can only be associated with a single input.\"\r\n );\r\n }\r\n this._inputStateChanges.unsubscribe();\r\n this.datepickerInput = input;\r\n this._inputStateChanges = input.stateChanges.subscribe(() =>\r\n this.stateChanges.next(undefined)\r\n );\r\n return this._model;\r\n }\r\n\r\n /**\r\n * Registers a portal containing action buttons with the datepicker.\r\n * @param portal Portal to be registered.\r\n */\r\n registerActions(portal: TemplatePortal): void {\r\n if (this._actionsPortal) {\r\n throw Error(\r\n \"A MatDatepicker can only be associated with a single actions row.\"\r\n );\r\n }\r\n this._actionsPortal = portal;\r\n this._componentRef?.instance._assignActions(portal, true);\r\n }\r\n\r\n /**\r\n * Removes a portal containing action buttons from the datepicker.\r\n * @param portal Portal to be removed.\r\n */\r\n removeActions(portal: TemplatePortal): void {\r\n if (portal === this._actionsPortal) {\r\n this._actionsPortal = null;\r\n this._componentRef?.instance._assignActions(null, true);\r\n }\r\n }\r\n\r\n /** Open the calendar. */\r\n open(): void {\r\n // Skip reopening if there's an in-progress animation to avoid overlapping\r\n // sequences which can cause \"changed after checked\" errors. See #25837.\r\n if (\r\n this._opened ||\r\n this.disabled ||\r\n this._componentRef?.instance._isAnimating\r\n ) {\r\n return;\r\n }\r\n\r\n if (!this.datepickerInput) {\r\n throw Error(\r\n \"Attempted to open an MatDatepicker with no associated input.\"\r\n );\r\n }\r\n\r\n this._focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\r\n this._openOverlay();\r\n this._opened = true;\r\n this.openedStream.emit();\r\n }\r\n\r\n /** Close the calendar. */\r\n close(): void {\r\n // Skip reopening if there's an in-progress animation to avoid overlapping\r\n // sequences which can cause \"changed after checked\" errors. See #25837.\r\n if (!this._opened || this._componentRef?.instance._isAnimating) {\r\n return;\r\n }\r\n\r\n const canRestoreFocus =\r\n this._restoreFocus &&\r\n this._focusedElementBeforeOpen &&\r\n typeof this._focusedElementBeforeOpen.focus === \"function\";\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 }\r\n };\r\n\r\n if (this._componentRef) {\r\n const { instance, location } = this._componentRef;\r\n instance._startExitAnimation();\r\n instance._animationDone.pipe(take(1)).subscribe(() => {\r\n const activeElement = this._document.activeElement;\r\n\r\n // Since we restore focus after the exit animation, we have to check that\r\n // the user didn't move focus themselves inside the `close` handler.\r\n if (\r\n canRestoreFocus &&\r\n (!activeElement ||\r\n activeElement === this._document.activeElement ||\r\n location.nativeElement.contains(activeElement))\r\n ) {\r\n this._focusedElementBeforeOpen!.focus();\r\n }\r\n\r\n this._focusedElementBeforeOpen = null;\r\n this._destroyOverlay();\r\n });\r\n }\r\n\r\n if (canRestoreFocus) {\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 setTimeout(completeClose);\r\n } else {\r\n completeClose();\r\n }\r\n }\r\n\r\n /** Applies the current pending selection on the overlay to the model. */\r\n _applyPendingSelection() {\r\n this._componentRef?.instance?._applyPendingSelection();\r\n }\r\n\r\n /** Forwards relevant values from the datepicker to the datepicker content inside the overlay. */\r\n protected _forwardContentValues(instance: NgxMatDatepickerContent<S, D>) {\r\n instance.datepicker = this;\r\n instance.color = this._color;\r\n instance._dialogLabelId = this.datepickerInput.getOverlayLabelId();\r\n instance._assignActions(this._actionsPortal, false);\r\n }\r\n\r\n /** Opens the overlay with the calendar. */\r\n private _openOverlay(): void {\r\n this._destroyOverlay();\r\n\r\n const isDialog = this.touchUi;\r\n const portal = new ComponentPortal<NgxMatDatepickerContent<S, D>>(\r\n NgxMatDatepickerContent,\r\n this._viewContainerRef\r\n );\r\n const overlayRef = (this._overlayRef = this._overlay.create(\r\n new OverlayConfig({\r\n positionStrategy: isDialog\r\n ? this._getDialogStrategy()\r\n : this._getDropdownStrategy(),\r\n hasBackdrop: true,\r\n backdropClass: [\r\n isDialog\r\n ? \"cdk-overlay-dark-backdrop\"\r\n : \"mat-overlay-transparent-backdrop\",\r\n this._backdropHarnessClass,\r\n ],\r\n direction: this._dir,\r\n scrollStrategy: isDialog\r\n ? this._overlay.scrollStrategies.block()\r\n : this._scrollStrategy(),\r\n panelClass: `mat-datepicker-${isDialog ? \"dialog\" : \"popup\"}`,\r\n })\r\n ));\r\n\r\n this._getCloseStream(overlayRef).subscribe((event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.close();\r\n });\r\n\r\n // The `preventDefault` call happens inside the calendar as well, however focus moves into\r\n // it inside a timeout which can give browsers a chance to fire off a keyboard event in-between\r\n // that can scroll the page (see #24969). Always block default actions of arrow keys for the\r\n // entire overlay so the page doesn't get scrolled by accident.\r\n overlayRef.keydownEvents().subscribe((event) => {\r\n const keyCode = event.keyCode;\r\n\r\n if (\r\n keyCode === UP_ARROW ||\r\n keyCode === DOWN_ARROW ||\r\n keyCode === LEFT_ARROW ||\r\n keyCode === RIGHT_ARROW ||\r\n keyCode === PAGE_UP ||\r\n keyCode === PAGE_DOWN\r\n ) {\r\n event.preventDefault();\r\n }\r\n });\r\n\r\n this._componentRef = overlayRef.attach(portal);\r\n this._forwardContentValues(this._componentRef.instance);\r\n\r\n // Update the position once the calendar has rendered. Only relevant in dropdown mode.\r\n if (!isDialog) {\r\n this._ngZone.onStable\r\n .pipe(take(1))\r\n .subscribe(() => overlayRef.updatePosition());\r\n }\r\n }\r\n\r\n /** Destroys the current overlay. */\r\n private _destroyOverlay() {\r\n if (this._overlayRef) {\r\n this._overlayRef.dispose();\r\n this._overlayRef = this._componentRef = null;\r\n }\r\n }\r\n\r\n /** Gets a position strategy that will open the calendar as a dropdown. */\r\n private _getDialogStrategy() {\r\n return this._overlay\r\n .position()\r\n .global()\r\n .centerHorizontally()\r\n .centerVertically();\r\n }\r\n\r\n /** Gets a position strategy that will open the calendar as a dropdown. */\r\n private _getDropdownStrategy() {\r\n const strategy = 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 .withLockedPosition();\r\n\r\n return this._setConnectedPositions(strategy);\r\n }\r\n\r\n /** Sets the positions of the datepicker in dropdown mode based on the current configuration. */\r\n private _setConnectedPositions(strategy: FlexibleConnectedPositionStrategy) {\r\n const primaryX = this.xPosition === \"end\" ? \"end\" : \"start\";\r\n const secondaryX = primaryX === \"start\" ? \"end\" : \"start\";\r\n const primaryY = this.yPosition === \"above\" ? \"bottom\" : \"top\";\r\n const secondaryY = primaryY === \"top\" ? \"bottom\" : \"top\";\r\n\r\n return strategy.withPositions([\r\n {\r\n originX: primaryX,\r\n originY: secondaryY,\r\n overlayX: primaryX,\r\n overlayY: primaryY,\r\n },\r\n {\r\n originX: primaryX,\r\n originY: primaryY,\r\n overlayX: primaryX,\r\n overlayY: secondaryY,\r\n },\r\n {\r\n originX: secondaryX,\r\n originY: secondaryY,\r\n overlayX: secondaryX,\r\n overlayY: primaryY,\r\n },\r\n {\r\n originX: secondaryX,\r\n originY: primaryY,\r\n overlayX: secondaryX,\r\n overlayY: secondaryY,\r\n },\r\n ]);\r\n }\r\n\r\n /** Gets an observable that will emit when the overlay is supposed to be closed. */\r\n private _getCloseStream(overlayRef: OverlayRef) {\r\n const ctrlShiftMetaModifiers: ListKeyManagerModifierKey[] = [\r\n \"ctrlKey\",\r\n \"shiftKey\",\r\n \"metaKey\",\r\n ];\r\n return merge(\r\n overlayRef.backdropClick(),\r\n overlayRef.detachments(),\r\n overlayRef.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 (\r\n (event.keyCode === ESCAPE && !hasModifierKey(event)) ||\r\n (this.datepickerInput &&\r\n hasModifierKey(event, \"altKey\") &&\r\n event.keyCode === UP_ARROW &&\r\n ctrlShiftMetaModifiers.every(\r\n (modifier: ListKeyManagerModifierKey) =>\r\n !hasModifierKey(event, modifier)\r\n ))\r\n );\r\n })\r\n )\r\n );\r\n }\r\n}\r\n","<div\r\n cdkTrapFocus\r\n role=\"dialog\"\r\n [attr.aria-modal]=\"true\"\r\n [attr.aria-labelledby]=\"_dialogLabelId ?? undefined\"\r\n class=\"mat-datepicker-content-container\"\r\n [class.mat-datepicker-content-container-with-custom-header]=\"datepicker.calendarHeaderComponent\"\r\n [class.mat-datepicker-content-container-with-actions]=\"_actionsPortal\"\r\n [class.mat-datepicker-content-container-with-time]=\"!datepicker._hideTime\"\r\n>\r\n <mat-calendar\r\n [id]=\"datepicker.id\"\r\n [ngClass]=\"datepicker.panelClass\"\r\n [startAt]=\"datepicker.startAt\"\r\n [startView]=\"datepicker.startView\"\r\n [minDate]=\"datepicker._getMinDate()\"\r\n [maxDate]=\"datepicker._getMaxDate()\"\r\n [dateFilter]=\"datepicker._getDateFilter()\"\r\n [headerComponent]=\"datepicker.calendarHeaderComponent\"\r\n [selected]=\"_getSelected()\"\r\n [dateClass]=\"datepicker.dateClass\"\r\n [comparisonStart]=\"comparisonStart\"\r\n [comparisonEnd]=\"comparisonEnd\"\r\n [@fadeInCalendar]=\"'enter'\"\r\n [startDateAccessibleName]=\"startDateAccessibleName\"\r\n [endDateAccessibleName]=\"endDateAccessibleName\"\r\n (yearSelected)=\"datepicker._selectYear($event)\"\r\n (monthSelected)=\"datepicker._selectMonth($event)\"\r\n (viewChanged)=\"datepicker._viewChanged($event)\"\r\n (_userSelection)=\"_handleUserSelection($event)\"\r\n (_userDragDrop)=\"_handleUserDragDrop($event)\"\r\n ></mat-calendar>\r\n\r\n <ng-container *ngIf=\"isViewMonth\">\r\n <div\r\n *ngIf=\"!datepicker._hideTime\"\r\n class=\"time-container\"\r\n [class.disable-seconds]=\"!datepicker._showSeconds\"\r\n >\r\n <ngx-mat-timepicker\r\n [showSpinners]=\"datepicker._showSpinners\"\r\n [showSeconds]=\"datepicker._showSeconds\"\r\n [disabled]=\"datepicker._disabled || !_modelTime\"\r\n [stepHour]=\"datepicker._stepHour\"\r\n [stepMinute]=\"datepicker._stepMinute\"\r\n [stepSecond]=\"datepicker._stepSecond\"\r\n [(ngModel)]=\"_modelTime\"\r\n [color]=\"_color\"\r\n [enableMeridian]=\"datepicker._enableMeridian\"\r\n [disableMinute]=\"datepicker._disableMinute\"\r\n (ngModelChange)=\"onTimeChanged($event)\"\r\n >\r\n </ngx-mat-timepicker>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\r\n\r\n <!-- Invisible close button for screen reader users. -->\r\n <button\r\n type=\"button\"\r\n mat-raised-button\r\n [color]=\"_color\"\r\n class=\"mat-datepicker-close-button\"\r\n [class.cdk-visually-hidden]=\"!_closeButtonFocused\"\r\n (focus)=\"_closeButtonFocused = true\"\r\n (blur)=\"_closeButtonFocused = false\"\r\n (click)=\"datepicker.close()\"\r\n >\r\n {{ _closeButtonText }}\r\n </button>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\r\nimport {NgxMatDatepickerBase, NgxMatDatepickerContent, NgxMatDatepickerControl} from './datepicker-base';\r\nimport {NGX_MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER, NgxDateRange} from './date-selection-model';\r\nimport {NGX_MAT_CALENDAR_RANGE_STRATEGY_PROVIDER} from './date-range-selection-strategy';\r\n\r\n/**\r\n * Input that can be associated with a date range picker.\r\n * @docs-private\r\n */\r\nexport interface NgxMatDateRangePickerInput<D> extends NgxMatDatepickerControl<D> {\r\n _getEndDateAccessibleName(): string | null;\r\n _getStartDateAccessibleName(): string | null;\r\n comparisonStart: D | null;\r\n comparisonEnd: D | null;\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=\"matDateRangePicker\"). We can change this to a\r\n// directive if angular adds support for `exportAs: '$implicit'` on directives.\r\n/** Component responsible for managing the date range picker popup/dialog. */\r\n@Component({\n selector: 'ngx-mat-date-range-picker',\n template: '',\n exportAs: 'ngxMatDateRangePicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n NGX_MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER,\n NGX_MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,\n { provide: NgxMatDatepickerBase, useExisting: NgxMatDateRangePicker },\n ],\n standalone: false\n})\r\nexport class NgxMatDateRangePicker<D> extends NgxMatDatepickerBase<\r\n NgxMatDateRangePickerInput<D>,\r\n NgxDateRange<D>,\r\n D\r\n> {\r\n protected override _forwardContentValues(instance: NgxMatDatepickerContent<NgxDateRange<D>, D>) {\r\n super._forwardContentValues(instance);\r\n\r\n const input = this.datepickerInput;\r\n\r\n if (input) {\r\n instance.comparisonStart = input.comparisonStart;\r\n instance.comparisonEnd = input.comparisonEnd;\r\n instance.startDateAccessibleName = input._getStartDateAccessibleName();\r\n instance.endDateAccessibleName = input._getEndDateAccessibleName();\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\nimport { NGX_MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER } from './date-selection-model';\r\nimport { NgxMatDatepickerBase, NgxMatDatepickerControl } from './datepicker-base';\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: 'ngx-mat-datetime-picker',\r\n template: '',\r\n exportAs: 'ngxMatDatetimePicker',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n NGX_MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER,\r\n { provide: NgxMatDatepickerBase, useExisting: NgxMatDatetimepicker },\r\n ],\r\n standalone: false\r\n})\r\nexport class NgxMatDatetimepicker<D> extends NgxMatDatepickerBase<NgxMatDatepickerControl<D>, D | null, D> { }\r\n","\r\n\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n OnDestroy,\r\n TemplateRef,\r\n ViewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {TemplatePortal} from '@angular/cdk/portal';\r\nimport {NgxMatDatepickerBase, NgxMatDatepickerControl} from './datepicker-base';\r\n\r\n/** Button that will close the datepicker and assign the current selection to the data model. */\r\n@Directive({\n selector: '[ngxMatDatepickerApply], [ngxMatDateRangePickerApply]',\n host: { '(click)': '_applySelection()' },\n standalone: false\n})\r\nexport class NgxMatDatepickerApply {\r\n constructor(private _datepicker: NgxMatDatepickerBase<NgxMatDatepickerControl<any>, unknown>) {}\r\n\r\n _applySelection() {\r\n this._datepicker._applyPendingSelection();\r\n this._datepicker.close();\r\n }\r\n}\r\n\r\n/** Button that will close the datepicker and discard the current selection. */\r\n@Directive({\n selector: '[ngxMatDatepickerCancel], [ngxMatDateRangePickerCancel]',\n host: { '(click)': '_datepicker.close()' },\n standalone: false\n})\r\nexport class NgxMatDatepickerCancel {\r\n constructor(public _datepicker: NgxMatDatepickerBase<NgxMatDatepickerControl<any>, unknown>) {}\r\n}\r\n\r\n/**\r\n * Container that can be used to project a row of action buttons\r\n * to the bottom of a datepicker or date range picker.\r\n */\r\n@Component({\n selector: 'ngx-mat-datepicker-actions, ngx-mat-date-range-picker-actions',\n styleUrls: ['datepicker-actions.scss'],\n template: `\r\n <ng-template>\r\n <div class=\"mat-datepicker-actions\">\r\n <ng-content></ng-content>\r\n </div>\r\n </ng-template>\r\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\r\nexport class NgxMatDatepickerActions implements AfterViewInit, OnDestroy {\r\n @ViewChild(TemplateRef) _template: TemplateRef<unknown>;\r\n private _portal: TemplatePortal;\r\n\r\n constructor(\r\n private _datepicker: NgxMatDatepickerBase<NgxMatDatepickerControl<any>, unknown>,\r\n private _viewContainerRef: ViewContainerRef,\r\n ) {}\r\n\r\n ngAfterViewInit() {\r\n this._portal = new TemplatePortal(this._template, this._viewContainerRef);\r\n this._datepicker.registerActions(this._portal);\r\n }\r\n\r\n ngOnDestroy() {\r\n this._datepicker.removeActions(this._portal);\r\n\r\n // Needs to be null checked since we initialize it in `ngAfterViewInit`.\r\n if (this._portal && this._portal.isAttached) {\r\n this._portal?.detach();\r\n }\r\n }\r\n}\r\n","\r\n\r\nimport { Directive, ElementRef, forwardRef, Inject, Input, OnDestroy, Optional } from '@angular/core';\r\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidatorFn, Validators } from '@angular/forms';\r\nimport { MAT_DATE_FORMATS, MatDateFormats, ThemePalette } from '@angular/material/core';\r\nimport { MAT_FORM_FIELD } from '@angular/material/form-field';\r\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\r\nimport { Subscription } from 'rxjs';\r\nimport { NgxMatDateAdapter } from './core/date-adapter';\r\nimport { NgxDateSelectionModelChange } from './date-selection-model';\r\nimport { NgxMatDatepickerControl, NgxMatDatepickerPanel } from './datepicker-base';\r\nimport { _NgxMatFormFieldPartial, NgxDateFilterFn, NgxMatDatepickerInputBase } from './datepicker-input-base';\r\nimport { NGX_MAT_DATE_FORMATS, NgxMatDateFormats } from './core/date-formats';\r\n\r\n/** @docs-private */\r\nexport const NGX_MAT_DATEPICKER_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NgxMatDatepickerInput),\r\n multi: true,\r\n};\r\n\r\n/** @docs-private */\r\nexport const NGX_MAT_DATEPICKER_VALIDATORS: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NgxMatDatepickerInput),\r\n multi: true,\r\n};\r\n\r\n/** Directive used to connect an input to a MatDatepicker. */\r\n@Directive({\n selector: 'input[ngxMatDatetimePicker]',\n providers: [\n NGX_MAT_DATEPICKER_VALUE_ACCESSOR,\n NGX_MAT_DATEPICKER_VALIDATORS,\n { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: NgxMatDatepickerInput },\n ],\n host: {\n 'class': 'mat-datepicker-input',\n '[attr.aria-haspopup]': '_datepicker ? \"dialog\" : null',\n '[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',\n '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n // Used by the test harness to tie this input to its calendar. We can't depend on\n // `aria-owns` for this, because it's only defined while the calendar is open.\n '[attr.data-mat-calendar]': '_datepicker ? _datepicker.id : null',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(blur)': '_onBlur()',\n '(keydown)': '_onKeydown($event)',\n },\n exportAs: 'ngxMatDatepickerInput',\n standalone: false\n})\r\nexport class NgxMatDatepickerInput<D>\r\n extends NgxMatDatepickerInputBase<D | null, D>\r\n implements NgxMatDatepickerControl<D | null>, OnDestroy {\r\n private _closedSubscription = Subscription.EMPTY;\r\n\r\n /** The datepicker that this input is associated with. */\r\n @Input()\r\n set ngxMatDatetimePicker(datepicker: NgxMatDatepickerPanel<NgxMatDatepickerControl<D>, D | null, D>) {\r\n if (datepicker) {\r\n this._datepicker = datepicker;\r\n this._closedSubscription = datepicker.closedStream.subscribe(() => this._onTouched());\r\n this._registerModel(datepicker.registerInput(this));\r\n }\r\n }\r\n _datepicker: NgxMatDatepickerPanel<NgxMatDatepickerControl<D>, D | null, D>;\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 const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n\r\n if (!this._dateAdapter.sameDate(validValue, this._min)) {\r\n this._min = validValue;\r\n this._validatorOnChange();\r\n }\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 const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n\r\n if (!this._dateAdapter.sameDate(validValue, this._max)) {\r\n this._max = validValue;\r\n this._validatorOnChange();\r\n }\r\n }\r\n private _max: D | null;\r\n\r\n /** Function that can be used to filter out dates within the datepicker. */\r\n @Input('matDatepickerFilter')\r\n get dateFilter() {\r\n return this._dateFilter;\r\n }\r\n set dateFilter(value: NgxDateFilterFn<D | null>) {\r\n const wasMatchingValue = this._matchesFilter(this.value);\r\n this._dateFilter = value;\r\n\r\n if (this._matchesFilter(this.value) !== wasMatchingValue) {\r\n this._validatorOnChange();\r\n }\r\n }\r\n private _dateFilter: NgxDateFilterFn<D | null>;\r\n\r\n /** The combined form control validator for this input. */\r\n protected _validator: ValidatorFn | null;\r\n\r\n constructor(\r\n elementRef: ElementRef<HTMLInputElement>,\r\n @Optional() dateAdapter: NgxMatDateAdapter<D>,\r\n @Optional() @Inject(NGX_MAT_DATE_FORMATS) dateFormats: NgxMatDateFormats,\r\n @Optional() @Inject(MAT_FORM_FIELD) private _formField?: _NgxMatFormFieldPartial,\r\n ) {\r\n super(elementRef, dateAdapter, dateFormats);\r\n this._validator = Validators.compose(super._getValidators());\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 /** Gets the ID of an element that should be used a description for the calendar overlay. */\r\n getOverlayLabelId(): string | null {\r\n if (this._formField) {\r\n return this._formField.getLabelId();\r\n }\r\n\r\n return this._elementRef.nativeElement.getAttribute('aria-labelledby');\r\n }\r\n\r\n /** Returns the palette used by the input's form field, if any. */\r\n getThemePalette(): ThemePalette {\r\n return this._formField ? this._formField.color : undefined;\r\n }\r\n\r\n /** Gets the value at which the calendar should start. */\r\n getStartValue(): D | null {\r\n return this.value;\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._closedSubscription.unsubscribe();\r\n }\r\n\r\n /** Opens the associated datepicker. */\r\n protected _openPopup(): void {\r\n if (this._datepicker) {\r\n this._datepicker.open();\r\n }\r\n }\r\n\r\n protected _getValueFromModel(modelValue: D | null): D | null {\r\n return modelValue;\r\n }\r\n\r\n protected _assignValueToModel(value: D | null): void {\r\n if (this._model) {\r\n this._model.updateSelection(value, this);\r\n }\r\n }\r\n\r\n /** Gets the input's minimum date. */\r\n _getMinDate() {\r\n return this._min;\r\n }\r\n\r\n /** Gets the input's maximum date. */\r\n _getMaxDate() {\r\n return this._max;\r\n }\r\n\r\n /** Gets the input's date filtering function. */\r\n protected _getDateFilter() {\r\n return this._dateFilter;\r\n }\r\n\r\n protected _shouldHandleChangeEvent(event: NgxDateSelectionModelChange<D>) {\r\n return event.source !== this;\r\n }\r\n}\r\n","import { BooleanInput, 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 ViewChild,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { MatButton } from \"@angular/material/button\";\r\nimport { Observable, Subscription, merge, of as observableOf } from \"rxjs\";\r\nimport {\r\n NgxMatDatepickerControl,\r\n NgxMatDatepickerPanel,\r\n} from \"./datepicker-base\";\r\nimport { NgxMatDatepickerIntl } from \"./datepicker-intl\";\r\n\r\n/** Can be used to override the icon of a `matDatepickerToggle`. */\r\n@Directive({\r\n selector: \"[ngxMatDatepickerToggleIcon]\",\r\n standalone: false,\r\n})\r\nexport class NgxMatDatepickerToggleIcon {}\r\n\r\n@Component({\r\n selector: \"ngx-mat-datepicker-toggle\",\r\n templateUrl: \"datepicker-toggle.html\",\r\n styleUrls: [\"datepicker-toggle.scss\"],\r\n host: {\r\n class: \"mat-datepicker-toggle\",\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 // Used by the test harness to tie this toggle to its datepicker.\r\n \"[attr.data-mat-calendar]\": \"datepicker ? datepicker.id : null\",\r\n // Bind the `click` on the host, rather than the inner `button`, so that we can call\r\n // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\r\n // it so that the input doesn't get focused automatically by the form field (See #21836).\r\n \"(click)\": \"_open($event)\",\r\n },\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false,\r\n})\r\nexport class NgxMatDatepickerToggle<D>\r\n implements AfterContentInit, OnChanges, OnDestroy\r\n{\r\n private _stateChanges = Subscription.EMPTY;\r\n\r\n /** Datepicker instance that the button will toggle. */\r\n @Input(\"for\") datepicker: NgxMatDatepickerPanel<\r\n NgxMatDatepickerControl<any>,\r\n D\r\n >;\r\n\r\n /** Tabindex for the toggle. */\r\n @Input() tabIndex: number | null;\r\n\r\n /** Screen-reader label for the button. */\r\n @Input(\"aria-label\") ariaLabel: string;\r\n\r\n /** Whether the toggle button is disabled. */\r\n @Input()\r\n get disabled(): boolean {\r\n if (this._disabled === undefined && this.datepicker) {\r\n return this.datepicker.disabled;\r\n }\r\n\r\n return !!this._disabled;\r\n }\r\n set disabled(value: BooleanInput) {\r\n this._disabled = coerceBooleanProperty(value);\r\n }\r\n private _disabled: boolean;\r\n\r\n /** Whether ripples on the toggle should be disabled. */\r\n @Input() disableRipple: boolean;\r\n\r\n /** Custom icon set by the consumer. */\r\n @ContentChild(NgxMatDatepickerToggleIcon)\r\n _customIcon: NgxMatDatepickerToggleIcon;\r\n\r\n /** Underlying button element. */\r\n @ViewChild(\"button\") _button: MatButton;\r\n\r\n constructor(\r\n public _intl: NgxMatDatepickerIntl,\r\n private _changeDetectorRef: ChangeDetectorRef,\r\n @Attribute(\"tabindex\") defaultTabIndex: string\r\n ) {\r\n const parsedTabIndex = Number(defaultTabIndex);\r\n this.tabIndex =\r\n 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 datepickerStateChanged = this.datepicker\r\n ? this.datepicker.stateChanges\r\n : observableOf();\r\n const inputStateChanged =\r\n this.datepicker && this.datepicker.datepickerInput\r\n ? this.datepicker.datepickerInput.stateChanges\r\n : observableOf();\r\n const datepickerToggled = this.datepicker\r\n ? merge(this.datepicker.openedStream, this.datepicker.closedStream)\r\n : observableOf();\r\n\r\n this._stateChanges.unsubscribe();\r\n this._stateChanges = merge(\r\n this._intl.changes,\r\n datepickerStateChanged as Observable<void>,\r\n inputStateChanged,\r\n datepickerToggled\r\n ).subscribe(() => this._changeDetectorRef.markForCheck());\r\n }\r\n}\r\n","<button\r\n #button\r\n mat-icon-button\r\n type=\"button\"\r\n [attr.aria-haspopup]=\"datepicker ? 'dialog' : null\"\r\n [attr.aria-label]=\"ariaLabel || _intl.openCalendarLabel\"\r\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\r\n [disabled]=\"disabled\"\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 >\r\n <path\r\n 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 />\r\n </svg>\r\n\r\n <ng-content select=\"[ngxMatDatepickerToggleIcon]\"></ng-content>\r\n</button>\r\n","import { A11yModule } from \"@angular/cdk/a11y\";\r\nimport { OverlayModule } from \"@angular/cdk/overlay\";\r\nimport { PortalModule } from \"@angular/cdk/portal\";\r\nimport { CdkScrollableModule } from \"@angular/cdk/scrolling\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { NgxMatDateRangeInput } from \"./date-range-input\";\r\nimport { NgxMatEndDate, NgxMatStartDate } from \"./date-range-input-parts\";\r\nimport { NgxMatDateRangePicker } from \"./date-range-picker\";\r\nimport { NgxMatDatetimepicker } from \"./datepicker\";\r\nimport {\r\n NgxMatDatepickerActions,\r\n NgxMatDatepickerApply,\r\n NgxMatDatepickerCancel,\r\n} from \"./datepicker-actions\";\r\nimport {\r\n NGX_MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\r\n NgxMatDatepickerContent,\r\n} from \"./datepicker-base\";\r\nimport { NgxMatDatepickerInput } from \"./datepicker-input\";\r\nimport { NgxMatDatepickerIntl } from \"./datepicker-intl\";\r\nimport {\r\n NgxMatDatepickerToggleIcon,\r\n NgxMatDatepickerToggle,\r\n} from \"./datepicker-toggle\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { NgxMatTimepickerComponent } from \"./timepicker.component\";\r\nimport { MatRippleModule } from \"@angular/material/core\";\r\nimport { MatDatepickerModule } from \"@angular/material/datepicker\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n OverlayModule,\r\n A11yModule,\r\n PortalModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgxMatTimepickerComponent,\r\n MatRippleModule,\r\n MatDatepickerModule,\r\n ],\r\n exports: [\r\n CdkScrollableModule,\r\n NgxMatDatetimepicker,\r\n NgxMatDatepickerContent,\r\n NgxMatDatepickerInput,\r\n NgxMatDatepickerToggle,\r\n NgxMatDatepickerToggleIcon,\r\n NgxMatDateRangeInput,\r\n NgxMatStartDate,\r\n NgxMatEndDate,\r\n NgxMatDateRangePicker,\r\n NgxMatDatepickerActions,\r\n NgxMatDatepickerCancel,\r\n NgxMatDatepickerApply,\r\n NgxMatTimepickerComponent,\r\n ],\r\n declarations: [\r\n NgxMatDatetimepicker,\r\n NgxMatDatepickerContent,\r\n NgxMatDatepickerInput,\r\n NgxMatDatepickerToggle,\r\n NgxMatDatepickerToggleIcon,\r\n NgxMatDateRangeInput,\r\n NgxMatStartDate,\r\n NgxMatEndDate,\r\n NgxMatDateRangePicker,\r\n NgxMatDatepickerActions,\r\n NgxMatDatepickerCancel,\r\n NgxMatDatepickerApply,\r\n ],\r\n providers: [\r\n NgxMatDatepickerIntl,\r\n NGX_MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\r\n ],\r\n})\r\nexport class NgxMatDatetimePickerModule {}\r\n","/*\r\n * Public API Surface of ngx-mat-datetime-picker\r\n */\r\n\r\nexport * from \"./lib/core/date-adapter\";\r\nexport * from \"./lib/core/date-formats\";\r\nexport * from \"./lib/core/native-date-adapter\";\r\nexport * from \"./lib/core/native-date-formats\";\r\nexport * from \"./lib/core/native-date.module\";\r\nexport * from \"./lib/date-range-selection-strategy\";\r\nexport * from \"./lib/datepicker-module\";\r\nexport * from \"./lib/timepicker.component\";\r\nexport * from \"./lib/date-range-input\";\r\nexport * from \"./lib/date-range-input-parts\";\r\nexport * from \"./lib/datepicker-actions\";\r\nexport * from \"./lib/datepicker-input\";\r\nexport * from \"./lib/datepicker-toggle\";\r\nexport * from \"./lib/datepicker-base\";\r\nexport * from \"./lib/date-range-picker\";\r\nexport * from \"./lib/datepicker-input\";\r\nexport * from \"./lib/datepicker\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxMatDateAdapter","createMissingDateImplError","i1","i3.NgxMatDateAdapter","i2","i4","i6","i3.NgxMatDatepickerIntl","i5","i8","i9.NgxMatTimepickerComponent","i2.NgxMatDateAdapter","i1.NgxMatDateSelectionModel","i1.NgxMatDatepickerBase","observableOf","i3"],"mappings":"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"}