@skyux/datetime 12.13.1 → 12.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-datetime.mjs","sources":["../../../../../libs/components/datetime/src/lib/modules/shared/sky-datetime-resources.module.ts","../../../../../libs/components/datetime/src/lib/modules/date-pipe/date.service.ts","../../../../../libs/components/datetime/src/lib/modules/date-pipe/date.pipe.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/fuzzy/fuzzy-date.service.ts","../../../../../libs/components/datetime/src/lib/modules/date-pipe/fuzzy-date.pipe.ts","../../../../../libs/components/datetime/src/lib/modules/date-pipe/date-pipe.module.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/date-formatter.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar-inner.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar-inner.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar.service.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar-label.pipe.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker-button.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker-button.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker-cell.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker-cell.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/monthpicker.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/monthpicker.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/yearpicker.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/yearpicker.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker-config.service.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker-host.service.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker-input.directive.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/fuzzy/datepicker-input-fuzzy.directive.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker.module.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/types/date-range-calculator-type.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range-picker-end-date-resource-key.pipe.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range-picker-start-date-resource-key.pipe.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/types/date-range-calculator.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/types/date-range-calculator-id.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/types/date-range-relative-value.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/types/date-range-default-calculator-configs.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range.service.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range-picker.component.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range-picker.component.html","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range-picker.module.ts","../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.component.ts","../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.component.html","../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.directive.ts","../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.module.ts","../../../../../libs/components/datetime/src/skyux-datetime.ts"],"sourcesContent":["/* istanbul ignore file */\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-datetime' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-AU': {\n skyux_date_range_picker_format_label_last_fiscal_year: {\n message: 'Last financial year',\n },\n skyux_date_range_picker_format_label_this_fiscal_year: {\n message: 'This financial year',\n },\n skyux_date_range_picker_format_label_next_fiscal_year: {\n message: 'Next financial year',\n },\n },\n 'EN-GB': {\n skyux_date_range_picker_format_label_last_fiscal_year: {\n message: 'Last financial year',\n },\n skyux_date_range_picker_format_label_this_fiscal_year: {\n message: 'This financial year',\n },\n skyux_date_range_picker_format_label_next_fiscal_year: {\n message: 'Next financial year',\n },\n },\n 'EN-NZ': {\n skyux_date_range_picker_format_label_last_fiscal_year: {\n message: 'Last financial year',\n },\n skyux_date_range_picker_format_label_this_fiscal_year: {\n message: 'This financial year',\n },\n skyux_date_range_picker_format_label_next_fiscal_year: {\n message: 'Next financial year',\n },\n },\n 'EN-US': {\n skyux_datepicker_format_hint_text: { message: 'Use the format {0}.' },\n skyux_datepicker_trigger_button_label: { message: 'Select date' },\n skyux_datepicker_trigger_button_label_context: {\n message: 'Open calendar for {0}',\n },\n skyux_datepicker_move_calendar_previous_day: { message: 'Previous month' },\n skyux_datepicker_move_calendar_next_day: { message: 'Next month' },\n skyux_datepicker_move_calendar_previous_month: { message: 'Previous year' },\n skyux_datepicker_move_calendar_next_month: { message: 'Next year' },\n skyux_datepicker_move_calendar_previous_year: { message: 'Previous page' },\n skyux_datepicker_move_calendar_next_year: { message: 'Next page' },\n skyux_timepicker_button_label: { message: 'Choose time' },\n skyux_timepicker_button_label_context: {\n message: 'Open time picker for {0}',\n },\n skyux_timepicker_close: { message: 'Done' },\n skyux_date_range_picker_default_label: { message: 'Select a date range' },\n skyux_date_range_picker_end_date_before_start_date_error_label_text: {\n message:\n 'Change the date range so that the end date is before the start date.',\n },\n skyux_date_range_picker_format_label_specific_range: {\n message: 'Specific range',\n },\n skyux_date_range_picker_format_label_before: { message: 'Before' },\n skyux_date_range_picker_format_label_after: { message: 'After' },\n skyux_date_range_picker_format_label_any_time: { message: 'At any time' },\n skyux_date_range_picker_format_label_yesterday: { message: 'Yesterday' },\n skyux_date_range_picker_format_label_today: { message: 'Today' },\n skyux_date_range_picker_format_label_tomorrow: { message: 'Tomorrow' },\n skyux_date_range_picker_format_label_last_week: { message: 'Last week' },\n skyux_date_range_picker_format_label_this_week: { message: 'This week' },\n skyux_date_range_picker_format_label_next_week: { message: 'Next week' },\n skyux_date_range_picker_format_label_last_month: { message: 'Last month' },\n skyux_date_range_picker_format_label_this_month: { message: 'This month' },\n skyux_date_range_picker_format_label_next_month: { message: 'Next month' },\n skyux_date_range_picker_format_label_last_quarter: {\n message: 'Last quarter',\n },\n skyux_date_range_picker_format_label_this_quarter: {\n message: 'This quarter',\n },\n skyux_date_range_picker_format_label_next_quarter: {\n message: 'Next quarter',\n },\n skyux_date_range_picker_format_label_last_calendar_year: {\n message: 'Last calendar year',\n },\n skyux_date_range_picker_format_label_this_calendar_year: {\n message: 'This calendar year',\n },\n skyux_date_range_picker_format_label_next_calendar_year: {\n message: 'Next calendar year',\n },\n skyux_date_range_picker_format_label_last_fiscal_year: {\n message: 'Last fiscal year',\n },\n skyux_date_range_picker_format_label_this_fiscal_year: {\n message: 'This fiscal year',\n },\n skyux_date_range_picker_format_label_next_fiscal_year: {\n message: 'Next fiscal year',\n },\n skyux_date_range_picker_start_date_label: { message: 'From date' },\n skyux_date_range_picker_end_date_label: { message: 'To date' },\n skyux_date_range_picker_before_date_label: { message: 'Before date' },\n skyux_date_range_picker_after_date_label: { message: 'After date' },\n skyux_date_range_picker_default_aria_label: { message: '{0} for {1}' },\n },\n 'FR-CA': {\n skyux_datepicker_format_hint_text: { message: 'Utilisez le format {0}.' },\n skyux_datepicker_trigger_button_label: { message: 'Sélectionner la date' },\n skyux_datepicker_trigger_button_label_context: {\n message: 'Ouvrir le calendrier pour {0}',\n },\n skyux_datepicker_move_calendar_previous_day: { message: 'Mois précédent' },\n skyux_datepicker_move_calendar_next_day: { message: 'Le mois prochain' },\n skyux_datepicker_move_calendar_previous_month: {\n message: 'Année précédente',\n },\n skyux_datepicker_move_calendar_next_month: { message: 'Année suivante' },\n skyux_datepicker_move_calendar_previous_year: {\n message: 'Page précédente',\n },\n skyux_datepicker_move_calendar_next_year: { message: 'Page suivante' },\n skyux_timepicker_button_label: { message: 'Choisir l’heure' },\n skyux_timepicker_button_label_context: {\n message: 'Ouvrir le sélecteur d’heure pour {0}',\n },\n skyux_timepicker_close: { message: 'Terminé' },\n skyux_date_range_picker_default_label: {\n message: 'Sélectionner une plage de dates',\n },\n skyux_date_range_picker_end_date_before_start_date_error_label_text: {\n message:\n 'Modifiez la plage de date de façon à ce que la date de fin soit avant la date de début.',\n },\n skyux_date_range_picker_format_label_specific_range: {\n message: 'Plage spécifique',\n },\n skyux_date_range_picker_format_label_before: { message: 'Avant' },\n skyux_date_range_picker_format_label_after: { message: 'Après' },\n skyux_date_range_picker_format_label_any_time: {\n message: 'N’importe quand',\n },\n skyux_date_range_picker_format_label_yesterday: { message: 'Hier' },\n skyux_date_range_picker_format_label_today: { message: 'Aujourd’hui' },\n skyux_date_range_picker_format_label_tomorrow: { message: 'Demain' },\n skyux_date_range_picker_format_label_last_week: {\n message: 'La semaine dernière',\n },\n skyux_date_range_picker_format_label_this_week: {\n message: 'Cette semaine',\n },\n skyux_date_range_picker_format_label_next_week: {\n message: 'La semaine prochaine',\n },\n skyux_date_range_picker_format_label_last_month: {\n message: 'Le mois dernier',\n },\n skyux_date_range_picker_format_label_this_month: { message: 'Ce mois-ci' },\n skyux_date_range_picker_format_label_next_month: {\n message: 'Le mois prochain',\n },\n skyux_date_range_picker_format_label_last_quarter: {\n message: 'Le trimestre dernier',\n },\n skyux_date_range_picker_format_label_this_quarter: {\n message: 'Ce trimestre',\n },\n skyux_date_range_picker_format_label_next_quarter: {\n message: 'Le trimestre prochain',\n },\n skyux_date_range_picker_format_label_last_calendar_year: {\n message: 'Dernière année civile',\n },\n skyux_date_range_picker_format_label_this_calendar_year: {\n message: 'Cette année civile',\n },\n skyux_date_range_picker_format_label_next_calendar_year: {\n message: 'Prochaine année civile',\n },\n skyux_date_range_picker_format_label_last_fiscal_year: {\n message: 'Dernier exercice',\n },\n skyux_date_range_picker_format_label_this_fiscal_year: {\n message: 'L’exercice en cours',\n },\n skyux_date_range_picker_format_label_next_fiscal_year: {\n message: 'Le prochain exercice',\n },\n skyux_date_range_picker_start_date_label: {\n message: 'À partir de la date du',\n },\n skyux_date_range_picker_end_date_label: { message: 'À ce jour' },\n skyux_date_range_picker_before_date_label: { message: 'Date avant' },\n skyux_date_range_picker_after_date_label: { message: 'Date après' },\n skyux_date_range_picker_default_aria_label: { message: '{0} pour {1}' },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyDatetimeResourcesModule {}\n","// This class is mostly ported from the Angular 4.x DatePipe in order to maintain the old\n// behavior of using the `Intl` API for formatting dates rather than having to register every\n// supported locale.\n// https://github.com/angular/angular/blob/4.4.x/packages/common/src/pipes/date_pipe.ts\nimport { Injectable, OnDestroy, inject } from '@angular/core';\nimport {\n SkyAppLocaleInfo,\n SkyAppLocaleProvider,\n SkyIntlDateFormatter,\n} from '@skyux/i18n';\n\nimport moment from 'moment';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyDateService implements OnDestroy {\n /* spell-checker:disable */\n // See: https://github.com/angular/angular/blob/17.3.x/packages/common/src/pipes/date_pipe.ts\n // See: https://www.ibm.com/docs/en/app-connect/11.0.0?topic=function-formatting-parsing-datetimes-as-strings\n #ALIASES: Record<string, string> = {\n // TODO: replace with 'M/d/yy, h:mm a' in a breaking change.\n short: 'yMdjm',\n // TODO: replace with 'MMM d, y, h:mm:ss a' in a breaking change.\n medium: 'yMMMdjms',\n // TODO: This format was modified from 'MMMM d, y, h:mm:ss a z' due to the limitations of the Intl API.\n long: 'MMMM d, y, h:mm:ss a Z',\n // TODO: This format was modified from 'EEEE, MMMM d, y, h:mm:ss a zzzz' due to the limitations of the Intl API.\n full: 'EEEE, MMMM d, y, h:mm:ss a z',\n // TODO: Replace with 'M/d/yy' in a breaking change.\n shortDate: 'yMd',\n // TODO: Replace with 'MMM d, y' in a breaking change.\n mediumDate: 'yMMMd',\n // TODO: Replace with 'MMMM d, y' in a breaking change.\n longDate: 'yMMMMd',\n // TODO: Replace with 'EEEE, MMMM d, y' in a breaking change.\n fullDate: 'yMMMMEEEEd',\n // TODO: Replace with 'h:mm a' in a breaking change.\n shortTime: 'jm',\n // TODO: Replace with 'h:mm:ss a' in a breaking change.\n mediumTime: 'jms',\n // TODO: This format was modified from 'h:mm:ss a z' due to the limitations of the Intl API.\n longTime: 'h:mm:ss a Z',\n // TODO: This format was modified from 'h:mm:ss a zzzz' due to the limitations of the Intl API.\n fullTime: 'h:mm:ss a z',\n };\n /* spell-checker:enable */\n\n #defaultFormat = 'short';\n #defaultLocale = 'en-US';\n #ngUnsubscribe = new Subject<void>();\n\n constructor() {\n inject(SkyAppLocaleProvider)\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo: SkyAppLocaleInfo) => {\n this.#defaultLocale = localeInfo.locale;\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public format(\n value: any,\n locale?: string,\n format?: string,\n ): string | undefined {\n let date: Date;\n const pattern = format || this.#defaultFormat;\n\n if (isBlank(value) || value !== value) {\n return undefined;\n }\n\n // Moment will interpret any non-date object as today's date. That would\n // introduce a breaking change, so we check for it here. This could probably be removed\n // in a future major version.\n if (value instanceof Object && !(value instanceof Date)) {\n throw new Error('Invalid value: ' + value);\n }\n\n // Use moment to avoid inconsistencies between browsers interpreting the value differently.\n const momentDate = moment(value);\n if (momentDate.isValid()) {\n date = momentDate.toDate();\n } else {\n throw new Error('Invalid value: ' + value);\n }\n\n return SkyIntlDateFormatter.format(\n date,\n locale || this.#defaultLocale,\n this.#ALIASES[pattern] || pattern,\n );\n }\n}\n\nfunction isBlank(obj: any): boolean {\n return !obj;\n}\n","import { OnDestroy, Pipe, PipeTransform, inject } from '@angular/core';\nimport { SkyAppLocaleInfo, SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyDateService } from './date.service';\n\n/**\n * Formats date values according to locale rules.\n * @example\n * ```markup\n * {{ myDate | skyDate }}\n * {{ myDate | skyDate:'medium' }}\n * {{ myDate | skyDate:'medium':'en-CA' }}\n * ```\n */\n@Pipe({\n name: 'skyDate',\n pure: false,\n standalone: false,\n})\nexport class SkyDatePipe implements OnDestroy, PipeTransform {\n #dateSvc = inject(SkyDateService);\n #defaultFormat = 'short';\n #defaultLocale = 'en-US';\n #format: string | undefined;\n #formattedValue: string | undefined;\n #locale: string | undefined;\n #ngUnsubscribe = new Subject<void>();\n #value: any;\n\n constructor() {\n inject(SkyAppLocaleProvider)\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo: SkyAppLocaleInfo) => {\n this.#defaultLocale = localeInfo.locale;\n this.#updateFormattedValue();\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * Transforms a date value using locale and format rules.\n * @param value Specifies the date value to transform.\n * @param format Specifies the format to apply to the transform. The format string is\n * constructed by a series of symbols that represent date-time values. The symbols are\n * identical to [Angular's `DatePipe`](https://angular.io/api/common/DatePipe#pre-defined-format-options) format options.\n * @param locale Specifies the locale code to use in the transform.\n */\n public transform(value: any, format?: string, locale?: string): string {\n this.#value = value;\n this.#format = format;\n this.#locale = locale;\n\n this.#updateFormattedValue();\n\n return this.#formattedValue ?? '';\n }\n\n #updateFormattedValue(): void {\n const locale = this.#locale || this.#defaultLocale;\n const format = this.#format || this.#defaultFormat;\n\n this.#formattedValue = this.#dateSvc.format(this.#value, locale, format);\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport moment from 'moment';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyFuzzyDate } from './fuzzy-date';\n\n/**\n * @internal\n */\ninterface SkyDateIndexes {\n yearIndex: number;\n monthIndex: number;\n dayIndex: number;\n}\n\n/**\n * @internal\n */\ninterface SkyFuzzyDateRange {\n years: string;\n months: string;\n days: string;\n startDate: Date;\n endDate: Date;\n valid: boolean;\n}\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyFuzzyDateService implements OnDestroy {\n #currentLocale: string;\n\n #ngUnsubscribe = new Subject<void>();\n\n constructor(localeProvider: SkyAppLocaleProvider) {\n this.#currentLocale = localeProvider.defaultLocale;\n localeProvider\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo) => {\n this.#currentLocale = localeInfo.locale;\n });\n }\n\n /* istanbul ignore next */\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * Returns the browser's current locale string.\n */\n public getCurrentLocale(): string {\n return this.#currentLocale;\n }\n\n /**\n * Returns the short format of the provided locale.\n * If not provided, the locale will be taken from the browser's default locale.\n */\n public getLocaleShortFormat(locale?: string): string {\n return moment.localeData(locale || this.#currentLocale).longDateFormat('L');\n }\n\n /**\n * Formats a fuzzy date by using the provided format and locale strings.\n * If not provided, the locale will be taken from the browser's default locale.\n */\n public format(\n fuzzyDate: SkyFuzzyDate,\n format?: string,\n locale?: string,\n ): string {\n if (!this.#isFuzzyDateValid(fuzzyDate)) {\n return '';\n }\n\n if (!format) {\n return '';\n }\n\n const separator = this.#getDateSeparator(format);\n const dateParts: string[] = [];\n const formatTokens: string[] = separator\n ? format.split(separator)\n : [format];\n locale = locale || this.#currentLocale;\n const fuzzyDateMoment =\n this.getMomentFromFuzzyDate(fuzzyDate).locale(locale);\n\n for (const token of formatTokens) {\n /* istanbul ignore else */\n if (token) {\n switch (token.substr(0, 1).toLowerCase()) {\n case 'y':\n if (fuzzyDate.year) {\n dateParts.push(fuzzyDateMoment.format(token));\n }\n break;\n case 'm':\n if (fuzzyDate.month) {\n dateParts.push(fuzzyDateMoment.format(token));\n }\n break;\n case 'd':\n if (fuzzyDate.day) {\n dateParts.push(fuzzyDateMoment.format(token));\n }\n break;\n }\n }\n }\n\n return dateParts.join(separator);\n }\n\n /**\n * If not provided, years will default to current year; months will default to January;\n * days will default to 1st of the month.\n */\n public getMomentFromFuzzyDate(fuzzyDate?: SkyFuzzyDate): any {\n if (!fuzzyDate) {\n return;\n }\n\n const year = fuzzyDate.year || this.#getDefaultYear(fuzzyDate);\n const month =\n fuzzyDate.month && fuzzyDate.month > 0 ? fuzzyDate.month - 1 : 0;\n const day = fuzzyDate.day || 1;\n\n return moment([year, month, day]);\n }\n\n /**\n * Gets a string instance of a fuzzy date.\n * @deprecated Deprecated in favor of the `format` function.\n */\n public getStringFromFuzzyDate(\n fuzzyDate?: SkyFuzzyDate,\n dateFormat?: string,\n ): string | undefined {\n if (!fuzzyDate || !dateFormat) {\n return;\n }\n\n const separator = this.#getDateSeparator(dateFormat);\n const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);\n let dateString = '';\n\n // Get the components of the date in the order expected of the local format.\n const dateComponents = [\n { value: fuzzyDate.year || 0, index: dateFormatIndexes.yearIndex },\n { value: fuzzyDate.month || 0, index: dateFormatIndexes.monthIndex },\n { value: fuzzyDate.day || 0, index: dateFormatIndexes.dayIndex },\n ];\n dateComponents.sort((a: any, b: any) => a.index - b.index);\n\n dateComponents.forEach((component) => {\n if (component.value > 0 && component.index > -1) {\n if (dateString) {\n dateString += separator;\n }\n dateString += component.value.toString();\n }\n });\n\n return dateString.trim();\n }\n\n public getFuzzyDateFromSelectedDate(\n selectedDate?: Date,\n dateFormat?: string,\n ): SkyFuzzyDate | undefined {\n if (!selectedDate || !dateFormat) {\n return;\n }\n\n const fuzzyDate: SkyFuzzyDate = {};\n const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);\n\n if (dateFormatIndexes.yearIndex > -1) {\n fuzzyDate.year = selectedDate.getFullYear();\n }\n\n if (dateFormatIndexes.dayIndex > -1) {\n fuzzyDate.day = selectedDate.getDate();\n }\n\n if (dateFormatIndexes.monthIndex > -1) {\n fuzzyDate.month = selectedDate.getMonth() + 1; // getMonth() is 0-indexed.\n }\n\n return fuzzyDate;\n }\n\n public getFuzzyDateFromString(\n date: string,\n dateFormat?: string,\n ): SkyFuzzyDate | undefined {\n if (!date || !dateFormat) {\n return;\n }\n\n let day: any;\n let month: any;\n let year: any;\n\n const dateComponents = this.#getDateComponents(date);\n const indexes = this.#getDateValueIndexes(date, dateFormat);\n\n // Look at the date string's component count:\n // 3 indicates a full date\n // 2 indicates a month-year or month-day date\n // 1 indicates a year\n // Other indicates a problem\n switch (dateComponents.length) {\n case 3:\n year = dateComponents[indexes.yearIndex];\n month = dateComponents[indexes.monthIndex];\n day = dateComponents[indexes.dayIndex];\n break;\n case 2:\n // First, check for a 4-digit year. If year exists, then we assume the other component\n // is the month. Otherwise, we can assume the input is mm/dd or mm/yy (2-digit year).\n year = this.#get4DigitYearFromDateString(date);\n if (year) {\n month =\n dateComponents[0] === year.toString()\n ? dateComponents[1]\n : dateComponents[0];\n } else {\n if (indexes.dayIndex > -1) {\n // mm/dd\n month =\n indexes.monthIndex < indexes.dayIndex\n ? dateComponents[0]\n : dateComponents[1];\n day =\n month === dateComponents[1]\n ? dateComponents[0]\n : dateComponents[1];\n } else {\n // mm/yy\n month =\n indexes.monthIndex < indexes.yearIndex\n ? dateComponents[0]\n : dateComponents[1];\n year =\n month === dateComponents[1]\n ? dateComponents[0]\n : dateComponents[1];\n }\n }\n break;\n case 1:\n year = date;\n break;\n default:\n return;\n }\n\n if (month) {\n // Check if month is valid.\n month = this.#getMonthNumber(month);\n if (month === undefined) {\n return;\n }\n\n // Check if day is valid.\n if (day) {\n day = parseInt(day, 10);\n const fuzzyMoment = this.getMomentFromFuzzyDate({\n month: month,\n day: day,\n year: year,\n });\n if (isNaN(day) || !fuzzyMoment.isValid()) {\n return;\n }\n }\n }\n\n if (year) {\n year =\n year.toString().length === 2\n ? moment.parseTwoDigitYear(year)\n : parseInt(year.toString(), 10);\n if (isNaN(year) || year.toString().length !== 4) {\n return;\n }\n }\n\n return {\n month: month,\n day: day,\n year: year,\n };\n }\n\n public getFuzzyDateRange(\n startFuzzyDate: SkyFuzzyDate,\n endFuzzyDate: SkyFuzzyDate,\n ): SkyFuzzyDateRange {\n const start = this.getMomentFromFuzzyDate(startFuzzyDate);\n const end = this.getMomentFromFuzzyDate(endFuzzyDate);\n let days;\n let months;\n let years;\n let valid = false;\n\n if (\n startFuzzyDate &&\n startFuzzyDate.year &&\n endFuzzyDate &&\n endFuzzyDate.year\n ) {\n years = end.diff(start, 'years');\n months = end.diff(start, 'months');\n days = end.diff(start, 'days');\n valid = end.diff(start) >= 0;\n }\n\n return {\n years: years,\n months: months,\n days: days,\n startDate: start.toDate(),\n endDate: end.toDate(),\n valid: valid,\n };\n }\n\n public getCurrentFuzzyDate(): SkyFuzzyDate {\n const currentDate = moment();\n\n return {\n day: currentDate.date(),\n month: currentDate.month() + 1, // month() is 0-indexed.\n year: currentDate.year(),\n };\n }\n\n #getMostRecentLeapYear(): number {\n let leapYear = new Date().getFullYear();\n\n while (!this.#isLeapYear(leapYear)) {\n leapYear -= 1;\n }\n\n return leapYear;\n }\n\n /**\n * Returns the first separator found in the provided date format string.\n * Accepted separators: ['/', '.', '-', ' '].\n * @param dateFormat\n */\n #getDateSeparator(dateFormat: string): string | undefined {\n let returnValue: string | undefined;\n const separators = ['/', '.', '-', ' '];\n\n separators.forEach((separator) => {\n if (!returnValue && dateFormat.indexOf(separator) > 0) {\n returnValue = separator;\n }\n });\n\n return returnValue;\n }\n\n #get4DigitYearFromDateString(date: string): number | undefined {\n let year: string | undefined;\n const separator = this.#getDateSeparator(date);\n\n if (separator) {\n // Find the number value in the string that is 4 digits long.\n date.split(separator).forEach((dateComponent) => {\n if (!year && parseInt(dateComponent, 10).toString().length === 4) {\n year = dateComponent;\n }\n });\n }\n\n if (year && !isNaN(Number(year))) {\n return parseInt(year, 10);\n }\n return undefined;\n }\n\n #isLeapYear(year: number): boolean {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n #getMonthNumber(month: string): number | undefined {\n let returnValue: number;\n const monthAsNumber = parseInt(month, 10);\n\n // If the month component is a string (\"January\"), we check to see if it is a valid month\n if (isNaN(monthAsNumber)) {\n if (!moment(month, 'MMMM').isValid()) {\n return;\n }\n returnValue = parseInt(moment().month(month).format('M'), 10);\n } else {\n returnValue = monthAsNumber;\n }\n\n // Ensure that the month is between 1 and 12\n if (!(1 <= returnValue && returnValue <= 12)) {\n return;\n }\n\n return returnValue;\n }\n\n #getDefaultYear(fuzzyDate: SkyFuzzyDate): number {\n // Check if we need to return a leap year or the current year.\n if (fuzzyDate.month === 2 && fuzzyDate.day === 29) {\n return this.#getMostRecentLeapYear();\n } else {\n return new Date().getFullYear();\n }\n }\n\n #getDateComponents(date: string): string[] {\n const separator = this.#getDateSeparator(date);\n if (separator) {\n return date.split(separator);\n } else {\n return [date];\n }\n }\n\n // Returns the order of year, month, and day from the provided date format.\n #getDateFormatIndexes(dateFormat: string): SkyDateIndexes {\n dateFormat = dateFormat.toLowerCase();\n return {\n yearIndex: dateFormat.indexOf('y'),\n monthIndex: dateFormat.indexOf('m'),\n dayIndex: dateFormat.indexOf('d'),\n };\n }\n\n // Returns the index of each of the date components in the provided string (month, day, year).\n #getDateValueIndexes(date: string, dateFormat: string): SkyDateIndexes {\n const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);\n const dateComponentIndexes = [];\n if (dateFormatIndexes.yearIndex > -1) {\n dateComponentIndexes.push(dateFormatIndexes.yearIndex);\n }\n\n if (dateFormatIndexes.monthIndex > -1) {\n dateComponentIndexes.push(dateFormatIndexes.monthIndex);\n }\n\n if (dateFormatIndexes.dayIndex > -1) {\n dateComponentIndexes.push(dateFormatIndexes.dayIndex);\n }\n\n dateComponentIndexes.sort(function (a, b) {\n return a - b;\n });\n\n return {\n yearIndex: dateComponentIndexes.indexOf(dateFormatIndexes.yearIndex),\n monthIndex: dateComponentIndexes.indexOf(dateFormatIndexes.monthIndex),\n dayIndex: dateComponentIndexes.indexOf(dateFormatIndexes.dayIndex),\n };\n }\n\n /**\n * Validates the provided SkyFuzzyDate object. Valid fuzzy dates are as follows:\n * month, day, year\n * month, year\n * month, day\n * year only\n */\n #isFuzzyDateValid(fuzzyDate: SkyFuzzyDate): boolean {\n if (!fuzzyDate) {\n return false;\n }\n\n // If none of the dates part are specified, return false.\n if (!fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {\n return false;\n }\n\n // If only month is specified, return false.\n if (!fuzzyDate.day && fuzzyDate.month && !fuzzyDate.year) {\n return false;\n }\n\n // If only day is specified, return false.\n if (fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {\n return false;\n }\n\n return true;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { SkyFuzzyDate } from '../datepicker/fuzzy/fuzzy-date';\nimport { SkyFuzzyDateService } from '../datepicker/fuzzy/fuzzy-date.service';\n\n/**\n * Formats date values using two or more date tokens that represent the day, month,\n * and year. The tokens are described in the [moment.js values](https://momentjs.com/docs/#/displaying/).\n * @example\n * ```markup\n * {{ myFuzzyDate | skyFuzzyDate:'MMM Y' }}\n * {{ myFuzzyDate | skyFuzzyDate:'MMM Y':'en-CA' }}\n * ```\n */\n@Pipe({\n name: 'skyFuzzyDate',\n pure: false,\n standalone: false,\n})\nexport class SkyFuzzyDatePipe implements PipeTransform {\n #fuzzyDateService: SkyFuzzyDateService;\n\n constructor(fuzzyDateService: SkyFuzzyDateService) {\n this.#fuzzyDateService = fuzzyDateService;\n }\n\n /**\n * Transforms fuzzy date values using two or more date tokens that represent the day, month,\n * and year.\n * @param value Specifies the date value to transform.\n * @param format Specifies the format to apply to the transform. You construct the format\n * string with a two or more tokens that specify the components of date-time value. The\n * tokens are described in the [moment.js values](https://momentjs.com/docs/#/displaying/).\n * If you don't provide a format, `SkyFuzzyDatePipe` attempts to format fuzzy dates based\n * on the browser's default locale.\n * @param locale Specifies the locale code to use in the transform.\n */\n public transform(\n value: SkyFuzzyDate,\n format?: string,\n locale?: string,\n ): string {\n if (!value) {\n return '';\n }\n const fuzzyDateFormat =\n format || this.#fuzzyDateService.getLocaleShortFormat(locale);\n const fuzzyDateLocale = locale || this.#fuzzyDateService.getCurrentLocale();\n return this.#fuzzyDateService.format(\n value,\n fuzzyDateFormat,\n fuzzyDateLocale,\n );\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\n\nimport { SkyDatePipe } from './date.pipe';\nimport { SkyFuzzyDatePipe } from './fuzzy-date.pipe';\n\n@NgModule({\n declarations: [SkyDatePipe, SkyFuzzyDatePipe],\n providers: [SkyDatePipe, SkyFuzzyDatePipe],\n imports: [SkyDatetimeResourcesModule],\n exports: [SkyDatePipe, SkyFuzzyDatePipe],\n})\nexport class SkyDatePipeModule {}\n","import moment from 'moment';\n\nexport class SkyDateFormatter {\n private static defaultLocale = 'en-US';\n\n private static defaultShortDateFormat = 'MM/DD/YYYY';\n\n /**\n * Sets moment's global locale.\n */\n public static setLocale(locale: string): void {\n moment.locale(locale || SkyDateFormatter.defaultLocale);\n }\n\n /**\n * Returns the preferred short date format for the current locale.\n */\n public static getPreferredShortDateFormat(): string {\n /* istanbul ignore next */\n return (\n moment.localeData().longDateFormat('L') ||\n SkyDateFormatter.defaultShortDateFormat\n );\n }\n\n public format(date: Date, format?: string): string {\n return moment(date.getTime()).format(format);\n }\n\n public getDateFromString(\n dateString: string,\n format?: string,\n /* istanbul ignore next */\n strict = false,\n ): Date {\n let momentValue = moment(dateString, format, strict);\n\n if (!momentValue.isValid()) {\n momentValue = moment(dateString, 'YYYY-MM-DDThh:mm:ss.SZ', strict);\n }\n\n return momentValue.toDate();\n }\n\n public dateIsValid(date: Date | undefined): boolean {\n return !!(\n date &&\n date instanceof Date &&\n !isNaN(date.valueOf()) &&\n !isNaN(new Date(date).getDate())\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { SkyLiveAnnouncerService } from '@skyux/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\n\nimport { Subject, takeUntil } from 'rxjs';\n\nimport { SkyDateFormatter } from '../date-formatter';\nimport { SkyDatepickerCustomDate } from '../datepicker-custom-date';\n\nimport { SkyDayPickerContext } from './daypicker-context';\n\ntype DateComparator = (date1: Date, date2: Date) => number | undefined;\ntype KeyboardEventHandler = (key: string, event: KeyboardEvent) => void;\n\nlet nextDatepickerId = 0;\n\n/**\n * @internal\n */\n@Component({\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, SkyIconModule],\n selector: 'sky-datepicker-inner',\n templateUrl: './datepicker-calendar-inner.component.html',\n styleUrl: './datepicker-calendar-inner.component.scss',\n})\nexport class SkyDatepickerCalendarInnerComponent\n implements OnDestroy, OnInit, OnChanges\n{\n @Input()\n public customDates: SkyDatepickerCustomDate[] | undefined;\n\n @Input()\n public set startingDay(value: number | undefined) {\n this.#_startingDay = value || 0;\n }\n\n public get startingDay(): number {\n return this.#_startingDay;\n }\n\n @Input()\n public minDate: Date | undefined;\n\n @Input()\n public maxDate: Date | undefined;\n\n @Input()\n public startAtDate: Date | undefined;\n\n @Input()\n public set selectedDate(value: Date | undefined) {\n if (value && this.dateFormatter.dateIsValid(value)) {\n this.#_selectedDate = value;\n this.activeDate = value;\n } else {\n this.#_selectedDate = undefined;\n this.activeDate = new Date();\n }\n }\n\n public get selectedDate(): Date | undefined {\n return this.#_selectedDate;\n }\n\n @Output()\n public selectedDateChange: EventEmitter<Date> = new EventEmitter<Date>(\n undefined,\n );\n\n @Output()\n public calendarModeChange: EventEmitter<string> = new EventEmitter<string>();\n\n // TODO: `activeDate` is very similar to `selectedDate` and at the very least should be able to be undefined. However, this would take considerable refactoring to do and thus has been deferred.\n public activeDate = new Date();\n public activeDateId = '';\n\n public title = '';\n\n public minMode = 'day';\n public maxMode = 'year';\n public monthColLimit = 3;\n public yearColLimit = 5;\n public datepickerMode = 'day';\n public yearRange = 20;\n\n public formatDay = 'DD';\n public formatMonth = 'MMMM';\n public formatYear = 'YYYY';\n public formatDayHeader = 'dd';\n public formatDayTitle = 'MMMM YYYY';\n public formatMonthTitle = 'YYYY';\n public formatDayLabel = 'dddd, MMMM Do YYYY';\n public formatMonthLabel = 'MMMM YYYY';\n public formatYearLabel = 'YYYY';\n\n public previousLabel: string | undefined;\n public nextLabel: string | undefined;\n\n public datepickerId = `sky-datepicker-${++nextDatepickerId}`;\n\n public stepDay: any = {};\n public stepMonth: any = {};\n public stepYear: any = {};\n\n protected modes: string[] = ['day', 'month', 'year'];\n protected dateFormatter: SkyDateFormatter = new SkyDateFormatter();\n\n public refreshViewHandlerDay: (() => string) | undefined;\n public compareHandlerDay: DateComparator | undefined;\n public refreshViewHandlerMonth: (() => string) | undefined;\n public compareHandlerMonth: DateComparator | undefined;\n public refreshViewHandlerYear: (() => string) | undefined;\n public compareHandlerYear: DateComparator | undefined;\n\n public handleKeydownDay: KeyboardEventHandler | undefined;\n public handleKeydownMonth: KeyboardEventHandler | undefined;\n public handleKeydownYear: KeyboardEventHandler | undefined;\n\n public keys = [\n 'enter',\n ' ',\n 'spacebar',\n 'pageup',\n 'pagedown',\n 'end',\n 'home',\n 'arrowleft',\n 'arrowup',\n 'arrowright',\n 'arrowdown',\n ];\n\n #ngUnsubscribe = new Subject<void>();\n #prevDay: string | undefined;\n #nextDay: string | undefined;\n #prevMonth: string | undefined;\n #nextMonth: string | undefined;\n #prevYear: string | undefined;\n #nextYear: string | undefined;\n\n #_selectedDate: Date | undefined;\n #_startingDay = 0;\n\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n\n public ngOnInit(): void {\n if (this.selectedDate) {\n this.activeDate = new Date(this.selectedDate);\n } else {\n this.activeDate = this.startAtDate ?? new Date();\n }\n\n this.#resourcesSvc\n .getStrings({\n prevDay: 'skyux_datepicker_move_calendar_previous_day',\n nextDay: 'skyux_datepicker_move_calendar_next_day',\n prevMonth: 'skyux_datepicker_move_calendar_previous_month',\n nextMonth: 'skyux_datepicker_move_calendar_next_month',\n prevYear: 'skyux_datepicker_move_calendar_previous_year',\n nextYear: 'skyux_datepicker_move_calendar_next_year',\n })\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((resources) => {\n this.#prevDay = resources.prevDay;\n this.#nextDay = resources.nextDay;\n this.#prevMonth = resources.prevMonth;\n this.#nextMonth = resources.nextMonth;\n this.#prevYear = resources.prevYear;\n this.#nextYear = resources.nextYear;\n\n this.refreshView();\n });\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.refreshView();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public setCompareHandler(handler: DateComparator, type: string): void {\n if (type === 'day') {\n this.compareHandlerDay = handler;\n }\n\n if (type === 'month') {\n this.compareHandlerMonth = handler;\n }\n\n if (type === 'year') {\n this.compareHandlerYear = handler;\n }\n }\n\n public compare(\n date1: Date | undefined,\n date2: Date | undefined,\n ): number | undefined {\n if (date1 === undefined || date2 === undefined) {\n return undefined;\n }\n\n if (this.datepickerMode === 'day' && this.compareHandlerDay) {\n return this.compareHandlerDay(date1, date2);\n }\n\n if (this.datepickerMode === 'month' && this.compareHandlerMonth) {\n return this.compareHandlerMonth(date1, date2);\n }\n\n /* istanbul ignore else */\n /* sanity check */\n if (this.datepickerMode === 'year' && this.compareHandlerYear) {\n return this.compareHandlerYear(date1, date2);\n }\n\n /* istanbul ignore next */\n return undefined;\n }\n\n public setRefreshViewHandler(handler: () => string, type: string): void {\n if (type === 'day') {\n this.refreshViewHandlerDay = handler;\n }\n\n if (type === 'month') {\n this.refreshViewHandlerMonth = handler;\n }\n\n if (type === 'year') {\n this.refreshViewHandlerYear = handler;\n }\n }\n\n public refreshView(): void {\n if (this.datepickerMode === 'day' && this.refreshViewHandlerDay) {\n this.title = this.refreshViewHandlerDay();\n this.previousLabel = this.#prevDay;\n this.nextLabel = this.#nextDay;\n }\n\n if (this.datepickerMode === 'month' && this.refreshViewHandlerMonth) {\n this.title = this.refreshViewHandlerMonth();\n this.previousLabel = this.#prevMonth;\n this.nextLabel = this.#nextMonth;\n }\n\n if (this.datepickerMode === 'year' && this.refreshViewHandlerYear) {\n this.title = this.refreshViewHandlerYear();\n this.previousLabel = this.#prevYear;\n this.nextLabel = this.#nextYear;\n }\n }\n\n public setKeydownHandler(handler: KeyboardEventHandler, type: string): void {\n if (type === 'day') {\n this.handleKeydownDay = handler;\n }\n\n if (type === 'month') {\n this.handleKeydownMonth = handler;\n }\n\n if (type === 'year') {\n this.handleKeydownYear = handler;\n }\n }\n\n public handleKeydown(key: string, event: KeyboardEvent): void {\n if (this.datepickerMode === 'day' && this.handleKeydownDay) {\n this.handleKeydownDay(key, event);\n }\n\n if (this.datepickerMode === 'month' && this.handleKeydownMonth) {\n this.handleKeydownMonth(key, event);\n }\n\n if (this.datepickerMode === 'year' && this.handleKeydownYear) {\n this.handleKeydownYear(key, event);\n }\n }\n\n public dateFilter(date: Date, format: string): string {\n return this.dateFormatter.format(date, format);\n }\n\n public isActive(dateObject: SkyDayPickerContext): boolean {\n if (this.compare(dateObject.date, this.activeDate) === 0) {\n this.activeDateId = dateObject.uid;\n return true;\n }\n\n return false;\n }\n\n public onKeydown(event: KeyboardEvent): void {\n const key = event.key?.toLowerCase();\n\n if (!this.keys.includes(key) || event.shiftKey) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (key === 'enter' || key === 'spacebar' || key === ' ') {\n if (this.isDisabled(this.activeDate)) {\n return;\n }\n this.select(this.activeDate);\n } else if (event.ctrlKey && (key === 'arrowup' || key === 'arrowdown')) {\n this.toggleMode(key === 'arrowup' ? 1 : -1);\n } else {\n this.handleKeydown(key, event);\n this.refreshView();\n }\n }\n\n public createDateObject(\n date: Date,\n format: string,\n isSecondary: boolean,\n id: string,\n ): SkyDayPickerContext {\n const customDateMatch = this.#getCustomDate(date);\n\n const dateObject: SkyDayPickerContext = {\n date: new Date(date.getFullYear(), date.getMonth(), date.getDate()),\n label: this.dateFilter(date, format),\n selected:\n !!this.selectedDate && this.compare(date, this.selectedDate) === 0,\n disabled: this.isDisabled(date),\n current: this.compare(date, new Date()) === 0,\n secondary: isSecondary,\n uid: id,\n keyDate: customDateMatch ? customDateMatch.keyDate : undefined,\n keyDateText: customDateMatch ? customDateMatch.keyDateText : [],\n };\n\n return dateObject;\n }\n\n public createCalendarRows(\n dates: SkyDayPickerContext[],\n size: number,\n ): SkyDayPickerContext[][] {\n const rows: SkyDayPickerContext[][] = [];\n while (dates.length > 0) {\n rows.push(dates.splice(0, size));\n }\n return rows;\n }\n\n /*\n This is ensures that no strangeness happens when converting a date to local time.\n */\n public fixTimeZone(date: Date): Date {\n const newDate = new Date(date);\n newDate.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n\n return newDate;\n }\n\n public selectCalendar(event: Event, date: Date, closePicker = false): void {\n if (!closePicker) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.select(date);\n }\n\n public select(date: Date, isManual = true): void {\n this.activeDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n );\n\n /*\n Only actually select date if in minMode (day picker mode).\n Otherwise, just change the active view for the datepicker.\n */\n if (this.datepickerMode === this.minMode) {\n this.selectedDate = new Date(this.activeDate);\n if (isManual) {\n this.selectedDateChange.emit(this.selectedDate);\n }\n } else {\n this.datepickerMode =\n this.modes[this.modes.indexOf(this.datepickerMode) - 1];\n this.calendarModeChange.emit(this.datepickerMode);\n }\n\n this.refreshView();\n }\n\n public moveCalendar(event: Event, direction: number): void {\n event.preventDefault();\n event.stopPropagation();\n this.move(direction);\n }\n\n public move(direction: number): void {\n let expectedStep: any;\n if (this.datepickerMode === 'day') {\n expectedStep = this.stepDay;\n }\n\n if (this.datepickerMode === 'month') {\n expectedStep = this.stepMonth;\n }\n\n if (this.datepickerMode === 'year') {\n expectedStep = this.stepYear;\n }\n\n /* istanbul ignore else */\n /* sanity check */\n if (expectedStep) {\n const year =\n this.activeDate.getFullYear() + direction * (expectedStep.years || 0);\n const month =\n this.activeDate.getMonth() + direction * (expectedStep.months || 0);\n\n this.activeDate = new Date(year, month, 1);\n\n this.refreshView();\n }\n }\n\n public toggleModeCalendar(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.toggleMode(1);\n }\n\n public toggleMode(direction: number): void {\n /*istanbul ignore next */\n direction = direction || 1;\n\n /* istanbul ignore else */\n /* sanity check */\n if (\n !(direction === 1 && this.datepickerMode === this.maxMode) &&\n !(this.datepickerMode === this.minMode && direction === -1)\n ) {\n this.datepickerMode =\n this.modes[this.modes.indexOf(this.datepickerMode) + direction];\n this.calendarModeChange.emit(this.datepickerMode);\n this.refreshView();\n }\n }\n\n public announceDate(date: Date, format: string): void {\n const caption = this.dateFilter(date, format);\n this.#liveAnnouncerSvc.announce(caption);\n }\n\n /**\n * Date is disabled if it meets any of these criteria:\n * 1. Date falls outside the min or max dates set by the SkyDatepickerConfigService.\n * 2. Date is marked as disabled in the customDates array.\n */\n protected isDisabled(date: Date): boolean {\n const customDate = this.#getCustomDate(date);\n const minDateCompare = this.compare(date, this.minDate);\n const maxDateCompare = this.compare(date, this.maxDate);\n\n return (\n (minDateCompare !== undefined && minDateCompare < 0) ||\n (maxDateCompare !== undefined && maxDateCompare > 0) ||\n !!customDate?.disabled\n );\n }\n\n #getCustomDate(date: Date): SkyDatepickerCustomDate | undefined {\n if (this.customDates) {\n return this.customDates.find((customDate: SkyDatepickerCustomDate) => {\n return customDate.date.getTime() === date.getTime();\n });\n }\n return undefined;\n }\n}\n","@if (datepickerMode) {\n <div class=\"sky-datepicker-calendar-inner\">\n <div class=\"sky-datepicker-calendar-header\">\n <span class=\"sky-datepicker-header-left\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-btn-previous\"\n [attr.aria-label]=\"previousLabel\"\n (click)=\"moveCalendar($event, -1)\"\n >\n <sky-icon class=\"sky-datepicker-chevron\" iconName=\"chevron-left\" />\n </button>\n </span>\n <span class=\"sky-datepicker-header-center\">\n <!-- display: inline -->\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-calendar-title\"\n [id]=\"datepickerId + '-title'\"\n [disabled]=\"datepickerMode === maxMode\"\n [ngClass]=\"{\n 'sky-btn-disabled': datepickerMode === maxMode\n }\"\n (click)=\"toggleModeCalendar($event)\"\n >{{ title }}</button\n >\n </span>\n <span class=\"sky-datepicker-header-right\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-btn-next\"\n [attr.aria-label]=\"nextLabel\"\n (click)=\"moveCalendar($event, 1)\"\n >\n <sky-icon class=\"sky-datepicker-chevron\" iconName=\"chevron-right\" />\n </button>\n </span>\n </div>\n <ng-content />\n </div>\n}\n","import { Injectable } from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * Manages the state of the calendar picker.\n * @internal\n */\n@Injectable()\nexport class SkyDatepickerCalendarService {\n /**\n * Whether a key date popover is currently displayed.\n * Useful for communicating across all daypicker siblings when a popover is displayed.\n */\n public keyDatePopoverStream: Subject<SkyDayPickerContext | undefined> =\n new Subject<SkyDayPickerContext | undefined>();\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\n\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\n\n/**\n * Formats date values according to formatting rules.\n * @example\n * ```markup\n * {{ myDate | skyDatepickerCalendarLabel }}\n * {{ myDate | skyDatepickerCalendarLabel:'YYYY' }}\n * ```\n * @internal\n */\n@Pipe({\n name: 'skyDatepickerCalendarLabel',\n standalone: true,\n})\nexport class SkyDatepickerCalendarLabelPipe implements PipeTransform {\n #datepicker = inject(SkyDatepickerCalendarInnerComponent);\n #defaultFormat = this.#datepicker.formatDayLabel;\n\n /**\n * Transforms a date value using locale and format rules.\n * @param value Specifies the date value to transform.\n * @param format Specifies the format to apply to the transform. The format string is\n * constructed by a series of symbols that represent date-time values.\n */\n public transform(value: unknown, format?: string): string {\n let formattedValue = '';\n\n if (value && value instanceof Date) {\n formattedValue = this.#datepicker.dateFilter(\n value,\n format || this.#defaultFormat,\n );\n }\n\n return formattedValue;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDatepickerCalendarLabelPipe } from './datepicker-calendar-label.pipe';\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * @internal\n */\n@Component({\n imports: [CommonModule, SkyDatepickerCalendarLabelPipe],\n selector: 'sky-daypicker-button',\n styleUrl: './daypicker-button.component.scss',\n templateUrl: 'daypicker-button.component.html',\n})\nexport class SkyDayPickerButtonComponent {\n /**\n * The date this picker button will represent on the calendar.\n */\n @Input()\n public date: SkyDayPickerContext | undefined;\n\n constructor(public datepicker: SkyDatepickerCalendarInnerComponent) {}\n}\n","@if (date) {\n <button\n class=\"sky-btn sky-btn-sm sky-btn-default sky-datepicker-btn-date\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"date.disabled\"\n [ngClass]=\"{\n 'sky-datepicker-btn-selected': date.selected,\n 'sky-btn-disabled': date.disabled,\n 'sky-btn-active': datepicker.isActive(date),\n 'sky-datepicker-btn-disabled': date.disabled,\n 'sky-datepicker-btn-key-date': date.keyDate\n }\"\n [attr.aria-label]=\"date.date | skyDatepickerCalendarLabel\"\n (click)=\"datepicker.selectCalendar($event, date.date, true)\"\n >\n <span [ngClass]=\"{ 'sky-datepicker-secondary': date.secondary }\">\n {{ date.label }}\n </span>\n </button>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n SkyPopoverMessage,\n SkyPopoverMessageType,\n SkyPopoverModule,\n} from '@skyux/popovers';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDatepickerCalendarService } from './datepicker-calendar.service';\nimport { SkyDayPickerButtonComponent } from './daypicker-button.component';\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, SkyDayPickerButtonComponent, SkyPopoverModule],\n selector: 'sky-daypicker-cell',\n templateUrl: './daypicker-cell.component.html',\n})\nexport class SkyDayPickerCellComponent {\n readonly #calendarSvc = inject(SkyDatepickerCalendarService);\n readonly #datepicker = inject(SkyDatepickerCalendarInnerComponent);\n\n /**\n * Whether the active date has been changed.\n */\n public activeDateHasChanged = input(false);\n\n /**\n * The date this picker cell will represent on the calendar.\n */\n public date = input<SkyDayPickerContext | undefined>();\n\n protected ariaLabel = computed(() => {\n const date = this.date();\n\n if (date?.keyDateText) {\n return date.keyDateText.join(', ');\n }\n\n /* istanbul ignore next: safety check */\n return '';\n });\n\n protected hasTooltip = computed(() => {\n const date = this.date();\n\n return (\n date &&\n date.keyDate &&\n date.keyDateText &&\n date.keyDateText.length > 0 &&\n date.keyDateText[0].length > 0\n );\n });\n\n protected popoverController = new BehaviorSubject<SkyPopoverMessage>({});\n\n constructor() {\n // show the tooltip if this is the active date and is not the\n // initial active date (activeDateHasChanged)\n effect(() => {\n const activeDateHasChanged = this.activeDateHasChanged();\n const hasTooltip = this.hasTooltip();\n const date = this.date();\n\n if (\n date &&\n activeDateHasChanged &&\n hasTooltip &&\n this.#datepicker.isActive(date)\n ) {\n this.#showTooltip();\n }\n });\n\n // Hide this cell's tooltip if another cell opens a tooltip.\n this.#calendarSvc.keyDatePopoverStream\n .pipe(takeUntilDestroyed())\n .subscribe((popoverDate) => {\n if (!popoverDate || popoverDate?.uid !== this.date()?.uid) {\n this.#hideTooltip();\n }\n });\n }\n\n protected onDayMouseenter(): void {\n if (this.hasTooltip()) {\n this.#showTooltip();\n this.#calendarSvc.keyDatePopoverStream.next(this.date());\n }\n }\n\n protected onDayMouseleave(): void {\n if (this.hasTooltip()) {\n this.#hideTooltip();\n this.#calendarSvc.keyDatePopoverStream.next(undefined);\n }\n }\n\n #hideTooltip(): void {\n this.popoverController.next({ type: SkyPopoverMessageType.Close });\n }\n\n #showTooltip(): void {\n this.popoverController.next({ type: SkyPopoverMessageType.Open });\n }\n}\n","@if (hasTooltip()) {\n <div\n class=\"sky-daypicker-cell\"\n skyPopoverPlacement=\"left\"\n [attr.aria-label]=\"ariaLabel()\"\n [skyPopover]=\"dayInfoPopover\"\n [skyPopoverMessageStream]=\"popoverController\"\n (mouseenter)=\"onDayMouseenter()\"\n (mouseleave)=\"onDayMouseleave()\"\n >\n <ng-container *ngTemplateOutlet=\"daypickerButtonTemplateRef\" />\n <sky-popover #dayInfoPopover>\n @for (text of date()?.keyDateText; track text) {\n <div>\n {{ text }}\n </div>\n }\n </sky-popover>\n </div>\n} @else {\n <div\n class=\"sky-daypicker-cell\"\n (mouseenter)=\"onDayMouseenter()\"\n (mouseleave)=\"onDayMouseleave()\"\n >\n <ng-container *ngTemplateOutlet=\"daypickerButtonTemplateRef\" />\n </div>\n}\n\n<ng-template #daypickerButtonTemplateRef>\n <sky-daypicker-button [date]=\"date()\" />\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { SkyWaitModule } from '@skyux/indicators';\n\nimport { Subject } from 'rxjs';\n\nimport { SkyDatepickerCustomDate } from '../datepicker-custom-date';\n\nimport { SkyDatepickerCalendarChange } from './datepicker-calendar-change';\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDayPickerCellComponent } from './daypicker-cell.component';\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * Helper interface to compare date ranges.\n * @internal\n */\ninterface SkyDateRange {\n endDate: Date;\n startDate: Date;\n}\n\n/**\n * @internal\n */\n@Component({\n imports: [SkyDayPickerCellComponent, SkyWaitModule],\n selector: 'sky-daypicker',\n templateUrl: 'daypicker.component.html',\n})\nexport class SkyDayPickerComponent implements OnDestroy, OnInit {\n @Input()\n public set customDates(value: SkyDatepickerCustomDate[] | undefined) {\n /* istanbul ignore else */\n if (value) {\n this.#applyCustomDates(value, this.rows);\n }\n }\n\n @Output()\n public calendarDateRangeChange = new EventEmitter<\n SkyDatepickerCalendarChange | undefined\n >();\n\n @Input()\n public isWaiting: boolean | undefined = false;\n\n public activeDateHasChanged = false;\n public labels: any[] = [];\n public title = '';\n public rows: SkyDayPickerContext[][] = [];\n public weekNumbers: number[] = [];\n public datepicker: SkyDatepickerCalendarInnerComponent;\n public CURRENT_THEME_TEMPLATE: any;\n\n #daysInMonth: number[] = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n #initialDate: number | undefined;\n #ngUnsubscribe = new Subject<void>();\n\n constructor(datepicker: SkyDatepickerCalendarInnerComponent) {\n this.datepicker = datepicker;\n }\n\n public ngOnInit(): void {\n this.datepicker.stepDay = { months: 1 };\n this.#initialDate = this.datepicker.activeDate.getDate();\n\n this.datepicker.setRefreshViewHandler(() => this.#refreshDayView(), 'day');\n\n this.datepicker.setCompareHandler(this.#compareDays, 'day');\n\n this.datepicker.setKeydownHandler((key: string, event: KeyboardEvent) => {\n this.#keydownDays(key, event);\n }, 'day');\n\n this.datepicker.refreshView();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n protected getDates(startDate: Date, n: number): Date[] {\n const dates: Date[] = new Array(n);\n let current = new Date(startDate.getTime());\n let i = 0;\n let date: Date;\n while (i < n) {\n date = new Date(current.getTime());\n date = this.datepicker.fixTimeZone(date);\n dates[i++] = date;\n current = new Date(\n current.getFullYear(),\n current.getMonth(),\n current.getDate() + 1,\n );\n }\n return dates;\n }\n\n #compareDays(date1: Date, date2: Date): number {\n const d1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const d2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n return d1.getTime() - d2.getTime();\n }\n\n #refreshDayView(): string {\n const year = this.datepicker.activeDate.getFullYear();\n const month = this.datepicker.activeDate.getMonth();\n const firstDayOfMonth = new Date(year, month, 1);\n const difference = this.datepicker.startingDay - firstDayOfMonth.getDay();\n const numDisplayedFromPreviousMonth =\n difference > 0 ? 7 - difference : -difference;\n const firstDate = new Date(firstDayOfMonth.getTime());\n\n if (this.datepicker.activeDate.getDate() !== this.#initialDate) {\n this.activeDateHasChanged = true;\n }\n\n /* istanbul ignore else */\n /* sanity check */\n if (numDisplayedFromPreviousMonth > 0) {\n firstDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n\n // 42 is the number of days on a six-week calendar\n const days: Date[] = this.getDates(firstDate, 42);\n const pickerDates: SkyDayPickerContext[] = [];\n for (let i = 0; i < 42; i++) {\n const _dateObject = this.datepicker.createDateObject(\n days[i],\n this.datepicker.formatDay,\n days[i].getMonth() !== month,\n this.datepicker.datepickerId + '-' + i,\n );\n pickerDates[i] = _dateObject;\n }\n\n this.labels = [];\n for (let j = 0; j < 7; j++) {\n this.labels[j] = {};\n this.labels[j].abbr = this.datepicker.dateFilter(\n pickerDates[j].date,\n this.datepicker.formatDayHeader,\n );\n this.labels[j].full = this.datepicker.dateFilter(\n pickerDates[j].date,\n 'EEEE',\n );\n }\n\n const oldDateRange = this.#getDateRange(this.rows);\n this.rows = this.datepicker.createCalendarRows(pickerDates, 7);\n const newDateRange = this.#getDateRange(this.rows);\n\n if (!this.#dateRangeRowsAreEqual(oldDateRange, newDateRange)) {\n // Safety check\n /* istanbul ignore else */\n if (newDateRange) {\n this.calendarDateRangeChange.next({\n startDate: newDateRange.startDate,\n endDate: newDateRange.endDate,\n });\n } else {\n this.calendarDateRangeChange.next(undefined);\n }\n }\n\n return this.datepicker.dateFilter(\n this.datepicker.activeDate,\n this.datepicker.formatDayTitle,\n );\n }\n\n #keydownDays(key: string, event: KeyboardEvent): void {\n let date = this.datepicker.activeDate.getDate();\n /* istanbul ignore else */\n /* sanity check */\n if (key === 'arrowleft') {\n date = date - 1;\n } else if (key === 'arrowup') {\n date = date - 7;\n } else if (key === 'arrowright') {\n date = date + 1;\n } else if (key === 'arrowdown') {\n date = date + 7;\n } else if (key === 'pageup' || key === 'pagedown') {\n const month =\n this.datepicker.activeDate.getMonth() + (key === 'pageup' ? -1 : 1);\n this.datepicker.activeDate.setMonth(month, 1);\n date = Math.min(\n this.#getDaysInMonth(\n this.datepicker.activeDate.getFullYear(),\n this.datepicker.activeDate.getMonth(),\n ),\n date,\n );\n } else if (key === 'home') {\n date = 1;\n } else if (key === 'end') {\n date = this.#getDaysInMonth(\n this.datepicker.activeDate.getFullYear(),\n this.datepicker.activeDate.getMonth(),\n );\n }\n this.datepicker.activeDate.setDate(date);\n this.datepicker.announceDate(\n this.datepicker.activeDate,\n this.datepicker.formatDayLabel,\n );\n }\n\n #getDaysInMonth(year: number, month: number): number {\n return month === 1 &&\n year % 4 === 0 &&\n (year % 400 === 0 || year % 100 !== 0)\n ? 29\n : this.#daysInMonth[month];\n }\n\n /**\n * Applies custom date properties to the existing dates displayed in the calendar.\n */\n #applyCustomDates(\n customDates: SkyDatepickerCustomDate[],\n dateRows: SkyDayPickerContext[][],\n ): void {\n let date: SkyDayPickerContext;\n let newDate: SkyDayPickerContext;\n let dateIndex: number;\n\n /* istanbul ignore else */\n if (customDates && dateRows) {\n customDates.forEach((customDate) => {\n dateIndex = -1;\n dateRows.forEach((row) => {\n if (dateIndex === -1) {\n dateIndex = row.findIndex((d) => {\n return d.date.getTime() === customDate.date.getTime();\n });\n if (dateIndex > -1) {\n date = row[dateIndex];\n // Replace the date with a new instance so the display gets updated.\n newDate = {\n current: date.current,\n date: date.date,\n disabled: !!date.disabled || !!customDate.disabled,\n keyDate: !!customDate.keyDate || !!date.keyDate,\n keyDateText: customDate.keyDateText || date.keyDateText,\n label: date.label,\n secondary: date.secondary,\n selected: date.selected,\n uid: date.uid,\n };\n row[dateIndex] = newDate;\n }\n }\n });\n });\n }\n }\n\n #dateRangeRowsAreEqual(\n rangeA?: SkyDateRange,\n rangeB?: SkyDateRange,\n ): boolean | undefined {\n /* istanbul ignore if */\n if (!rangeA && !rangeB) {\n return true;\n } else if (rangeA && rangeB) {\n return (\n this.#compareDays(rangeA.startDate, rangeB.startDate) === 0 &&\n this.#compareDays(rangeA.endDate, rangeB.endDate) === 0\n );\n } else {\n return false;\n }\n }\n\n #getDateRange(rows: SkyDayPickerContext[][]): SkyDateRange | undefined {\n /* istanbul ignore else */\n if (rows && rows.length > 0) {\n return {\n startDate: rows[0][0].date,\n endDate: rows[rows.length - 1][rows[rows.length - 1].length - 1].date,\n };\n }\n return undefined;\n }\n}\n","<table\n class=\"sky-daypicker-table\"\n role=\"grid\"\n [attr.aria-labelledby]=\"datepicker.datepickerId + '-title'\"\n>\n <thead>\n <tr>\n @for (label of labels; track label.full) {\n <th scope=\"col\" class=\"sky-datepicker-center sky-datepicker-weekdays\">\n <!-- display: inline -->\n <span\n class=\"sky-datepicker-weekday-text\"\n [attr.aria-label]=\"label.full\"\n >{{ label.abbr }}</span\n >\n </th>\n }\n </tr>\n </thead>\n <tbody>\n <!-- Wait indicator for async custom date stream -->\n <sky-wait [isWaiting]=\"isWaiting\" />\n @for (row of rows; track $index) {\n <tr role=\"row\">\n @for (date of row; track date.uid) {\n <td class=\"sky-datepicker-center\" role=\"gridcell\" [id]=\"date.uid\">\n <sky-daypicker-cell\n [activeDateHasChanged]=\"activeDateHasChanged\"\n [date]=\"date\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\n\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDatepickerCalendarLabelPipe } from './datepicker-calendar-label.pipe';\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * @internal\n */\n@Component({\n imports: [CommonModule, SkyDatepickerCalendarLabelPipe],\n selector: 'sky-monthpicker',\n templateUrl: 'monthpicker.component.html',\n})\nexport class SkyMonthPickerComponent implements OnInit {\n public datepicker: SkyDatepickerCalendarInnerComponent;\n\n public rows: SkyDayPickerContext[][] = [];\n\n public title = '';\n\n constructor(datepicker: SkyDatepickerCalendarInnerComponent) {\n this.datepicker = datepicker;\n }\n\n public ngOnInit(): void {\n this.datepicker.stepMonth = {\n years: 1,\n };\n\n this.datepicker.setRefreshViewHandler(\n () => this.#refreshMonthView(),\n 'month',\n );\n\n this.datepicker.setCompareHandler(this.#compareMonth, 'month');\n\n this.datepicker.refreshView();\n\n this.datepicker.setKeydownHandler((key: string, event: KeyboardEvent) => {\n this.#keydownMonths(key, event);\n }, 'month');\n }\n\n #compareMonth(date1: Date, date2: Date): number {\n const d1 = new Date(date1.getFullYear(), date1.getMonth());\n const d2 = new Date(date2.getFullYear(), date2.getMonth());\n return d1.getTime() - d2.getTime();\n }\n\n #refreshMonthView(): string {\n const months = new Array<SkyDayPickerContext>(12);\n const year: number = this.datepicker.activeDate.getFullYear();\n let date: Date;\n\n for (let i = 0; i < 12; i++) {\n date = new Date(year, i, 1);\n date = this.datepicker.fixTimeZone(date);\n months[i] = this.datepicker.createDateObject(\n date,\n this.datepicker.formatMonth,\n false,\n this.datepicker.datepickerId + '-' + i,\n );\n }\n\n this.rows = this.datepicker.createCalendarRows(\n months,\n this.datepicker.monthColLimit,\n );\n\n return this.datepicker.dateFilter(\n this.datepicker.activeDate,\n this.datepicker.formatMonthTitle,\n );\n }\n\n #keydownMonths(key: string, event: KeyboardEvent): void {\n let date = this.datepicker.activeDate.getMonth();\n\n /* istanbul ignore else */\n /* sanity check */\n if (key === 'arrowleft') {\n date = date - 1;\n } else if (key === 'arrowup') {\n date = date - this.datepicker.monthColLimit;\n } else if (key === 'arrowright') {\n date = date + 1;\n } else if (key === 'arrowdown') {\n date = date + this.datepicker.monthColLimit;\n } else if (key === 'pageup' || key === 'pagedown') {\n const year =\n this.datepicker.activeDate.getFullYear() + (key === 'pageup' ? -1 : 1);\n this.datepicker.activeDate.setFullYear(year);\n } else if (key === 'home') {\n date = 0;\n } else if (key === 'end') {\n date = 11;\n }\n this.datepicker.activeDate.setMonth(date);\n this.datepicker.announceDate(\n this.datepicker.activeDate,\n this.datepicker.formatMonthLabel,\n );\n }\n}\n","<table role=\"grid\">\n <tbody>\n @for (row of rows; track $index) {\n <tr>\n @for (date of row; track date.uid) {\n <td class=\"text-center\" role=\"gridcell\" [id]=\"date.uid\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-datepicker-btn-date\"\n tabindex=\"-1\"\n [ngClass]=\"{\n 'sky-datepicker-btn-selected': date.selected,\n 'sky-btn-disabled': date.disabled,\n 'sky-btn-active': datepicker.isActive(date)\n }\"\n [attr.aria-label]=\"\n date.date\n | skyDatepickerCalendarLabel: datepicker.formatMonthLabel\n \"\n [disabled]=\"date.disabled\"\n (click)=\"datepicker.selectCalendar($event, date.date)\"\n >\n <span [ngClass]=\"{ 'sky-datepicker-current': date.current }\">{{\n date.label\n }}</span>\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\n\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDatepickerCalendarLabelPipe } from './datepicker-calendar-label.pipe';\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * @internal\n */\n@Component({\n imports: [CommonModule, SkyDatepickerCalendarLabelPipe],\n selector: 'sky-yearpicker',\n templateUrl: 'yearpicker.component.html',\n})\nexport class SkyYearPickerComponent implements OnInit {\n public datepicker: SkyDatepickerCalendarInnerComponent;\n\n public rows: SkyDayPickerContext[][] = [];\n\n public title = '';\n\n constructor(datepicker: SkyDatepickerCalendarInnerComponent) {\n this.datepicker = datepicker;\n }\n\n public ngOnInit(): void {\n this.datepicker.stepYear = { years: this.datepicker.yearRange };\n\n this.datepicker.setRefreshViewHandler(\n () => this.#refreshYearView(),\n 'year',\n );\n\n this.datepicker.setCompareHandler(this.#compareYears, 'year');\n\n this.datepicker.setKeydownHandler((key: string, event: KeyboardEvent) => {\n this.#keydownYears(key, event);\n }, 'year');\n\n this.datepicker.refreshView();\n }\n\n protected getStartingYear(year: number): number {\n return (\n Math.floor((year - 1) / this.datepicker.yearRange) *\n this.datepicker.yearRange +\n 1\n );\n }\n\n #compareYears(date1: Date, date2: Date): number {\n return date1.getFullYear() - date2.getFullYear();\n }\n\n #refreshYearView(): string {\n const years = new Array<SkyDayPickerContext>(this.datepicker.yearRange);\n let date: Date;\n const start = this.getStartingYear(\n this.datepicker.activeDate.getFullYear(),\n );\n\n for (let i = 0; i < this.datepicker.yearRange; i++) {\n date = new Date(this.datepicker.activeDate);\n date.setFullYear(start + i, 0, 1);\n\n years[i] = this.datepicker.createDateObject(\n date,\n this.datepicker.formatYear,\n false,\n this.datepicker.datepickerId + '-' + i,\n );\n }\n\n const newTitle = [\n years[0].label,\n years[this.datepicker.yearRange - 1].label,\n ].join(' - ');\n this.rows = this.datepicker.createCalendarRows(\n years,\n this.datepicker.yearColLimit,\n );\n\n return newTitle;\n }\n\n #keydownYears(key: string, event: KeyboardEvent): void {\n let date = this.datepicker.activeDate.getFullYear();\n\n /* istanbul ignore else */\n /* sanity check */\n if (key === 'arrowleft') {\n date = date - 1;\n } else if (key === 'arrowup') {\n date = date - this.datepicker.yearColLimit;\n } else if (key === 'arrowright') {\n date = date + 1;\n } else if (key === 'arrowdown') {\n date = date + this.datepicker.yearColLimit;\n } else if (key === 'pageup' || key === 'pagedown') {\n date += (key === 'pageup' ? -1 : 1) * this.datepicker.yearRange;\n } else if (key === 'home') {\n date = this.getStartingYear(this.datepicker.activeDate.getFullYear());\n } else if (key === 'end') {\n date =\n this.getStartingYear(this.datepicker.activeDate.getFullYear()) +\n this.datepicker.yearRange -\n 1;\n }\n this.datepicker.activeDate.setFullYear(date);\n this.datepicker.announceDate(\n this.datepicker.activeDate,\n this.datepicker.formatYearLabel,\n );\n }\n}\n","<table role=\"grid\">\n <tbody>\n @for (row of rows; track $index) {\n <tr>\n @for (date of row; track date.uid) {\n <td class=\"sky-datepicker-row\" role=\"gridcell\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-datepicker-btn-date\"\n tabindex=\"-1\"\n [ngClass]=\"{\n 'sky-datepicker-btn-selected': date.selected,\n 'sky-btn-disabled': date.disabled,\n 'sky-btn-active': datepicker.isActive(date)\n }\"\n [attr.aria-label]=\"\n date.date\n | skyDatepickerCalendarLabel: datepicker.formatYearLabel\n \"\n [disabled]=\"date.disabled\"\n (click)=\"datepicker.selectCalendar($event, date.date)\"\n >\n <span [ngClass]=\"{ 'sky-datepicker-current': date.current }\">{{\n date.label\n }}</span>\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyDatepickerConfigService {\n /**\n * The date format for the input.\n * @default \"MM/DD/YYYY\"\n */\n public dateFormat: string | undefined;\n\n /**\n * The latest selectable date that is available in the calendar.\n */\n public maxDate: Date | undefined;\n\n /**\n * The earliest selectable date that is available in the calendar.\n */\n public minDate: Date | undefined;\n\n /**\n * The date to open the calendar to initially.\n * @default the current date\n */\n public startAtDate: Date | undefined;\n\n /**\n * The starting day of the week in the calendar,\n * where `0` sets the starting day to Sunday.\n * @default 0\n */\n public startingDay = 0;\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport { SkyDateFormatter } from '../date-formatter';\nimport { SkyDatepickerConfigService } from '../datepicker-config.service';\nimport { SkyDatepickerCustomDate } from '../datepicker-custom-date';\n\nimport { SkyDatepickerCalendarChange } from './datepicker-calendar-change';\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDayPickerComponent } from './daypicker.component';\nimport { SkyMonthPickerComponent } from './monthpicker.component';\nimport { SkyYearPickerComponent } from './yearpicker.component';\n\n/**\n * @internal\n */\n@Component({\n imports: [\n SkyDatepickerCalendarInnerComponent,\n SkyDayPickerComponent,\n SkyMonthPickerComponent,\n SkyYearPickerComponent,\n ],\n selector: 'sky-datepicker-calendar',\n styleUrl: './datepicker-calendar.component.scss',\n templateUrl: './datepicker-calendar.component.html',\n})\nexport class SkyDatepickerCalendarComponent {\n @Input()\n public customDates: SkyDatepickerCustomDate[] | undefined;\n\n @Input()\n public isDaypickerWaiting: boolean | undefined;\n\n @Input()\n public minDate: Date | undefined;\n\n @Input()\n public maxDate: Date | undefined;\n\n @Input()\n public startAtDate: Date | undefined;\n\n /** currently selected date */\n @Input()\n public selectedDate: Date | undefined;\n\n /** starting day of the week from 0-6 (0=Sunday, ..., 6=Saturday) */\n @Input()\n public set startingDay(start: number | undefined) {\n this.#_startingDay = start ?? 0;\n }\n\n public get startingDay(): number {\n return this.#_startingDay;\n }\n\n @Output()\n public calendarDateRangeChange = new EventEmitter<\n SkyDatepickerCalendarChange | undefined\n >();\n\n @Output()\n public calendarModeChange = new EventEmitter<string>();\n\n @Output()\n public selectedDateChange = new EventEmitter<Date>(undefined);\n\n @ViewChild(SkyDatepickerCalendarInnerComponent, {\n read: SkyDatepickerCalendarInnerComponent,\n static: true,\n })\n public datepicker: SkyDatepickerCalendarInnerComponent | undefined;\n\n protected _now: Date = new Date();\n\n #formatter = new SkyDateFormatter();\n\n #_startingDay = 0;\n\n #config: SkyDatepickerConfigService;\n\n constructor(config: SkyDatepickerConfigService) {\n this.#config = config;\n this.configureOptions();\n }\n\n public configureOptions(): void {\n Object.assign(this, this.#config);\n }\n\n public onCalendarDateRangeChange(\n event: SkyDatepickerCalendarChange | undefined,\n ): void {\n this.calendarDateRangeChange.next(event);\n }\n\n public onCalendarModeChange(event: string): void {\n this.calendarModeChange.emit(event);\n }\n\n public onSelectedDateChange(event: Date): void {\n this.selectedDateChange.emit(event);\n }\n\n public writeValue(value: Date | undefined): void {\n if (\n value !== undefined &&\n this.#formatter.dateIsValid(value) &&\n this.selectedDate !== undefined &&\n this.datepicker?.compareHandlerDay &&\n this.datepicker.compareHandlerDay(value, this.selectedDate) === 0\n ) {\n return;\n }\n\n if (value && this.#formatter.dateIsValid(value)) {\n this.selectedDate = value;\n this.datepicker?.select(value, false);\n } else {\n this.selectedDate = this.startAtDate ?? new Date();\n this.datepicker?.select(this.startAtDate ?? new Date(), false);\n }\n }\n}\n","<div class=\"sky-datepicker-calendar\">\n <sky-datepicker-inner\n [customDates]=\"customDates\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [startAtDate]=\"startAtDate\"\n [selectedDate]=\"selectedDate\"\n [startingDay]=\"startingDay\"\n (calendarModeChange)=\"onCalendarModeChange($event)\"\n (selectedDateChange)=\"onSelectedDateChange($event)\"\n >\n <div\n class=\"sky-datepicker-calendar-table-container\"\n autofocus\n tabindex=\"0\"\n (keydown)=\"datepicker?.onKeydown($event)\"\n >\n @if (datepicker?.datepickerMode === 'day') {\n <sky-daypicker\n [customDates]=\"customDates\"\n [isWaiting]=\"isDaypickerWaiting\"\n (calendarDateRangeChange)=\"onCalendarDateRangeChange($event)\"\n />\n } @else if (datepicker?.datepickerMode === 'month') {\n <sky-monthpicker />\n } @else if (datepicker?.datepickerMode === 'year') {\n <sky-yearpicker />\n }\n </div>\n </sky-datepicker-inner>\n</div>\n","import { DestroyRef, Injectable, OnDestroy, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { Observable, Subject, fromEvent } from 'rxjs';\n\nimport { SkyDatepickerComponent } from './datepicker.component';\n\n/**\n * Handles interactions between the datepicker host component and the input\n * directive.\n * @internal\n */\n@Injectable()\nexport class SkyDatepickerHostService implements OnDestroy {\n readonly #destroyRef = inject(DestroyRef);\n\n /**\n * Fires when the picker or trigger button loses focus.\n */\n public get focusout(): Observable<FocusEvent> {\n return this.#focusoutObs;\n }\n\n #focusout = new Subject<FocusEvent>();\n #focusoutObs = this.#focusout.asObservable();\n #host: SkyDatepickerComponent | undefined;\n #isInitialized = false;\n\n public ngOnDestroy(): void {\n this.#focusout.complete();\n }\n\n public init(host: SkyDatepickerComponent): void {\n if (this.#isInitialized) {\n throw new Error('The datepicker host service is already initialized.');\n }\n\n this.#host = host;\n this.#isInitialized = true;\n\n const triggerButtonEl: Element | undefined =\n this.#host.triggerButtonRef?.nativeElement;\n\n if (triggerButtonEl instanceof Element) {\n fromEvent<FocusEvent>(triggerButtonEl, 'focusout')\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe((evt) => {\n this.#handleFocusoutEvent(evt);\n });\n }\n }\n\n public isFocusingDatepicker(evt: FocusEvent): boolean {\n const buttonEl = this.#host?.triggerButtonRef?.nativeElement;\n\n return buttonEl instanceof Element && buttonEl === evt.relatedTarget;\n }\n\n #handleFocusoutEvent(evt: FocusEvent): void {\n if (this.#host) {\n const relatedTarget = evt.relatedTarget;\n const overlayEl: HTMLElement | undefined =\n this.#host.getPickerRef()?.nativeElement;\n\n const isFocusingOverlay =\n relatedTarget instanceof Element &&\n !!overlayEl?.contains(relatedTarget);\n\n if (relatedTarget === null || !isFocusingOverlay) {\n this.#focusout.next(evt);\n }\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n inject,\n output,\n} from '@angular/core';\nimport {\n SKY_STACKING_CONTEXT,\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyAppFormat,\n SkyCoreAdapterService,\n SkyOverlayInstance,\n SkyOverlayService,\n SkyStackingContext,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\n\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\n\nimport { SkyDatepickerCalendarChange } from './calendar/datepicker-calendar-change';\nimport { SkyDatepickerCalendarComponent } from './calendar/datepicker-calendar.component';\nimport { SkyDatepickerCustomDate } from './datepicker-custom-date';\nimport { SkyDatepickerHostService } from './datepicker-host.service';\n\nlet nextId = 0;\n\n/**\n * Creates the datepicker button and calendar.\n * You must wrap this component around an input with the `skyDatepickerInput` directive.\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SkyDatepickerCalendarComponent,\n SkyDatetimeResourcesModule,\n SkyIconModule,\n ],\n providers: [SkyDatepickerHostService],\n selector: 'sky-datepicker',\n styleUrl: './datepicker.component.scss',\n templateUrl: './datepicker.component.html',\n})\nexport class SkyDatepickerComponent\n implements AfterViewInit, OnDestroy, OnInit\n{\n /**\n * Adds a class to the datepicker.\n * @default \"\"\n */\n @Input()\n public pickerClass: string | undefined = '';\n\n public set dateFormat(value: string | undefined) {\n this.#_dateFormat = value;\n this.dateFormatChange.emit(value);\n this.#populateInputBoxHelpText();\n }\n\n public get dateFormat(): string | undefined {\n return this.#_dateFormat;\n }\n\n public get disabled(): boolean | undefined {\n return this.#_disabled;\n }\n\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value;\n this.#changeDetector.markForCheck();\n }\n\n public set selectedDate(value: Date | undefined) {\n this.#_selectedDate = value;\n if (this.calendar) {\n this.calendar.writeValue(value);\n }\n }\n\n public get selectedDate(): Date | undefined {\n return this.#_selectedDate;\n }\n\n /**\n * Fires when the range of displayed dates in the calendar changes. Provides the\n * current range of displayed dates and a mutable `customDate` property consumers can use\n * to modify individual dates on the calendar.\n */\n @Output()\n public calendarDateRangeChange =\n new EventEmitter<SkyDatepickerCalendarChange>();\n\n /**\n * @internal\n */\n @Output()\n public dateFormatChange = new EventEmitter<string>();\n\n /**\n * @internal\n */\n @Output()\n public openChange = new EventEmitter<boolean>();\n\n /**\n * Fires when a user selects a date from the calendar.\n * @internal\n */\n public calendarDateChange = output<Date>();\n\n public calendarId: string;\n\n public customDates: SkyDatepickerCustomDate[] | undefined;\n\n public dateChange = new EventEmitter<Date>();\n\n public isDaypickerWaiting = false;\n\n public isOpen = false;\n\n public isVisible = false;\n\n public maxDate: Date | undefined;\n\n public minDate: Date | undefined;\n\n public startAtDate: Date | undefined;\n\n public startingDay: number | undefined;\n\n public triggerButtonId: string;\n\n @ViewChild(SkyDatepickerCalendarComponent)\n public calendar: SkyDatepickerCalendarComponent | undefined;\n\n @ViewChild('calendarRef', {\n read: ElementRef,\n })\n public set calendarRef(value: ElementRef | undefined) {\n if (value) {\n this.#_calendarRef = value;\n\n this.#addKeyupListener();\n\n // Wait for the calendar component to render before gauging dimensions.\n setTimeout(() => {\n if (this.calendarRef) {\n this.calendar?.writeValue(this.selectedDate);\n\n this.#destroyAffixer();\n this.#createAffixer();\n\n setTimeout(() => {\n if (this.calendarRef) {\n this.#coreAdapter.applyAutoFocus(this.calendarRef);\n\n this.isVisible = true;\n this.#changeDetector.markForCheck();\n }\n });\n }\n });\n }\n }\n\n public get calendarRef(): ElementRef | undefined {\n return this.#_calendarRef;\n }\n\n @ViewChild('calendarTemplateRef', {\n read: TemplateRef,\n })\n public calendarTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('triggerButtonRef', {\n read: ElementRef,\n })\n public triggerButtonRef: ElementRef | undefined;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n public inputTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('triggerButtonTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n public triggerButtonTemplateRef: TemplateRef<unknown> | undefined;\n\n #affixer: SkyAffixer | undefined;\n\n #calendarUnsubscribe: Subject<void> = new Subject<void>();\n\n #customDatesSubscription: Subscription | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #overlay: SkyOverlayInstance | undefined;\n\n #overlayKeyupListener: Subscription | undefined;\n\n #_calendarRef: ElementRef | undefined;\n\n #_dateFormat: string | undefined;\n\n #_disabled: boolean | undefined = false;\n\n #_selectedDate: Date | undefined;\n\n #affixService: SkyAffixService;\n readonly #appFormatter = inject(SkyAppFormat);\n #changeDetector: ChangeDetectorRef;\n #coreAdapter: SkyCoreAdapterService;\n #dateFormatHintTextTemplateString = '';\n readonly #environmentInjector = inject(EnvironmentInjector);\n readonly #resourceSvc = inject(SkyLibResourcesService);\n #overlayService: SkyOverlayService;\n readonly #zIndex: Observable<number> | undefined;\n\n readonly #datepickerHostSvc = inject(SkyDatepickerHostService);\n readonly #elementRef = inject(ElementRef);\n\n constructor(\n affixService: SkyAffixService,\n changeDetector: ChangeDetectorRef,\n coreAdapter: SkyCoreAdapterService,\n overlayService: SkyOverlayService,\n @Optional() public inputBoxHostService?: SkyInputBoxHostService,\n @Optional() themeSvc?: SkyThemeService,\n @Optional()\n @Inject(SKY_STACKING_CONTEXT)\n stackingContext?: SkyStackingContext,\n ) {\n this.#affixService = affixService;\n this.#changeDetector = changeDetector;\n this.#coreAdapter = coreAdapter;\n this.#overlayService = overlayService;\n const uniqueId = nextId++;\n this.calendarId = `sky-datepicker-calendar-${uniqueId}`;\n this.triggerButtonId = `sky-datepicker-button-${uniqueId}`;\n this.#zIndex = stackingContext?.zIndex;\n\n // Update icons when theme changes.\n themeSvc?.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n\n public ngOnInit(): void {\n if (this.inputBoxHostService && this.inputTemplateRef) {\n this.inputBoxHostService.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.triggerButtonTemplateRef,\n });\n\n this.#resourceSvc\n .getString('skyux_datepicker_format_hint_text')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((templateString) => {\n this.#dateFormatHintTextTemplateString = templateString;\n this.#populateInputBoxHelpText();\n });\n }\n }\n\n public ngAfterViewInit(): void {\n this.#datepickerHostSvc.init(this);\n }\n\n public ngOnDestroy(): void {\n this.dateChange.complete();\n this.openChange.complete();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#removePickerEventListeners();\n this.#destroyAffixer();\n this.#destroyOverlay();\n }\n\n public onCalendarModeChange(): void {\n // Let the calendar populate in the DOM before recalculating placement.\n setTimeout(() => {\n this.#affixer?.reaffix();\n });\n }\n\n public onSelectedDateChange(value: Date): void {\n this.calendarDateChange.emit(value);\n this.dateChange.emit(value);\n this.#closePicker();\n }\n\n public onTriggerButtonClick(): void {\n if (this.isOpen) {\n this.#closePicker();\n } else {\n this.#openPicker();\n }\n }\n\n public onCalendarDateRangeChange(event?: SkyDatepickerCalendarChange): void {\n /* istanbul ignore else */\n if (event) {\n this.#cancelCustomDatesSubscription();\n\n const args: SkyDatepickerCalendarChange = {\n startDate: event.startDate,\n endDate: event.endDate,\n customDates: undefined,\n };\n this.calendarDateRangeChange.emit(args);\n // If consumer has added an observable to the args, watch for incoming custom dates.\n /* istanbul ignore else */\n if (args.customDates) {\n this.isDaypickerWaiting = true;\n // Avoid an ExpressionChangedAfterItHasBeenCheckedError.\n this.#changeDetector.detectChanges();\n\n this.#customDatesSubscription = args.customDates\n .pipe(debounceTime(250))\n .subscribe((result) => {\n this.customDates = result;\n this.isDaypickerWaiting = false;\n\n // Trigger change detection in child components to show changes in the calendar.\n this.#changeDetector.markForCheck();\n });\n } else {\n // If consumer returns an undefined value after custom dates have\n // already been established, remove custom dates.\n if (this.customDates) {\n this.customDates = undefined;\n // Avoid an ExpressionChangedAfterItHasBeenCheckedError.\n this.#changeDetector.detectChanges();\n }\n }\n }\n }\n\n /**\n * Whether the datepicker component contains the provided focus event target.\n * @internal\n */\n public containsTarget(target: EventTarget): boolean {\n return (\n this.#elementRef.nativeElement.contains(target) ||\n this.getPickerRef()?.nativeElement.contains(target)\n );\n }\n\n /**\n * Gets the element reference of the picker overlay.\n * @internal\n */\n public getPickerRef(): ElementRef | undefined {\n return this.#overlay?.componentRef.location;\n }\n\n #closePicker(): void {\n this.#destroyAffixer();\n this.#destroyOverlay();\n this.#removePickerEventListeners();\n this.triggerButtonRef?.nativeElement.focus();\n this.isOpen = false;\n this.openChange.emit(false);\n }\n\n #openPicker(): void {\n this.isVisible = false;\n this.#changeDetector.markForCheck();\n\n this.#removePickerEventListeners();\n this.#destroyOverlay();\n this.#createOverlay();\n\n this.isOpen = true;\n this.#changeDetector.markForCheck();\n this.openChange.emit(true);\n }\n\n #createAffixer(): void {\n if (this.calendarRef && this.triggerButtonRef) {\n const affixer = this.#affixService.createAffixer(this.calendarRef);\n\n // Hide calendar when trigger button is scrolled off-screen.\n affixer.placementChange\n .pipe(takeUntil(this.#calendarUnsubscribe))\n .subscribe((change) => {\n this.isVisible = change.placement !== null;\n this.#changeDetector.markForCheck();\n });\n\n affixer.affixTo(this.triggerButtonRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n horizontalAlignment: 'right',\n isSticky: true,\n placement: 'below',\n });\n\n this.#affixer = affixer;\n }\n }\n\n #destroyAffixer(): void {\n /*istanbul ignore else*/\n if (this.#affixer) {\n this.#affixer.destroy();\n this.#affixer = undefined;\n }\n }\n\n #createOverlay(): void {\n if (this.calendarTemplateRef) {\n const overlay = this.#overlayService.create({\n wrapperClass: this.pickerClass,\n enableClose: false,\n enablePointerEvents: false,\n environmentInjector: this.#environmentInjector,\n });\n\n if (this.#zIndex) {\n this.#zIndex\n .pipe(takeUntil(this.#calendarUnsubscribe))\n .subscribe((zIndex) => {\n overlay.componentRef.instance.zIndex = zIndex.toString(10);\n });\n }\n\n overlay.backdropClick\n .pipe(takeUntil(this.#calendarUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.#closePicker();\n }\n });\n\n overlay.attachTemplate(this.calendarTemplateRef);\n\n this.#overlay = overlay;\n }\n }\n\n #destroyOverlay(): void {\n /*istanbul ignore else*/\n if (this.#overlay) {\n this.#overlayService.close(this.#overlay);\n this.#overlay = undefined;\n }\n }\n\n #addKeyupListener(): void {\n const datepickerCalendarElement = this.calendarRef?.nativeElement;\n\n if (datepickerCalendarElement) {\n this.#overlayKeyupListener = fromEvent<KeyboardEvent>(\n datepickerCalendarElement,\n 'keyup',\n )\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((event) => {\n const key = event.key?.toLowerCase();\n if (key === 'escape' && this.isOpen) {\n this.#closePicker();\n }\n });\n }\n }\n\n #removePickerEventListeners(): void {\n this.#calendarUnsubscribe.next();\n this.#calendarUnsubscribe.complete();\n this.#calendarUnsubscribe = new Subject<void>();\n this.#overlayKeyupListener?.unsubscribe();\n }\n\n #cancelCustomDatesSubscription(): void {\n if (this.#customDatesSubscription) {\n this.#customDatesSubscription.unsubscribe();\n this.#customDatesSubscription = undefined;\n }\n }\n\n #populateInputBoxHelpText(): void {\n if (this.inputBoxHostService && this.inputTemplateRef) {\n /* safety check */\n /* istanbul ignore else */\n if (this.dateFormat) {\n this.inputBoxHostService?.setHintText(\n this.#appFormatter.formatText(\n this.#dateFormatHintTextTemplateString,\n this.dateFormat,\n ),\n );\n } else {\n this.inputBoxHostService?.setHintText('');\n }\n }\n }\n}\n","<div class=\"sky-datepicker\">\n @if (!inputBoxHostService) {\n <div class=\"sky-input-group\">\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\" />\n <ng-container *ngTemplateOutlet=\"triggerButtonTemplateRef\" />\n </div>\n }\n</div>\n\n<ng-template #inputTemplateRef>\n <ng-content />\n</ng-template>\n\n<ng-template #triggerButtonTemplateRef>\n <div class=\"sky-input-group-btn\">\n <button\n #triggerButtonRef\n aria-haspopup=\"dialog\"\n class=\"sky-btn sky-btn-default sky-input-group-datepicker-btn\"\n type=\"button\"\n [attr.aria-controls]=\"isOpen ? calendarId : null\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-label]=\"\n inputBoxHostService?.labelText\n ? ('skyux_datepicker_trigger_button_label_context'\n | skyLibResources: inputBoxHostService?.labelText)\n : ('skyux_datepicker_trigger_button_label' | skyLibResources)\n \"\n [attr.id]=\"triggerButtonId\"\n [attr.title]=\"\n inputBoxHostService?.labelText\n ? ('skyux_datepicker_trigger_button_label_context'\n | skyLibResources: inputBoxHostService?.labelText)\n : ('skyux_datepicker_trigger_button_label' | skyLibResources)\n \"\n [disabled]=\"disabled\"\n (click)=\"onTriggerButtonClick()\"\n >\n <sky-icon iconName=\"calendar-ltr\" iconSize=\"l\" />\n </button>\n </div>\n</ng-template>\n\n<ng-template #calendarTemplateRef>\n <div\n #calendarRef\n class=\"sky-datepicker-calendar-container sky-shadow sky-elevation-4\"\n role=\"dialog\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n [attr.id]=\"calendarId\"\n [class.sky-datepicker-hidden]=\"!isVisible\"\n >\n <sky-datepicker-calendar\n cdkTrapFocus\n [customDates]=\"customDates\"\n [isDaypickerWaiting]=\"isDaypickerWaiting\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [startAtDate]=\"startAtDate\"\n [startingDay]=\"startingDay\"\n (calendarDateRangeChange)=\"onCalendarDateRangeChange($event)\"\n (calendarModeChange)=\"onCalendarModeChange()\"\n (selectedDateChange)=\"onSelectedDateChange($event)\"\n />\n </div>\n</ng-template>\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport moment from 'moment';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { SkyDateFormatter } from './date-formatter';\nimport { SkyDatepickerConfigService } from './datepicker-config.service';\nimport { SkyDatepickerHostService } from './datepicker-host.service';\nimport { SkyDatepickerComponent } from './datepicker.component';\n\nconst SKY_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyDatepickerInputDirective),\n multi: true,\n};\n\nconst SKY_DATEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyDatepickerInputDirective),\n multi: true,\n};\n\n@Directive({\n host: {\n '(focusout)': 'onFocusout($event)',\n },\n providers: [SKY_DATEPICKER_VALUE_ACCESSOR, SKY_DATEPICKER_VALIDATOR],\n selector: '[skyDatepickerInput]',\n standalone: true,\n})\nexport class SkyDatepickerInputDirective\n implements\n OnInit,\n OnDestroy,\n AfterViewInit,\n AfterContentInit,\n ControlValueAccessor,\n Validator\n{\n /**\n * The date format for the input. Place this attribute on the `input` element\n * to override the default in the `SkyDatepickerConfigService`.\n * @default \"MM/DD/YYYY\"\n */\n @Input()\n public set dateFormat(value: string | undefined) {\n /* istanbul ignore else */\n if (value !== this.#_dateFormat) {\n this.#_dateFormat = value;\n this.#applyDateFormat();\n }\n }\n\n // TODO: Refactor to not have getter logic\n public get dateFormat(): string | undefined {\n return (\n this.#_dateFormat ||\n this.#configService.dateFormat ||\n this.#preferredShortDateFormat\n );\n }\n\n /**\n * Whether to disable the datepicker on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value || false;\n this.#datepickerComponent.disabled = value;\n this.#renderer.setProperty(\n this.#elementRef.nativeElement,\n 'disabled',\n value,\n );\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * The latest date that is available in the calendar. Place this attribute on\n * the `input` element to override the default in `SkyDatepickerConfigService`.\n */\n @Input()\n public set maxDate(value: Date | undefined) {\n this.#_maxDate = value;\n this.#datepickerComponent.maxDate = this.maxDate;\n\n this.#onValidatorChange();\n }\n\n // TODO: Refactor to not have getter logic\n public get maxDate(): Date | undefined {\n return this.#_maxDate || this.#configService.maxDate;\n }\n\n /**\n * The earliest date that is available in the calendar. Place this attribute on\n * the `input` element to override the default in `SkyDatepickerConfigService`. To avoid validation errors, the time associated with the minimum date must be midnight. This is necessary because the datepicker automatically sets the time on the `Date` object for selected dates to midnight in the current user's time zone.\n */\n @Input()\n public set minDate(value: Date | undefined) {\n this.#_minDate = value;\n this.#datepickerComponent.minDate = this.minDate;\n\n this.#onValidatorChange();\n }\n\n // TODO: Refactor to not have getter logic\n public get minDate(): Date | undefined {\n return this.#_minDate || this.#configService.minDate;\n }\n\n /**\n * The date to open the calendar to initially. Place this attribute on the `input` element to override the default in `SkyDatepickerConfigService`.\n * @default The current date\n */\n @Input()\n public set startAtDate(value: Date | undefined) {\n this.#_startAtDate = value;\n this.#datepickerComponent.startAtDate = this.startAtDate;\n }\n\n // TODO: Refactor to not have getter logic\n public get startAtDate(): Date | undefined {\n return this.#_startAtDate || this.#configService.startAtDate;\n }\n\n /**\n * Creates the datepicker input and calendar. Place this directive on an `input` element,\n * and wrap the input in a `sky-datepicker` component. The value that users select is driven\n * through the `ngModel` attribute specified on the `input` element.\n * @required\n */\n @Input()\n public set skyDatepickerInput(\n value: SkyDatepickerComponent | undefined | '',\n ) {\n if (value) {\n console.warn(\n '[Deprecation warning] You no longer need to provide a template reference variable ' +\n 'to the `skyDatepickerInput` attribute (this will be a breaking change in the next ' +\n 'major version release).\\n' +\n 'Do this instead:\\n' +\n '<sky-datepicker>\\n <input skyDatepickerInput />\\n</sky-datepicker>',\n );\n }\n }\n\n /**\n * Whether to disable date validation on the datepicker input.\n * @default false\n */\n @Input()\n public skyDatepickerNoValidate: boolean | undefined = false;\n\n /**\n * The starting day of the week in the calendar, where `0` sets the starting day\n * to Sunday. Place this attribute on the `input` element to override the default\n * in `SkyDatepickerConfigService`.\n * @default 0\n */\n @Input()\n public set startingDay(value: number | undefined) {\n this.#_startingDay = value;\n this.#datepickerComponent.startingDay = this.startingDay;\n\n this.#onValidatorChange();\n }\n\n // TODO: Refactor to not have getter logic\n public get startingDay(): number {\n return this.#_startingDay || this.#configService.startingDay;\n }\n\n /**\n * Whether the format of the date value must match the format from the `dateFormat` value.\n * If this property is `true` and the datepicker input directive cannot find an exact match, then\n * the input is marked as invalid.\n * If this property is `false` and the datepicker input directive cannot find an exact match, then\n * it attempts to format the string based on the [ISO 8601 standard format](https://www.iso.org/iso-8601-date-and-time-format.html).\n * @default false\n */\n @Input()\n public set strict(value: boolean | undefined) {\n this.#_strict = value || false;\n }\n\n public get strict(): boolean {\n return this.#_strict;\n }\n\n get #value(): any {\n return this.#_value;\n }\n\n set #value(value: any) {\n this.#updateValue(value);\n }\n\n #control: AbstractControl | undefined;\n #dateFormatter = new SkyDateFormatter();\n #preferredShortDateFormat: string | undefined;\n #ngUnsubscribe = new Subject<void>();\n #notifyTouched: (() => void) | undefined;\n\n #_dateFormat: string | undefined;\n #_disabled = false;\n #_maxDate: Date | undefined;\n #_minDate: Date | undefined;\n #_startAtDate: Date | undefined;\n #_startingDay: number | undefined;\n #_strict = false;\n #_value: any;\n\n #changeDetector: ChangeDetectorRef;\n #configService: SkyDatepickerConfigService;\n #elementRef: ElementRef;\n #localeProvider: SkyAppLocaleProvider;\n #renderer: Renderer2;\n #datepickerComponent: SkyDatepickerComponent;\n\n readonly #datepickerHostSvc = inject(SkyDatepickerHostService, {\n optional: true,\n });\n\n constructor(\n changeDetector: ChangeDetectorRef,\n configService: SkyDatepickerConfigService,\n elementRef: ElementRef,\n localeProvider: SkyAppLocaleProvider,\n renderer: Renderer2,\n @Optional() datepickerComponent?: SkyDatepickerComponent,\n ) {\n if (!datepickerComponent) {\n throw new Error(\n 'You must wrap the `skyDatepickerInput` directive within a ' +\n '`<sky-datepicker>` component!',\n );\n }\n this.#changeDetector = changeDetector;\n this.#configService = configService;\n this.#elementRef = elementRef;\n this.#localeProvider = localeProvider;\n this.#renderer = renderer;\n this.#datepickerComponent = datepickerComponent;\n\n this.#localeProvider\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo) => {\n SkyDateFormatter.setLocale(localeInfo.locale);\n this.#preferredShortDateFormat =\n SkyDateFormatter.getPreferredShortDateFormat();\n this.#applyDateFormat();\n });\n\n this.#datepickerHostSvc?.focusout\n .pipe(takeUntilDestroyed())\n .subscribe((evt) => {\n const isFocusingInput =\n evt.relatedTarget === this.#elementRef.nativeElement;\n\n if (!isFocusingInput) {\n this.#notifyTouched?.();\n }\n });\n }\n\n public ngOnInit(): void {\n const element = this.#elementRef.nativeElement;\n\n this.#renderer.addClass(element, 'sky-form-control');\n }\n\n public ngAfterContentInit(): void {\n this.#datepickerComponent.dateFormat = this.dateFormat;\n this.#datepickerComponent.dateChange\n .pipe(distinctUntilChanged())\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((value) => {\n this.#value = value;\n });\n }\n\n public ngAfterViewInit(): void {\n // This is needed to address a bug in Angular 4.\n // When a control value is set initially, its value is not represented on the view.\n // See: https://github.com/angular/angular/issues/13792\n // Of note is the parent check which allows us to determine if the form is reactive.\n // Without this check there is a changed before checked error\n /* istanbul ignore else */\n if (this.#control && this.#control.parent) {\n setTimeout(() => {\n this.#control?.setValue(this.#value, {\n emitEvent: false,\n });\n\n this.#changeDetector.markForCheck();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n @HostListener('change', ['$event'])\n public onInputChange(event: any): void {\n const value = event.target.value;\n\n if (this.skyDatepickerNoValidate) {\n this.#onValueChange(value);\n return;\n }\n\n // Don't try to parse the string value into a Date value if it is malformed.\n if (this.#isDateStringValid(value)) {\n this.#onValueChange(value);\n return;\n }\n\n this.#_value = value;\n this.#onChange(value);\n\n this.#control?.setErrors({\n skyDate: {\n invalid: value,\n },\n });\n }\n\n @HostListener('input')\n public onInput(): void {\n this.#control?.markAsDirty();\n }\n\n public writeValue(value: any): void {\n this.#updateValue(value, false);\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (!this.#control) {\n this.#control = control;\n // Account for any date conversion that may have occurred prior to validation.\n if (this.#control.value !== this.#value) {\n this.#control.patchValue(this.#value, { emitEvent: false });\n }\n }\n\n if (this.skyDatepickerNoValidate) {\n return null;\n }\n\n const value: unknown = control.value;\n\n if (!value) {\n return null;\n }\n\n if (value instanceof Date) {\n const isDateValid = this.#dateFormatter.dateIsValid(value);\n\n if (!isDateValid) {\n // Mark the invalid control as touched so that the input's invalid CSS styles appear.\n // (This is only required when the invalid value is set by the FormControl constructor.)\n this.#control.markAsTouched();\n\n return {\n skyDate: {\n invalid: value,\n },\n };\n }\n\n const minDate = this.minDate;\n\n if (\n minDate &&\n this.#dateFormatter.dateIsValid(minDate) &&\n value < minDate\n ) {\n return {\n skyDate: {\n minDate,\n minDateFormatted: this.#dateFormatter.format(\n minDate,\n this.dateFormat,\n ),\n },\n };\n }\n\n const maxDate = this.maxDate;\n\n if (\n maxDate &&\n this.#dateFormatter.dateIsValid(maxDate) &&\n value > maxDate\n ) {\n return {\n skyDate: {\n maxDate,\n maxDateFormatted: this.#dateFormatter.format(\n maxDate,\n this.dateFormat,\n ),\n },\n };\n }\n } else {\n // Mark the invalid control as touched so that the input's invalid CSS styles appear.\n // (This is only required when the invalid value is set by the FormControl constructor.)\n this.#control.markAsTouched();\n\n return {\n skyDate: {\n invalid: value,\n },\n };\n }\n return null;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#notifyTouched = fn;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.#onValidatorChange = fn;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this.#datepickerComponent.disabled = disabled;\n }\n\n /**\n * Detects changes to the underlying input element's value and updates the ngModel accordingly.\n * This is useful if you need to update the ngModel value before the input element loses focus.\n */\n public detectInputValueChange(): void {\n this.#onValueChange(this.#elementRef.nativeElement.value);\n }\n\n protected onFocusout(evt: FocusEvent): void {\n if (!this.#datepickerHostSvc?.isFocusingDatepicker(evt)) {\n this.#notifyTouched?.();\n }\n }\n\n #applyDateFormat(): void {\n this.#datepickerComponent.dateFormat = this.dateFormat;\n if (this.#value) {\n const formattedDate = this.#dateFormatter.format(\n this.#value,\n this.dateFormat,\n );\n this.#setInputElementValue(formattedDate);\n this.#changeDetector.markForCheck();\n }\n }\n\n #onValueChange(newValue: string): void {\n this.#value = newValue;\n }\n\n #setInputElementValue(value: string): void {\n this.#renderer.setProperty(this.#elementRef.nativeElement, 'value', value);\n }\n\n /**\n * Gets the date value from a value - if possible.\n * Will not convert unconvertible dates or numbers outside of the current month's number of days.\n * Returns `undefined` if the value can not be converted.\n */\n #getDateValue(value: unknown): Date | undefined {\n if (value instanceof Date) {\n return value;\n } else if (typeof value === 'string') {\n return this.#getShortcutOrDateValue(value);\n }\n return undefined;\n }\n\n /**\n * Converts a string to a date object if the string is a valid date string.\n * It will also convert numeric input to a date if that number is within the current month's number of days.\n * If the string can not be converted, `undefined` be returned.\n */\n #getShortcutOrDateValue(value: string): Date | undefined {\n const num = Number(value);\n if (Number.isInteger(num)) {\n // We require 8 digits in order to know that we have all information needed to determine what part of the number is the month (2), day (2), and year (4).\n if (value.length === 8) {\n const regex = new RegExp(/\\b(MM)\\b|\\b(DD)\\b|\\b(YY)\\b|\\b(YYYY)\\b/, 'g');\n const formatTokensOnly = this.dateFormat\n ?.match(regex)\n ?.join('')\n .replace(new RegExp(/Y+/), 'YYYY');\n\n if (formatTokensOnly && formatTokensOnly.length === 8) {\n const date = this.#dateFormatter.getDateFromString(\n value,\n formatTokensOnly,\n true,\n );\n if (this.#dateFormatter.dateIsValid(date)) {\n return date;\n }\n }\n }\n const now = new Date();\n const shortcutDate = new Date(now.getFullYear(), now.getMonth(), num);\n const daysInMonth = shortcutDate.getDate();\n if (num > 0 && num <= daysInMonth) {\n return shortcutDate;\n }\n } else {\n const date = this.#dateFormatter.getDateFromString(\n value,\n this.dateFormat,\n this.strict,\n );\n if (this.#dateFormatter.dateIsValid(date)) {\n return date;\n }\n }\n return undefined;\n }\n\n /**\n * Validates the input value to ensure it is formatted correctly.\n */\n #isDateStringValid(value: string): boolean {\n if (!value || typeof value !== 'string') {\n return true;\n }\n\n // Does the value only include digits, dashes, or slashes?\n const regexp = /^[\\d/-]+$/;\n const isValid = regexp.test(value);\n\n if (isValid) {\n return true;\n }\n\n return moment(value).isValid();\n }\n\n // istanbul ignore next\n #onChange = (_: any): void => {};\n // istanbul ignore next\n #onValidatorChange = (): void => {};\n\n /**\n * Update the value of the form control and input element\n * @param emitEvent Denotes if we emit an event to the consumer's form control. We do not want to do this if the value is being updated via a `setValue` call or a `patchValue` call as this is already handled by Angular.\n * In these cases we do not want to fire `onChange` as it will cause extra `valueChange` and `statusChange` events and the status of the form should not be affected by these changes.\n */\n #updateValue(value: any, emitEvent = true): void {\n if (this.#_value === value) {\n return;\n }\n\n const isValidDateString = this.#isDateStringValid(value);\n\n // If the string value supplied is malformed, do not set the value to its Date equivalent.\n // (JavaScript's Date parser will convert poorly formatted dates to Date objects, such as \"abc 123\", which isn't ideal.)\n if (!isValidDateString) {\n this.#_value = value;\n if (emitEvent) {\n this.#onChange(this.#_value);\n } else {\n this.#control?.setValue(this.#_value, { emitEvent: false });\n }\n\n this.#datepickerComponent.selectedDate = this.#_value;\n\n this.#setInputElementValue(value);\n } else {\n // This value represents the date value for the input if possible.\n // This value will take into account all shortcut functionality.\n const dateValue: Date | undefined = this.#getDateValue(value);\n\n const areDatesEqual =\n this.#_value instanceof Date &&\n dateValue &&\n dateValue.getTime() === this.#_value.getTime();\n\n if (dateValue !== this.#_value || !areDatesEqual) {\n this.#_value = dateValue || value;\n if (emitEvent) {\n this.#onChange(this.#_value);\n } else {\n this.#control?.setValue(this.#_value, { emitEvent: false });\n }\n\n this.#datepickerComponent.selectedDate = this.#_value;\n }\n\n if (dateValue) {\n const formattedDateString = this.#dateFormatter.format(\n dateValue,\n this.dateFormat,\n );\n this.#setInputElementValue(formattedDateString);\n } else {\n this.#setInputElementValue(value || '');\n }\n }\n }\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { SkyDateFormatter } from '../date-formatter';\nimport { SkyDatepickerConfigService } from '../datepicker-config.service';\nimport { SkyDatepickerHostService } from '../datepicker-host.service';\nimport { SkyDatepickerComponent } from '../datepicker.component';\n\nimport { SkyFuzzyDate } from './fuzzy-date';\nimport { SkyFuzzyDateService } from './fuzzy-date.service';\n\nconst SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyFuzzyDatepickerInputDirective),\n multi: true,\n};\n\nconst SKY_FUZZY_DATEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyFuzzyDatepickerInputDirective),\n multi: true,\n};\n\n@Directive({\n host: {\n '(focusout)': 'onFocusout($event)',\n },\n providers: [\n SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR,\n SKY_FUZZY_DATEPICKER_VALIDATOR,\n ],\n selector: '[skyFuzzyDatepickerInput]',\n standalone: true,\n})\nexport class SkyFuzzyDatepickerInputDirective\n implements\n OnInit,\n OnDestroy,\n AfterViewInit,\n AfterContentInit,\n ControlValueAccessor,\n Validator\n{\n /**\n * The date format for the input. Place this attribute on the `input` element\n * to override the default in `SkyDatepickerConfigService`.\n * @default \"MM/DD/YYYY\"\n */\n @Input()\n public set dateFormat(value: string | undefined) {\n this.#_dateFormat = value;\n\n if (this.#value) {\n const formattedDate = this.#fuzzyDateService.format(\n this.#value,\n this.dateFormat,\n this.#locale,\n );\n this.#setInputElementValue(formattedDate);\n this.#changeDetector.markForCheck();\n }\n }\n\n // TODO: Refactor to not have getter logic\n public get dateFormat(): string | undefined {\n return (\n this.#_dateFormat ||\n this.#configService.dateFormat ||\n this.#preferredShortDateFormat\n );\n }\n\n /**\n * Whether to disable the datepicker on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value;\n this.#datepickerComponent.disabled = value;\n\n this.#renderer.setProperty(\n this.#elementRef.nativeElement,\n 'disabled',\n value,\n );\n }\n\n public get disabled(): boolean | undefined {\n return this.#_disabled;\n }\n\n /**\n * Whether to prevent users from specifying dates that are in the future.\n * Place this attribute on the `input` element.\n * @default false\n */\n @Input()\n public set futureDisabled(value: boolean | undefined) {\n this.#_futureDisabled = value;\n this.#datepickerComponent.maxDate = this.#getMaxDate();\n this.#onValidatorChange();\n }\n\n public get futureDisabled(): boolean | undefined {\n return this.#_futureDisabled;\n }\n\n /**\n * The latest fuzzy date allowed. Place this attribute on the `input` element\n * to prevent fuzzy dates after a specified date. This property accepts\n * a `SkyFuzzyDate` value that includes numeric month, day, and year values.\n * For example: `{ month: 1, day: 1, year: 2027 }`.\n */\n @Input()\n public set maxDate(value: SkyFuzzyDate | undefined) {\n this.#_maxDate = value;\n this.#datepickerComponent.maxDate = this.#getMaxDate();\n this.#onValidatorChange();\n }\n\n public get maxDate(): SkyFuzzyDate | undefined {\n return this.#_maxDate;\n }\n\n /**\n * The earliest fuzzy date allowed. Place this attribute on the `input` element\n * to prevent fuzzy dates before a specified date. This property accepts a `SkyFuzzyDate` value\n * that includes numeric month, day, and year values.\n * For example: `{ month: 1, day: 1, year: 2007 }`.\n */\n @Input()\n public set minDate(value: SkyFuzzyDate | undefined) {\n this.#_minDate = value;\n this.#datepickerComponent.minDate = this.#getMinDate();\n this.#onValidatorChange();\n }\n\n public get minDate(): SkyFuzzyDate | undefined {\n return this.#_minDate;\n }\n\n /**\n * The fuzzy date to open the calendar to initially.\n * This property accepts a `SkyFuzzyDate` value that includes numeric month, day, and year values.\n * For example: `{ month: 1, day: 1, year: 2007 }`.\n * @default The current date\n */\n @Input()\n public set startAtDate(value: SkyFuzzyDate | undefined) {\n this.#_startAtDate = value;\n this.#datepickerComponent.startAtDate = this.#getStartAtDate();\n }\n\n // TODO: Refactor to not have getter logic\n public get startAtDate(): SkyFuzzyDate | undefined {\n return this.#_startAtDate;\n }\n\n /**\n * Whether to disable date validation on the fuzzy datepicker input.\n * @default false\n */\n @Input()\n public skyDatepickerNoValidate: boolean | undefined = false;\n\n /**\n * The starting day of the week in the calendar, where `0` sets the starting day\n * to Sunday. Place this attribute on the `input` element to override the default\n * in `SkyDatepickerConfigService`.\n * @default 0\n */\n @Input()\n public set startingDay(value: number | undefined) {\n this.#_startingDay = value;\n this.#datepickerComponent.startingDay = this.startingDay;\n\n this.#onValidatorChange();\n }\n\n // TODO: Refactor to not have getter logic\n public get startingDay(): number {\n return this.#_startingDay || this.#configService.startingDay;\n }\n\n /**\n * Whether to require the year in fuzzy dates.\n * @default false\n */\n @Input()\n public set yearRequired(value: boolean | undefined) {\n this.#_yearRequired = value;\n this.#onValidatorChange();\n }\n\n public get yearRequired(): boolean | undefined {\n return this.#_yearRequired;\n }\n\n get #value(): any {\n return this.#_value;\n }\n\n set #value(value: any) {\n this.#updateValue(value);\n }\n\n #control: AbstractControl | undefined;\n\n #dateFormatter = new SkyDateFormatter();\n\n #locale: string;\n\n #preferredShortDateFormat: string | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #notifyTouched: (() => void) | undefined;\n\n #_futureDisabled: boolean | undefined = false;\n\n #_dateFormat: string | undefined;\n\n #_disabled: boolean | undefined = false;\n\n #_maxDate: SkyFuzzyDate | undefined;\n\n #_minDate: SkyFuzzyDate | undefined;\n\n #_startAtDate: SkyFuzzyDate | undefined;\n\n #_startingDay: number | undefined;\n\n #_value: any;\n\n #_yearRequired: boolean | undefined = false;\n\n #changeDetector: ChangeDetectorRef;\n #configService: SkyDatepickerConfigService;\n #elementRef: ElementRef;\n #fuzzyDateService: SkyFuzzyDateService;\n #renderer: Renderer2;\n #datepickerComponent: SkyDatepickerComponent;\n\n readonly #datepickerHostSvc = inject(SkyDatepickerHostService, {\n optional: true,\n });\n\n constructor(\n changeDetector: ChangeDetectorRef,\n configService: SkyDatepickerConfigService,\n elementRef: ElementRef,\n fuzzyDateService: SkyFuzzyDateService,\n localeProvider: SkyAppLocaleProvider,\n renderer: Renderer2,\n @Optional() datepickerComponent?: SkyDatepickerComponent,\n ) {\n if (!datepickerComponent) {\n throw new Error(\n 'You must wrap the `skyFuzzyDatepickerInput` directive within a ' +\n '`<sky-datepicker>` component!',\n );\n }\n\n this.#changeDetector = changeDetector;\n this.#configService = configService;\n this.#elementRef = elementRef;\n this.#fuzzyDateService = fuzzyDateService;\n this.#renderer = renderer;\n this.#datepickerComponent = datepickerComponent;\n\n this.#locale = localeProvider.defaultLocale;\n localeProvider\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo) => {\n this.#locale = localeInfo.locale;\n SkyDateFormatter.setLocale(this.#locale);\n this.#preferredShortDateFormat =\n SkyDateFormatter.getPreferredShortDateFormat();\n });\n\n this.#datepickerHostSvc?.focusout\n .pipe(takeUntilDestroyed())\n .subscribe((evt) => {\n const isFocusingInput =\n evt.relatedTarget === this.#elementRef.nativeElement;\n\n if (!isFocusingInput) {\n this.#notifyTouched?.();\n }\n });\n }\n\n public ngOnInit(): void {\n if (this.yearRequired) {\n if (this.dateFormat?.toLowerCase().indexOf('y') === -1) {\n throw new Error(\n 'You have configured conflicting settings. Year is required and dateFormat does not include year.',\n );\n }\n }\n\n const element = this.#elementRef.nativeElement;\n\n this.#renderer.addClass(element, 'sky-form-control');\n }\n\n public ngAfterContentInit(): void {\n this.#datepickerComponent.dateChange\n .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))\n .subscribe((value: Date) => {\n this.#value = value;\n });\n }\n\n public ngAfterViewInit(): void {\n // This is needed to address a bug in Angular 4.\n // When a control value is set initially, its value is not represented on the view.\n // See: https://github.com/angular/angular/issues/13792\n // Of note is the parent check which allows us to determine if the form is reactive.\n // Without this check there is a changed before checked error\n /* istanbul ignore else */\n\n if (this.#control && this.#control.parent) {\n setTimeout(() => {\n this.#control?.setValue(this.#value, {\n emitEvent: false,\n });\n\n this.#changeDetector.markForCheck();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n @HostListener('change', ['$event'])\n public onInputChange(event: any): void {\n this.#onValueChange(event.target.value);\n }\n\n @HostListener('blur')\n public onInputBlur(): void {\n const formattedDate = this.#fuzzyDateService.format(\n this.#value,\n this.dateFormat,\n this.#locale,\n );\n\n if (this.#control?.valid) {\n this.#setInputElementValue(formattedDate);\n }\n }\n\n @HostListener('input')\n public onInput(): void {\n this.#control?.markAsDirty();\n }\n\n public writeValue(value: any): void {\n this.#updateValue(value, false);\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (!this.#control) {\n this.#control = control;\n }\n\n if (this.skyDatepickerNoValidate) {\n return null;\n }\n\n if (!this.#control.value) {\n return null;\n }\n\n const value: any = control.value;\n\n let fuzzyDate: SkyFuzzyDate | undefined;\n let validationError: ValidationErrors | null = null;\n\n if (typeof value === 'string') {\n fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromString(\n value,\n this.dateFormat,\n );\n } else {\n fuzzyDate = value;\n }\n\n if (!fuzzyDate) {\n validationError = {\n skyFuzzyDate: {\n invalid: value,\n },\n };\n } else {\n if (!fuzzyDate.year && this.yearRequired) {\n validationError = {\n skyFuzzyDate: {\n yearRequired: value,\n },\n };\n }\n\n if (!validationError && fuzzyDate.year) {\n let fuzzyDateRange;\n\n if (this.maxDate) {\n fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(\n fuzzyDate,\n this.maxDate,\n );\n\n if (!fuzzyDateRange.valid) {\n validationError = {\n skyFuzzyDate: {\n maxDate: value,\n maxDateFormatted: this.#dateFormatter.format(\n fuzzyDateRange.endDate,\n this.dateFormat,\n ),\n },\n };\n }\n }\n\n if (!validationError && this.minDate) {\n fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(\n this.minDate,\n fuzzyDate,\n );\n if (!fuzzyDateRange.valid) {\n validationError = {\n skyFuzzyDate: {\n minDate: value,\n minDateFormatted: this.#dateFormatter.format(\n fuzzyDateRange.startDate,\n this.dateFormat,\n ),\n },\n };\n }\n }\n\n if (!validationError && this.futureDisabled) {\n fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(\n fuzzyDate,\n this.#fuzzyDateService.getCurrentFuzzyDate(),\n );\n if (!fuzzyDateRange.valid) {\n validationError = {\n skyFuzzyDate: {\n futureDisabled: value,\n },\n };\n }\n }\n }\n }\n\n if (validationError) {\n // Mark the invalid control as touched so that the input's invalid CSS styles appear.\n // (This is only required when the invalid value is set by the FormControl constructor.)\n this.#control.markAsTouched();\n }\n\n return validationError;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#notifyTouched = fn;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.#onValidatorChange = fn;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this.#datepickerComponent.disabled = disabled;\n }\n\n /**\n * Detects changes to the underlying input element's value and updates the ngModel accordingly.\n * This is useful if you need to update the ngModel value before the input element loses focus.\n */\n public detectInputValueChange(): void {\n this.#onValueChange(this.#elementRef.nativeElement.value);\n }\n\n protected onFocusout(evt: FocusEvent): void {\n if (!this.#datepickerHostSvc?.isFocusingDatepicker(evt)) {\n this.#notifyTouched?.();\n }\n }\n\n #onValueChange(newValue: string): void {\n this.#value = newValue;\n }\n\n #setInputElementValue(value: string): void {\n this.#renderer.setProperty(this.#elementRef.nativeElement, 'value', value);\n }\n\n #getMaxDate(): Date | undefined {\n if (this.maxDate) {\n const maxDate = this.#fuzzyDateService.getMomentFromFuzzyDate(\n this.maxDate,\n );\n if (maxDate.isValid()) {\n return maxDate.toDate();\n }\n } else if (this.futureDisabled) {\n return new Date();\n }\n return this.#configService.maxDate;\n }\n\n #getMinDate(): Date | undefined {\n if (this.minDate) {\n const minDate = this.#fuzzyDateService.getMomentFromFuzzyDate(\n this.minDate,\n );\n if (minDate.isValid()) {\n return minDate.toDate();\n }\n }\n return this.#configService.minDate;\n }\n\n #getStartAtDate(): Date | undefined {\n if (this.startAtDate) {\n const startAtDate = this.#fuzzyDateService.getMomentFromFuzzyDate(\n this.startAtDate,\n );\n if (startAtDate.isValid()) {\n return startAtDate.toDate();\n }\n }\n return this.#configService.startAtDate;\n }\n\n /* istanbul ignore next */\n #fuzzyDatesEqual(dateA?: SkyFuzzyDate, dateB?: SkyFuzzyDate): boolean {\n return !!(\n dateA &&\n dateB &&\n ((!dateA.day && !dateB.day) || dateA.day === dateB.day) &&\n ((!dateA.month && !dateB.month) || dateA.month === dateB.month) &&\n ((!dateA.year && !dateB.year) || dateA.year === dateB.year)\n );\n }\n\n // istanbul ignore next\n #onChange = (_: any): void => {};\n // istanbul ignore next\n #onValidatorChange = (): void => {};\n\n /**\n * Update the value of the form control and input element\n * @param emitEvent Denotes if we emit an event to the consumer's form control. We do not want to do this if the value is being updated via a `setValue` call or a `patchValue` call as this is already handled by Angular.\n * In these cases we do not want to fire `onChange` as it will cause extra `valueChange` and `statusChange` events and the status of the form should not be affected by these changes.\n */\n #updateValue(value: any, emitEvent = true): void {\n if (\n this.#_value === value ||\n (this.#_value === undefined && value === null)\n ) {\n return;\n }\n\n let fuzzyDate: SkyFuzzyDate | undefined;\n let fuzzyMoment: any;\n let dateValue: Date | undefined;\n let formattedDate: string | undefined;\n\n if (value instanceof Date) {\n dateValue = value;\n formattedDate = this.#dateFormatter.format(value, this.dateFormat);\n fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromSelectedDate(\n value,\n this.dateFormat,\n );\n } else if (typeof value === 'string') {\n fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromString(\n value,\n this.dateFormat,\n );\n if (fuzzyDate) {\n formattedDate = this.#fuzzyDateService.format(\n fuzzyDate,\n this.dateFormat,\n this.#locale,\n );\n }\n\n if (!formattedDate) {\n formattedDate = value;\n }\n\n fuzzyMoment = this.#fuzzyDateService.getMomentFromFuzzyDate(fuzzyDate);\n\n if (fuzzyMoment) {\n dateValue = fuzzyMoment.toDate();\n }\n } else {\n fuzzyDate = value as SkyFuzzyDate;\n formattedDate = this.#fuzzyDateService.format(\n fuzzyDate,\n this.dateFormat,\n this.#locale,\n );\n fuzzyMoment = this.#fuzzyDateService.getMomentFromFuzzyDate(fuzzyDate);\n\n if (fuzzyMoment) {\n dateValue = fuzzyMoment.toDate();\n }\n }\n\n const areFuzzyDatesEqual = this.#fuzzyDatesEqual(this.#_value, fuzzyDate);\n const isNewValue = fuzzyDate !== this.#_value || !areFuzzyDatesEqual;\n\n this.#_value = fuzzyDate || value;\n\n if (isNewValue) {\n if (emitEvent) {\n this.#onChange(this.#_value);\n } else {\n this.#control?.setValue(this.#_value, { emitEvent: false });\n }\n\n this.#datepickerComponent.selectedDate = dateValue;\n }\n\n this.#setInputElementValue(formattedDate || '');\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyDatepickerCalendarInnerComponent } from './calendar/datepicker-calendar-inner.component';\nimport { SkyDatepickerCalendarComponent } from './calendar/datepicker-calendar.component';\nimport { SkyDatepickerCalendarService } from './calendar/datepicker-calendar.service';\nimport { SkyDayPickerButtonComponent } from './calendar/daypicker-button.component';\nimport { SkyDayPickerCellComponent } from './calendar/daypicker-cell.component';\nimport { SkyDayPickerComponent } from './calendar/daypicker.component';\nimport { SkyMonthPickerComponent } from './calendar/monthpicker.component';\nimport { SkyYearPickerComponent } from './calendar/yearpicker.component';\nimport { SkyDatepickerInputDirective } from './datepicker-input.directive';\nimport { SkyDatepickerComponent } from './datepicker.component';\nimport { SkyFuzzyDatepickerInputDirective } from './fuzzy/datepicker-input-fuzzy.directive';\n\n@NgModule({\n imports: [\n SkyDatepickerCalendarComponent,\n SkyDatepickerCalendarInnerComponent,\n SkyDatepickerComponent,\n SkyDatepickerInputDirective,\n SkyDayPickerButtonComponent,\n SkyDayPickerCellComponent,\n SkyDayPickerComponent,\n SkyFuzzyDatepickerInputDirective,\n SkyMonthPickerComponent,\n SkyYearPickerComponent,\n ],\n exports: [\n SkyDatepickerCalendarComponent,\n SkyDatepickerComponent,\n SkyDatepickerInputDirective,\n SkyFuzzyDatepickerInputDirective,\n ],\n providers: [SkyDatepickerCalendarService],\n})\nexport class SkyDatepickerModule {}\n","/**\n * The types of calculations available for a date range calculator.\n */\nexport enum SkyDateRangeCalculatorType {\n /**\n * Includes an input for a date after the current date.\n */\n After,\n\n /**\n * Includes an input for a date before the current date.\n */\n Before,\n\n /**\n * Includes two inputs for a range of dates.\n */\n Range,\n\n /**\n * Does not accept any input but calculates a specific range based on the current date.\n */\n Relative,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { SkyDateRangeCalculatorType } from './types/date-range-calculator-type';\n\n@Pipe({\n name: 'skyDateRangePickerEndDateResourceKey',\n standalone: true,\n})\nexport class SkyDateRangePickerEndDateResourceKeyPipe implements PipeTransform {\n public transform(\n calculatorType: SkyDateRangeCalculatorType | undefined,\n ): string {\n if (calculatorType === SkyDateRangeCalculatorType.Range) {\n return 'skyux_date_range_picker_end_date_label';\n }\n\n return 'skyux_date_range_picker_before_date_label';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { SkyDateRangeCalculatorType } from './types/date-range-calculator-type';\n\n@Pipe({\n name: 'skyDateRangePickerStartDateResourceKey',\n standalone: true,\n})\nexport class SkyDateRangePickerStartDateResourceKeyPipe\n implements PipeTransform\n{\n public transform(\n calculatorType: SkyDateRangeCalculatorType | undefined,\n ): string {\n if (calculatorType === SkyDateRangeCalculatorType.Range) {\n return 'skyux_date_range_picker_start_date_label';\n }\n\n return 'skyux_date_range_picker_after_date_label';\n }\n}\n","import { ValidationErrors } from '@angular/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\n\nimport { Observable, of } from 'rxjs';\n\nimport { SkyDateRange } from './date-range';\nimport { SkyDateRangeCalculation } from './date-range-calculation';\nimport { SkyDateRangeCalculatorConfig } from './date-range-calculator-config';\nimport { SkyDateRangeCalculatorId } from './date-range-calculator-id';\nimport { SkyDateRangeCalculatorType } from './date-range-calculator-type';\n\n/**\n * Represents the calculator.\n */\nexport class SkyDateRangeCalculator {\n #config: SkyDateRangeCalculatorConfig;\n #resourcesSvc: SkyLibResourcesService;\n\n /**\n * The text to display in the calculator select menu.\n */\n public get shortDescription$(): Observable<string> {\n if (this.shortDescription) {\n return of(this.shortDescription);\n }\n\n if (!this.#shortDescriptionResourceKey) {\n throw new Error(\n 'Calculator created without short description or resource key.',\n );\n }\n\n return this.#resourcesSvc.getString(this.#shortDescriptionResourceKey);\n }\n\n /**\n * The text to display in the calculator select menu.\n * @deprecated Subscribe to the `shortDescription$` observable instead.\n */\n public shortDescription: string;\n\n #shortDescriptionResourceKey: string | undefined;\n\n /**\n * The type of calculations available for the date range.\n */\n public readonly type: SkyDateRangeCalculatorType;\n\n constructor(\n /**\n * The calculator ID that specifies calculator objects that represent date ranges.\n */\n public readonly calculatorId: SkyDateRangeCalculatorId,\n config: SkyDateRangeCalculatorConfig,\n resourcesSvc: SkyLibResourcesService,\n _shortDescriptionResourceKey?: string,\n ) {\n this.#config = config;\n this.type = config.type;\n this.shortDescription = config.shortDescription;\n this.#shortDescriptionResourceKey = _shortDescriptionResourceKey;\n this.#resourcesSvc = resourcesSvc;\n }\n\n /**\n * Gets the current value of the calculator.\n * @param startDateInput The start date.\n * @param endDateInput The end date.\n */\n public getValue(\n startDateInput?: Date | null,\n endDateInput?: Date | null,\n ): SkyDateRangeCalculation {\n const result = this.#config.getValue(startDateInput, endDateInput);\n\n let startDate: Date | null = null;\n if (result.startDate instanceof Date) {\n startDate = this.#parseDateWithoutTime(result.startDate);\n }\n\n let endDate: Date | null = null;\n if (result.endDate instanceof Date) {\n endDate = this.#parseDateWithoutTime(result.endDate);\n }\n\n return {\n calculatorId: this.calculatorId,\n startDate,\n endDate,\n };\n }\n\n /**\n * Performs synchronous validation against the control.\n */\n public validate(value?: SkyDateRange): ValidationErrors | null {\n if (!this.#config.validate) {\n return null;\n }\n\n return this.#config.validate(value);\n }\n\n /**\n * Get a date object without time information.\n * See: https://stackoverflow.com/a/38050824/6178885\n */\n #parseDateWithoutTime(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n }\n}\n","/**\n * `SkyDateRangeCalculatorId` values specify calculator objects that return\n * two `Date` objects to represent date ranges. The values populate the options\n * in the date range picker's dropdown. SKY UX uses `SkyDateRangeService` to create\n * calculators and configures each one with a `validate` function to confirm that dates\n * are compatible. For example, `validate` functions ensure that start dates are before\n * end dates. SKY UX also configures calculators to call a `getValue` function after\n * the `validate` function and return a range of two `Date` objects.\n */\nexport enum SkyDateRangeCalculatorId {\n /**\n * Selects no dates and considers all dates within the date range. This is the default selection.\n */\n AnyTime,\n\n /**\n * Enables users to select an end date with no starting date.\n */\n Before,\n\n /**\n * Enables users to select a start date with no end date.\n */\n After,\n\n /**\n * Enables users to select specific start and end dates.\n */\n SpecificRange,\n\n /**\n * Sets the start and end dates to the day before the current day.\n */\n Yesterday,\n\n /**\n * Sets the start and end dates to the current day.\n */\n Today,\n\n /**\n * Sets the start and end dates to the day after the current day.\n */\n Tomorrow,\n\n /**\n * Sets the start date to Sunday of the week before the current week and\n * the end date to Saturday of that week.\n */\n LastWeek,\n\n /**\n * Sets the start date to Sunday of the current week and the end date to Saturday.\n */\n ThisWeek,\n\n /**\n * Sets the start date to Sunday of the week after the current week and\n * the end date to Saturday of that week.\n */\n NextWeek,\n\n /**\n * Sets the start date to the first day of the month before the current month and\n * the end date to the last day of that month.\n */\n LastMonth,\n\n /**\n * Sets the start date to the first day of the current month and\n * the end date to the last day of the month.\n */\n ThisMonth,\n\n /**\n * Sets the start date to the first day of the month after the current month\n * and the end date to the last day of that month.\n */\n NextMonth,\n\n /**\n * Sets the start date to the first day of the quarter before the current quarter and\n * the end date to the last day of that quarter. Quarters are\n * January to March, April to June, July to September, and October to December.\n */\n LastQuarter,\n\n /**\n * Sets the start date to the first day of the current quarter and\n * the end date to the last day of the quarter. Quarters are\n * January to March, April to June, July to September, and October to December.\n */\n ThisQuarter,\n\n /**\n * Sets the start date to the first day of the quarter after the current quarter and\n * the end date to the last day of that quarter. Quarters are\n * January to March, April to June, July to September, and October to December.\n */\n NextQuarter,\n\n /**\n * Sets the start date to the first day of the year before the current year\n * and the end date to the last day of that year.\n */\n LastCalendarYear,\n\n /**\n * Sets the start date to the first day of the current year and\n * the end date to the last day of the year.\n */\n ThisCalendarYear,\n\n /**\n * Sets the start date to the first day of the year after the current year and\n * the end date to the last day of that year.\n */\n NextCalendarYear,\n\n /**\n * Sets the start date to the first day of the fiscal year before the current fiscal year and\n * the end date to the last day of that fiscal year. The fiscal year is Oct. 1 to Sept. 30.\n */\n LastFiscalYear,\n\n /**\n * Sets the start date to the first day of the current fiscal year and\n * the end date to the last day of the fiscal year. The fiscal year is Oct. 1 to Sept. 30.\n */\n ThisFiscalYear,\n\n /**\n * Sets the start date to the first day of the fiscal year after the current fiscal year\n * and the end date to the last day of that fiscal year. The fiscal year is Oct. 1 to Sept. 30.\n */\n NextFiscalYear,\n}\n","import { SkyDateRange } from './date-range';\n\n/**\n * Need to add the following to classes which contain static methods.\n * See: https://github.com/ng-packagr/ng-packagr/issues/641\n * @internal\n */\nexport abstract class SkyDateRangeRelativeValue {\n public static get today(): SkyDateRange {\n const today = new Date();\n\n return {\n startDate: today,\n endDate: today,\n };\n }\n\n public static get tomorrow(): SkyDateRange {\n const tomorrow = new Date();\n\n tomorrow.setDate(tomorrow.getDate() + 1);\n\n return {\n startDate: tomorrow,\n endDate: tomorrow,\n };\n }\n\n public static get yesterday(): SkyDateRange {\n const yesterday = new Date();\n\n yesterday.setDate(yesterday.getDate() - 1);\n\n return {\n startDate: yesterday,\n endDate: yesterday,\n };\n }\n\n /**\n * A date range starting with the nearest past Sunday and ending with the following Saturday.\n */\n public static get thisWeek(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - startDate.getDay());\n\n const endDate = new Date();\n endDate.setDate(endDate.getDate() - endDate.getDay() + 6);\n\n return {\n startDate,\n endDate,\n };\n }\n\n /**\n * A date range starting with the nearest upcoming Sunday and ending with the following Saturday.\n */\n public static get nextWeek(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - startDate.getDay() + 7);\n\n const endDate = new Date();\n endDate.setDate(endDate.getDate() - endDate.getDay() + 13);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get lastWeek(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - startDate.getDay() - 7);\n\n const endDate = new Date();\n endDate.setDate(endDate.getDate() - endDate.getDay() - 1);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get thisMonth(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n\n const endDate = new Date();\n endDate.setMonth(endDate.getMonth() + 1);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get nextMonth(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(startDate.getMonth() + 1);\n\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(endDate.getMonth() + 2);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get lastMonth(): SkyDateRange {\n const startDate = new Date();\n\n // First, set the day of the month to zero,\n // which points to the last day of the previous month.\n startDate.setDate(0);\n\n // Finally, set the day of the month to 1.\n startDate.setDate(1);\n\n const endDate = new Date();\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get thisQuarter(): SkyDateRange {\n const startDate = new Date();\n const endDate = new Date();\n\n const currentMonth = startDate.getMonth();\n const quarterStartMonth =\n SkyDateRangeRelativeValue.getQuarterStartMonth(currentMonth);\n\n startDate.setMonth(quarterStartMonth);\n startDate.setDate(1);\n\n endDate.setMonth(quarterStartMonth + 3);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get nextQuarter(): SkyDateRange {\n const startDate = new Date();\n const endDate = new Date();\n\n const currentMonth = startDate.getMonth();\n const quarterStartMonth =\n SkyDateRangeRelativeValue.getQuarterStartMonth(currentMonth);\n\n startDate.setMonth(quarterStartMonth + 3);\n startDate.setDate(1);\n\n endDate.setMonth(quarterStartMonth + 6);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get lastQuarter(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n\n const endDate = new Date();\n endDate.setDate(1);\n\n const currentMonth = startDate.getMonth();\n const quarterStartMonth =\n SkyDateRangeRelativeValue.getQuarterStartMonth(currentMonth);\n\n startDate.setMonth(quarterStartMonth - 3);\n startDate.setDate(1);\n\n endDate.setMonth(quarterStartMonth);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get thisCalendarYear(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(0);\n\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(0);\n endDate.setFullYear(endDate.getFullYear() + 1);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get nextCalendarYear(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(0);\n startDate.setFullYear(startDate.getFullYear() + 1);\n\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(0);\n endDate.setFullYear(startDate.getFullYear() + 1);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get lastCalendarYear(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(0);\n startDate.setFullYear(startDate.getFullYear() - 1);\n\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(0);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get thisFiscalYear(): SkyDateRange {\n const start = new Date();\n start.setDate(1);\n\n return SkyDateRangeRelativeValue.getClosestFiscalYearRange(start);\n }\n\n public static get nextFiscalYear(): SkyDateRange {\n const start = new Date();\n start.setDate(1);\n start.setFullYear(start.getFullYear() + 1);\n\n return SkyDateRangeRelativeValue.getClosestFiscalYearRange(start);\n }\n\n public static get lastFiscalYear(): SkyDateRange {\n const start = new Date();\n start.setDate(1);\n start.setFullYear(start.getFullYear() - 1);\n\n return SkyDateRangeRelativeValue.getClosestFiscalYearRange(start);\n }\n\n private static getQuarterStartMonth(currentMonth: number): number {\n let month: number;\n if (currentMonth < 3) {\n month = 0;\n } else if (currentMonth < 6) {\n month = 3;\n } else if (currentMonth < 9) {\n month = 6;\n } else {\n month = 9;\n }\n\n return month;\n }\n\n /**\n * Return a fiscal year based on a start date.\n * (The fiscal year starts in October and continues through to next September.)\n */\n private static getClosestFiscalYearRange(startDate: Date): SkyDateRange {\n const endDate = new Date(startDate);\n\n if (startDate.getMonth() >= 9) {\n startDate.setMonth(9);\n endDate.setFullYear(startDate.getFullYear() + 1);\n endDate.setMonth(9);\n endDate.setDate(0);\n } else {\n startDate.setFullYear(startDate.getFullYear() - 1);\n startDate.setMonth(9);\n endDate.setMonth(9);\n endDate.setDate(0);\n }\n\n return {\n startDate,\n endDate,\n };\n }\n}\n","import { ValidationErrors } from '@angular/forms';\n\nimport { SkyDateRangeCalculatorId } from './date-range-calculator-id';\nimport { SkyDateRangeCalculatorType } from './date-range-calculator-type';\nimport { SkyDateRangeDefaultCalculatorConfig } from './date-range-default-calculator-config';\nimport { SkyDateRangeRelativeValue } from './date-range-relative-value';\n\nexport const SKY_DEFAULT_CALCULATOR_IDS: SkyDateRangeCalculatorId[] = [\n SkyDateRangeCalculatorId.AnyTime,\n SkyDateRangeCalculatorId.Before,\n SkyDateRangeCalculatorId.After,\n SkyDateRangeCalculatorId.SpecificRange,\n SkyDateRangeCalculatorId.Yesterday,\n SkyDateRangeCalculatorId.Today,\n SkyDateRangeCalculatorId.Tomorrow,\n SkyDateRangeCalculatorId.LastWeek,\n SkyDateRangeCalculatorId.ThisWeek,\n SkyDateRangeCalculatorId.NextWeek,\n SkyDateRangeCalculatorId.LastMonth,\n SkyDateRangeCalculatorId.ThisMonth,\n SkyDateRangeCalculatorId.NextMonth,\n SkyDateRangeCalculatorId.LastQuarter,\n SkyDateRangeCalculatorId.ThisQuarter,\n SkyDateRangeCalculatorId.NextQuarter,\n SkyDateRangeCalculatorId.LastCalendarYear,\n SkyDateRangeCalculatorId.ThisCalendarYear,\n SkyDateRangeCalculatorId.NextCalendarYear,\n SkyDateRangeCalculatorId.LastFiscalYear,\n SkyDateRangeCalculatorId.ThisFiscalYear,\n SkyDateRangeCalculatorId.NextFiscalYear,\n];\n\nexport const SKY_DEFAULT_CALCULATOR_CONFIGS: SkyDateRangeDefaultCalculatorConfig[] =\n [\n {\n calculatorId: SkyDateRangeCalculatorId.AnyTime,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_any_time',\n getValue: (startDate, endDate) => ({ startDate, endDate }),\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.Before,\n type: SkyDateRangeCalculatorType.Before,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_before',\n getValue: (startDate, endDate) => ({ startDate, endDate }),\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.After,\n type: SkyDateRangeCalculatorType.After,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_after',\n getValue: (startDate, endDate) => ({ startDate, endDate }),\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.SpecificRange,\n type: SkyDateRangeCalculatorType.Range,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_specific_range',\n getValue: (startDate, endDate) => ({ startDate, endDate }),\n validate: (value): ValidationErrors | null => {\n if (\n value &&\n value.startDate &&\n value.endDate &&\n value.startDate > value.endDate\n ) {\n return {\n endDateBeforeStartDate: true,\n };\n }\n return null;\n },\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.LastFiscalYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_last_fiscal_year',\n getValue: () => SkyDateRangeRelativeValue.lastFiscalYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.LastMonth,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_last_month',\n getValue: () => SkyDateRangeRelativeValue.lastMonth,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.LastQuarter,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_last_quarter',\n getValue: () => SkyDateRangeRelativeValue.lastQuarter,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.LastWeek,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_last_week',\n getValue: () => SkyDateRangeRelativeValue.lastWeek,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.LastCalendarYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_last_calendar_year',\n getValue: () => SkyDateRangeRelativeValue.lastCalendarYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.NextFiscalYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_next_fiscal_year',\n getValue: () => SkyDateRangeRelativeValue.nextFiscalYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.NextMonth,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_next_month',\n getValue: () => SkyDateRangeRelativeValue.nextMonth,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.NextQuarter,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_next_quarter',\n getValue: () => SkyDateRangeRelativeValue.nextQuarter,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.NextWeek,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_next_week',\n getValue: () => SkyDateRangeRelativeValue.nextWeek,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.NextCalendarYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_next_calendar_year',\n getValue: () => SkyDateRangeRelativeValue.nextCalendarYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.ThisFiscalYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_this_fiscal_year',\n getValue: () => SkyDateRangeRelativeValue.thisFiscalYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.ThisMonth,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_this_month',\n getValue: () => SkyDateRangeRelativeValue.thisMonth,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.ThisQuarter,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_this_quarter',\n getValue: () => SkyDateRangeRelativeValue.thisQuarter,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.ThisWeek,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_this_week',\n getValue: () => SkyDateRangeRelativeValue.thisWeek,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.ThisCalendarYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_this_calendar_year',\n getValue: () => SkyDateRangeRelativeValue.thisCalendarYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.Today,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_today',\n getValue: () => SkyDateRangeRelativeValue.today,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.Tomorrow,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_tomorrow',\n getValue: () => SkyDateRangeRelativeValue.tomorrow,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.Yesterday,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_yesterday',\n getValue: () => SkyDateRangeRelativeValue.yesterday,\n },\n ];\n","import { Injectable, inject } from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\n\nimport { SkyDateRangeCalculator } from './types/date-range-calculator';\nimport { SkyDateRangeCalculatorConfig } from './types/date-range-calculator-config';\nimport { SkyDateRangeCalculatorId } from './types/date-range-calculator-id';\nimport { SKY_DEFAULT_CALCULATOR_CONFIGS } from './types/date-range-default-calculator-configs';\n\n// Start the count higher than the number of available values\n// provided in the SkyDateRangeCalculatorId enum.\nlet lastId = 1000;\n\n/**\n * Creates and manages `SkyDateRangeCalculator` instances.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyDateRangeService {\n readonly #libResourcesSvc = inject(SkyLibResourcesService);\n\n public get calculators(): SkyDateRangeCalculator[] {\n return this.#calculators;\n }\n\n #calculators = this.#createDefaultCalculators();\n\n /**\n * Creates a custom date range calculator.\n * @param config The calculator config.\n */\n public createCalculator(\n config: SkyDateRangeCalculatorConfig,\n ): SkyDateRangeCalculator {\n const newId = lastId++;\n const calculator = new SkyDateRangeCalculator(\n newId,\n config,\n this.#libResourcesSvc,\n );\n\n this.#calculators.push(calculator);\n\n return calculator;\n }\n\n /**\n * Returns calculators from an array of calculator IDs.\n * @param calculatorIds The array of calculator IDs.\n */\n public filterCalculators(\n calculatorIds: SkyDateRangeCalculatorId[],\n ): SkyDateRangeCalculator[] {\n const filtered: SkyDateRangeCalculator[] = [];\n\n for (const calculatorId of calculatorIds) {\n const found = this.#calculators.find(\n (c) => c.calculatorId === calculatorId,\n );\n\n if (found) {\n filtered.push(found);\n }\n }\n\n return filtered;\n }\n\n /**\n * Returns calculators from an array of calculator IDs.\n * @param ids The array of calculator IDs.\n * @deprecated Call `filterCalculators()` instead.\n */\n public getCalculators(\n ids: SkyDateRangeCalculatorId[],\n ): Promise<SkyDateRangeCalculator[]> {\n const promises = ids.map((id) => {\n return this.getCalculatorById(id);\n });\n\n return Promise.all(promises);\n }\n\n /**\n * Returns a calculator from a calculator ID.\n * @param id The calculator ID.\n * @deprecated Call `filterCalculators()` instead.\n */\n public getCalculatorById(\n id: SkyDateRangeCalculatorId,\n ): Promise<SkyDateRangeCalculator> {\n const calculatorId = +id;\n\n const found = this.#calculators.find((calculator) => {\n return calculator.calculatorId === calculatorId;\n });\n\n return new Promise((resolve, reject) => {\n if (!found) {\n reject(new Error(`A calculator with the ID ${id} was not found.`));\n return;\n }\n\n resolve(found);\n });\n }\n\n /**\n * Returns default date range calculators with unresolved resources strings.\n */\n #createDefaultCalculators(): SkyDateRangeCalculator[] {\n const calculators: SkyDateRangeCalculator[] = [];\n\n for (const defaultConfig of SKY_DEFAULT_CALCULATOR_CONFIGS) {\n calculators.push(\n new SkyDateRangeCalculator(\n defaultConfig.calculatorId,\n {\n getValue: defaultConfig.getValue,\n validate: defaultConfig.validate,\n shortDescription: '',\n type: defaultConfig.type,\n },\n this.#libResourcesSvc,\n defaultConfig.shortDescriptionResourceKey,\n ),\n );\n }\n\n return calculators;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n HostBinding,\n Injector,\n Input,\n Signal,\n TemplateRef,\n booleanAttribute,\n computed,\n inject,\n runInInjectionContext,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n ReactiveFormsModule,\n StatusChangeEvent,\n TouchedChangeEvent,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyLogService } from '@skyux/core';\nimport {\n SKY_FORM_ERRORS_ENABLED,\n SkyFormErrorsModule,\n SkyInputBoxModule,\n} from '@skyux/forms';\n\nimport { distinctUntilChanged, filter, map } from 'rxjs';\n\nimport { SkyDatepickerComponent } from '../datepicker/datepicker.component';\nimport { SkyDatepickerModule } from '../datepicker/datepicker.module';\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\n\nimport { SkyDateRangePickerEndDateResourceKeyPipe } from './date-range-picker-end-date-resource-key.pipe';\nimport { SkyDateRangePickerStartDateResourceKeyPipe } from './date-range-picker-start-date-resource-key.pipe';\nimport { SkyDateRangeService } from './date-range.service';\nimport { SkyDateRangeCalculation } from './types/date-range-calculation';\nimport { SkyDateRangeCalculator } from './types/date-range-calculator';\nimport { SkyDateRangeCalculatorId } from './types/date-range-calculator-id';\nimport { SkyDateRangeCalculatorType } from './types/date-range-calculator-type';\nimport { SKY_DEFAULT_CALCULATOR_IDS } from './types/date-range-default-calculator-configs';\n\ntype DateValue = Date | string | null | undefined;\n\nfunction areDateRangesEqual(\n rangeA: SkyDateRangeCalculation | undefined,\n rangeB: SkyDateRangeCalculation | undefined,\n): boolean {\n return (\n !!rangeA &&\n !!rangeB &&\n rangeA.calculatorId === rangeB.calculatorId &&\n areDatesEqual(rangeA.startDate, rangeB.startDate) &&\n areDatesEqual(rangeA.endDate, rangeB.endDate)\n );\n}\n\nfunction areDatesEqual(a: DateValue, b: DateValue): boolean {\n if (typeof a !== typeof b) {\n return false;\n }\n\n if (!a && !b) {\n return true;\n }\n\n if (typeof a === 'string' && a === b) {\n return true;\n }\n\n return a instanceof Date && b instanceof Date && a.getTime() === b.getTime();\n}\n\nfunction isNullOrUndefined(value: unknown): value is undefined | null {\n return value === undefined || value === null;\n}\n\nfunction isPartialValue(\n value: Partial<SkyDateRangeCalculation> | null | undefined,\n): value is Partial<SkyDateRangeCalculation> | null | undefined {\n return (\n isNullOrUndefined(value) ||\n isNullOrUndefined(value.calculatorId) ||\n !('endDate' in value) ||\n !('startDate' in value)\n );\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(focusout)': 'onFocusout($event)',\n },\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SkyDatepickerModule,\n SkyDateRangePickerEndDateResourceKeyPipe,\n SkyDateRangePickerStartDateResourceKeyPipe,\n SkyDatetimeResourcesModule,\n SkyInputBoxModule,\n SkyFormErrorsModule,\n ],\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: SkyDateRangePickerComponent,\n multi: true,\n },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SkyDateRangePickerComponent,\n multi: true,\n },\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n selector: 'sky-date-range-picker',\n styleUrl: './date-range-picker.component.scss',\n templateUrl: './date-range-picker.component.html',\n})\nexport class SkyDateRangePickerComponent\n implements AfterViewInit, ControlValueAccessor, Validator\n{\n readonly #dateRangeSvc = inject(SkyDateRangeService);\n readonly #destroyRef = inject(DestroyRef);\n readonly #elementRef = inject(ElementRef);\n readonly #injector = inject(Injector);\n readonly #logger = inject(SkyLogService);\n\n /**\n * IDs for the date range options to include in the picker's dropdown.\n * The options specify calculator objects that return two `Date` objects to represent date ranges.\n * By default, this property includes all `SkyDateRangeCalculatorId` values.\n */\n @Input()\n public set calculatorIds(\n calculatorIds: SkyDateRangeCalculatorId[] | undefined,\n ) {\n const currentCalculatorId = this.#getValue().calculatorId;\n\n this.#_calculatorIds = calculatorIds ?? SKY_DEFAULT_CALCULATOR_IDS;\n this.calculators = this.#dateRangeSvc.filterCalculators(\n this.#_calculatorIds,\n );\n\n // If the currently selected calculator isn't available anymore,\n // select the first calculator in the new array.\n if (!this.#_calculatorIds.includes(currentCalculatorId)) {\n this.#setValue({ calculatorId: this.calculatorIds[0] });\n }\n }\n\n public get calculatorIds(): SkyDateRangeCalculatorId[] {\n return this.#_calculatorIds;\n }\n\n /**\n * The date format for\n * [the `sky-datepicker` components](https://developer.blackbaud.com/skyux/components/datepicker)\n * that make up the date range picker. The text input is a composite component of\n * up to two `sky-datepicker` components.\n * @default \"MM/DD/YYYY\"\n */\n @Input()\n public dateFormat: string | undefined;\n\n /**\n * Whether to disable the date range picker on template-driven forms. Don't use\n * this input on reactive forms because they may overwrite the input or leave\n * the control out of sync. To set the disabled state on reactive forms,\n * use the `FormControl` instead.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n if (value) {\n this.formGroup.disable();\n } else {\n this.formGroup.enable();\n }\n }\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to date range picker. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * The label for the date range picker.\n * @deprecated Use the `labelText` input instead.\n */\n @Input()\n public set label(value: string | undefined) {\n this.#_label = value;\n\n if (value) {\n this.#logger.deprecated('SkyDateRangePickerComponent.label', {\n deprecationMajorVersion: 10,\n replacementRecommendation: 'Use the `labelText` input instead.',\n });\n }\n }\n\n public get label(): string | undefined {\n return this.#_label;\n }\n\n /**\n * The text to display as the date range picker's label.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Whether the date range picker is stacked on another form component. When specified, the appropriate\n * vertical spacing is automatically added to the date range picker.\n */\n @Input({ transform: booleanAttribute })\n @HostBinding('class.sky-form-field-stacked')\n public stacked = false;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the date range picker label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n protected calculators = this.#dateRangeSvc.calculators;\n protected datepickers = viewChildren(SkyDatepickerComponent);\n protected hostControl: AbstractControl | null | undefined;\n protected selectedCalculator = this.calculators[0];\n protected showEndDatePicker = signal<boolean>(false);\n protected showStartDatePicker = signal<boolean>(false);\n\n #_calculatorIds = SKY_DEFAULT_CALCULATOR_IDS;\n #_label: string | undefined;\n #_value = this.selectedCalculator.getValue();\n\n #hostHasCustomError: Signal<boolean | undefined> | undefined;\n #notifyChange: ((_: SkyDateRangeCalculation) => void) | undefined;\n #notifyTouched: (() => void) | undefined;\n\n #calculatorIdControl = new FormControl<number>(\n this.#getValue().calculatorId,\n { nonNullable: true },\n );\n #calculatorIdInvalid = this.#createStatusChangeSignal(\n this.#calculatorIdControl,\n );\n #calculatorIdTouched = this.#createTouchedChangeSignal(\n this.#calculatorIdControl,\n );\n\n #endDateControl = new FormControl<DateValue>(this.#getValue().endDate);\n #endDateInvalid = this.#createStatusChangeSignal(this.#endDateControl);\n #endDateTouched = this.#createTouchedChangeSignal(this.#endDateControl);\n\n #startDateControl = new FormControl<DateValue>(this.#getValue().startDate);\n #startDateInvalid = this.#createStatusChangeSignal(this.#startDateControl);\n #startDateTouched = this.#createTouchedChangeSignal(this.#startDateControl);\n\n protected formGroup = inject(FormBuilder).group({\n calculatorId: this.#calculatorIdControl,\n startDate: this.#startDateControl,\n endDate: this.#endDateControl,\n });\n\n protected readonly calculatorIdHasErrors = computed(() => {\n const touched = this.#calculatorIdTouched();\n const invalid = this.#calculatorIdInvalid() || this.#hostHasCustomError?.();\n return touched && invalid;\n });\n\n protected readonly endDateHasErrors = computed(() => {\n const calculatorIdHasErrors = this.calculatorIdHasErrors();\n const touched = this.#endDateTouched();\n const invalid = this.#endDateInvalid();\n\n return calculatorIdHasErrors || (touched && invalid);\n });\n\n protected readonly startDateHasErrors = computed(() => {\n const calculatorIdHasErrors = this.calculatorIdHasErrors();\n const touched = this.#startDateTouched();\n const invalid = this.#startDateInvalid();\n\n return calculatorIdHasErrors || (touched && invalid);\n });\n\n public ngAfterViewInit(): void {\n this.hostControl = this.#injector.get(NgControl, null, {\n optional: true,\n self: true,\n })?.control;\n\n runInInjectionContext(this.#injector, () => {\n if (this.hostControl) {\n this.#hostHasCustomError = this.#createHostCustomErrorChangeSignal(\n this.hostControl,\n );\n }\n });\n\n // Set a default value on the control if it's undefined on init.\n // We need to use setTimeout to avoid interfering with the first\n // validation cycle.\n if (isPartialValue(this.hostControl?.value)) {\n setTimeout(() => {\n this.hostControl?.setValue(this.#getValue(), {\n emitEvent: false,\n });\n });\n }\n\n // If the datepickers' statuses change, we want to retrigger the host\n // control's validation so that their errors are reflected back to the host.\n this.formGroup.events\n .pipe(\n filter((evt) => evt instanceof StatusChangeEvent),\n map((evt: StatusChangeEvent) => evt.status),\n distinctUntilChanged(),\n takeUntilDestroyed(this.#destroyRef),\n )\n .subscribe(() => {\n this.hostControl?.updateValueAndValidity({\n emitEvent: false,\n onlySelf: true,\n });\n });\n\n // Mark all fields as touched if the host control is touched.\n this.hostControl?.events\n .pipe(\n filter((evt) => evt instanceof TouchedChangeEvent),\n map((evt: TouchedChangeEvent) => evt.touched),\n distinctUntilChanged(),\n takeUntilDestroyed(this.#destroyRef),\n )\n .subscribe(() => {\n this.formGroup.markAllAsTouched();\n });\n }\n\n // Implemented as part of ControlValueAccessor.\n public registerOnChange(fn: (_: unknown) => void): void {\n this.#notifyChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n public registerOnTouched(fn: () => void): void {\n this.#notifyTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // Implemented as part of Validator.\n public validate(control: AbstractControl): ValidationErrors | null {\n let errors: ValidationErrors | null = null;\n\n const calculatorErrors = this.selectedCalculator.validate(control.value);\n const startDateErrors = this.#startDateControl.errors;\n const endDateErrors = this.#endDateControl.errors;\n\n if (calculatorErrors) {\n errors = {\n skyDateRange: {\n calculatorId: this.#getValue().calculatorId,\n errors: calculatorErrors,\n },\n };\n }\n\n // Set calculator errors on the select so that they appear beneath it.\n this.#calculatorIdControl.setErrors(errors);\n\n if (this.showStartDatePicker() && startDateErrors) {\n errors ||= {};\n errors = { ...errors, ...startDateErrors };\n }\n\n if (this.showEndDatePicker() && endDateErrors) {\n errors ||= {};\n errors = { ...errors, ...endDateErrors };\n }\n\n return errors;\n }\n\n // Implemented as part of ControlValueAccessor.\n // The date range picker always has a value, so if the consumer passes in a\n // partial value (via `patchValue`) or null, we need to update the host control's\n // value with the complete value after it's been modified.\n public writeValue(value: Partial<SkyDateRangeCalculation> | undefined): void {\n this.#patchValue(value);\n\n // Update the host control if it is set to a partial or null value.\n if (isPartialValue(value)) {\n this.hostControl?.setValue(this.#getValue(), {\n emitEvent: false,\n onlySelf: true,\n });\n }\n }\n\n /**\n * Fires when a user changes the selected calculator ID.\n */\n protected onCalculatorIdChange(): void {\n // Reset the value when the calculator ID changes.\n this.#setValue({ calculatorId: +this.#calculatorIdControl.value });\n this.onDateChange();\n }\n\n /**\n * Fires when a user interacts with a date range picker.\n */\n protected onDateChange(): void {\n // Wait until the form control is updated before retrieving its value.\n setTimeout(() => {\n this.#notifyChange?.(\n this.formGroup.getRawValue() as SkyDateRangeCalculation,\n );\n });\n }\n\n /**\n * Fires when the date range picker loses focus.\n */\n protected onFocusout({ relatedTarget }: FocusEvent): void {\n if (\n relatedTarget &&\n !this.#elementRef.nativeElement.contains(relatedTarget) &&\n !this.datepickers().some((picker) => picker.containsTarget(relatedTarget))\n ) {\n this.#notifyTouched?.();\n }\n }\n\n #getCalculator(calculatorId: number): SkyDateRangeCalculator {\n const found = this.calculators.find((c) => c.calculatorId === calculatorId);\n\n /*istanbul ignore if: safety check*/\n if (!found) {\n throw new Error(\n `A date range calculator with ID (${calculatorId}) could not be found.`,\n );\n }\n\n return found;\n }\n\n #getValue(): SkyDateRangeCalculation {\n // Important! Return a clone to avoid changing the properties by reference.\n return { ...this.#_value };\n }\n\n #patchValue(\n partialValue: Partial<SkyDateRangeCalculation> | null | undefined,\n ): void {\n if (isNullOrUndefined(partialValue)) {\n this.#setValue(null);\n return;\n }\n\n const oldValue = this.#getValue();\n\n // If the new ID is distinct, erase the old start and end dates because\n // they're no longer applicable.\n if (\n !isNullOrUndefined(partialValue.calculatorId) &&\n oldValue.calculatorId !== partialValue.calculatorId\n ) {\n delete oldValue.endDate;\n delete oldValue.startDate;\n }\n\n const value = {\n ...oldValue,\n ...partialValue,\n };\n\n this.#setValue(value);\n }\n\n /**\n * Sets the value to be used by the date range picker form control.\n */\n #setValue(value: SkyDateRangeCalculation | null | undefined): void {\n const oldValue = this.#getValue();\n\n const isValueEmpty = !value || isNullOrUndefined(value.calculatorId);\n const valueOrDefault = isValueEmpty\n ? this.calculators[0].getValue()\n : {\n ...this.#getCalculator(value.calculatorId).getValue(),\n ...value,\n };\n\n // Ensure falsy values are set to null.\n valueOrDefault.endDate = valueOrDefault.endDate || null;\n valueOrDefault.startDate = valueOrDefault.startDate || null;\n\n if (!areDateRangesEqual(oldValue, valueOrDefault)) {\n this.#_value = valueOrDefault;\n\n if (oldValue.calculatorId !== valueOrDefault.calculatorId) {\n this.selectedCalculator = this.#getCalculator(\n valueOrDefault.calculatorId,\n );\n\n this.#updatePickerVisibility(this.selectedCalculator);\n }\n\n this.formGroup.patchValue(valueOrDefault);\n }\n }\n\n #updatePickerVisibility(calculator: SkyDateRangeCalculator): void {\n let showEndDatePicker = false;\n let showStartDatePicker = false;\n\n switch (calculator.type) {\n case SkyDateRangeCalculatorType.Before:\n showEndDatePicker = true;\n break;\n\n case SkyDateRangeCalculatorType.After:\n showStartDatePicker = true;\n break;\n\n case SkyDateRangeCalculatorType.Range:\n showEndDatePicker = true;\n showStartDatePicker = true;\n break;\n\n default:\n break;\n }\n\n this.showEndDatePicker.set(showEndDatePicker);\n this.showStartDatePicker.set(showStartDatePicker);\n }\n\n #createHostCustomErrorChangeSignal(\n control: AbstractControl,\n ): Signal<boolean | undefined> {\n return toSignal(\n control.events.pipe(\n filter((evt) => evt instanceof StatusChangeEvent),\n map((evt: StatusChangeEvent) => {\n const errors = evt.source.errors ?? [];\n const knownErrors = ['required', 'skyDate'];\n\n return Object.keys(errors).some((error) => {\n return !knownErrors.includes(error);\n });\n }),\n ),\n );\n }\n\n #createStatusChangeSignal(control: FormControl): Signal<boolean | undefined> {\n return toSignal(\n control.events.pipe(\n filter((evt) => evt instanceof StatusChangeEvent),\n map((evt: StatusChangeEvent) => evt.status === 'INVALID'),\n takeUntilDestroyed(this.#destroyRef),\n ),\n );\n }\n\n #createTouchedChangeSignal(\n control: FormControl,\n ): Signal<boolean | undefined> {\n return toSignal(\n control.events.pipe(\n filter((evt) => evt instanceof TouchedChangeEvent),\n map((evt: TouchedChangeEvent) => evt.touched),\n takeUntilDestroyed(this.#destroyRef),\n ),\n );\n }\n}\n","<div class=\"sky-date-range-picker\" [formGroup]=\"formGroup\">\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-picker-select-calculator\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n !showStartDatePicker() && !showEndDatePicker()\n }\"\n >\n <sky-input-box\n [hasErrors]=\"calculatorIdHasErrors()\"\n [helpKey]=\"helpKey\"\n [helpPopoverContent]=\"helpPopoverContent\"\n [helpPopoverTitle]=\"helpPopoverTitle\"\n [hintText]=\"hintText\"\n [labelText]=\"\n labelText ||\n label ||\n ('skyux_date_range_picker_default_label' | skyLibResources)\n \"\n >\n <select formControlName=\"calculatorId\" (change)=\"onCalculatorIdChange()\">\n @for (calculator of calculators; track calculator.calculatorId) {\n <option [value]=\"calculator.calculatorId\">\n {{ calculator.shortDescription$ | async }}\n </option>\n }\n </select>\n @if (\n hostControl?.errors?.['skyDateRange']?.errors?.[\n 'endDateBeforeStartDate'\n ] && labelText\n ) {\n <sky-form-error\n errorName=\"endDateBeforeStartDate\"\n [errorText]=\"\n 'skyux_date_range_picker_end_date_before_start_date_error_label_text'\n | skyLibResources\n \"\n />\n }\n <span class=\"sky-input-box-descendent-form-error\">\n <ng-content select=\"sky-form-error\" />\n </span>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper sky-date-range-picker-start-date\"\n [hidden]=\"!showStartDatePicker()\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n showStartDatePicker() && !showEndDatePicker()\n }\"\n >\n <sky-input-box\n [hasErrors]=\"startDateHasErrors()\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker (calendarDateChange)=\"onDateChange()\">\n <input\n formControlName=\"startDate\"\n name=\"startDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showStartDatePicker()\"\n (change)=\"onDateChange()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper sky-date-range-picker-end-date\"\n [hidden]=\"!showEndDatePicker()\"\n [ngClass]=\"{ 'sky-date-range-picker-last-input': showEndDatePicker() }\"\n >\n <sky-input-box\n [hasErrors]=\"endDateHasErrors()\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker (calendarDateChange)=\"onDateChange()\">\n <input\n formControlName=\"endDate\"\n name=\"endDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showEndDatePicker()\"\n (change)=\"onDateChange()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { SkyFormErrorModule } from '@skyux/forms';\n\nimport { SkyDateRangePickerComponent } from './date-range-picker.component';\n\n@NgModule({\n exports: [SkyDateRangePickerComponent, SkyFormErrorModule],\n imports: [SkyDateRangePickerComponent],\n})\nexport class SkyDateRangePickerModule {}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n Inject,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {\n SKY_STACKING_CONTEXT,\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyCoreAdapterService,\n SkyOverlayInstance,\n SkyOverlayService,\n SkyStackingContext,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport moment from 'moment';\nimport { Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyTimepickerTimeFormatType } from './timepicker-time-format-type';\nimport { SkyTimepickerTimeOutput } from './timepicker-time-output';\n\nlet nextId = 0;\n\n/**\n * Creates a SKY UX-themed replacement for the HTML `input` element with `type=\"time\"`.\n * The value that users select is driven through the `ngModel` attribute\n * specified on the `input` element. You must wrap this component around an `input`\n * with the `skyTimepickerInput` directive.\n */\n@Component({\n selector: 'sky-timepicker',\n templateUrl: './timepicker.component.html',\n styleUrls: ['./timepicker.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyTimepickerComponent implements OnInit, OnDestroy {\n /**\n * Fires when the value in the timepicker input changes.\n */\n @Output()\n public selectedTimeChanged: EventEmitter<SkyTimepickerTimeOutput> =\n new EventEmitter<SkyTimepickerTimeOutput>();\n\n public set disabled(value: boolean) {\n this.#_disabled = value;\n this.#changeDetector.markForCheck();\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n public set selectedHour(setHour: number) {\n let hourOffset = 0;\n if (this.selectedMeridies === 'AM' && setHour === 12) {\n hourOffset = -12;\n }\n if (this.selectedMeridies === 'PM' && setHour !== 12) {\n hourOffset = 12;\n }\n if (this.is8601) {\n hourOffset = 0;\n }\n const hour = moment({ hour: setHour }).add(hourOffset, 'hours').hour();\n\n this.activeTime = moment({\n hour: hour,\n minute: moment(this.activeTime).get('minute') + 0,\n }).toDate();\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n\n public get selectedHour(): number {\n if (!this.is8601) {\n /* istanbul ignore next */\n return parseInt(moment(this.activeTime).format('h'), 0) || 1;\n } else {\n return moment(this.activeTime).hour() + 0;\n }\n }\n\n public set selectedMeridies(meridies: string) {\n meridies = meridies.trim();\n /* istanbul ignore else */\n if (meridies !== this.selectedMeridies) {\n switch (meridies) {\n case 'AM':\n this.activeTime = moment(this.activeTime)\n .subtract(12, 'hours')\n .toDate();\n break;\n\n case 'PM':\n this.activeTime = moment(this.activeTime).add(12, 'hours').toDate();\n break;\n }\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n }\n\n public get selectedMeridies(): string {\n if (this.activeTime) {\n return moment(this.activeTime).format('A');\n }\n return '';\n }\n\n public set selectedMinute(minute: number) {\n this.activeTime = moment({\n hour: moment(this.activeTime).get('hour') + 0,\n minute: minute,\n }).toDate();\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n\n public get selectedMinute(): number {\n return moment(this.activeTime).minute() + 0;\n }\n\n public set selectedTime(newTime: SkyTimepickerTimeOutput | undefined) {\n if (typeof newTime !== 'undefined') {\n /* sanity check */\n /* istanbul ignore else */\n if (newTime.local !== 'Invalid date') {\n this.activeTime = newTime.iso8601;\n this.#changeDetector.markForCheck();\n }\n }\n }\n\n public get selectedTime(): SkyTimepickerTimeOutput | undefined {\n const time: SkyTimepickerTimeOutput = {\n hour: moment(this.activeTime).hour(),\n minute: moment(this.activeTime).minute(),\n meridie: moment(this.activeTime).format('A'),\n timezone: parseInt(moment(this.activeTime).format('Z'), 10),\n iso8601: this.activeTime,\n local: moment(this.activeTime).format(this.localeFormat),\n customFormat:\n typeof this.returnFormat !== 'undefined'\n ? this.returnFormat\n : this.localeFormat,\n };\n\n return time;\n }\n\n public activeTime: Date = new Date();\n\n public hours: number[] = [];\n\n public is8601 = false;\n\n public isOpen = false;\n\n public isVisible = false;\n\n public localeFormat = 'h:mm A';\n\n public minutes: number[] = [];\n\n public minuteMultiplier: number | undefined;\n\n public returnFormat: string | undefined;\n\n public timeFormat: SkyTimepickerTimeFormatType = 'hh';\n\n public timepickerId: string;\n\n public triggerButtonId: string;\n\n @ViewChild('timepickerRef', { read: ElementRef })\n public set timepickerRef(value: ElementRef | undefined) {\n if (value) {\n this.#_timepickerRef = value;\n\n this.#addKeyupListener();\n\n // Wait for the timepicker component to render before gauging dimensions.\n setTimeout(() => {\n this.#destroyAffixer();\n this.#createAffixer();\n\n setTimeout(() => {\n if (this.timepickerRef) {\n this.#coreAdapter.getFocusableChildrenAndApplyFocus(\n this.timepickerRef,\n '.sky-timepicker-content',\n false,\n );\n }\n\n this.isVisible = true;\n this.#changeDetector.markForCheck();\n });\n });\n }\n }\n\n public get timepickerRef(): ElementRef | undefined {\n return this.#_timepickerRef;\n }\n\n @ViewChild('timepickerTemplateRef', { read: TemplateRef })\n public timepickerTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('triggerButtonRef', { read: ElementRef })\n public triggerButtonRef: ElementRef | undefined;\n\n @ViewChild('inputTemplateRef', { read: TemplateRef, static: true })\n public inputTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('triggerButtonTemplateRef', { read: TemplateRef, static: true })\n public triggerButtonTemplateRef: TemplateRef<unknown> | undefined;\n\n #affixer: SkyAffixer | undefined;\n\n #timepickerUnsubscribe = new Subject<void>();\n\n #ngUnsubscribe = new Subject<void>();\n\n #overlay: SkyOverlayInstance | undefined;\n\n #overlayKeyupListener: Subscription | undefined;\n\n #_disabled = false;\n\n #_timepickerRef: ElementRef | undefined;\n\n #affixService: SkyAffixService;\n #changeDetector: ChangeDetectorRef;\n #coreAdapter: SkyCoreAdapterService;\n readonly #environmentInjector = inject(EnvironmentInjector);\n #overlayService: SkyOverlayService;\n #zIndex: Observable<number> | undefined;\n\n constructor(\n affixService: SkyAffixService,\n changeDetector: ChangeDetectorRef,\n coreAdapter: SkyCoreAdapterService,\n overlayService: SkyOverlayService,\n @Optional() public inputBoxHostService?: SkyInputBoxHostService,\n @Optional() themeSvc?: SkyThemeService,\n @Optional()\n @Inject(SKY_STACKING_CONTEXT)\n stackingContext?: SkyStackingContext,\n ) {\n this.#affixService = affixService;\n this.#changeDetector = changeDetector;\n this.#coreAdapter = coreAdapter;\n this.#overlayService = overlayService;\n this.#zIndex = stackingContext?.zIndex;\n\n const uniqueId = nextId++;\n this.timepickerId = `sky-timepicker-${uniqueId}`;\n this.triggerButtonId = `sky-timepicker-button-${uniqueId}`;\n\n // Update icons when theme changes.\n themeSvc?.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n\n public ngOnInit(): void {\n this.setFormat(this.timeFormat);\n this.#addKeyupListener();\n\n if (this.inputBoxHostService && this.inputTemplateRef) {\n this.inputBoxHostService.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.triggerButtonTemplateRef,\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#removePickerEventListeners();\n this.#destroyAffixer();\n this.#destroyOverlay();\n }\n\n public setFormat(format: SkyTimepickerTimeFormatType): void {\n let h = 12;\n let m = 12;\n let minuteMultiplier = 5;\n let localeFormat = 'h:mm A';\n if (format === 'hh') {\n h = 12;\n m = 12;\n minuteMultiplier = 5;\n localeFormat = 'h:mm A';\n this.is8601 = false;\n }\n if (format === 'HH') {\n h = 24;\n m = 4;\n minuteMultiplier = 15;\n localeFormat = 'HH:mm';\n this.is8601 = true;\n }\n\n const data: {\n hours: number[];\n minutes: number[];\n localeFormat: string;\n minuteMultiplier: number;\n } = {\n // Create a sparse array with a length equal to the hour.\n hours: Array(...Array(h)).map((_, i) => {\n if (format === 'hh') {\n return ++i;\n }\n /* istanbul ignore else */\n if (format === 'HH') {\n return i;\n }\n /* istanbul ignore next */\n /* sanity check */\n return 0;\n }),\n // Create a sparse array with a length equal to the minute.\n minutes: Array(...Array(m)).map(function (_, i) {\n return i * minuteMultiplier;\n }),\n localeFormat: localeFormat,\n minuteMultiplier: minuteMultiplier,\n };\n\n this.hours = data.hours;\n this.minutes = data.minutes;\n this.localeFormat = data.localeFormat;\n this.minuteMultiplier = data.minuteMultiplier;\n }\n\n public onCloseButtonClick(): void {\n this.#closePicker();\n }\n\n public setTime(event: any): void {\n /* istanbul ignore else */\n if (typeof event !== 'undefined') {\n /* istanbul ignore else */\n if (event.type === 'click') {\n event.stopPropagation();\n if (event.target.name === 'hour') {\n this.selectedHour = parseInt(event.target.innerHTML, 0);\n }\n if (event.target.name === 'minute') {\n this.selectedMinute = parseInt(event.target.innerHTML, 0);\n }\n if (event.target.name === 'meridie') {\n this.selectedMeridies = event.target.innerHTML;\n }\n }\n }\n }\n\n public onTriggerButtonClick(): void {\n this.#openPicker();\n }\n\n protected highlightMinute(selectedMinute: number, minute: number): boolean {\n const radix = this.is8601 ? 15 : 5;\n return Math.floor(selectedMinute / radix) === minute / radix;\n }\n\n #closePicker(): void {\n this.#destroyAffixer();\n this.#destroyOverlay();\n this.#removePickerEventListeners();\n this.triggerButtonRef?.nativeElement.focus();\n this.isOpen = false;\n }\n\n #openPicker(): void {\n this.isVisible = false;\n this.#changeDetector.markForCheck();\n\n this.#removePickerEventListeners();\n this.#destroyOverlay();\n this.#createOverlay();\n\n this.isOpen = true;\n this.#changeDetector.markForCheck();\n }\n\n #createAffixer(): void {\n if (this.timepickerRef && this.triggerButtonRef) {\n const affixer = this.#affixService.createAffixer(this.timepickerRef);\n\n // Hide timepicker when trigger button is scrolled off screen.\n affixer.placementChange\n .pipe(takeUntil(this.#timepickerUnsubscribe))\n .subscribe((change) => {\n this.isVisible = change.placement !== null;\n this.#changeDetector.markForCheck();\n });\n\n affixer.affixTo(this.triggerButtonRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n horizontalAlignment: 'right',\n isSticky: true,\n placement: 'below',\n });\n\n this.#affixer = affixer;\n }\n }\n\n #destroyAffixer(): void {\n /*istanbul ignore else*/\n if (this.#affixer) {\n this.#affixer.destroy();\n this.#affixer = undefined;\n }\n }\n\n #createOverlay(): void {\n if (this.timepickerTemplateRef) {\n const overlay = this.#overlayService.create({\n enableClose: false,\n enablePointerEvents: false,\n environmentInjector: this.#environmentInjector,\n });\n\n if (this.#zIndex) {\n this.#zIndex\n .pipe(takeUntil(this.#timepickerUnsubscribe))\n .subscribe((zIndex) => {\n overlay.componentRef.instance.zIndex = zIndex.toString(10);\n });\n }\n\n overlay.backdropClick\n .pipe(takeUntil(this.#timepickerUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.#closePicker();\n }\n });\n\n overlay.attachTemplate(this.timepickerTemplateRef);\n\n this.#overlay = overlay;\n }\n }\n\n #destroyOverlay(): void {\n /*istanbul ignore else*/\n if (this.#overlay) {\n this.#overlayService.close(this.#overlay);\n this.#overlay = undefined;\n }\n }\n\n #addKeyupListener(): void {\n const timepickerMenuElement = this.timepickerRef?.nativeElement;\n\n if (timepickerMenuElement) {\n this.#overlayKeyupListener = fromEvent<KeyboardEvent>(\n timepickerMenuElement,\n 'keyup',\n )\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((event) => {\n const key = event.key?.toLowerCase();\n /* istanbul ignore else */\n if (key === 'escape' && this.isOpen) {\n this.#closePicker();\n event.stopPropagation();\n event.preventDefault();\n }\n });\n }\n }\n\n #removePickerEventListeners(): void {\n /* istanbul ignore else */\n if (this.#timepickerUnsubscribe) {\n this.#timepickerUnsubscribe.next();\n this.#timepickerUnsubscribe.complete();\n this.#timepickerUnsubscribe = new Subject<void>();\n }\n /* istanbul ignore next */\n this.#overlayKeyupListener?.unsubscribe();\n }\n}\n","<div class=\"sky-timepicker\">\n @if (!inputBoxHostService) {\n <div class=\"sky-input-group\">\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\" />\n <ng-container *ngTemplateOutlet=\"triggerButtonTemplateRef\" />\n </div>\n }\n</div>\n\n<ng-template #inputTemplateRef>\n <ng-content />\n</ng-template>\n\n<ng-template #triggerButtonTemplateRef>\n <div class=\"sky-input-group-btn\">\n <button\n #triggerButtonRef\n aria-haspopup=\"dialog\"\n class=\"sky-btn sky-btn-default sky-input-group-timepicker-btn\"\n type=\"button\"\n [attr.aria-controls]=\"isOpen ? timepickerId : null\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-label]=\"\n inputBoxHostService?.labelText\n ? ('skyux_timepicker_button_label_context'\n | skyLibResources: inputBoxHostService?.labelText)\n : ('skyux_timepicker_button_label' | skyLibResources)\n \"\n [attr.id]=\"triggerButtonId\"\n [attr.title]=\"\n inputBoxHostService?.labelText\n ? ('skyux_timepicker_button_label_context'\n | skyLibResources: inputBoxHostService?.labelText)\n : ('skyux_timepicker_button_label' | skyLibResources)\n \"\n [disabled]=\"disabled\"\n (click)=\"onTriggerButtonClick()\"\n >\n <sky-icon iconName=\"clock\" iconSize=\"l\" />\n </button>\n </div>\n</ng-template>\n\n<ng-template #timepickerTemplateRef>\n <div\n #timepickerRef\n class=\"sky-timepicker-container sky-shadow sky-box sky-elevation-4\"\n role=\"dialog\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n [attr.id]=\"timepickerId\"\n [class.sky-timepicker-hidden]=\"!isVisible\"\n >\n <div class=\"sky-timepicker-content\">\n <section\n class=\"sky-timepicker-column sky-timepicker-column-hours\"\n [ngClass]=\"{ 'sky-timepicker-24hour': is8601 }\"\n >\n <ol>\n @for (hour of hours; track hour) {\n <li>\n <button\n name=\"hour\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedHour === hour }\"\n (click)=\"setTime($event)\"\n >\n {{ hour }}\n </button>\n </li>\n }\n </ol>\n </section>\n <section class=\"sky-timepicker-column sky-timepicker-column-minutes\">\n <ol>\n @for (minute of minutes; track minute) {\n <li>\n <button\n name=\"minute\"\n type=\"button\"\n [ngClass]=\"{\n 'sky-btn-active': highlightMinute(selectedMinute, minute)\n }\"\n (click)=\"setTime($event)\"\n >\n {{ '00'.substring(0, 2 - minute.toString().length) + minute }}\n </button>\n </li>\n }\n </ol>\n </section>\n @if (!is8601) {\n <section class=\"sky-timepicker-column sky-timepicker-column-meridies\">\n <ol>\n <li>\n <button\n name=\"meridie\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedMeridies === 'AM' }\"\n (click)=\"setTime($event)\"\n >\n AM\n </button>\n </li>\n <li>\n <button\n name=\"meridie\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedMeridies === 'PM' }\"\n (click)=\"setTime($event)\"\n >\n PM\n </button>\n </li>\n </ol>\n </section>\n }\n </div>\n <div class=\"sky-timepicker-footer\">\n <section class=\"sky-timepicker-column\">\n <button\n class=\"sky-btn sky-btn-primary\"\n type=\"button\"\n (click)=\"onCloseButtonClick()\"\n >\n {{ 'skyux_timepicker_close' | skyLibResources }}\n </button>\n </section>\n </div>\n </div>\n</ng-template>\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n forwardRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport moment from 'moment';\nimport { Subscription } from 'rxjs';\n\nimport { SkyTimepickerTimeFormatType } from './timepicker-time-format-type';\nimport { SkyTimepickerTimeOutput } from './timepicker-time-output';\nimport { SkyTimepickerComponent } from './timepicker.component';\n\nconst SKY_TIMEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyTimepickerInputDirective),\n multi: true,\n};\n\nconst SKY_TIMEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyTimepickerInputDirective),\n multi: true,\n};\n\n@Directive({\n selector: '[skyTimepickerInput]',\n providers: [SKY_TIMEPICKER_VALUE_ACCESSOR, SKY_TIMEPICKER_VALIDATOR],\n standalone: false,\n})\nexport class SkyTimepickerInputDirective\n implements\n OnInit,\n OnDestroy,\n ControlValueAccessor,\n Validator,\n OnChanges,\n AfterContentInit\n{\n public pickerChangedSubscription: Subscription | undefined;\n #_timeFormat: SkyTimepickerTimeFormatType = 'hh';\n\n // TODO: In a future breaking change - grab the parent component through dependency injection and remove this setter.\n // Also remove the HostBinding that references it.\n /**\n * Creates the timepicker input field and picker. Place this attribute on an `input` element,\n * and wrap the input in a `sky-timepicker` component.\n * This attribute must be set to the instance of the `sky-timepicker`.\n * @required\n */\n @Input()\n public get skyTimepickerInput(): SkyTimepickerComponent | undefined {\n return this.#_skyTimepickerInput;\n }\n\n public set skyTimepickerInput(value: SkyTimepickerComponent | undefined) {\n this.#_skyTimepickerInput = value;\n this.#updateTimepickerInput();\n }\n\n @HostBinding('attr.skyTimepickerInput')\n public get hostTimepickerInput(): SkyTimepickerComponent | undefined {\n return this.skyTimepickerInput;\n }\n\n // TODO: In a future breaking change - make this more specific than \"string\"\n /**\n * The 12-hour `hh` or 24-hour `HH` time format for the input.\n * @default \"hh\"\n */\n @Input()\n public set timeFormat(value: SkyTimepickerTimeFormatType | undefined) {\n this.#_timeFormat = value || 'hh';\n }\n\n public get timeFormat(): SkyTimepickerTimeFormatType {\n return this.#_timeFormat;\n }\n\n /**\n * The custom time format. For examples,\n * see the [moment.js](https://momentjs.com/docs/#/displaying/format/) docs.\n */\n @Input()\n public returnFormat: string | undefined;\n\n /**\n * Whether to disable the timepicker on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input()\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value || false;\n\n this.#updateTimepickerInput();\n\n this.#renderer.setProperty(this.#elRef.nativeElement, 'disabled', value);\n }\n\n get #modelValue(): SkyTimepickerTimeOutput | undefined {\n return this.#_modelValue;\n }\n\n set #modelValue(value: SkyTimepickerTimeOutput | undefined) {\n if (value !== this.#_modelValue) {\n this.#_modelValue = value;\n this.#updateTimepickerInput();\n this.#setInputValue(value);\n this.#_validatorChange();\n this.#_onChange(value);\n }\n }\n\n #control: AbstractControl | undefined;\n\n #_disabled = false;\n #_modelValue: SkyTimepickerTimeOutput | undefined;\n #_skyTimepickerInput: SkyTimepickerComponent | undefined;\n\n #renderer: Renderer2;\n #elRef: ElementRef;\n #changeDetector: ChangeDetectorRef;\n\n constructor(\n renderer: Renderer2,\n elRef: ElementRef,\n changeDetector: ChangeDetectorRef,\n ) {\n this.#renderer = renderer;\n this.#elRef = elRef;\n this.#changeDetector = changeDetector;\n }\n\n public ngOnInit(): void {\n this.#renderer.addClass(this.#elRef.nativeElement, 'sky-form-control');\n this.pickerChangedSubscription =\n this.skyTimepickerInput?.selectedTimeChanged.subscribe(\n (newTime: string) => {\n this.writeValue(newTime);\n this.#_onTouched();\n },\n );\n }\n\n public ngAfterContentInit(): void {\n // Watch for the control to be added and initialize the value immediately.\n /* istanbul ignore else */\n if (this.#control && this.#control.parent) {\n this.#control.setValue(this.#modelValue, { emitEvent: false });\n this.#changeDetector.markForCheck();\n }\n }\n\n public ngOnDestroy(): void {\n /* istanbul ignore else */\n if (this.pickerChangedSubscription) {\n this.pickerChangedSubscription.unsubscribe();\n }\n }\n\n public ngOnChanges(): void {\n if (this.skyTimepickerInput) {\n this.skyTimepickerInput.setFormat(this.timeFormat);\n this.skyTimepickerInput.returnFormat = this.returnFormat;\n }\n }\n\n @HostListener('change', ['$event'])\n public onChange(event: any): void {\n this.writeValue(event.target.value);\n }\n\n /* istanbul ignore next */\n @HostListener('blur')\n public onBlur(): void {\n this.#_onTouched();\n }\n\n public registerOnChange(fn: (value: any) => any): void {\n this.#_onChange = fn;\n }\n public registerOnTouched(fn: () => any): void {\n this.#_onTouched = fn;\n }\n public registerOnValidatorChange(fn: () => void): void {\n this.#_validatorChange = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public writeValue(value: any): void {\n this.#modelValue = this.#formatter(value);\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (!this.#control) {\n this.#control = control;\n }\n\n const value = control.value;\n if (!value) {\n return null;\n }\n\n /* istanbul ignore next */\n if (value.local === 'Invalid date') {\n return { skyTime: { invalid: control.value } };\n }\n\n return null;\n }\n\n #setInputValue(value: SkyTimepickerTimeOutput | undefined): void {\n let formattedValue = '';\n if (value) {\n const output = moment(value).format(value.customFormat);\n /* istanbul ignore else */\n if (output !== 'Invalid date') {\n formattedValue = output;\n }\n }\n\n this.#renderer.setProperty(\n this.#elRef.nativeElement,\n 'value',\n formattedValue,\n );\n }\n\n // TODO: This method technically returns `SkyTimepickerTimeOutput | string | undefined`. However, the value it is set to is set to `SkyTimepickerTimeOutput | undefined`. We need to clean this up.\n #formatter(time: any): any {\n if (time && typeof time !== 'string' && 'local' in time) {\n return time;\n }\n if (typeof time === 'string') {\n if (time.length === 0) {\n return '';\n }\n const currentFormat = this.timeFormat === 'HH' ? 'H:mm' : 'h:mm A';\n\n if (typeof this.returnFormat === 'undefined') {\n this.returnFormat = currentFormat;\n }\n\n const formatTime: SkyTimepickerTimeOutput = {\n hour: moment(time, currentFormat).hour(),\n minute: moment(time, currentFormat).minute(),\n meridie: moment(time, currentFormat).format('A'),\n timezone: parseInt(moment(time, currentFormat).format('Z'), 10),\n iso8601: moment(time, currentFormat).toDate(),\n local: moment(time, currentFormat).format(currentFormat),\n customFormat: this.returnFormat,\n };\n return formatTime;\n }\n }\n\n #updateTimepickerInput(): void {\n if (this.skyTimepickerInput) {\n this.skyTimepickerInput.disabled = this.disabled;\n\n /* istanbul ignore else */\n if (this.skyTimepickerInput.selectedTime !== this.#modelValue) {\n this.skyTimepickerInput.selectedTime = this.#modelValue;\n }\n }\n }\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n #_onChange = (_: any): void => {};\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #_onTouched = (): void => {};\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #_validatorChange = (): void => {};\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyAffixModule } from '@skyux/core';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\n\nimport { SkyTimepickerComponent } from './timepicker.component';\nimport { SkyTimepickerInputDirective } from './timepicker.directive';\n\n@NgModule({\n declarations: [SkyTimepickerInputDirective, SkyTimepickerComponent],\n imports: [\n CommonModule,\n SkyIconModule,\n SkyDatetimeResourcesModule,\n SkyAffixModule,\n SkyThemeModule,\n ],\n exports: [SkyTimepickerInputDirective, SkyTimepickerComponent],\n})\nexport class SkyTimepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SkyFuzzyDateService","takeUntil","i1.SkyDatepickerCalendarInnerComponent","i1","i2","i1.SkyDatepickerConfigService","nextId","i4","i5","i6","i3.SkyDatepickerComponent","i2.SkyFuzzyDateService","i3","i4.SkyDatepickerComponent","distinctUntilChanged","i4.SkyDatepickerInputDirective"],"mappings":"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"}
1
+ {"version":3,"file":"skyux-datetime.mjs","sources":["../../../../../libs/components/datetime/src/lib/modules/shared/sky-datetime-resources.module.ts","../../../../../libs/components/datetime/src/lib/modules/date-pipe/date.service.ts","../../../../../libs/components/datetime/src/lib/modules/date-pipe/date.pipe.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/fuzzy/fuzzy-date.service.ts","../../../../../libs/components/datetime/src/lib/modules/date-pipe/fuzzy-date.pipe.ts","../../../../../libs/components/datetime/src/lib/modules/date-pipe/date-pipe.module.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/date-formatter.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar-inner.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar-inner.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar.service.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar-label.pipe.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker-button.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker-button.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker-cell.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker-cell.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/daypicker.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/monthpicker.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/monthpicker.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/yearpicker.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/yearpicker.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker-config.service.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/calendar/datepicker-calendar.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker-host.service.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker.component.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker.component.html","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker-input.directive.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/fuzzy/datepicker-input-fuzzy.directive.ts","../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker.module.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/types/date-range-calculator-type.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range-picker-end-date-resource-key.pipe.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range-picker-start-date-resource-key.pipe.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/types/date-range-calculator.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/types/date-range-calculator-id.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/types/date-range-relative-value.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/types/date-range-default-calculator-configs.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range.service.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range-picker.component.ts","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range-picker.component.html","../../../../../libs/components/datetime/src/lib/modules/date-range-picker/date-range-picker.module.ts","../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.component.ts","../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.component.html","../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.directive.ts","../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.module.ts","../../../../../libs/components/datetime/src/skyux-datetime.ts"],"sourcesContent":["/* istanbul ignore file */\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-datetime' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-AU': {\n skyux_date_range_picker_format_label_last_fiscal_year: {\n message: 'Last financial year',\n },\n skyux_date_range_picker_format_label_this_fiscal_year: {\n message: 'This financial year',\n },\n skyux_date_range_picker_format_label_next_fiscal_year: {\n message: 'Next financial year',\n },\n },\n 'EN-GB': {\n skyux_date_range_picker_format_label_last_fiscal_year: {\n message: 'Last financial year',\n },\n skyux_date_range_picker_format_label_this_fiscal_year: {\n message: 'This financial year',\n },\n skyux_date_range_picker_format_label_next_fiscal_year: {\n message: 'Next financial year',\n },\n },\n 'EN-NZ': {\n skyux_date_range_picker_format_label_last_fiscal_year: {\n message: 'Last financial year',\n },\n skyux_date_range_picker_format_label_this_fiscal_year: {\n message: 'This financial year',\n },\n skyux_date_range_picker_format_label_next_fiscal_year: {\n message: 'Next financial year',\n },\n },\n 'EN-US': {\n skyux_datepicker_format_hint_text: { message: 'Use the format {0}.' },\n skyux_datepicker_trigger_button_label: { message: 'Select date' },\n skyux_datepicker_trigger_button_label_context: {\n message: 'Open calendar for {0}',\n },\n skyux_datepicker_move_calendar_previous_day: { message: 'Previous month' },\n skyux_datepicker_move_calendar_next_day: { message: 'Next month' },\n skyux_datepicker_move_calendar_previous_month: { message: 'Previous year' },\n skyux_datepicker_move_calendar_next_month: { message: 'Next year' },\n skyux_datepicker_move_calendar_previous_year: { message: 'Previous page' },\n skyux_datepicker_move_calendar_next_year: { message: 'Next page' },\n skyux_timepicker_button_label: { message: 'Choose time' },\n skyux_timepicker_button_label_context: {\n message: 'Open time picker for {0}',\n },\n skyux_timepicker_close: { message: 'Done' },\n skyux_date_range_picker_default_label: { message: 'Select a date range' },\n skyux_date_range_picker_end_date_before_start_date_error_label_text: {\n message:\n 'Change the date range so that the end date is before the start date.',\n },\n skyux_date_range_picker_format_label_specific_range: {\n message: 'Specific range',\n },\n skyux_date_range_picker_format_label_before: { message: 'Before' },\n skyux_date_range_picker_format_label_after: { message: 'After' },\n skyux_date_range_picker_format_label_any_time: { message: 'At any time' },\n skyux_date_range_picker_format_label_yesterday: { message: 'Yesterday' },\n skyux_date_range_picker_format_label_today: { message: 'Today' },\n skyux_date_range_picker_format_label_tomorrow: { message: 'Tomorrow' },\n skyux_date_range_picker_format_label_last_week: { message: 'Last week' },\n skyux_date_range_picker_format_label_this_week: { message: 'This week' },\n skyux_date_range_picker_format_label_next_week: { message: 'Next week' },\n skyux_date_range_picker_format_label_last_month: { message: 'Last month' },\n skyux_date_range_picker_format_label_this_month: { message: 'This month' },\n skyux_date_range_picker_format_label_next_month: { message: 'Next month' },\n skyux_date_range_picker_format_label_last_quarter: {\n message: 'Last quarter',\n },\n skyux_date_range_picker_format_label_this_quarter: {\n message: 'This quarter',\n },\n skyux_date_range_picker_format_label_next_quarter: {\n message: 'Next quarter',\n },\n skyux_date_range_picker_format_label_last_calendar_year: {\n message: 'Last calendar year',\n },\n skyux_date_range_picker_format_label_this_calendar_year: {\n message: 'This calendar year',\n },\n skyux_date_range_picker_format_label_next_calendar_year: {\n message: 'Next calendar year',\n },\n skyux_date_range_picker_format_label_last_fiscal_year: {\n message: 'Last fiscal year',\n },\n skyux_date_range_picker_format_label_this_fiscal_year: {\n message: 'This fiscal year',\n },\n skyux_date_range_picker_format_label_next_fiscal_year: {\n message: 'Next fiscal year',\n },\n skyux_date_range_picker_start_date_label: { message: 'From date' },\n skyux_date_range_picker_end_date_label: { message: 'To date' },\n skyux_date_range_picker_before_date_label: { message: 'Before date' },\n skyux_date_range_picker_after_date_label: { message: 'After date' },\n skyux_date_range_picker_default_aria_label: { message: '{0} for {1}' },\n },\n 'FR-CA': {\n skyux_datepicker_format_hint_text: { message: 'Utilisez le format {0}.' },\n skyux_datepicker_trigger_button_label: { message: 'Sélectionner la date' },\n skyux_datepicker_trigger_button_label_context: {\n message: 'Ouvrir le calendrier pour {0}',\n },\n skyux_datepicker_move_calendar_previous_day: { message: 'Mois précédent' },\n skyux_datepicker_move_calendar_next_day: { message: 'Le mois prochain' },\n skyux_datepicker_move_calendar_previous_month: {\n message: 'Année précédente',\n },\n skyux_datepicker_move_calendar_next_month: { message: 'Année suivante' },\n skyux_datepicker_move_calendar_previous_year: {\n message: 'Page précédente',\n },\n skyux_datepicker_move_calendar_next_year: { message: 'Page suivante' },\n skyux_timepicker_button_label: { message: 'Choisir l’heure' },\n skyux_timepicker_button_label_context: {\n message: 'Ouvrir le sélecteur d’heure pour {0}',\n },\n skyux_timepicker_close: { message: 'Terminé' },\n skyux_date_range_picker_default_label: {\n message: 'Sélectionner une plage de dates',\n },\n skyux_date_range_picker_end_date_before_start_date_error_label_text: {\n message:\n 'Modifiez la plage de date de façon à ce que la date de fin soit avant la date de début.',\n },\n skyux_date_range_picker_format_label_specific_range: {\n message: 'Plage spécifique',\n },\n skyux_date_range_picker_format_label_before: { message: 'Avant' },\n skyux_date_range_picker_format_label_after: { message: 'Après' },\n skyux_date_range_picker_format_label_any_time: {\n message: 'N’importe quand',\n },\n skyux_date_range_picker_format_label_yesterday: { message: 'Hier' },\n skyux_date_range_picker_format_label_today: { message: 'Aujourd’hui' },\n skyux_date_range_picker_format_label_tomorrow: { message: 'Demain' },\n skyux_date_range_picker_format_label_last_week: {\n message: 'La semaine dernière',\n },\n skyux_date_range_picker_format_label_this_week: {\n message: 'Cette semaine',\n },\n skyux_date_range_picker_format_label_next_week: {\n message: 'La semaine prochaine',\n },\n skyux_date_range_picker_format_label_last_month: {\n message: 'Le mois dernier',\n },\n skyux_date_range_picker_format_label_this_month: { message: 'Ce mois-ci' },\n skyux_date_range_picker_format_label_next_month: {\n message: 'Le mois prochain',\n },\n skyux_date_range_picker_format_label_last_quarter: {\n message: 'Le trimestre dernier',\n },\n skyux_date_range_picker_format_label_this_quarter: {\n message: 'Ce trimestre',\n },\n skyux_date_range_picker_format_label_next_quarter: {\n message: 'Le trimestre prochain',\n },\n skyux_date_range_picker_format_label_last_calendar_year: {\n message: 'Dernière année civile',\n },\n skyux_date_range_picker_format_label_this_calendar_year: {\n message: 'Cette année civile',\n },\n skyux_date_range_picker_format_label_next_calendar_year: {\n message: 'Prochaine année civile',\n },\n skyux_date_range_picker_format_label_last_fiscal_year: {\n message: 'Dernier exercice',\n },\n skyux_date_range_picker_format_label_this_fiscal_year: {\n message: 'L’exercice en cours',\n },\n skyux_date_range_picker_format_label_next_fiscal_year: {\n message: 'Le prochain exercice',\n },\n skyux_date_range_picker_start_date_label: {\n message: 'À partir de la date du',\n },\n skyux_date_range_picker_end_date_label: { message: 'À ce jour' },\n skyux_date_range_picker_before_date_label: { message: 'Date avant' },\n skyux_date_range_picker_after_date_label: { message: 'Date après' },\n skyux_date_range_picker_default_aria_label: { message: '{0} pour {1}' },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyDatetimeResourcesModule {}\n","// This class is mostly ported from the Angular 4.x DatePipe in order to maintain the old\n// behavior of using the `Intl` API for formatting dates rather than having to register every\n// supported locale.\n// https://github.com/angular/angular/blob/4.4.x/packages/common/src/pipes/date_pipe.ts\nimport { Injectable, OnDestroy, inject } from '@angular/core';\nimport {\n SkyAppLocaleInfo,\n SkyAppLocaleProvider,\n SkyIntlDateFormatter,\n} from '@skyux/i18n';\n\nimport moment from 'moment';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyDateService implements OnDestroy {\n /* spell-checker:disable */\n // See: https://github.com/angular/angular/blob/17.3.x/packages/common/src/pipes/date_pipe.ts\n // See: https://www.ibm.com/docs/en/app-connect/11.0.0?topic=function-formatting-parsing-datetimes-as-strings\n #ALIASES: Record<string, string> = {\n // TODO: replace with 'M/d/yy, h:mm a' in a breaking change.\n short: 'yMdjm',\n // TODO: replace with 'MMM d, y, h:mm:ss a' in a breaking change.\n medium: 'yMMMdjms',\n // TODO: This format was modified from 'MMMM d, y, h:mm:ss a z' due to the limitations of the Intl API.\n long: 'MMMM d, y, h:mm:ss a Z',\n // TODO: This format was modified from 'EEEE, MMMM d, y, h:mm:ss a zzzz' due to the limitations of the Intl API.\n full: 'EEEE, MMMM d, y, h:mm:ss a z',\n // TODO: Replace with 'M/d/yy' in a breaking change.\n shortDate: 'yMd',\n // TODO: Replace with 'MMM d, y' in a breaking change.\n mediumDate: 'yMMMd',\n // TODO: Replace with 'MMMM d, y' in a breaking change.\n longDate: 'yMMMMd',\n // TODO: Replace with 'EEEE, MMMM d, y' in a breaking change.\n fullDate: 'yMMMMEEEEd',\n // TODO: Replace with 'h:mm a' in a breaking change.\n shortTime: 'jm',\n // TODO: Replace with 'h:mm:ss a' in a breaking change.\n mediumTime: 'jms',\n // TODO: This format was modified from 'h:mm:ss a z' due to the limitations of the Intl API.\n longTime: 'h:mm:ss a Z',\n // TODO: This format was modified from 'h:mm:ss a zzzz' due to the limitations of the Intl API.\n fullTime: 'h:mm:ss a z',\n };\n /* spell-checker:enable */\n\n #defaultFormat = 'short';\n #defaultLocale = 'en-US';\n #ngUnsubscribe = new Subject<void>();\n\n constructor() {\n inject(SkyAppLocaleProvider)\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo: SkyAppLocaleInfo) => {\n this.#defaultLocale = localeInfo.locale;\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public format(\n value: any,\n locale?: string,\n format?: string,\n ): string | undefined {\n let date: Date;\n const pattern = format || this.#defaultFormat;\n\n if (isBlank(value) || value !== value) {\n return undefined;\n }\n\n // Moment will interpret any non-date object as today's date. That would\n // introduce a breaking change, so we check for it here. This could probably be removed\n // in a future major version.\n if (value instanceof Object && !(value instanceof Date)) {\n throw new Error('Invalid value: ' + value);\n }\n\n // Use moment to avoid inconsistencies between browsers interpreting the value differently.\n const momentDate = moment(value);\n if (momentDate.isValid()) {\n date = momentDate.toDate();\n } else {\n throw new Error('Invalid value: ' + value);\n }\n\n return SkyIntlDateFormatter.format(\n date,\n locale || this.#defaultLocale,\n this.#ALIASES[pattern] || pattern,\n );\n }\n}\n\nfunction isBlank(obj: any): boolean {\n return !obj;\n}\n","import { OnDestroy, Pipe, PipeTransform, inject } from '@angular/core';\nimport { SkyAppLocaleInfo, SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyDateService } from './date.service';\n\n/**\n * Formats date values according to locale rules.\n * @example\n * ```markup\n * {{ myDate | skyDate }}\n * {{ myDate | skyDate:'medium' }}\n * {{ myDate | skyDate:'medium':'en-CA' }}\n * ```\n */\n@Pipe({\n name: 'skyDate',\n pure: false,\n standalone: false,\n})\nexport class SkyDatePipe implements OnDestroy, PipeTransform {\n #dateSvc = inject(SkyDateService);\n #defaultFormat = 'short';\n #defaultLocale = 'en-US';\n #format: string | undefined;\n #formattedValue: string | undefined;\n #locale: string | undefined;\n #ngUnsubscribe = new Subject<void>();\n #value: any;\n\n constructor() {\n inject(SkyAppLocaleProvider)\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo: SkyAppLocaleInfo) => {\n this.#defaultLocale = localeInfo.locale;\n this.#updateFormattedValue();\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * Transforms a date value using locale and format rules.\n * @param value Specifies the date value to transform.\n * @param format Specifies the format to apply to the transform. The format string is\n * constructed by a series of symbols that represent date-time values. The symbols are\n * identical to [Angular's `DatePipe`](https://angular.io/api/common/DatePipe#pre-defined-format-options) format options.\n * @param locale Specifies the locale code to use in the transform.\n */\n public transform(value: any, format?: string, locale?: string): string {\n this.#value = value;\n this.#format = format;\n this.#locale = locale;\n\n this.#updateFormattedValue();\n\n return this.#formattedValue ?? '';\n }\n\n #updateFormattedValue(): void {\n const locale = this.#locale || this.#defaultLocale;\n const format = this.#format || this.#defaultFormat;\n\n this.#formattedValue = this.#dateSvc.format(this.#value, locale, format);\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport moment from 'moment';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyFuzzyDate } from './fuzzy-date';\n\n/**\n * @internal\n */\ninterface SkyDateIndexes {\n yearIndex: number;\n monthIndex: number;\n dayIndex: number;\n}\n\n/**\n * @internal\n */\ninterface SkyFuzzyDateRange {\n years: string;\n months: string;\n days: string;\n startDate: Date;\n endDate: Date;\n valid: boolean;\n}\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyFuzzyDateService implements OnDestroy {\n #currentLocale: string;\n\n #ngUnsubscribe = new Subject<void>();\n\n constructor(localeProvider: SkyAppLocaleProvider) {\n this.#currentLocale = localeProvider.defaultLocale;\n localeProvider\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo) => {\n this.#currentLocale = localeInfo.locale;\n });\n }\n\n /* istanbul ignore next */\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * Returns the browser's current locale string.\n */\n public getCurrentLocale(): string {\n return this.#currentLocale;\n }\n\n /**\n * Returns the short format of the provided locale.\n * If not provided, the locale will be taken from the browser's default locale.\n */\n public getLocaleShortFormat(locale?: string): string {\n return moment.localeData(locale || this.#currentLocale).longDateFormat('L');\n }\n\n /**\n * Formats a fuzzy date by using the provided format and locale strings.\n * If not provided, the locale will be taken from the browser's default locale.\n */\n public format(\n fuzzyDate: SkyFuzzyDate,\n format?: string,\n locale?: string,\n ): string {\n if (!this.#isFuzzyDateValid(fuzzyDate)) {\n return '';\n }\n\n if (!format) {\n return '';\n }\n\n const separator = this.#getDateSeparator(format);\n const dateParts: string[] = [];\n const formatTokens: string[] = separator\n ? format.split(separator)\n : [format];\n locale = locale || this.#currentLocale;\n const fuzzyDateMoment =\n this.getMomentFromFuzzyDate(fuzzyDate).locale(locale);\n\n for (const token of formatTokens) {\n /* istanbul ignore else */\n if (token) {\n switch (token.substr(0, 1).toLowerCase()) {\n case 'y':\n if (fuzzyDate.year) {\n dateParts.push(fuzzyDateMoment.format(token));\n }\n break;\n case 'm':\n if (fuzzyDate.month) {\n dateParts.push(fuzzyDateMoment.format(token));\n }\n break;\n case 'd':\n if (fuzzyDate.day) {\n dateParts.push(fuzzyDateMoment.format(token));\n }\n break;\n }\n }\n }\n\n return dateParts.join(separator);\n }\n\n /**\n * If not provided, years will default to current year; months will default to January;\n * days will default to 1st of the month.\n */\n public getMomentFromFuzzyDate(fuzzyDate?: SkyFuzzyDate): any {\n if (!fuzzyDate) {\n return;\n }\n\n const year = fuzzyDate.year || this.#getDefaultYear(fuzzyDate);\n const month =\n fuzzyDate.month && fuzzyDate.month > 0 ? fuzzyDate.month - 1 : 0;\n const day = fuzzyDate.day || 1;\n\n return moment([year, month, day]);\n }\n\n /**\n * Gets a string instance of a fuzzy date.\n * @deprecated Deprecated in favor of the `format` function.\n */\n public getStringFromFuzzyDate(\n fuzzyDate?: SkyFuzzyDate,\n dateFormat?: string,\n ): string | undefined {\n if (!fuzzyDate || !dateFormat) {\n return;\n }\n\n const separator = this.#getDateSeparator(dateFormat);\n const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);\n let dateString = '';\n\n // Get the components of the date in the order expected of the local format.\n const dateComponents = [\n { value: fuzzyDate.year || 0, index: dateFormatIndexes.yearIndex },\n { value: fuzzyDate.month || 0, index: dateFormatIndexes.monthIndex },\n { value: fuzzyDate.day || 0, index: dateFormatIndexes.dayIndex },\n ];\n dateComponents.sort((a: any, b: any) => a.index - b.index);\n\n dateComponents.forEach((component) => {\n if (component.value > 0 && component.index > -1) {\n if (dateString) {\n dateString += separator;\n }\n dateString += component.value.toString();\n }\n });\n\n return dateString.trim();\n }\n\n public getFuzzyDateFromSelectedDate(\n selectedDate?: Date,\n dateFormat?: string,\n ): SkyFuzzyDate | undefined {\n if (!selectedDate || !dateFormat) {\n return;\n }\n\n const fuzzyDate: SkyFuzzyDate = {};\n const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);\n\n if (dateFormatIndexes.yearIndex > -1) {\n fuzzyDate.year = selectedDate.getFullYear();\n }\n\n if (dateFormatIndexes.dayIndex > -1) {\n fuzzyDate.day = selectedDate.getDate();\n }\n\n if (dateFormatIndexes.monthIndex > -1) {\n fuzzyDate.month = selectedDate.getMonth() + 1; // getMonth() is 0-indexed.\n }\n\n return fuzzyDate;\n }\n\n public getFuzzyDateFromString(\n date: string,\n dateFormat?: string,\n ): SkyFuzzyDate | undefined {\n if (!date || !dateFormat) {\n return;\n }\n\n let day: any;\n let month: any;\n let year: any;\n\n const dateComponents = this.#getDateComponents(date);\n const indexes = this.#getDateValueIndexes(date, dateFormat);\n\n // Look at the date string's component count:\n // 3 indicates a full date\n // 2 indicates a month-year or month-day date\n // 1 indicates a year\n // Other indicates a problem\n switch (dateComponents.length) {\n case 3:\n year = dateComponents[indexes.yearIndex];\n month = dateComponents[indexes.monthIndex];\n day = dateComponents[indexes.dayIndex];\n break;\n case 2:\n // First, check for a 4-digit year. If year exists, then we assume the other component\n // is the month. Otherwise, we can assume the input is mm/dd or mm/yy (2-digit year).\n year = this.#get4DigitYearFromDateString(date);\n if (year) {\n month =\n dateComponents[0] === year.toString()\n ? dateComponents[1]\n : dateComponents[0];\n } else {\n if (indexes.dayIndex > -1) {\n // mm/dd\n month =\n indexes.monthIndex < indexes.dayIndex\n ? dateComponents[0]\n : dateComponents[1];\n day =\n month === dateComponents[1]\n ? dateComponents[0]\n : dateComponents[1];\n } else {\n // mm/yy\n month =\n indexes.monthIndex < indexes.yearIndex\n ? dateComponents[0]\n : dateComponents[1];\n year =\n month === dateComponents[1]\n ? dateComponents[0]\n : dateComponents[1];\n }\n }\n break;\n case 1:\n year = date;\n break;\n default:\n return;\n }\n\n if (month) {\n // Check if month is valid.\n month = this.#getMonthNumber(month);\n if (month === undefined) {\n return;\n }\n\n // Check if day is valid.\n if (day) {\n day = parseInt(day, 10);\n const fuzzyMoment = this.getMomentFromFuzzyDate({\n month: month,\n day: day,\n year: year,\n });\n if (isNaN(day) || !fuzzyMoment.isValid()) {\n return;\n }\n }\n }\n\n if (year) {\n year =\n year.toString().length === 2\n ? moment.parseTwoDigitYear(year)\n : parseInt(year.toString(), 10);\n if (isNaN(year) || year.toString().length !== 4) {\n return;\n }\n }\n\n return {\n month: month,\n day: day,\n year: year,\n };\n }\n\n public getFuzzyDateRange(\n startFuzzyDate: SkyFuzzyDate,\n endFuzzyDate: SkyFuzzyDate,\n ): SkyFuzzyDateRange {\n const start = this.getMomentFromFuzzyDate(startFuzzyDate);\n const end = this.getMomentFromFuzzyDate(endFuzzyDate);\n let days;\n let months;\n let years;\n let valid = false;\n\n if (\n startFuzzyDate &&\n startFuzzyDate.year &&\n endFuzzyDate &&\n endFuzzyDate.year\n ) {\n years = end.diff(start, 'years');\n months = end.diff(start, 'months');\n days = end.diff(start, 'days');\n valid = end.diff(start) >= 0;\n }\n\n return {\n years: years,\n months: months,\n days: days,\n startDate: start.toDate(),\n endDate: end.toDate(),\n valid: valid,\n };\n }\n\n public getCurrentFuzzyDate(): SkyFuzzyDate {\n const currentDate = moment();\n\n return {\n day: currentDate.date(),\n month: currentDate.month() + 1, // month() is 0-indexed.\n year: currentDate.year(),\n };\n }\n\n #getMostRecentLeapYear(): number {\n let leapYear = new Date().getFullYear();\n\n while (!this.#isLeapYear(leapYear)) {\n leapYear -= 1;\n }\n\n return leapYear;\n }\n\n /**\n * Returns the first separator found in the provided date format string.\n * Accepted separators: ['/', '.', '-', ' '].\n * @param dateFormat\n */\n #getDateSeparator(dateFormat: string): string | undefined {\n let returnValue: string | undefined;\n const separators = ['/', '.', '-', ' '];\n\n separators.forEach((separator) => {\n if (!returnValue && dateFormat.indexOf(separator) > 0) {\n returnValue = separator;\n }\n });\n\n return returnValue;\n }\n\n #get4DigitYearFromDateString(date: string): number | undefined {\n let year: string | undefined;\n const separator = this.#getDateSeparator(date);\n\n if (separator) {\n // Find the number value in the string that is 4 digits long.\n date.split(separator).forEach((dateComponent) => {\n if (!year && parseInt(dateComponent, 10).toString().length === 4) {\n year = dateComponent;\n }\n });\n }\n\n if (year && !isNaN(Number(year))) {\n return parseInt(year, 10);\n }\n return undefined;\n }\n\n #isLeapYear(year: number): boolean {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n #getMonthNumber(month: string): number | undefined {\n let returnValue: number;\n const monthAsNumber = parseInt(month, 10);\n\n // If the month component is a string (\"January\"), we check to see if it is a valid month\n if (isNaN(monthAsNumber)) {\n if (!moment(month, 'MMMM').isValid()) {\n return;\n }\n returnValue = parseInt(moment().month(month).format('M'), 10);\n } else {\n returnValue = monthAsNumber;\n }\n\n // Ensure that the month is between 1 and 12\n if (!(1 <= returnValue && returnValue <= 12)) {\n return;\n }\n\n return returnValue;\n }\n\n #getDefaultYear(fuzzyDate: SkyFuzzyDate): number {\n // Check if we need to return a leap year or the current year.\n if (fuzzyDate.month === 2 && fuzzyDate.day === 29) {\n return this.#getMostRecentLeapYear();\n } else {\n return new Date().getFullYear();\n }\n }\n\n #getDateComponents(date: string): string[] {\n const separator = this.#getDateSeparator(date);\n if (separator) {\n return date.split(separator);\n } else {\n return [date];\n }\n }\n\n // Returns the order of year, month, and day from the provided date format.\n #getDateFormatIndexes(dateFormat: string): SkyDateIndexes {\n dateFormat = dateFormat.toLowerCase();\n return {\n yearIndex: dateFormat.indexOf('y'),\n monthIndex: dateFormat.indexOf('m'),\n dayIndex: dateFormat.indexOf('d'),\n };\n }\n\n // Returns the index of each of the date components in the provided string (month, day, year).\n #getDateValueIndexes(date: string, dateFormat: string): SkyDateIndexes {\n const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);\n const dateComponentIndexes = [];\n if (dateFormatIndexes.yearIndex > -1) {\n dateComponentIndexes.push(dateFormatIndexes.yearIndex);\n }\n\n if (dateFormatIndexes.monthIndex > -1) {\n dateComponentIndexes.push(dateFormatIndexes.monthIndex);\n }\n\n if (dateFormatIndexes.dayIndex > -1) {\n dateComponentIndexes.push(dateFormatIndexes.dayIndex);\n }\n\n dateComponentIndexes.sort(function (a, b) {\n return a - b;\n });\n\n return {\n yearIndex: dateComponentIndexes.indexOf(dateFormatIndexes.yearIndex),\n monthIndex: dateComponentIndexes.indexOf(dateFormatIndexes.monthIndex),\n dayIndex: dateComponentIndexes.indexOf(dateFormatIndexes.dayIndex),\n };\n }\n\n /**\n * Validates the provided SkyFuzzyDate object. Valid fuzzy dates are as follows:\n * month, day, year\n * month, year\n * month, day\n * year only\n */\n #isFuzzyDateValid(fuzzyDate: SkyFuzzyDate): boolean {\n if (!fuzzyDate) {\n return false;\n }\n\n // If none of the dates part are specified, return false.\n if (!fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {\n return false;\n }\n\n // If only month is specified, return false.\n if (!fuzzyDate.day && fuzzyDate.month && !fuzzyDate.year) {\n return false;\n }\n\n // If only day is specified, return false.\n if (fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {\n return false;\n }\n\n return true;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { SkyFuzzyDate } from '../datepicker/fuzzy/fuzzy-date';\nimport { SkyFuzzyDateService } from '../datepicker/fuzzy/fuzzy-date.service';\n\n/**\n * Formats date values using two or more date tokens that represent the day, month,\n * and year. The tokens are described in the [moment.js values](https://momentjs.com/docs/#/displaying/).\n * @example\n * ```markup\n * {{ myFuzzyDate | skyFuzzyDate:'MMM Y' }}\n * {{ myFuzzyDate | skyFuzzyDate:'MMM Y':'en-CA' }}\n * ```\n */\n@Pipe({\n name: 'skyFuzzyDate',\n pure: false,\n standalone: false,\n})\nexport class SkyFuzzyDatePipe implements PipeTransform {\n #fuzzyDateService: SkyFuzzyDateService;\n\n constructor(fuzzyDateService: SkyFuzzyDateService) {\n this.#fuzzyDateService = fuzzyDateService;\n }\n\n /**\n * Transforms fuzzy date values using two or more date tokens that represent the day, month,\n * and year.\n * @param value Specifies the date value to transform.\n * @param format Specifies the format to apply to the transform. You construct the format\n * string with a two or more tokens that specify the components of date-time value. The\n * tokens are described in the [moment.js values](https://momentjs.com/docs/#/displaying/).\n * If you don't provide a format, `SkyFuzzyDatePipe` attempts to format fuzzy dates based\n * on the browser's default locale.\n * @param locale Specifies the locale code to use in the transform.\n */\n public transform(\n value: SkyFuzzyDate,\n format?: string,\n locale?: string,\n ): string {\n if (!value) {\n return '';\n }\n const fuzzyDateFormat =\n format || this.#fuzzyDateService.getLocaleShortFormat(locale);\n const fuzzyDateLocale = locale || this.#fuzzyDateService.getCurrentLocale();\n return this.#fuzzyDateService.format(\n value,\n fuzzyDateFormat,\n fuzzyDateLocale,\n );\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\n\nimport { SkyDatePipe } from './date.pipe';\nimport { SkyFuzzyDatePipe } from './fuzzy-date.pipe';\n\n@NgModule({\n declarations: [SkyDatePipe, SkyFuzzyDatePipe],\n providers: [SkyDatePipe, SkyFuzzyDatePipe],\n imports: [SkyDatetimeResourcesModule],\n exports: [SkyDatePipe, SkyFuzzyDatePipe],\n})\nexport class SkyDatePipeModule {}\n","import moment from 'moment';\n\nexport class SkyDateFormatter {\n private static defaultLocale = 'en-US';\n\n private static defaultShortDateFormat = 'MM/DD/YYYY';\n\n /**\n * Sets moment's global locale.\n */\n public static setLocale(locale: string): void {\n moment.locale(locale || SkyDateFormatter.defaultLocale);\n }\n\n /**\n * Returns the preferred short date format for the current locale.\n */\n public static getPreferredShortDateFormat(): string {\n /* istanbul ignore next */\n return (\n moment.localeData().longDateFormat('L') ||\n SkyDateFormatter.defaultShortDateFormat\n );\n }\n\n public format(date: Date, format?: string): string {\n return moment(date.getTime()).format(format);\n }\n\n public getDateFromString(\n dateString: string,\n format?: string,\n /* istanbul ignore next */\n strict = false,\n ): Date {\n let momentValue = moment(dateString, format, strict);\n\n if (!momentValue.isValid()) {\n momentValue = moment(dateString, 'YYYY-MM-DDThh:mm:ss.SZ', strict);\n }\n\n return momentValue.toDate();\n }\n\n public dateIsValid(date: Date | undefined): boolean {\n return !!(\n date &&\n date instanceof Date &&\n !isNaN(date.valueOf()) &&\n !isNaN(new Date(date).getDate())\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { SkyLiveAnnouncerService } from '@skyux/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\n\nimport { Subject, takeUntil } from 'rxjs';\n\nimport { SkyDateFormatter } from '../date-formatter';\nimport { SkyDatepickerCustomDate } from '../datepicker-custom-date';\n\nimport { SkyDayPickerContext } from './daypicker-context';\n\ntype DateComparator = (date1: Date, date2: Date) => number | undefined;\ntype KeyboardEventHandler = (key: string, event: KeyboardEvent) => void;\n\nlet nextDatepickerId = 0;\n\n/**\n * @internal\n */\n@Component({\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, SkyIconModule],\n selector: 'sky-datepicker-inner',\n templateUrl: './datepicker-calendar-inner.component.html',\n styleUrl: './datepicker-calendar-inner.component.scss',\n})\nexport class SkyDatepickerCalendarInnerComponent\n implements OnDestroy, OnInit, OnChanges\n{\n @Input()\n public customDates: SkyDatepickerCustomDate[] | undefined;\n\n @Input()\n public set startingDay(value: number | undefined) {\n this.#_startingDay = value || 0;\n }\n\n public get startingDay(): number {\n return this.#_startingDay;\n }\n\n @Input()\n public minDate: Date | undefined;\n\n @Input()\n public maxDate: Date | undefined;\n\n @Input()\n public startAtDate: Date | undefined;\n\n @Input()\n public set selectedDate(value: Date | undefined) {\n if (value && this.dateFormatter.dateIsValid(value)) {\n this.#_selectedDate = value;\n this.activeDate = value;\n } else {\n this.#_selectedDate = undefined;\n this.activeDate = new Date();\n }\n }\n\n public get selectedDate(): Date | undefined {\n return this.#_selectedDate;\n }\n\n @Output()\n public selectedDateChange: EventEmitter<Date> = new EventEmitter<Date>(\n undefined,\n );\n\n @Output()\n public calendarModeChange: EventEmitter<string> = new EventEmitter<string>();\n\n // TODO: `activeDate` is very similar to `selectedDate` and at the very least should be able to be undefined. However, this would take considerable refactoring to do and thus has been deferred.\n public activeDate = new Date();\n public activeDateId = '';\n\n public title = '';\n\n public minMode = 'day';\n public maxMode = 'year';\n public monthColLimit = 3;\n public yearColLimit = 5;\n public datepickerMode = 'day';\n public yearRange = 20;\n\n public formatDay = 'DD';\n public formatMonth = 'MMMM';\n public formatYear = 'YYYY';\n public formatDayHeader = 'dd';\n public formatDayTitle = 'MMMM YYYY';\n public formatMonthTitle = 'YYYY';\n public formatDayLabel = 'dddd, MMMM Do YYYY';\n public formatMonthLabel = 'MMMM YYYY';\n public formatYearLabel = 'YYYY';\n\n public previousLabel: string | undefined;\n public nextLabel: string | undefined;\n\n public datepickerId = `sky-datepicker-${++nextDatepickerId}`;\n\n public stepDay: any = {};\n public stepMonth: any = {};\n public stepYear: any = {};\n\n protected modes: string[] = ['day', 'month', 'year'];\n protected dateFormatter: SkyDateFormatter = new SkyDateFormatter();\n\n public refreshViewHandlerDay: (() => string) | undefined;\n public compareHandlerDay: DateComparator | undefined;\n public refreshViewHandlerMonth: (() => string) | undefined;\n public compareHandlerMonth: DateComparator | undefined;\n public refreshViewHandlerYear: (() => string) | undefined;\n public compareHandlerYear: DateComparator | undefined;\n\n public handleKeydownDay: KeyboardEventHandler | undefined;\n public handleKeydownMonth: KeyboardEventHandler | undefined;\n public handleKeydownYear: KeyboardEventHandler | undefined;\n\n public keys = [\n 'enter',\n ' ',\n 'spacebar',\n 'pageup',\n 'pagedown',\n 'end',\n 'home',\n 'arrowleft',\n 'arrowup',\n 'arrowright',\n 'arrowdown',\n ];\n\n #ngUnsubscribe = new Subject<void>();\n #prevDay: string | undefined;\n #nextDay: string | undefined;\n #prevMonth: string | undefined;\n #nextMonth: string | undefined;\n #prevYear: string | undefined;\n #nextYear: string | undefined;\n\n #_selectedDate: Date | undefined;\n #_startingDay = 0;\n\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n\n public ngOnInit(): void {\n if (this.selectedDate) {\n this.activeDate = new Date(this.selectedDate);\n } else {\n this.activeDate = this.startAtDate ?? new Date();\n }\n\n this.#resourcesSvc\n .getStrings({\n prevDay: 'skyux_datepicker_move_calendar_previous_day',\n nextDay: 'skyux_datepicker_move_calendar_next_day',\n prevMonth: 'skyux_datepicker_move_calendar_previous_month',\n nextMonth: 'skyux_datepicker_move_calendar_next_month',\n prevYear: 'skyux_datepicker_move_calendar_previous_year',\n nextYear: 'skyux_datepicker_move_calendar_next_year',\n })\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((resources) => {\n this.#prevDay = resources.prevDay;\n this.#nextDay = resources.nextDay;\n this.#prevMonth = resources.prevMonth;\n this.#nextMonth = resources.nextMonth;\n this.#prevYear = resources.prevYear;\n this.#nextYear = resources.nextYear;\n\n this.refreshView();\n });\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.refreshView();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public setCompareHandler(handler: DateComparator, type: string): void {\n if (type === 'day') {\n this.compareHandlerDay = handler;\n }\n\n if (type === 'month') {\n this.compareHandlerMonth = handler;\n }\n\n if (type === 'year') {\n this.compareHandlerYear = handler;\n }\n }\n\n public compare(\n date1: Date | undefined,\n date2: Date | undefined,\n ): number | undefined {\n if (date1 === undefined || date2 === undefined) {\n return undefined;\n }\n\n if (this.datepickerMode === 'day' && this.compareHandlerDay) {\n return this.compareHandlerDay(date1, date2);\n }\n\n if (this.datepickerMode === 'month' && this.compareHandlerMonth) {\n return this.compareHandlerMonth(date1, date2);\n }\n\n /* istanbul ignore else */\n /* sanity check */\n if (this.datepickerMode === 'year' && this.compareHandlerYear) {\n return this.compareHandlerYear(date1, date2);\n }\n\n /* istanbul ignore next */\n return undefined;\n }\n\n public setRefreshViewHandler(handler: () => string, type: string): void {\n if (type === 'day') {\n this.refreshViewHandlerDay = handler;\n }\n\n if (type === 'month') {\n this.refreshViewHandlerMonth = handler;\n }\n\n if (type === 'year') {\n this.refreshViewHandlerYear = handler;\n }\n }\n\n public refreshView(): void {\n if (this.datepickerMode === 'day' && this.refreshViewHandlerDay) {\n this.title = this.refreshViewHandlerDay();\n this.previousLabel = this.#prevDay;\n this.nextLabel = this.#nextDay;\n }\n\n if (this.datepickerMode === 'month' && this.refreshViewHandlerMonth) {\n this.title = this.refreshViewHandlerMonth();\n this.previousLabel = this.#prevMonth;\n this.nextLabel = this.#nextMonth;\n }\n\n if (this.datepickerMode === 'year' && this.refreshViewHandlerYear) {\n this.title = this.refreshViewHandlerYear();\n this.previousLabel = this.#prevYear;\n this.nextLabel = this.#nextYear;\n }\n }\n\n public setKeydownHandler(handler: KeyboardEventHandler, type: string): void {\n if (type === 'day') {\n this.handleKeydownDay = handler;\n }\n\n if (type === 'month') {\n this.handleKeydownMonth = handler;\n }\n\n if (type === 'year') {\n this.handleKeydownYear = handler;\n }\n }\n\n public handleKeydown(key: string, event: KeyboardEvent): void {\n if (this.datepickerMode === 'day' && this.handleKeydownDay) {\n this.handleKeydownDay(key, event);\n }\n\n if (this.datepickerMode === 'month' && this.handleKeydownMonth) {\n this.handleKeydownMonth(key, event);\n }\n\n if (this.datepickerMode === 'year' && this.handleKeydownYear) {\n this.handleKeydownYear(key, event);\n }\n }\n\n public dateFilter(date: Date, format: string): string {\n return this.dateFormatter.format(date, format);\n }\n\n public isActive(dateObject: SkyDayPickerContext): boolean {\n if (this.compare(dateObject.date, this.activeDate) === 0) {\n this.activeDateId = dateObject.uid;\n return true;\n }\n\n return false;\n }\n\n public onKeydown(event: KeyboardEvent): void {\n const key = event.key?.toLowerCase();\n\n if (!this.keys.includes(key) || event.shiftKey) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (key === 'enter' || key === 'spacebar' || key === ' ') {\n if (this.isDisabled(this.activeDate)) {\n return;\n }\n this.select(this.activeDate);\n } else if (event.ctrlKey && (key === 'arrowup' || key === 'arrowdown')) {\n this.toggleMode(key === 'arrowup' ? 1 : -1);\n } else {\n this.handleKeydown(key, event);\n this.refreshView();\n }\n }\n\n public createDateObject(\n date: Date,\n format: string,\n isSecondary: boolean,\n id: string,\n ): SkyDayPickerContext {\n const customDateMatch = this.#getCustomDate(date);\n\n const dateObject: SkyDayPickerContext = {\n date: new Date(date.getFullYear(), date.getMonth(), date.getDate()),\n label: this.dateFilter(date, format),\n selected:\n !!this.selectedDate && this.compare(date, this.selectedDate) === 0,\n disabled: this.isDisabled(date),\n current: this.compare(date, new Date()) === 0,\n secondary: isSecondary,\n uid: id,\n keyDate: customDateMatch ? customDateMatch.keyDate : undefined,\n keyDateText: customDateMatch ? customDateMatch.keyDateText : [],\n };\n\n return dateObject;\n }\n\n public createCalendarRows(\n dates: SkyDayPickerContext[],\n size: number,\n ): SkyDayPickerContext[][] {\n const rows: SkyDayPickerContext[][] = [];\n while (dates.length > 0) {\n rows.push(dates.splice(0, size));\n }\n return rows;\n }\n\n /*\n This is ensures that no strangeness happens when converting a date to local time.\n */\n public fixTimeZone(date: Date): Date {\n const newDate = new Date(date);\n newDate.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n\n return newDate;\n }\n\n public selectCalendar(event: Event, date: Date, closePicker = false): void {\n if (!closePicker) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.select(date);\n }\n\n public select(date: Date, isManual = true): void {\n this.activeDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n );\n\n /*\n Only actually select date if in minMode (day picker mode).\n Otherwise, just change the active view for the datepicker.\n */\n if (this.datepickerMode === this.minMode) {\n this.selectedDate = new Date(this.activeDate);\n if (isManual) {\n this.selectedDateChange.emit(this.selectedDate);\n }\n } else {\n this.datepickerMode =\n this.modes[this.modes.indexOf(this.datepickerMode) - 1];\n this.calendarModeChange.emit(this.datepickerMode);\n }\n\n this.refreshView();\n }\n\n public moveCalendar(event: Event, direction: number): void {\n event.preventDefault();\n event.stopPropagation();\n this.move(direction);\n }\n\n public move(direction: number): void {\n let expectedStep: any;\n if (this.datepickerMode === 'day') {\n expectedStep = this.stepDay;\n }\n\n if (this.datepickerMode === 'month') {\n expectedStep = this.stepMonth;\n }\n\n if (this.datepickerMode === 'year') {\n expectedStep = this.stepYear;\n }\n\n /* istanbul ignore else */\n /* sanity check */\n if (expectedStep) {\n const year =\n this.activeDate.getFullYear() + direction * (expectedStep.years || 0);\n const month =\n this.activeDate.getMonth() + direction * (expectedStep.months || 0);\n\n this.activeDate = new Date(year, month, 1);\n\n this.refreshView();\n }\n }\n\n public toggleModeCalendar(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.toggleMode(1);\n }\n\n public toggleMode(direction: number): void {\n /*istanbul ignore next */\n direction = direction || 1;\n\n /* istanbul ignore else */\n /* sanity check */\n if (\n !(direction === 1 && this.datepickerMode === this.maxMode) &&\n !(this.datepickerMode === this.minMode && direction === -1)\n ) {\n this.datepickerMode =\n this.modes[this.modes.indexOf(this.datepickerMode) + direction];\n this.calendarModeChange.emit(this.datepickerMode);\n this.refreshView();\n }\n }\n\n public announceDate(date: Date, format: string): void {\n const caption = this.dateFilter(date, format);\n this.#liveAnnouncerSvc.announce(caption);\n }\n\n /**\n * Date is disabled if it meets any of these criteria:\n * 1. Date falls outside the min or max dates set by the SkyDatepickerConfigService.\n * 2. Date is marked as disabled in the customDates array.\n */\n protected isDisabled(date: Date): boolean {\n const customDate = this.#getCustomDate(date);\n const minDateCompare = this.compare(date, this.minDate);\n const maxDateCompare = this.compare(date, this.maxDate);\n\n return (\n (minDateCompare !== undefined && minDateCompare < 0) ||\n (maxDateCompare !== undefined && maxDateCompare > 0) ||\n !!customDate?.disabled\n );\n }\n\n #getCustomDate(date: Date): SkyDatepickerCustomDate | undefined {\n if (this.customDates) {\n return this.customDates.find((customDate: SkyDatepickerCustomDate) => {\n return customDate.date.getTime() === date.getTime();\n });\n }\n return undefined;\n }\n}\n","@if (datepickerMode) {\n <div class=\"sky-datepicker-calendar-inner\">\n <div class=\"sky-datepicker-calendar-header\">\n <span class=\"sky-datepicker-header-left\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-btn-previous\"\n [attr.aria-label]=\"previousLabel\"\n (click)=\"moveCalendar($event, -1)\"\n >\n <sky-icon class=\"sky-datepicker-chevron\" iconName=\"chevron-left\" />\n </button>\n </span>\n <span class=\"sky-datepicker-header-center\">\n <!-- display: inline -->\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-calendar-title\"\n [id]=\"datepickerId + '-title'\"\n [disabled]=\"datepickerMode === maxMode\"\n [ngClass]=\"{\n 'sky-btn-disabled': datepickerMode === maxMode\n }\"\n (click)=\"toggleModeCalendar($event)\"\n >{{ title }}</button\n >\n </span>\n <span class=\"sky-datepicker-header-right\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-btn-next\"\n [attr.aria-label]=\"nextLabel\"\n (click)=\"moveCalendar($event, 1)\"\n >\n <sky-icon class=\"sky-datepicker-chevron\" iconName=\"chevron-right\" />\n </button>\n </span>\n </div>\n <ng-content />\n </div>\n}\n","import { Injectable } from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * Manages the state of the calendar picker.\n * @internal\n */\n@Injectable()\nexport class SkyDatepickerCalendarService {\n /**\n * Whether a key date popover is currently displayed.\n * Useful for communicating across all daypicker siblings when a popover is displayed.\n */\n public keyDatePopoverStream: Subject<SkyDayPickerContext | undefined> =\n new Subject<SkyDayPickerContext | undefined>();\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\n\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\n\n/**\n * Formats date values according to formatting rules.\n * @example\n * ```markup\n * {{ myDate | skyDatepickerCalendarLabel }}\n * {{ myDate | skyDatepickerCalendarLabel:'YYYY' }}\n * ```\n * @internal\n */\n@Pipe({\n name: 'skyDatepickerCalendarLabel',\n standalone: true,\n})\nexport class SkyDatepickerCalendarLabelPipe implements PipeTransform {\n #datepicker = inject(SkyDatepickerCalendarInnerComponent);\n #defaultFormat = this.#datepicker.formatDayLabel;\n\n /**\n * Transforms a date value using locale and format rules.\n * @param value Specifies the date value to transform.\n * @param format Specifies the format to apply to the transform. The format string is\n * constructed by a series of symbols that represent date-time values.\n */\n public transform(value: unknown, format?: string): string {\n let formattedValue = '';\n\n if (value && value instanceof Date) {\n formattedValue = this.#datepicker.dateFilter(\n value,\n format || this.#defaultFormat,\n );\n }\n\n return formattedValue;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDatepickerCalendarLabelPipe } from './datepicker-calendar-label.pipe';\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * @internal\n */\n@Component({\n imports: [CommonModule, SkyDatepickerCalendarLabelPipe],\n selector: 'sky-daypicker-button',\n styleUrl: './daypicker-button.component.scss',\n templateUrl: 'daypicker-button.component.html',\n})\nexport class SkyDayPickerButtonComponent {\n /**\n * The date this picker button will represent on the calendar.\n */\n @Input()\n public date: SkyDayPickerContext | undefined;\n\n constructor(public datepicker: SkyDatepickerCalendarInnerComponent) {}\n}\n","@if (date) {\n <button\n class=\"sky-btn sky-btn-sm sky-btn-default sky-datepicker-btn-date\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"date.disabled\"\n [ngClass]=\"{\n 'sky-datepicker-btn-selected': date.selected,\n 'sky-btn-disabled': date.disabled,\n 'sky-btn-active': datepicker.isActive(date),\n 'sky-datepicker-btn-disabled': date.disabled,\n 'sky-datepicker-btn-key-date': date.keyDate\n }\"\n [attr.aria-label]=\"date.date | skyDatepickerCalendarLabel\"\n (click)=\"datepicker.selectCalendar($event, date.date, true)\"\n >\n <span [ngClass]=\"{ 'sky-datepicker-secondary': date.secondary }\">\n {{ date.label }}\n </span>\n </button>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n SkyPopoverMessage,\n SkyPopoverMessageType,\n SkyPopoverModule,\n} from '@skyux/popovers';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDatepickerCalendarService } from './datepicker-calendar.service';\nimport { SkyDayPickerButtonComponent } from './daypicker-button.component';\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, SkyDayPickerButtonComponent, SkyPopoverModule],\n selector: 'sky-daypicker-cell',\n templateUrl: './daypicker-cell.component.html',\n})\nexport class SkyDayPickerCellComponent {\n readonly #calendarSvc = inject(SkyDatepickerCalendarService);\n readonly #datepicker = inject(SkyDatepickerCalendarInnerComponent);\n\n /**\n * Whether the active date has been changed.\n */\n public activeDateHasChanged = input(false);\n\n /**\n * The date this picker cell will represent on the calendar.\n */\n public date = input<SkyDayPickerContext | undefined>();\n\n protected ariaLabel = computed(() => {\n const date = this.date();\n\n if (date?.keyDateText) {\n return date.keyDateText.join(', ');\n }\n\n /* istanbul ignore next: safety check */\n return '';\n });\n\n protected hasTooltip = computed(() => {\n const date = this.date();\n\n return (\n date &&\n date.keyDate &&\n date.keyDateText &&\n date.keyDateText.length > 0 &&\n date.keyDateText[0].length > 0\n );\n });\n\n protected popoverController = new BehaviorSubject<SkyPopoverMessage>({});\n\n constructor() {\n // show the tooltip if this is the active date and is not the\n // initial active date (activeDateHasChanged)\n effect(() => {\n const activeDateHasChanged = this.activeDateHasChanged();\n const hasTooltip = this.hasTooltip();\n const date = this.date();\n\n if (\n date &&\n activeDateHasChanged &&\n hasTooltip &&\n this.#datepicker.isActive(date)\n ) {\n this.#showTooltip();\n }\n });\n\n // Hide this cell's tooltip if another cell opens a tooltip.\n this.#calendarSvc.keyDatePopoverStream\n .pipe(takeUntilDestroyed())\n .subscribe((popoverDate) => {\n if (!popoverDate || popoverDate?.uid !== this.date()?.uid) {\n this.#hideTooltip();\n }\n });\n }\n\n protected onDayMouseenter(): void {\n if (this.hasTooltip()) {\n this.#showTooltip();\n this.#calendarSvc.keyDatePopoverStream.next(this.date());\n }\n }\n\n protected onDayMouseleave(): void {\n if (this.hasTooltip()) {\n this.#hideTooltip();\n this.#calendarSvc.keyDatePopoverStream.next(undefined);\n }\n }\n\n #hideTooltip(): void {\n this.popoverController.next({ type: SkyPopoverMessageType.Close });\n }\n\n #showTooltip(): void {\n this.popoverController.next({ type: SkyPopoverMessageType.Open });\n }\n}\n","@if (hasTooltip()) {\n <div\n class=\"sky-daypicker-cell\"\n skyPopoverPlacement=\"left\"\n [attr.aria-label]=\"ariaLabel()\"\n [skyPopover]=\"dayInfoPopover\"\n [skyPopoverMessageStream]=\"popoverController\"\n (mouseenter)=\"onDayMouseenter()\"\n (mouseleave)=\"onDayMouseleave()\"\n >\n <ng-container *ngTemplateOutlet=\"daypickerButtonTemplateRef\" />\n <sky-popover #dayInfoPopover>\n @for (text of date()?.keyDateText; track text) {\n <div>\n {{ text }}\n </div>\n }\n </sky-popover>\n </div>\n} @else {\n <div\n class=\"sky-daypicker-cell\"\n (mouseenter)=\"onDayMouseenter()\"\n (mouseleave)=\"onDayMouseleave()\"\n >\n <ng-container *ngTemplateOutlet=\"daypickerButtonTemplateRef\" />\n </div>\n}\n\n<ng-template #daypickerButtonTemplateRef>\n <sky-daypicker-button [date]=\"date()\" />\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { SkyWaitModule } from '@skyux/indicators';\n\nimport { Subject } from 'rxjs';\n\nimport { SkyDatepickerCustomDate } from '../datepicker-custom-date';\n\nimport { SkyDatepickerCalendarChange } from './datepicker-calendar-change';\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDayPickerCellComponent } from './daypicker-cell.component';\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * Helper interface to compare date ranges.\n * @internal\n */\ninterface SkyDateRange {\n endDate: Date;\n startDate: Date;\n}\n\n/**\n * @internal\n */\n@Component({\n imports: [SkyDayPickerCellComponent, SkyWaitModule],\n selector: 'sky-daypicker',\n templateUrl: 'daypicker.component.html',\n})\nexport class SkyDayPickerComponent implements OnDestroy, OnInit {\n @Input()\n public set customDates(value: SkyDatepickerCustomDate[] | undefined) {\n /* istanbul ignore else */\n if (value) {\n this.#applyCustomDates(value, this.rows);\n }\n }\n\n @Output()\n public calendarDateRangeChange = new EventEmitter<\n SkyDatepickerCalendarChange | undefined\n >();\n\n @Input()\n public isWaiting: boolean | undefined = false;\n\n public activeDateHasChanged = false;\n public labels: any[] = [];\n public title = '';\n public rows: SkyDayPickerContext[][] = [];\n public weekNumbers: number[] = [];\n public datepicker: SkyDatepickerCalendarInnerComponent;\n public CURRENT_THEME_TEMPLATE: any;\n\n #daysInMonth: number[] = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n #initialDate: number | undefined;\n #ngUnsubscribe = new Subject<void>();\n\n constructor(datepicker: SkyDatepickerCalendarInnerComponent) {\n this.datepicker = datepicker;\n }\n\n public ngOnInit(): void {\n this.datepicker.stepDay = { months: 1 };\n this.#initialDate = this.datepicker.activeDate.getDate();\n\n this.datepicker.setRefreshViewHandler(() => this.#refreshDayView(), 'day');\n\n this.datepicker.setCompareHandler(this.#compareDays, 'day');\n\n this.datepicker.setKeydownHandler((key: string, event: KeyboardEvent) => {\n this.#keydownDays(key, event);\n }, 'day');\n\n this.datepicker.refreshView();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n protected getDates(startDate: Date, n: number): Date[] {\n const dates: Date[] = new Array(n);\n let current = new Date(startDate.getTime());\n let i = 0;\n let date: Date;\n while (i < n) {\n date = new Date(current.getTime());\n date = this.datepicker.fixTimeZone(date);\n dates[i++] = date;\n current = new Date(\n current.getFullYear(),\n current.getMonth(),\n current.getDate() + 1,\n );\n }\n return dates;\n }\n\n #compareDays(date1: Date, date2: Date): number {\n const d1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const d2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n return d1.getTime() - d2.getTime();\n }\n\n #refreshDayView(): string {\n const year = this.datepicker.activeDate.getFullYear();\n const month = this.datepicker.activeDate.getMonth();\n const firstDayOfMonth = new Date(year, month, 1);\n const difference = this.datepicker.startingDay - firstDayOfMonth.getDay();\n const numDisplayedFromPreviousMonth =\n difference > 0 ? 7 - difference : -difference;\n const firstDate = new Date(firstDayOfMonth.getTime());\n\n if (this.datepicker.activeDate.getDate() !== this.#initialDate) {\n this.activeDateHasChanged = true;\n }\n\n /* istanbul ignore else */\n /* sanity check */\n if (numDisplayedFromPreviousMonth > 0) {\n firstDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n\n // 42 is the number of days on a six-week calendar\n const days: Date[] = this.getDates(firstDate, 42);\n const pickerDates: SkyDayPickerContext[] = [];\n for (let i = 0; i < 42; i++) {\n const _dateObject = this.datepicker.createDateObject(\n days[i],\n this.datepicker.formatDay,\n days[i].getMonth() !== month,\n this.datepicker.datepickerId + '-' + i,\n );\n pickerDates[i] = _dateObject;\n }\n\n this.labels = [];\n for (let j = 0; j < 7; j++) {\n this.labels[j] = {};\n this.labels[j].abbr = this.datepicker.dateFilter(\n pickerDates[j].date,\n this.datepicker.formatDayHeader,\n );\n this.labels[j].full = this.datepicker.dateFilter(\n pickerDates[j].date,\n 'EEEE',\n );\n }\n\n const oldDateRange = this.#getDateRange(this.rows);\n this.rows = this.datepicker.createCalendarRows(pickerDates, 7);\n const newDateRange = this.#getDateRange(this.rows);\n\n if (!this.#dateRangeRowsAreEqual(oldDateRange, newDateRange)) {\n // Safety check\n /* istanbul ignore else */\n if (newDateRange) {\n this.calendarDateRangeChange.next({\n startDate: newDateRange.startDate,\n endDate: newDateRange.endDate,\n });\n } else {\n this.calendarDateRangeChange.next(undefined);\n }\n }\n\n return this.datepicker.dateFilter(\n this.datepicker.activeDate,\n this.datepicker.formatDayTitle,\n );\n }\n\n #keydownDays(key: string, event: KeyboardEvent): void {\n let date = this.datepicker.activeDate.getDate();\n /* istanbul ignore else */\n /* sanity check */\n if (key === 'arrowleft') {\n date = date - 1;\n } else if (key === 'arrowup') {\n date = date - 7;\n } else if (key === 'arrowright') {\n date = date + 1;\n } else if (key === 'arrowdown') {\n date = date + 7;\n } else if (key === 'pageup' || key === 'pagedown') {\n const month =\n this.datepicker.activeDate.getMonth() + (key === 'pageup' ? -1 : 1);\n this.datepicker.activeDate.setMonth(month, 1);\n date = Math.min(\n this.#getDaysInMonth(\n this.datepicker.activeDate.getFullYear(),\n this.datepicker.activeDate.getMonth(),\n ),\n date,\n );\n } else if (key === 'home') {\n date = 1;\n } else if (key === 'end') {\n date = this.#getDaysInMonth(\n this.datepicker.activeDate.getFullYear(),\n this.datepicker.activeDate.getMonth(),\n );\n }\n this.datepicker.activeDate.setDate(date);\n this.datepicker.announceDate(\n this.datepicker.activeDate,\n this.datepicker.formatDayLabel,\n );\n }\n\n #getDaysInMonth(year: number, month: number): number {\n return month === 1 &&\n year % 4 === 0 &&\n (year % 400 === 0 || year % 100 !== 0)\n ? 29\n : this.#daysInMonth[month];\n }\n\n /**\n * Applies custom date properties to the existing dates displayed in the calendar.\n */\n #applyCustomDates(\n customDates: SkyDatepickerCustomDate[],\n dateRows: SkyDayPickerContext[][],\n ): void {\n let date: SkyDayPickerContext;\n let newDate: SkyDayPickerContext;\n let dateIndex: number;\n\n /* istanbul ignore else */\n if (customDates && dateRows) {\n customDates.forEach((customDate) => {\n dateIndex = -1;\n dateRows.forEach((row) => {\n if (dateIndex === -1) {\n dateIndex = row.findIndex((d) => {\n return d.date.getTime() === customDate.date.getTime();\n });\n if (dateIndex > -1) {\n date = row[dateIndex];\n // Replace the date with a new instance so the display gets updated.\n newDate = {\n current: date.current,\n date: date.date,\n disabled: !!date.disabled || !!customDate.disabled,\n keyDate: !!customDate.keyDate || !!date.keyDate,\n keyDateText: customDate.keyDateText || date.keyDateText,\n label: date.label,\n secondary: date.secondary,\n selected: date.selected,\n uid: date.uid,\n };\n row[dateIndex] = newDate;\n }\n }\n });\n });\n }\n }\n\n #dateRangeRowsAreEqual(\n rangeA?: SkyDateRange,\n rangeB?: SkyDateRange,\n ): boolean | undefined {\n /* istanbul ignore if */\n if (!rangeA && !rangeB) {\n return true;\n } else if (rangeA && rangeB) {\n return (\n this.#compareDays(rangeA.startDate, rangeB.startDate) === 0 &&\n this.#compareDays(rangeA.endDate, rangeB.endDate) === 0\n );\n } else {\n return false;\n }\n }\n\n #getDateRange(rows: SkyDayPickerContext[][]): SkyDateRange | undefined {\n /* istanbul ignore else */\n if (rows && rows.length > 0) {\n return {\n startDate: rows[0][0].date,\n endDate: rows[rows.length - 1][rows[rows.length - 1].length - 1].date,\n };\n }\n return undefined;\n }\n}\n","<table\n class=\"sky-daypicker-table\"\n role=\"grid\"\n [attr.aria-labelledby]=\"datepicker.datepickerId + '-title'\"\n>\n <thead>\n <tr>\n @for (label of labels; track label.full) {\n <th scope=\"col\" class=\"sky-datepicker-center sky-datepicker-weekdays\">\n <!-- display: inline -->\n <span\n class=\"sky-datepicker-weekday-text\"\n [attr.aria-label]=\"label.full\"\n >{{ label.abbr }}</span\n >\n </th>\n }\n </tr>\n </thead>\n <tbody>\n <!-- Wait indicator for async custom date stream -->\n <sky-wait [isWaiting]=\"isWaiting\" />\n @for (row of rows; track $index) {\n <tr role=\"row\">\n @for (date of row; track date.uid) {\n <td class=\"sky-datepicker-center\" role=\"gridcell\" [id]=\"date.uid\">\n <sky-daypicker-cell\n [activeDateHasChanged]=\"activeDateHasChanged\"\n [date]=\"date\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\n\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDatepickerCalendarLabelPipe } from './datepicker-calendar-label.pipe';\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * @internal\n */\n@Component({\n imports: [CommonModule, SkyDatepickerCalendarLabelPipe],\n selector: 'sky-monthpicker',\n templateUrl: 'monthpicker.component.html',\n})\nexport class SkyMonthPickerComponent implements OnInit {\n public datepicker: SkyDatepickerCalendarInnerComponent;\n\n public rows: SkyDayPickerContext[][] = [];\n\n public title = '';\n\n constructor(datepicker: SkyDatepickerCalendarInnerComponent) {\n this.datepicker = datepicker;\n }\n\n public ngOnInit(): void {\n this.datepicker.stepMonth = {\n years: 1,\n };\n\n this.datepicker.setRefreshViewHandler(\n () => this.#refreshMonthView(),\n 'month',\n );\n\n this.datepicker.setCompareHandler(this.#compareMonth, 'month');\n\n this.datepicker.refreshView();\n\n this.datepicker.setKeydownHandler((key: string, event: KeyboardEvent) => {\n this.#keydownMonths(key, event);\n }, 'month');\n }\n\n #compareMonth(date1: Date, date2: Date): number {\n const d1 = new Date(date1.getFullYear(), date1.getMonth());\n const d2 = new Date(date2.getFullYear(), date2.getMonth());\n return d1.getTime() - d2.getTime();\n }\n\n #refreshMonthView(): string {\n const months = new Array<SkyDayPickerContext>(12);\n const year: number = this.datepicker.activeDate.getFullYear();\n let date: Date;\n\n for (let i = 0; i < 12; i++) {\n date = new Date(year, i, 1);\n date = this.datepicker.fixTimeZone(date);\n months[i] = this.datepicker.createDateObject(\n date,\n this.datepicker.formatMonth,\n false,\n this.datepicker.datepickerId + '-' + i,\n );\n }\n\n this.rows = this.datepicker.createCalendarRows(\n months,\n this.datepicker.monthColLimit,\n );\n\n return this.datepicker.dateFilter(\n this.datepicker.activeDate,\n this.datepicker.formatMonthTitle,\n );\n }\n\n #keydownMonths(key: string, event: KeyboardEvent): void {\n let date = this.datepicker.activeDate.getMonth();\n\n /* istanbul ignore else */\n /* sanity check */\n if (key === 'arrowleft') {\n date = date - 1;\n } else if (key === 'arrowup') {\n date = date - this.datepicker.monthColLimit;\n } else if (key === 'arrowright') {\n date = date + 1;\n } else if (key === 'arrowdown') {\n date = date + this.datepicker.monthColLimit;\n } else if (key === 'pageup' || key === 'pagedown') {\n const year =\n this.datepicker.activeDate.getFullYear() + (key === 'pageup' ? -1 : 1);\n this.datepicker.activeDate.setFullYear(year);\n } else if (key === 'home') {\n date = 0;\n } else if (key === 'end') {\n date = 11;\n }\n this.datepicker.activeDate.setMonth(date);\n this.datepicker.announceDate(\n this.datepicker.activeDate,\n this.datepicker.formatMonthLabel,\n );\n }\n}\n","<table role=\"grid\">\n <tbody>\n @for (row of rows; track $index) {\n <tr>\n @for (date of row; track date.uid) {\n <td class=\"text-center\" role=\"gridcell\" [id]=\"date.uid\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-datepicker-btn-date\"\n tabindex=\"-1\"\n [ngClass]=\"{\n 'sky-datepicker-btn-selected': date.selected,\n 'sky-btn-disabled': date.disabled,\n 'sky-btn-active': datepicker.isActive(date)\n }\"\n [attr.aria-label]=\"\n date.date\n | skyDatepickerCalendarLabel: datepicker.formatMonthLabel\n \"\n [disabled]=\"date.disabled\"\n (click)=\"datepicker.selectCalendar($event, date.date)\"\n >\n <span [ngClass]=\"{ 'sky-datepicker-current': date.current }\">{{\n date.label\n }}</span>\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\n\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDatepickerCalendarLabelPipe } from './datepicker-calendar-label.pipe';\nimport { SkyDayPickerContext } from './daypicker-context';\n\n/**\n * @internal\n */\n@Component({\n imports: [CommonModule, SkyDatepickerCalendarLabelPipe],\n selector: 'sky-yearpicker',\n templateUrl: 'yearpicker.component.html',\n})\nexport class SkyYearPickerComponent implements OnInit {\n public datepicker: SkyDatepickerCalendarInnerComponent;\n\n public rows: SkyDayPickerContext[][] = [];\n\n public title = '';\n\n constructor(datepicker: SkyDatepickerCalendarInnerComponent) {\n this.datepicker = datepicker;\n }\n\n public ngOnInit(): void {\n this.datepicker.stepYear = { years: this.datepicker.yearRange };\n\n this.datepicker.setRefreshViewHandler(\n () => this.#refreshYearView(),\n 'year',\n );\n\n this.datepicker.setCompareHandler(this.#compareYears, 'year');\n\n this.datepicker.setKeydownHandler((key: string, event: KeyboardEvent) => {\n this.#keydownYears(key, event);\n }, 'year');\n\n this.datepicker.refreshView();\n }\n\n protected getStartingYear(year: number): number {\n return (\n Math.floor((year - 1) / this.datepicker.yearRange) *\n this.datepicker.yearRange +\n 1\n );\n }\n\n #compareYears(date1: Date, date2: Date): number {\n return date1.getFullYear() - date2.getFullYear();\n }\n\n #refreshYearView(): string {\n const years = new Array<SkyDayPickerContext>(this.datepicker.yearRange);\n let date: Date;\n const start = this.getStartingYear(\n this.datepicker.activeDate.getFullYear(),\n );\n\n for (let i = 0; i < this.datepicker.yearRange; i++) {\n date = new Date(this.datepicker.activeDate);\n date.setFullYear(start + i, 0, 1);\n\n years[i] = this.datepicker.createDateObject(\n date,\n this.datepicker.formatYear,\n false,\n this.datepicker.datepickerId + '-' + i,\n );\n }\n\n const newTitle = [\n years[0].label,\n years[this.datepicker.yearRange - 1].label,\n ].join(' - ');\n this.rows = this.datepicker.createCalendarRows(\n years,\n this.datepicker.yearColLimit,\n );\n\n return newTitle;\n }\n\n #keydownYears(key: string, event: KeyboardEvent): void {\n let date = this.datepicker.activeDate.getFullYear();\n\n /* istanbul ignore else */\n /* sanity check */\n if (key === 'arrowleft') {\n date = date - 1;\n } else if (key === 'arrowup') {\n date = date - this.datepicker.yearColLimit;\n } else if (key === 'arrowright') {\n date = date + 1;\n } else if (key === 'arrowdown') {\n date = date + this.datepicker.yearColLimit;\n } else if (key === 'pageup' || key === 'pagedown') {\n date += (key === 'pageup' ? -1 : 1) * this.datepicker.yearRange;\n } else if (key === 'home') {\n date = this.getStartingYear(this.datepicker.activeDate.getFullYear());\n } else if (key === 'end') {\n date =\n this.getStartingYear(this.datepicker.activeDate.getFullYear()) +\n this.datepicker.yearRange -\n 1;\n }\n this.datepicker.activeDate.setFullYear(date);\n this.datepicker.announceDate(\n this.datepicker.activeDate,\n this.datepicker.formatYearLabel,\n );\n }\n}\n","<table role=\"grid\">\n <tbody>\n @for (row of rows; track $index) {\n <tr>\n @for (date of row; track date.uid) {\n <td class=\"sky-datepicker-row\" role=\"gridcell\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-datepicker-btn-date\"\n tabindex=\"-1\"\n [ngClass]=\"{\n 'sky-datepicker-btn-selected': date.selected,\n 'sky-btn-disabled': date.disabled,\n 'sky-btn-active': datepicker.isActive(date)\n }\"\n [attr.aria-label]=\"\n date.date\n | skyDatepickerCalendarLabel: datepicker.formatYearLabel\n \"\n [disabled]=\"date.disabled\"\n (click)=\"datepicker.selectCalendar($event, date.date)\"\n >\n <span [ngClass]=\"{ 'sky-datepicker-current': date.current }\">{{\n date.label\n }}</span>\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyDatepickerConfigService {\n /**\n * The date format for the input.\n * @default \"MM/DD/YYYY\"\n */\n public dateFormat: string | undefined;\n\n /**\n * The latest selectable date that is available in the calendar.\n */\n public maxDate: Date | undefined;\n\n /**\n * The earliest selectable date that is available in the calendar.\n */\n public minDate: Date | undefined;\n\n /**\n * The date to open the calendar to initially.\n * @default the current date\n */\n public startAtDate: Date | undefined;\n\n /**\n * The starting day of the week in the calendar,\n * where `0` sets the starting day to Sunday.\n * @default 0\n */\n public startingDay = 0;\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport { SkyDateFormatter } from '../date-formatter';\nimport { SkyDatepickerConfigService } from '../datepicker-config.service';\nimport { SkyDatepickerCustomDate } from '../datepicker-custom-date';\n\nimport { SkyDatepickerCalendarChange } from './datepicker-calendar-change';\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDayPickerComponent } from './daypicker.component';\nimport { SkyMonthPickerComponent } from './monthpicker.component';\nimport { SkyYearPickerComponent } from './yearpicker.component';\n\n/**\n * @internal\n */\n@Component({\n imports: [\n SkyDatepickerCalendarInnerComponent,\n SkyDayPickerComponent,\n SkyMonthPickerComponent,\n SkyYearPickerComponent,\n ],\n selector: 'sky-datepicker-calendar',\n styleUrl: './datepicker-calendar.component.scss',\n templateUrl: './datepicker-calendar.component.html',\n})\nexport class SkyDatepickerCalendarComponent {\n @Input()\n public customDates: SkyDatepickerCustomDate[] | undefined;\n\n @Input()\n public isDaypickerWaiting: boolean | undefined;\n\n @Input()\n public minDate: Date | undefined;\n\n @Input()\n public maxDate: Date | undefined;\n\n @Input()\n public startAtDate: Date | undefined;\n\n /** currently selected date */\n @Input()\n public selectedDate: Date | undefined;\n\n /** starting day of the week from 0-6 (0=Sunday, ..., 6=Saturday) */\n @Input()\n public set startingDay(start: number | undefined) {\n this.#_startingDay = start ?? 0;\n }\n\n public get startingDay(): number {\n return this.#_startingDay;\n }\n\n @Output()\n public calendarDateRangeChange = new EventEmitter<\n SkyDatepickerCalendarChange | undefined\n >();\n\n @Output()\n public calendarModeChange = new EventEmitter<string>();\n\n @Output()\n public selectedDateChange = new EventEmitter<Date>(undefined);\n\n @ViewChild(SkyDatepickerCalendarInnerComponent, {\n read: SkyDatepickerCalendarInnerComponent,\n static: true,\n })\n public datepicker: SkyDatepickerCalendarInnerComponent | undefined;\n\n protected _now: Date = new Date();\n\n #formatter = new SkyDateFormatter();\n\n #_startingDay = 0;\n\n #config: SkyDatepickerConfigService;\n\n constructor(config: SkyDatepickerConfigService) {\n this.#config = config;\n this.configureOptions();\n }\n\n public configureOptions(): void {\n Object.assign(this, this.#config);\n }\n\n public onCalendarDateRangeChange(\n event: SkyDatepickerCalendarChange | undefined,\n ): void {\n this.calendarDateRangeChange.next(event);\n }\n\n public onCalendarModeChange(event: string): void {\n this.calendarModeChange.emit(event);\n }\n\n public onSelectedDateChange(event: Date): void {\n this.selectedDateChange.emit(event);\n }\n\n public writeValue(value: Date | undefined): void {\n if (\n value !== undefined &&\n this.#formatter.dateIsValid(value) &&\n this.selectedDate !== undefined &&\n this.datepicker?.compareHandlerDay &&\n this.datepicker.compareHandlerDay(value, this.selectedDate) === 0\n ) {\n return;\n }\n\n if (value && this.#formatter.dateIsValid(value)) {\n this.selectedDate = value;\n this.datepicker?.select(value, false);\n } else {\n this.selectedDate = this.startAtDate ?? new Date();\n this.datepicker?.select(this.startAtDate ?? new Date(), false);\n }\n }\n}\n","<div class=\"sky-datepicker-calendar\">\n <sky-datepicker-inner\n [customDates]=\"customDates\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [startAtDate]=\"startAtDate\"\n [selectedDate]=\"selectedDate\"\n [startingDay]=\"startingDay\"\n (calendarModeChange)=\"onCalendarModeChange($event)\"\n (selectedDateChange)=\"onSelectedDateChange($event)\"\n >\n <div\n class=\"sky-datepicker-calendar-table-container\"\n autofocus\n tabindex=\"0\"\n (keydown)=\"datepicker?.onKeydown($event)\"\n >\n @if (datepicker?.datepickerMode === 'day') {\n <sky-daypicker\n [customDates]=\"customDates\"\n [isWaiting]=\"isDaypickerWaiting\"\n (calendarDateRangeChange)=\"onCalendarDateRangeChange($event)\"\n />\n } @else if (datepicker?.datepickerMode === 'month') {\n <sky-monthpicker />\n } @else if (datepicker?.datepickerMode === 'year') {\n <sky-yearpicker />\n }\n </div>\n </sky-datepicker-inner>\n</div>\n","import { DestroyRef, Injectable, OnDestroy, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { Observable, Subject, fromEvent } from 'rxjs';\n\nimport { SkyDatepickerComponent } from './datepicker.component';\n\n/**\n * Handles interactions between the datepicker host component and the input\n * directive.\n * @internal\n */\n@Injectable()\nexport class SkyDatepickerHostService implements OnDestroy {\n readonly #destroyRef = inject(DestroyRef);\n\n /**\n * Fires when the picker or trigger button loses focus.\n */\n public get focusout(): Observable<FocusEvent> {\n return this.#focusoutObs;\n }\n\n #focusout = new Subject<FocusEvent>();\n #focusoutObs = this.#focusout.asObservable();\n #host: SkyDatepickerComponent | undefined;\n #isInitialized = false;\n\n public ngOnDestroy(): void {\n this.#focusout.complete();\n }\n\n public init(host: SkyDatepickerComponent): void {\n if (this.#isInitialized) {\n throw new Error('The datepicker host service is already initialized.');\n }\n\n this.#host = host;\n this.#isInitialized = true;\n\n const triggerButtonEl: Element | undefined =\n this.#host.triggerButtonRef?.nativeElement;\n\n if (triggerButtonEl instanceof Element) {\n fromEvent<FocusEvent>(triggerButtonEl, 'focusout')\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe((evt) => {\n this.#handleFocusoutEvent(evt);\n });\n }\n }\n\n public isFocusingDatepicker(evt: FocusEvent): boolean {\n const buttonEl = this.#host?.triggerButtonRef?.nativeElement;\n\n return buttonEl instanceof Element && buttonEl === evt.relatedTarget;\n }\n\n #handleFocusoutEvent(evt: FocusEvent): void {\n if (this.#host) {\n const relatedTarget = evt.relatedTarget;\n const overlayEl: HTMLElement | undefined =\n this.#host.getPickerRef()?.nativeElement;\n\n const isFocusingOverlay =\n relatedTarget instanceof Element &&\n !!overlayEl?.contains(relatedTarget);\n\n if (relatedTarget === null || !isFocusingOverlay) {\n this.#focusout.next(evt);\n }\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n inject,\n output,\n} from '@angular/core';\nimport {\n SKY_STACKING_CONTEXT,\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyAppFormat,\n SkyCoreAdapterService,\n SkyOverlayInstance,\n SkyOverlayService,\n SkyStackingContext,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\n\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\n\nimport { SkyDatepickerCalendarChange } from './calendar/datepicker-calendar-change';\nimport { SkyDatepickerCalendarComponent } from './calendar/datepicker-calendar.component';\nimport { SkyDatepickerCustomDate } from './datepicker-custom-date';\nimport { SkyDatepickerHostService } from './datepicker-host.service';\n\nlet nextId = 0;\n\n/**\n * Creates the datepicker button and calendar.\n * You must wrap this component around an input with the `skyDatepickerInput` directive.\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SkyDatepickerCalendarComponent,\n SkyDatetimeResourcesModule,\n SkyIconModule,\n ],\n providers: [SkyDatepickerHostService],\n selector: 'sky-datepicker',\n styleUrl: './datepicker.component.scss',\n templateUrl: './datepicker.component.html',\n})\nexport class SkyDatepickerComponent\n implements AfterViewInit, OnDestroy, OnInit\n{\n /**\n * Adds a class to the datepicker.\n * @default \"\"\n */\n @Input()\n public pickerClass: string | undefined = '';\n\n public set dateFormat(value: string | undefined) {\n this.#_dateFormat = value;\n this.dateFormatChange.emit(value);\n this.#populateInputBoxHelpText();\n }\n\n public get dateFormat(): string | undefined {\n return this.#_dateFormat;\n }\n\n public get disabled(): boolean | undefined {\n return this.#_disabled;\n }\n\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value;\n this.#changeDetector.markForCheck();\n }\n\n public set selectedDate(value: Date | undefined) {\n this.#_selectedDate = value;\n if (this.calendar) {\n this.calendar.writeValue(value);\n }\n }\n\n public get selectedDate(): Date | undefined {\n return this.#_selectedDate;\n }\n\n /**\n * Fires when the range of displayed dates in the calendar changes. Provides the\n * current range of displayed dates and a mutable `customDate` property consumers can use\n * to modify individual dates on the calendar.\n */\n @Output()\n public calendarDateRangeChange =\n new EventEmitter<SkyDatepickerCalendarChange>();\n\n /**\n * @internal\n */\n @Output()\n public dateFormatChange = new EventEmitter<string>();\n\n /**\n * @internal\n */\n @Output()\n public openChange = new EventEmitter<boolean>();\n\n /**\n * Fires when a user selects a date from the calendar.\n * @internal\n */\n public calendarDateChange = output<Date>();\n\n public calendarId: string;\n\n public customDates: SkyDatepickerCustomDate[] | undefined;\n\n public dateChange = new EventEmitter<Date>();\n\n public isDaypickerWaiting = false;\n\n public isOpen = false;\n\n public isVisible = false;\n\n public maxDate: Date | undefined;\n\n public minDate: Date | undefined;\n\n public startAtDate: Date | undefined;\n\n public startingDay: number | undefined;\n\n public triggerButtonId: string;\n\n @ViewChild(SkyDatepickerCalendarComponent)\n public calendar: SkyDatepickerCalendarComponent | undefined;\n\n @ViewChild('calendarRef', {\n read: ElementRef,\n })\n public set calendarRef(value: ElementRef | undefined) {\n if (value) {\n this.#_calendarRef = value;\n\n this.#addKeyupListener();\n\n // Wait for the calendar component to render before gauging dimensions.\n setTimeout(() => {\n if (this.calendarRef) {\n this.calendar?.writeValue(this.selectedDate);\n\n this.#destroyAffixer();\n this.#createAffixer();\n\n setTimeout(() => {\n if (this.calendarRef) {\n this.#coreAdapter.applyAutoFocus(this.calendarRef);\n\n this.isVisible = true;\n this.#changeDetector.markForCheck();\n }\n });\n }\n });\n }\n }\n\n public get calendarRef(): ElementRef | undefined {\n return this.#_calendarRef;\n }\n\n @ViewChild('calendarTemplateRef', {\n read: TemplateRef,\n })\n public calendarTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('triggerButtonRef', {\n read: ElementRef,\n })\n public triggerButtonRef: ElementRef | undefined;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n public inputTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('triggerButtonTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n public triggerButtonTemplateRef: TemplateRef<unknown> | undefined;\n\n #affixer: SkyAffixer | undefined;\n\n #calendarUnsubscribe: Subject<void> = new Subject<void>();\n\n #customDatesSubscription: Subscription | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #overlay: SkyOverlayInstance | undefined;\n\n #overlayKeyupListener: Subscription | undefined;\n\n #_calendarRef: ElementRef | undefined;\n\n #_dateFormat: string | undefined;\n\n #_disabled: boolean | undefined = false;\n\n #_selectedDate: Date | undefined;\n\n #affixService: SkyAffixService;\n readonly #appFormatter = inject(SkyAppFormat);\n #changeDetector: ChangeDetectorRef;\n #coreAdapter: SkyCoreAdapterService;\n #dateFormatHintTextTemplateString = '';\n readonly #environmentInjector = inject(EnvironmentInjector);\n readonly #resourceSvc = inject(SkyLibResourcesService);\n #overlayService: SkyOverlayService;\n readonly #zIndex: Observable<number> | undefined;\n\n readonly #datepickerHostSvc = inject(SkyDatepickerHostService);\n readonly #elementRef = inject(ElementRef);\n\n constructor(\n affixService: SkyAffixService,\n changeDetector: ChangeDetectorRef,\n coreAdapter: SkyCoreAdapterService,\n overlayService: SkyOverlayService,\n @Optional() public inputBoxHostService?: SkyInputBoxHostService,\n @Optional() themeSvc?: SkyThemeService,\n @Optional()\n @Inject(SKY_STACKING_CONTEXT)\n stackingContext?: SkyStackingContext,\n ) {\n this.#affixService = affixService;\n this.#changeDetector = changeDetector;\n this.#coreAdapter = coreAdapter;\n this.#overlayService = overlayService;\n const uniqueId = nextId++;\n this.calendarId = `sky-datepicker-calendar-${uniqueId}`;\n this.triggerButtonId = `sky-datepicker-button-${uniqueId}`;\n this.#zIndex = stackingContext?.zIndex;\n\n // Update icons when theme changes.\n themeSvc?.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n\n public ngOnInit(): void {\n if (this.inputBoxHostService && this.inputTemplateRef) {\n this.inputBoxHostService.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.triggerButtonTemplateRef,\n });\n\n this.#resourceSvc\n .getString('skyux_datepicker_format_hint_text')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((templateString) => {\n this.#dateFormatHintTextTemplateString = templateString;\n this.#populateInputBoxHelpText();\n });\n }\n }\n\n public ngAfterViewInit(): void {\n this.#datepickerHostSvc.init(this);\n }\n\n public ngOnDestroy(): void {\n this.dateChange.complete();\n this.openChange.complete();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#removePickerEventListeners();\n this.#destroyAffixer();\n this.#destroyOverlay();\n }\n\n public onCalendarModeChange(): void {\n // Let the calendar populate in the DOM before recalculating placement.\n setTimeout(() => {\n this.#affixer?.reaffix();\n });\n }\n\n public onSelectedDateChange(value: Date): void {\n this.calendarDateChange.emit(value);\n this.dateChange.emit(value);\n this.#closePicker();\n }\n\n public onTriggerButtonClick(): void {\n if (this.isOpen) {\n this.#closePicker();\n } else {\n this.#openPicker();\n }\n }\n\n public onCalendarDateRangeChange(event?: SkyDatepickerCalendarChange): void {\n /* istanbul ignore else */\n if (event) {\n this.#cancelCustomDatesSubscription();\n\n const args: SkyDatepickerCalendarChange = {\n startDate: event.startDate,\n endDate: event.endDate,\n customDates: undefined,\n };\n this.calendarDateRangeChange.emit(args);\n // If consumer has added an observable to the args, watch for incoming custom dates.\n /* istanbul ignore else */\n if (args.customDates) {\n this.isDaypickerWaiting = true;\n // Avoid an ExpressionChangedAfterItHasBeenCheckedError.\n this.#changeDetector.detectChanges();\n\n this.#customDatesSubscription = args.customDates\n .pipe(debounceTime(250))\n .subscribe((result) => {\n this.customDates = result;\n this.isDaypickerWaiting = false;\n\n // Trigger change detection in child components to show changes in the calendar.\n this.#changeDetector.markForCheck();\n });\n } else {\n // If consumer returns an undefined value after custom dates have\n // already been established, remove custom dates.\n if (this.customDates) {\n this.customDates = undefined;\n // Avoid an ExpressionChangedAfterItHasBeenCheckedError.\n this.#changeDetector.detectChanges();\n }\n }\n }\n }\n\n /**\n * Whether the datepicker component contains the provided focus event target.\n * @internal\n */\n public containsTarget(target: EventTarget): boolean {\n return (\n this.#elementRef.nativeElement.contains(target) ||\n this.getPickerRef()?.nativeElement.contains(target)\n );\n }\n\n /**\n * Gets the element reference of the picker overlay.\n * @internal\n */\n public getPickerRef(): ElementRef | undefined {\n return this.#overlay?.componentRef.location;\n }\n\n #closePicker(): void {\n this.#destroyAffixer();\n this.#destroyOverlay();\n this.#removePickerEventListeners();\n this.triggerButtonRef?.nativeElement.focus();\n this.isOpen = false;\n this.openChange.emit(false);\n }\n\n #openPicker(): void {\n this.isVisible = false;\n this.#changeDetector.markForCheck();\n\n this.#removePickerEventListeners();\n this.#destroyOverlay();\n this.#createOverlay();\n\n this.isOpen = true;\n this.#changeDetector.markForCheck();\n this.openChange.emit(true);\n }\n\n #createAffixer(): void {\n if (this.calendarRef && this.triggerButtonRef) {\n const affixer = this.#affixService.createAffixer(this.calendarRef);\n\n // Hide calendar when trigger button is scrolled off-screen.\n affixer.placementChange\n .pipe(takeUntil(this.#calendarUnsubscribe))\n .subscribe((change) => {\n this.isVisible = change.placement !== null;\n this.#changeDetector.markForCheck();\n });\n\n affixer.affixTo(this.triggerButtonRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n horizontalAlignment: 'right',\n isSticky: true,\n placement: 'below',\n });\n\n this.#affixer = affixer;\n }\n }\n\n #destroyAffixer(): void {\n /*istanbul ignore else*/\n if (this.#affixer) {\n this.#affixer.destroy();\n this.#affixer = undefined;\n }\n }\n\n #createOverlay(): void {\n if (this.calendarTemplateRef) {\n const overlay = this.#overlayService.create({\n wrapperClass: this.pickerClass,\n enableClose: false,\n enablePointerEvents: false,\n environmentInjector: this.#environmentInjector,\n });\n\n if (this.#zIndex) {\n this.#zIndex\n .pipe(takeUntil(this.#calendarUnsubscribe))\n .subscribe((zIndex) => {\n overlay.componentRef.instance.zIndex = zIndex.toString(10);\n });\n }\n\n overlay.backdropClick\n .pipe(takeUntil(this.#calendarUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.#closePicker();\n }\n });\n\n overlay.attachTemplate(this.calendarTemplateRef);\n\n this.#overlay = overlay;\n }\n }\n\n #destroyOverlay(): void {\n /*istanbul ignore else*/\n if (this.#overlay) {\n this.#overlayService.close(this.#overlay);\n this.#overlay = undefined;\n }\n }\n\n #addKeyupListener(): void {\n const datepickerCalendarElement = this.calendarRef?.nativeElement;\n\n if (datepickerCalendarElement) {\n this.#overlayKeyupListener = fromEvent<KeyboardEvent>(\n datepickerCalendarElement,\n 'keyup',\n )\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((event) => {\n const key = event.key?.toLowerCase();\n if (key === 'escape' && this.isOpen) {\n this.#closePicker();\n }\n });\n }\n }\n\n #removePickerEventListeners(): void {\n this.#calendarUnsubscribe.next();\n this.#calendarUnsubscribe.complete();\n this.#calendarUnsubscribe = new Subject<void>();\n this.#overlayKeyupListener?.unsubscribe();\n }\n\n #cancelCustomDatesSubscription(): void {\n if (this.#customDatesSubscription) {\n this.#customDatesSubscription.unsubscribe();\n this.#customDatesSubscription = undefined;\n }\n }\n\n #populateInputBoxHelpText(): void {\n if (this.inputBoxHostService && this.inputTemplateRef) {\n /* safety check */\n /* istanbul ignore else */\n if (this.dateFormat) {\n this.inputBoxHostService?.setHintText(\n this.#appFormatter.formatText(\n this.#dateFormatHintTextTemplateString,\n this.dateFormat,\n ),\n );\n } else {\n this.inputBoxHostService?.setHintText('');\n }\n }\n }\n}\n","<div class=\"sky-datepicker\">\n @if (!inputBoxHostService) {\n <div class=\"sky-input-group\">\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\" />\n <ng-container *ngTemplateOutlet=\"triggerButtonTemplateRef\" />\n </div>\n }\n</div>\n\n<ng-template #inputTemplateRef>\n <ng-content />\n</ng-template>\n\n<ng-template #triggerButtonTemplateRef>\n <div class=\"sky-input-group-btn\">\n <button\n #triggerButtonRef\n aria-haspopup=\"dialog\"\n class=\"sky-btn sky-btn-default sky-input-group-datepicker-btn\"\n type=\"button\"\n [attr.aria-controls]=\"isOpen ? calendarId : null\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-label]=\"\n inputBoxHostService?.labelText\n ? ('skyux_datepicker_trigger_button_label_context'\n | skyLibResources: inputBoxHostService?.labelText)\n : ('skyux_datepicker_trigger_button_label' | skyLibResources)\n \"\n [attr.id]=\"triggerButtonId\"\n [attr.title]=\"\n inputBoxHostService?.labelText\n ? ('skyux_datepicker_trigger_button_label_context'\n | skyLibResources: inputBoxHostService?.labelText)\n : ('skyux_datepicker_trigger_button_label' | skyLibResources)\n \"\n [disabled]=\"disabled\"\n (click)=\"onTriggerButtonClick()\"\n >\n <sky-icon iconName=\"calendar-ltr\" iconSize=\"l\" />\n </button>\n </div>\n</ng-template>\n\n<ng-template #calendarTemplateRef>\n <div\n #calendarRef\n class=\"sky-datepicker-calendar-container sky-shadow sky-elevation-4\"\n role=\"dialog\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n [attr.id]=\"calendarId\"\n [class.sky-datepicker-hidden]=\"!isVisible\"\n >\n <sky-datepicker-calendar\n cdkTrapFocus\n [customDates]=\"customDates\"\n [isDaypickerWaiting]=\"isDaypickerWaiting\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [startAtDate]=\"startAtDate\"\n [startingDay]=\"startingDay\"\n (calendarDateRangeChange)=\"onCalendarDateRangeChange($event)\"\n (calendarModeChange)=\"onCalendarModeChange()\"\n (selectedDateChange)=\"onSelectedDateChange($event)\"\n />\n </div>\n</ng-template>\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport moment from 'moment';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { SkyDateFormatter } from './date-formatter';\nimport { SkyDatepickerConfigService } from './datepicker-config.service';\nimport { SkyDatepickerHostService } from './datepicker-host.service';\nimport { SkyDatepickerComponent } from './datepicker.component';\n\nconst SKY_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyDatepickerInputDirective),\n multi: true,\n};\n\nconst SKY_DATEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyDatepickerInputDirective),\n multi: true,\n};\n\n@Directive({\n host: {\n '(focusout)': 'onFocusout($event)',\n },\n providers: [SKY_DATEPICKER_VALUE_ACCESSOR, SKY_DATEPICKER_VALIDATOR],\n selector: '[skyDatepickerInput]',\n standalone: true,\n})\nexport class SkyDatepickerInputDirective\n implements\n OnInit,\n OnDestroy,\n AfterViewInit,\n AfterContentInit,\n ControlValueAccessor,\n Validator\n{\n /**\n * The date format for the input. Place this attribute on the `input` element\n * to override the default in the `SkyDatepickerConfigService`.\n * @default \"MM/DD/YYYY\"\n */\n @Input()\n public set dateFormat(value: string | undefined) {\n /* istanbul ignore else */\n if (value !== this.#_dateFormat) {\n this.#_dateFormat = value;\n this.#applyDateFormat();\n }\n }\n\n // TODO: Refactor to not have getter logic\n public get dateFormat(): string | undefined {\n return (\n this.#_dateFormat ||\n this.#configService.dateFormat ||\n this.#preferredShortDateFormat\n );\n }\n\n /**\n * Whether to disable the datepicker on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value || false;\n this.#datepickerComponent.disabled = value;\n this.#renderer.setProperty(\n this.#elementRef.nativeElement,\n 'disabled',\n value,\n );\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * The latest date that is available in the calendar. Place this attribute on\n * the `input` element to override the default in `SkyDatepickerConfigService`.\n */\n @Input()\n public set maxDate(value: Date | undefined) {\n this.#_maxDate = value;\n this.#datepickerComponent.maxDate = this.maxDate;\n\n this.#onValidatorChange();\n }\n\n // TODO: Refactor to not have getter logic\n public get maxDate(): Date | undefined {\n return this.#_maxDate || this.#configService.maxDate;\n }\n\n /**\n * The earliest date that is available in the calendar. Place this attribute on\n * the `input` element to override the default in `SkyDatepickerConfigService`. To avoid validation errors, the time associated with the minimum date must be midnight. This is necessary because the datepicker automatically sets the time on the `Date` object for selected dates to midnight in the current user's time zone.\n */\n @Input()\n public set minDate(value: Date | undefined) {\n this.#_minDate = value;\n this.#datepickerComponent.minDate = this.minDate;\n\n this.#onValidatorChange();\n }\n\n // TODO: Refactor to not have getter logic\n public get minDate(): Date | undefined {\n return this.#_minDate || this.#configService.minDate;\n }\n\n /**\n * The date to open the calendar to initially. Place this attribute on the `input` element to override the default in `SkyDatepickerConfigService`.\n * @default The current date\n */\n @Input()\n public set startAtDate(value: Date | undefined) {\n this.#_startAtDate = value;\n this.#datepickerComponent.startAtDate = this.startAtDate;\n }\n\n // TODO: Refactor to not have getter logic\n public get startAtDate(): Date | undefined {\n return this.#_startAtDate || this.#configService.startAtDate;\n }\n\n /**\n * Creates the datepicker input and calendar. Place this directive on an `input` element,\n * and wrap the input in a `sky-datepicker` component. The value that users select is driven\n * through the `ngModel` attribute specified on the `input` element.\n * @required\n */\n @Input()\n public set skyDatepickerInput(\n value: SkyDatepickerComponent | undefined | '',\n ) {\n if (value) {\n console.warn(\n '[Deprecation warning] You no longer need to provide a template reference variable ' +\n 'to the `skyDatepickerInput` attribute (this will be a breaking change in the next ' +\n 'major version release).\\n' +\n 'Do this instead:\\n' +\n '<sky-datepicker>\\n <input skyDatepickerInput />\\n</sky-datepicker>',\n );\n }\n }\n\n /**\n * Whether to disable date validation on the datepicker input.\n * @default false\n */\n @Input()\n public skyDatepickerNoValidate: boolean | undefined = false;\n\n /**\n * The starting day of the week in the calendar, where `0` sets the starting day\n * to Sunday. Place this attribute on the `input` element to override the default\n * in `SkyDatepickerConfigService`.\n * @default 0\n */\n @Input()\n public set startingDay(value: number | undefined) {\n this.#_startingDay = value;\n this.#datepickerComponent.startingDay = this.startingDay;\n\n this.#onValidatorChange();\n }\n\n // TODO: Refactor to not have getter logic\n public get startingDay(): number {\n return this.#_startingDay || this.#configService.startingDay;\n }\n\n /**\n * Whether the format of the date value must match the format from the `dateFormat` value.\n * If this property is `true` and the datepicker input directive cannot find an exact match, then\n * the input is marked as invalid.\n * If this property is `false` and the datepicker input directive cannot find an exact match, then\n * it attempts to format the string based on the [ISO 8601 standard format](https://www.iso.org/iso-8601-date-and-time-format.html).\n * @default false\n */\n @Input()\n public set strict(value: boolean | undefined) {\n this.#_strict = value || false;\n }\n\n public get strict(): boolean {\n return this.#_strict;\n }\n\n get #value(): any {\n return this.#_value;\n }\n\n set #value(value: any) {\n this.#updateValue(value);\n }\n\n #control: AbstractControl | undefined;\n #dateFormatter = new SkyDateFormatter();\n #preferredShortDateFormat: string | undefined;\n #ngUnsubscribe = new Subject<void>();\n #notifyTouched: (() => void) | undefined;\n\n #_dateFormat: string | undefined;\n #_disabled = false;\n #_maxDate: Date | undefined;\n #_minDate: Date | undefined;\n #_startAtDate: Date | undefined;\n #_startingDay: number | undefined;\n #_strict = false;\n #_value: any;\n\n #changeDetector: ChangeDetectorRef;\n #configService: SkyDatepickerConfigService;\n #elementRef: ElementRef;\n #localeProvider: SkyAppLocaleProvider;\n #renderer: Renderer2;\n #datepickerComponent: SkyDatepickerComponent;\n\n readonly #datepickerHostSvc = inject(SkyDatepickerHostService, {\n optional: true,\n });\n\n constructor(\n changeDetector: ChangeDetectorRef,\n configService: SkyDatepickerConfigService,\n elementRef: ElementRef,\n localeProvider: SkyAppLocaleProvider,\n renderer: Renderer2,\n @Optional() datepickerComponent?: SkyDatepickerComponent,\n ) {\n if (!datepickerComponent) {\n throw new Error(\n 'You must wrap the `skyDatepickerInput` directive within a ' +\n '`<sky-datepicker>` component!',\n );\n }\n this.#changeDetector = changeDetector;\n this.#configService = configService;\n this.#elementRef = elementRef;\n this.#localeProvider = localeProvider;\n this.#renderer = renderer;\n this.#datepickerComponent = datepickerComponent;\n\n this.#localeProvider\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo) => {\n SkyDateFormatter.setLocale(localeInfo.locale);\n this.#preferredShortDateFormat =\n SkyDateFormatter.getPreferredShortDateFormat();\n this.#applyDateFormat();\n });\n\n this.#datepickerHostSvc?.focusout\n .pipe(takeUntilDestroyed())\n .subscribe((evt) => {\n const isFocusingInput =\n evt.relatedTarget === this.#elementRef.nativeElement;\n\n if (!isFocusingInput) {\n this.#notifyTouched?.();\n }\n });\n }\n\n public ngOnInit(): void {\n const element = this.#elementRef.nativeElement;\n\n this.#renderer.addClass(element, 'sky-form-control');\n }\n\n public ngAfterContentInit(): void {\n this.#datepickerComponent.dateFormat = this.dateFormat;\n this.#datepickerComponent.dateChange\n .pipe(distinctUntilChanged())\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((value) => {\n this.#value = value;\n });\n }\n\n public ngAfterViewInit(): void {\n // This is needed to address a bug in Angular 4.\n // When a control value is set initially, its value is not represented on the view.\n // See: https://github.com/angular/angular/issues/13792\n // Of note is the parent check which allows us to determine if the form is reactive.\n // Without this check there is a changed before checked error\n /* istanbul ignore else */\n if (this.#control && this.#control.parent) {\n setTimeout(() => {\n this.#control?.setValue(this.#value, {\n emitEvent: false,\n });\n\n this.#changeDetector.markForCheck();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n @HostListener('change', ['$event'])\n public onInputChange(event: any): void {\n const value = event.target.value;\n\n if (this.skyDatepickerNoValidate) {\n this.#onValueChange(value);\n return;\n }\n\n // Don't try to parse the string value into a Date value if it is malformed.\n if (this.#isDateStringValid(value)) {\n this.#onValueChange(value);\n return;\n }\n\n this.#_value = value;\n this.#onChange(value);\n\n this.#control?.setErrors({\n skyDate: {\n invalid: value,\n },\n });\n }\n\n @HostListener('input')\n public onInput(): void {\n this.#control?.markAsDirty();\n }\n\n public writeValue(value: any): void {\n this.#updateValue(value, false);\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (!this.#control) {\n this.#control = control;\n // Account for any date conversion that may have occurred prior to validation.\n if (this.#control.value !== this.#value) {\n this.#control.patchValue(this.#value, { emitEvent: false });\n }\n }\n\n if (this.skyDatepickerNoValidate) {\n return null;\n }\n\n const value: unknown = control.value;\n\n if (!value) {\n return null;\n }\n\n if (value instanceof Date) {\n const isDateValid = this.#dateFormatter.dateIsValid(value);\n\n if (!isDateValid) {\n // Mark the invalid control as touched so that the input's invalid CSS styles appear.\n // (This is only required when the invalid value is set by the FormControl constructor.)\n this.#control.markAsTouched();\n\n return {\n skyDate: {\n invalid: value,\n },\n };\n }\n\n const minDate = this.minDate;\n\n if (\n minDate &&\n this.#dateFormatter.dateIsValid(minDate) &&\n value < minDate\n ) {\n return {\n skyDate: {\n minDate,\n minDateFormatted: this.#dateFormatter.format(\n minDate,\n this.dateFormat,\n ),\n },\n };\n }\n\n const maxDate = this.maxDate;\n\n if (\n maxDate &&\n this.#dateFormatter.dateIsValid(maxDate) &&\n value > maxDate\n ) {\n return {\n skyDate: {\n maxDate,\n maxDateFormatted: this.#dateFormatter.format(\n maxDate,\n this.dateFormat,\n ),\n },\n };\n }\n } else {\n // Mark the invalid control as touched so that the input's invalid CSS styles appear.\n // (This is only required when the invalid value is set by the FormControl constructor.)\n this.#control.markAsTouched();\n\n return {\n skyDate: {\n invalid: value,\n },\n };\n }\n return null;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#notifyTouched = fn;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.#onValidatorChange = fn;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this.#datepickerComponent.disabled = disabled;\n }\n\n /**\n * Detects changes to the underlying input element's value and updates the ngModel accordingly.\n * This is useful if you need to update the ngModel value before the input element loses focus.\n */\n public detectInputValueChange(): void {\n this.#onValueChange(this.#elementRef.nativeElement.value);\n }\n\n protected onFocusout(evt: FocusEvent): void {\n if (!this.#datepickerHostSvc?.isFocusingDatepicker(evt)) {\n this.#notifyTouched?.();\n }\n }\n\n #applyDateFormat(): void {\n this.#datepickerComponent.dateFormat = this.dateFormat;\n if (this.#value) {\n const formattedDate = this.#dateFormatter.format(\n this.#value,\n this.dateFormat,\n );\n this.#setInputElementValue(formattedDate);\n this.#changeDetector.markForCheck();\n }\n }\n\n #onValueChange(newValue: string): void {\n this.#value = newValue;\n }\n\n #setInputElementValue(value: string): void {\n this.#renderer.setProperty(this.#elementRef.nativeElement, 'value', value);\n }\n\n /**\n * Gets the date value from a value - if possible.\n * Will not convert unconvertible dates or numbers outside of the current month's number of days.\n * Returns `undefined` if the value can not be converted.\n */\n #getDateValue(value: unknown): Date | undefined {\n if (value instanceof Date) {\n return value;\n } else if (typeof value === 'string') {\n return this.#getShortcutOrDateValue(value);\n }\n return undefined;\n }\n\n /**\n * Converts a string to a date object if the string is a valid date string.\n * It will also convert numeric input to a date if that number is within the current month's number of days.\n * If the string can not be converted, `undefined` be returned.\n */\n #getShortcutOrDateValue(value: string): Date | undefined {\n const num = Number(value);\n if (Number.isInteger(num)) {\n // We require 8 digits in order to know that we have all information needed to determine what part of the number is the month (2), day (2), and year (4).\n if (value.length === 8) {\n const regex = new RegExp(/\\b(MM)\\b|\\b(DD)\\b|\\b(YY)\\b|\\b(YYYY)\\b/, 'g');\n const formatTokensOnly = this.dateFormat\n ?.match(regex)\n ?.join('')\n .replace(new RegExp(/Y+/), 'YYYY');\n\n if (formatTokensOnly && formatTokensOnly.length === 8) {\n const date = this.#dateFormatter.getDateFromString(\n value,\n formatTokensOnly,\n true,\n );\n if (this.#dateFormatter.dateIsValid(date)) {\n return date;\n }\n }\n }\n const now = new Date();\n const shortcutDate = new Date(now.getFullYear(), now.getMonth(), num);\n const daysInMonth = shortcutDate.getDate();\n if (num > 0 && num <= daysInMonth) {\n return shortcutDate;\n }\n } else {\n const date = this.#dateFormatter.getDateFromString(\n value,\n this.dateFormat,\n this.strict,\n );\n if (this.#dateFormatter.dateIsValid(date)) {\n return date;\n }\n }\n return undefined;\n }\n\n /**\n * Validates the input value to ensure it is formatted correctly.\n */\n #isDateStringValid(value: string): boolean {\n if (!value || typeof value !== 'string') {\n return true;\n }\n\n // Does the value only include digits, dashes, or slashes?\n const regexp = /^[\\d/-]+$/;\n const isValid = regexp.test(value);\n\n if (isValid) {\n return true;\n }\n\n return moment(value).isValid();\n }\n\n // istanbul ignore next\n #onChange = (_: any): void => {};\n // istanbul ignore next\n #onValidatorChange = (): void => {};\n\n /**\n * Update the value of the form control and input element\n * @param emitEvent Denotes if we emit an event to the consumer's form control. We do not want to do this if the value is being updated via a `setValue` call or a `patchValue` call as this is already handled by Angular.\n * In these cases we do not want to fire `onChange` as it will cause extra `valueChange` and `statusChange` events and the status of the form should not be affected by these changes.\n */\n #updateValue(value: any, emitEvent = true): void {\n if (this.#_value === value) {\n return;\n }\n\n const isValidDateString = this.#isDateStringValid(value);\n\n // If the string value supplied is malformed, do not set the value to its Date equivalent.\n // (JavaScript's Date parser will convert poorly formatted dates to Date objects, such as \"abc 123\", which isn't ideal.)\n if (!isValidDateString) {\n this.#_value = value;\n if (emitEvent) {\n this.#onChange(this.#_value);\n } else {\n this.#control?.setValue(this.#_value, { emitEvent: false });\n }\n\n this.#datepickerComponent.selectedDate = this.#_value;\n\n this.#setInputElementValue(value);\n } else {\n // This value represents the date value for the input if possible.\n // This value will take into account all shortcut functionality.\n const dateValue: Date | undefined = this.#getDateValue(value);\n\n const areDatesEqual =\n this.#_value instanceof Date &&\n dateValue &&\n dateValue.getTime() === this.#_value.getTime();\n\n if (dateValue !== this.#_value || !areDatesEqual) {\n this.#_value = dateValue || value;\n if (emitEvent) {\n this.#onChange(this.#_value);\n } else {\n this.#control?.setValue(this.#_value, { emitEvent: false });\n }\n\n this.#datepickerComponent.selectedDate = this.#_value;\n }\n\n if (dateValue) {\n const formattedDateString = this.#dateFormatter.format(\n dateValue,\n this.dateFormat,\n );\n this.#setInputElementValue(formattedDateString);\n } else {\n this.#setInputElementValue(value || '');\n }\n }\n }\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { SkyDateFormatter } from '../date-formatter';\nimport { SkyDatepickerConfigService } from '../datepicker-config.service';\nimport { SkyDatepickerHostService } from '../datepicker-host.service';\nimport { SkyDatepickerComponent } from '../datepicker.component';\n\nimport { SkyFuzzyDate } from './fuzzy-date';\nimport { SkyFuzzyDateService } from './fuzzy-date.service';\n\nconst SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyFuzzyDatepickerInputDirective),\n multi: true,\n};\n\nconst SKY_FUZZY_DATEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyFuzzyDatepickerInputDirective),\n multi: true,\n};\n\n@Directive({\n host: {\n '(focusout)': 'onFocusout($event)',\n },\n providers: [\n SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR,\n SKY_FUZZY_DATEPICKER_VALIDATOR,\n ],\n selector: '[skyFuzzyDatepickerInput]',\n standalone: true,\n})\nexport class SkyFuzzyDatepickerInputDirective\n implements\n OnInit,\n OnDestroy,\n AfterViewInit,\n AfterContentInit,\n ControlValueAccessor,\n Validator\n{\n /**\n * The date format for the input. Place this attribute on the `input` element\n * to override the default in `SkyDatepickerConfigService`.\n * @default \"MM/DD/YYYY\"\n */\n @Input()\n public set dateFormat(value: string | undefined) {\n this.#_dateFormat = value;\n\n if (this.#value) {\n const formattedDate = this.#fuzzyDateService.format(\n this.#value,\n this.dateFormat,\n this.#locale,\n );\n this.#setInputElementValue(formattedDate);\n this.#changeDetector.markForCheck();\n }\n }\n\n // TODO: Refactor to not have getter logic\n public get dateFormat(): string | undefined {\n return (\n this.#_dateFormat ||\n this.#configService.dateFormat ||\n this.#preferredShortDateFormat\n );\n }\n\n /**\n * Whether to disable the datepicker on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value;\n this.#datepickerComponent.disabled = value;\n\n this.#renderer.setProperty(\n this.#elementRef.nativeElement,\n 'disabled',\n value,\n );\n }\n\n public get disabled(): boolean | undefined {\n return this.#_disabled;\n }\n\n /**\n * Whether to prevent users from specifying dates that are in the future.\n * Place this attribute on the `input` element.\n * @default false\n */\n @Input()\n public set futureDisabled(value: boolean | undefined) {\n this.#_futureDisabled = value;\n this.#datepickerComponent.maxDate = this.#getMaxDate();\n this.#onValidatorChange();\n }\n\n public get futureDisabled(): boolean | undefined {\n return this.#_futureDisabled;\n }\n\n /**\n * The latest fuzzy date allowed. Place this attribute on the `input` element\n * to prevent fuzzy dates after a specified date. This property accepts\n * a `SkyFuzzyDate` value that includes numeric month, day, and year values.\n * For example: `{ month: 1, day: 1, year: 2027 }`.\n */\n @Input()\n public set maxDate(value: SkyFuzzyDate | undefined) {\n this.#_maxDate = value;\n this.#datepickerComponent.maxDate = this.#getMaxDate();\n this.#onValidatorChange();\n }\n\n public get maxDate(): SkyFuzzyDate | undefined {\n return this.#_maxDate;\n }\n\n /**\n * The earliest fuzzy date allowed. Place this attribute on the `input` element\n * to prevent fuzzy dates before a specified date. This property accepts a `SkyFuzzyDate` value\n * that includes numeric month, day, and year values.\n * For example: `{ month: 1, day: 1, year: 2007 }`.\n */\n @Input()\n public set minDate(value: SkyFuzzyDate | undefined) {\n this.#_minDate = value;\n this.#datepickerComponent.minDate = this.#getMinDate();\n this.#onValidatorChange();\n }\n\n public get minDate(): SkyFuzzyDate | undefined {\n return this.#_minDate;\n }\n\n /**\n * The fuzzy date to open the calendar to initially.\n * This property accepts a `SkyFuzzyDate` value that includes numeric month, day, and year values.\n * For example: `{ month: 1, day: 1, year: 2007 }`.\n * @default The current date\n */\n @Input()\n public set startAtDate(value: SkyFuzzyDate | undefined) {\n this.#_startAtDate = value;\n this.#datepickerComponent.startAtDate = this.#getStartAtDate();\n }\n\n // TODO: Refactor to not have getter logic\n public get startAtDate(): SkyFuzzyDate | undefined {\n return this.#_startAtDate;\n }\n\n /**\n * Whether to disable date validation on the fuzzy datepicker input.\n * @default false\n */\n @Input()\n public skyDatepickerNoValidate: boolean | undefined = false;\n\n /**\n * The starting day of the week in the calendar, where `0` sets the starting day\n * to Sunday. Place this attribute on the `input` element to override the default\n * in `SkyDatepickerConfigService`.\n * @default 0\n */\n @Input()\n public set startingDay(value: number | undefined) {\n this.#_startingDay = value;\n this.#datepickerComponent.startingDay = this.startingDay;\n\n this.#onValidatorChange();\n }\n\n // TODO: Refactor to not have getter logic\n public get startingDay(): number {\n return this.#_startingDay || this.#configService.startingDay;\n }\n\n /**\n * Whether to require the year in fuzzy dates.\n * @default false\n */\n @Input()\n public set yearRequired(value: boolean | undefined) {\n this.#_yearRequired = value;\n this.#onValidatorChange();\n }\n\n public get yearRequired(): boolean | undefined {\n return this.#_yearRequired;\n }\n\n get #value(): any {\n return this.#_value;\n }\n\n set #value(value: any) {\n this.#updateValue(value);\n }\n\n #control: AbstractControl | undefined;\n\n #dateFormatter = new SkyDateFormatter();\n\n #locale: string;\n\n #preferredShortDateFormat: string | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #notifyTouched: (() => void) | undefined;\n\n #_futureDisabled: boolean | undefined = false;\n\n #_dateFormat: string | undefined;\n\n #_disabled: boolean | undefined = false;\n\n #_maxDate: SkyFuzzyDate | undefined;\n\n #_minDate: SkyFuzzyDate | undefined;\n\n #_startAtDate: SkyFuzzyDate | undefined;\n\n #_startingDay: number | undefined;\n\n #_value: any;\n\n #_yearRequired: boolean | undefined = false;\n\n #changeDetector: ChangeDetectorRef;\n #configService: SkyDatepickerConfigService;\n #elementRef: ElementRef;\n #fuzzyDateService: SkyFuzzyDateService;\n #renderer: Renderer2;\n #datepickerComponent: SkyDatepickerComponent;\n\n readonly #datepickerHostSvc = inject(SkyDatepickerHostService, {\n optional: true,\n });\n\n constructor(\n changeDetector: ChangeDetectorRef,\n configService: SkyDatepickerConfigService,\n elementRef: ElementRef,\n fuzzyDateService: SkyFuzzyDateService,\n localeProvider: SkyAppLocaleProvider,\n renderer: Renderer2,\n @Optional() datepickerComponent?: SkyDatepickerComponent,\n ) {\n if (!datepickerComponent) {\n throw new Error(\n 'You must wrap the `skyFuzzyDatepickerInput` directive within a ' +\n '`<sky-datepicker>` component!',\n );\n }\n\n this.#changeDetector = changeDetector;\n this.#configService = configService;\n this.#elementRef = elementRef;\n this.#fuzzyDateService = fuzzyDateService;\n this.#renderer = renderer;\n this.#datepickerComponent = datepickerComponent;\n\n this.#locale = localeProvider.defaultLocale;\n localeProvider\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo) => {\n this.#locale = localeInfo.locale;\n SkyDateFormatter.setLocale(this.#locale);\n this.#preferredShortDateFormat =\n SkyDateFormatter.getPreferredShortDateFormat();\n });\n\n this.#datepickerHostSvc?.focusout\n .pipe(takeUntilDestroyed())\n .subscribe((evt) => {\n const isFocusingInput =\n evt.relatedTarget === this.#elementRef.nativeElement;\n\n if (!isFocusingInput) {\n this.#notifyTouched?.();\n }\n });\n }\n\n public ngOnInit(): void {\n if (this.yearRequired) {\n if (this.dateFormat?.toLowerCase().indexOf('y') === -1) {\n throw new Error(\n 'You have configured conflicting settings. Year is required and dateFormat does not include year.',\n );\n }\n }\n\n const element = this.#elementRef.nativeElement;\n\n this.#renderer.addClass(element, 'sky-form-control');\n }\n\n public ngAfterContentInit(): void {\n this.#datepickerComponent.dateChange\n .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))\n .subscribe((value: Date) => {\n this.#value = value;\n });\n }\n\n public ngAfterViewInit(): void {\n // This is needed to address a bug in Angular 4.\n // When a control value is set initially, its value is not represented on the view.\n // See: https://github.com/angular/angular/issues/13792\n // Of note is the parent check which allows us to determine if the form is reactive.\n // Without this check there is a changed before checked error\n /* istanbul ignore else */\n\n if (this.#control && this.#control.parent) {\n setTimeout(() => {\n this.#control?.setValue(this.#value, {\n emitEvent: false,\n });\n\n this.#changeDetector.markForCheck();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n @HostListener('change', ['$event'])\n public onInputChange(event: any): void {\n this.#onValueChange(event.target.value);\n }\n\n @HostListener('blur')\n public onInputBlur(): void {\n const formattedDate = this.#fuzzyDateService.format(\n this.#value,\n this.dateFormat,\n this.#locale,\n );\n\n if (this.#control?.valid) {\n this.#setInputElementValue(formattedDate);\n }\n }\n\n @HostListener('input')\n public onInput(): void {\n this.#control?.markAsDirty();\n }\n\n public writeValue(value: any): void {\n this.#updateValue(value, false);\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (!this.#control) {\n this.#control = control;\n }\n\n if (this.skyDatepickerNoValidate) {\n return null;\n }\n\n if (!this.#control.value) {\n return null;\n }\n\n const value: any = control.value;\n\n let fuzzyDate: SkyFuzzyDate | undefined;\n let validationError: ValidationErrors | null = null;\n\n if (typeof value === 'string') {\n fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromString(\n value,\n this.dateFormat,\n );\n } else {\n fuzzyDate = value;\n }\n\n if (!fuzzyDate) {\n validationError = {\n skyFuzzyDate: {\n invalid: value,\n },\n };\n } else {\n if (!fuzzyDate.year && this.yearRequired) {\n validationError = {\n skyFuzzyDate: {\n yearRequired: value,\n },\n };\n }\n\n if (!validationError && fuzzyDate.year) {\n let fuzzyDateRange;\n\n if (this.maxDate) {\n fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(\n fuzzyDate,\n this.maxDate,\n );\n\n if (!fuzzyDateRange.valid) {\n validationError = {\n skyFuzzyDate: {\n maxDate: value,\n maxDateFormatted: this.#dateFormatter.format(\n fuzzyDateRange.endDate,\n this.dateFormat,\n ),\n },\n };\n }\n }\n\n if (!validationError && this.minDate) {\n fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(\n this.minDate,\n fuzzyDate,\n );\n if (!fuzzyDateRange.valid) {\n validationError = {\n skyFuzzyDate: {\n minDate: value,\n minDateFormatted: this.#dateFormatter.format(\n fuzzyDateRange.startDate,\n this.dateFormat,\n ),\n },\n };\n }\n }\n\n if (!validationError && this.futureDisabled) {\n fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(\n fuzzyDate,\n this.#fuzzyDateService.getCurrentFuzzyDate(),\n );\n if (!fuzzyDateRange.valid) {\n validationError = {\n skyFuzzyDate: {\n futureDisabled: value,\n },\n };\n }\n }\n }\n }\n\n if (validationError) {\n // Mark the invalid control as touched so that the input's invalid CSS styles appear.\n // (This is only required when the invalid value is set by the FormControl constructor.)\n this.#control.markAsTouched();\n }\n\n return validationError;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#notifyTouched = fn;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.#onValidatorChange = fn;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this.#datepickerComponent.disabled = disabled;\n }\n\n /**\n * Detects changes to the underlying input element's value and updates the ngModel accordingly.\n * This is useful if you need to update the ngModel value before the input element loses focus.\n */\n public detectInputValueChange(): void {\n this.#onValueChange(this.#elementRef.nativeElement.value);\n }\n\n protected onFocusout(evt: FocusEvent): void {\n if (!this.#datepickerHostSvc?.isFocusingDatepicker(evt)) {\n this.#notifyTouched?.();\n }\n }\n\n #onValueChange(newValue: string): void {\n this.#value = newValue;\n }\n\n #setInputElementValue(value: string): void {\n this.#renderer.setProperty(this.#elementRef.nativeElement, 'value', value);\n }\n\n #getMaxDate(): Date | undefined {\n if (this.maxDate) {\n const maxDate = this.#fuzzyDateService.getMomentFromFuzzyDate(\n this.maxDate,\n );\n if (maxDate.isValid()) {\n return maxDate.toDate();\n }\n } else if (this.futureDisabled) {\n return new Date();\n }\n return this.#configService.maxDate;\n }\n\n #getMinDate(): Date | undefined {\n if (this.minDate) {\n const minDate = this.#fuzzyDateService.getMomentFromFuzzyDate(\n this.minDate,\n );\n if (minDate.isValid()) {\n return minDate.toDate();\n }\n }\n return this.#configService.minDate;\n }\n\n #getStartAtDate(): Date | undefined {\n if (this.startAtDate) {\n const startAtDate = this.#fuzzyDateService.getMomentFromFuzzyDate(\n this.startAtDate,\n );\n if (startAtDate.isValid()) {\n return startAtDate.toDate();\n }\n }\n return this.#configService.startAtDate;\n }\n\n /* istanbul ignore next */\n #fuzzyDatesEqual(dateA?: SkyFuzzyDate, dateB?: SkyFuzzyDate): boolean {\n return !!(\n dateA &&\n dateB &&\n ((!dateA.day && !dateB.day) || dateA.day === dateB.day) &&\n ((!dateA.month && !dateB.month) || dateA.month === dateB.month) &&\n ((!dateA.year && !dateB.year) || dateA.year === dateB.year)\n );\n }\n\n // istanbul ignore next\n #onChange = (_: any): void => {};\n // istanbul ignore next\n #onValidatorChange = (): void => {};\n\n /**\n * Update the value of the form control and input element\n * @param emitEvent Denotes if we emit an event to the consumer's form control. We do not want to do this if the value is being updated via a `setValue` call or a `patchValue` call as this is already handled by Angular.\n * In these cases we do not want to fire `onChange` as it will cause extra `valueChange` and `statusChange` events and the status of the form should not be affected by these changes.\n */\n #updateValue(value: any, emitEvent = true): void {\n if (\n this.#_value === value ||\n (this.#_value === undefined && value === null)\n ) {\n return;\n }\n\n let fuzzyDate: SkyFuzzyDate | undefined;\n let fuzzyMoment: any;\n let dateValue: Date | undefined;\n let formattedDate: string | undefined;\n\n if (value instanceof Date) {\n dateValue = value;\n formattedDate = this.#dateFormatter.format(value, this.dateFormat);\n fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromSelectedDate(\n value,\n this.dateFormat,\n );\n } else if (typeof value === 'string') {\n fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromString(\n value,\n this.dateFormat,\n );\n if (fuzzyDate) {\n formattedDate = this.#fuzzyDateService.format(\n fuzzyDate,\n this.dateFormat,\n this.#locale,\n );\n }\n\n if (!formattedDate) {\n formattedDate = value;\n }\n\n fuzzyMoment = this.#fuzzyDateService.getMomentFromFuzzyDate(fuzzyDate);\n\n if (fuzzyMoment) {\n dateValue = fuzzyMoment.toDate();\n }\n } else {\n fuzzyDate = value as SkyFuzzyDate;\n formattedDate = this.#fuzzyDateService.format(\n fuzzyDate,\n this.dateFormat,\n this.#locale,\n );\n fuzzyMoment = this.#fuzzyDateService.getMomentFromFuzzyDate(fuzzyDate);\n\n if (fuzzyMoment) {\n dateValue = fuzzyMoment.toDate();\n }\n }\n\n const areFuzzyDatesEqual = this.#fuzzyDatesEqual(this.#_value, fuzzyDate);\n const isNewValue = fuzzyDate !== this.#_value || !areFuzzyDatesEqual;\n\n this.#_value = fuzzyDate || value;\n\n if (isNewValue) {\n if (emitEvent) {\n this.#onChange(this.#_value);\n } else {\n this.#control?.setValue(this.#_value, { emitEvent: false });\n }\n\n this.#datepickerComponent.selectedDate = dateValue;\n }\n\n this.#setInputElementValue(formattedDate || '');\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyDatepickerCalendarInnerComponent } from './calendar/datepicker-calendar-inner.component';\nimport { SkyDatepickerCalendarComponent } from './calendar/datepicker-calendar.component';\nimport { SkyDatepickerCalendarService } from './calendar/datepicker-calendar.service';\nimport { SkyDayPickerButtonComponent } from './calendar/daypicker-button.component';\nimport { SkyDayPickerCellComponent } from './calendar/daypicker-cell.component';\nimport { SkyDayPickerComponent } from './calendar/daypicker.component';\nimport { SkyMonthPickerComponent } from './calendar/monthpicker.component';\nimport { SkyYearPickerComponent } from './calendar/yearpicker.component';\nimport { SkyDatepickerInputDirective } from './datepicker-input.directive';\nimport { SkyDatepickerComponent } from './datepicker.component';\nimport { SkyFuzzyDatepickerInputDirective } from './fuzzy/datepicker-input-fuzzy.directive';\n\n@NgModule({\n imports: [\n SkyDatepickerCalendarComponent,\n SkyDatepickerCalendarInnerComponent,\n SkyDatepickerComponent,\n SkyDatepickerInputDirective,\n SkyDayPickerButtonComponent,\n SkyDayPickerCellComponent,\n SkyDayPickerComponent,\n SkyFuzzyDatepickerInputDirective,\n SkyMonthPickerComponent,\n SkyYearPickerComponent,\n ],\n exports: [\n SkyDatepickerCalendarComponent,\n SkyDatepickerComponent,\n SkyDatepickerInputDirective,\n SkyFuzzyDatepickerInputDirective,\n ],\n providers: [SkyDatepickerCalendarService],\n})\nexport class SkyDatepickerModule {}\n","/**\n * The types of calculations available for a date range calculator.\n */\nexport enum SkyDateRangeCalculatorType {\n /**\n * Includes an input for a date after the current date.\n */\n After,\n\n /**\n * Includes an input for a date before the current date.\n */\n Before,\n\n /**\n * Includes two inputs for a range of dates.\n */\n Range,\n\n /**\n * Does not accept any input but calculates a specific range based on the current date.\n */\n Relative,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { SkyDateRangeCalculatorType } from './types/date-range-calculator-type';\n\n@Pipe({\n name: 'skyDateRangePickerEndDateResourceKey',\n standalone: true,\n})\nexport class SkyDateRangePickerEndDateResourceKeyPipe implements PipeTransform {\n public transform(\n calculatorType: SkyDateRangeCalculatorType | undefined,\n ): string {\n if (calculatorType === SkyDateRangeCalculatorType.Range) {\n return 'skyux_date_range_picker_end_date_label';\n }\n\n return 'skyux_date_range_picker_before_date_label';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { SkyDateRangeCalculatorType } from './types/date-range-calculator-type';\n\n@Pipe({\n name: 'skyDateRangePickerStartDateResourceKey',\n standalone: true,\n})\nexport class SkyDateRangePickerStartDateResourceKeyPipe\n implements PipeTransform\n{\n public transform(\n calculatorType: SkyDateRangeCalculatorType | undefined,\n ): string {\n if (calculatorType === SkyDateRangeCalculatorType.Range) {\n return 'skyux_date_range_picker_start_date_label';\n }\n\n return 'skyux_date_range_picker_after_date_label';\n }\n}\n","import { ValidationErrors } from '@angular/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\n\nimport { Observable, of } from 'rxjs';\n\nimport { SkyDateRange } from './date-range';\nimport { SkyDateRangeCalculation } from './date-range-calculation';\nimport { SkyDateRangeCalculatorConfig } from './date-range-calculator-config';\nimport { SkyDateRangeCalculatorId } from './date-range-calculator-id';\nimport { SkyDateRangeCalculatorType } from './date-range-calculator-type';\n\n/**\n * Represents the calculator.\n */\nexport class SkyDateRangeCalculator {\n #config: SkyDateRangeCalculatorConfig;\n #resourcesSvc: SkyLibResourcesService;\n\n /**\n * The text to display in the calculator select menu.\n */\n public get shortDescription$(): Observable<string> {\n if (this.shortDescription) {\n return of(this.shortDescription);\n }\n\n if (!this.#shortDescriptionResourceKey) {\n throw new Error(\n 'Calculator created without short description or resource key.',\n );\n }\n\n return this.#resourcesSvc.getString(this.#shortDescriptionResourceKey);\n }\n\n /**\n * The text to display in the calculator select menu.\n * @deprecated Subscribe to the `shortDescription$` observable instead.\n */\n public shortDescription: string;\n\n #shortDescriptionResourceKey: string | undefined;\n\n /**\n * The type of calculations available for the date range.\n */\n public readonly type: SkyDateRangeCalculatorType;\n\n constructor(\n /**\n * The calculator ID that specifies calculator objects that represent date ranges.\n */\n public readonly calculatorId: SkyDateRangeCalculatorId,\n config: SkyDateRangeCalculatorConfig,\n resourcesSvc: SkyLibResourcesService,\n _shortDescriptionResourceKey?: string,\n ) {\n this.#config = config;\n this.type = config.type;\n this.shortDescription = config.shortDescription;\n this.#shortDescriptionResourceKey = _shortDescriptionResourceKey;\n this.#resourcesSvc = resourcesSvc;\n }\n\n /**\n * Gets the current value of the calculator.\n * @param startDateInput The start date.\n * @param endDateInput The end date.\n */\n public getValue(\n startDateInput?: Date | null,\n endDateInput?: Date | null,\n ): SkyDateRangeCalculation {\n const result = this.#config.getValue(startDateInput, endDateInput);\n\n let startDate: Date | null = null;\n if (result.startDate instanceof Date) {\n startDate = this.#parseDateWithoutTime(result.startDate);\n }\n\n let endDate: Date | null = null;\n if (result.endDate instanceof Date) {\n endDate = this.#parseDateWithoutTime(result.endDate);\n }\n\n return {\n calculatorId: this.calculatorId,\n startDate,\n endDate,\n };\n }\n\n /**\n * Performs synchronous validation against the control.\n */\n public validate(value?: SkyDateRange): ValidationErrors | null {\n if (!this.#config.validate) {\n return null;\n }\n\n return this.#config.validate(value);\n }\n\n /**\n * Get a date object without time information.\n * See: https://stackoverflow.com/a/38050824/6178885\n */\n #parseDateWithoutTime(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n }\n}\n","/**\n * `SkyDateRangeCalculatorId` values specify calculator objects that return\n * two `Date` objects to represent date ranges. The values populate the options\n * in the date range picker's dropdown. SKY UX uses `SkyDateRangeService` to create\n * calculators and configures each one with a `validate` function to confirm that dates\n * are compatible. For example, `validate` functions ensure that start dates are before\n * end dates. SKY UX also configures calculators to call a `getValue` function after\n * the `validate` function and return a range of two `Date` objects.\n */\nexport enum SkyDateRangeCalculatorId {\n /**\n * Selects no dates and considers all dates within the date range. This is the default selection.\n */\n AnyTime,\n\n /**\n * Enables users to select an end date with no starting date.\n */\n Before,\n\n /**\n * Enables users to select a start date with no end date.\n */\n After,\n\n /**\n * Enables users to select specific start and end dates.\n */\n SpecificRange,\n\n /**\n * Sets the start and end dates to the day before the current day.\n */\n Yesterday,\n\n /**\n * Sets the start and end dates to the current day.\n */\n Today,\n\n /**\n * Sets the start and end dates to the day after the current day.\n */\n Tomorrow,\n\n /**\n * Sets the start date to Sunday of the week before the current week and\n * the end date to Saturday of that week.\n */\n LastWeek,\n\n /**\n * Sets the start date to Sunday of the current week and the end date to Saturday.\n */\n ThisWeek,\n\n /**\n * Sets the start date to Sunday of the week after the current week and\n * the end date to Saturday of that week.\n */\n NextWeek,\n\n /**\n * Sets the start date to the first day of the month before the current month and\n * the end date to the last day of that month.\n */\n LastMonth,\n\n /**\n * Sets the start date to the first day of the current month and\n * the end date to the last day of the month.\n */\n ThisMonth,\n\n /**\n * Sets the start date to the first day of the month after the current month\n * and the end date to the last day of that month.\n */\n NextMonth,\n\n /**\n * Sets the start date to the first day of the quarter before the current quarter and\n * the end date to the last day of that quarter. Quarters are\n * January to March, April to June, July to September, and October to December.\n */\n LastQuarter,\n\n /**\n * Sets the start date to the first day of the current quarter and\n * the end date to the last day of the quarter. Quarters are\n * January to March, April to June, July to September, and October to December.\n */\n ThisQuarter,\n\n /**\n * Sets the start date to the first day of the quarter after the current quarter and\n * the end date to the last day of that quarter. Quarters are\n * January to March, April to June, July to September, and October to December.\n */\n NextQuarter,\n\n /**\n * Sets the start date to the first day of the year before the current year\n * and the end date to the last day of that year.\n */\n LastCalendarYear,\n\n /**\n * Sets the start date to the first day of the current year and\n * the end date to the last day of the year.\n */\n ThisCalendarYear,\n\n /**\n * Sets the start date to the first day of the year after the current year and\n * the end date to the last day of that year.\n */\n NextCalendarYear,\n\n /**\n * Sets the start date to the first day of the fiscal year before the current fiscal year and\n * the end date to the last day of that fiscal year. The fiscal year is Oct. 1 to Sept. 30.\n */\n LastFiscalYear,\n\n /**\n * Sets the start date to the first day of the current fiscal year and\n * the end date to the last day of the fiscal year. The fiscal year is Oct. 1 to Sept. 30.\n */\n ThisFiscalYear,\n\n /**\n * Sets the start date to the first day of the fiscal year after the current fiscal year\n * and the end date to the last day of that fiscal year. The fiscal year is Oct. 1 to Sept. 30.\n */\n NextFiscalYear,\n}\n","import { SkyDateRange } from './date-range';\n\n/**\n * Need to add the following to classes which contain static methods.\n * See: https://github.com/ng-packagr/ng-packagr/issues/641\n * @internal\n */\nexport abstract class SkyDateRangeRelativeValue {\n public static get today(): SkyDateRange {\n const today = new Date();\n\n return {\n startDate: today,\n endDate: today,\n };\n }\n\n public static get tomorrow(): SkyDateRange {\n const tomorrow = new Date();\n\n tomorrow.setDate(tomorrow.getDate() + 1);\n\n return {\n startDate: tomorrow,\n endDate: tomorrow,\n };\n }\n\n public static get yesterday(): SkyDateRange {\n const yesterday = new Date();\n\n yesterday.setDate(yesterday.getDate() - 1);\n\n return {\n startDate: yesterday,\n endDate: yesterday,\n };\n }\n\n /**\n * A date range starting with the nearest past Sunday and ending with the following Saturday.\n */\n public static get thisWeek(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - startDate.getDay());\n\n const endDate = new Date();\n endDate.setDate(endDate.getDate() - endDate.getDay() + 6);\n\n return {\n startDate,\n endDate,\n };\n }\n\n /**\n * A date range starting with the nearest upcoming Sunday and ending with the following Saturday.\n */\n public static get nextWeek(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - startDate.getDay() + 7);\n\n const endDate = new Date();\n endDate.setDate(endDate.getDate() - endDate.getDay() + 13);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get lastWeek(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - startDate.getDay() - 7);\n\n const endDate = new Date();\n endDate.setDate(endDate.getDate() - endDate.getDay() - 1);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get thisMonth(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n\n const endDate = new Date();\n endDate.setMonth(endDate.getMonth() + 1);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get nextMonth(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(startDate.getMonth() + 1);\n\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(endDate.getMonth() + 2);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get lastMonth(): SkyDateRange {\n const startDate = new Date();\n\n // First, set the day of the month to zero,\n // which points to the last day of the previous month.\n startDate.setDate(0);\n\n // Finally, set the day of the month to 1.\n startDate.setDate(1);\n\n const endDate = new Date();\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get thisQuarter(): SkyDateRange {\n const startDate = new Date();\n const endDate = new Date();\n\n const currentMonth = startDate.getMonth();\n const quarterStartMonth =\n SkyDateRangeRelativeValue.getQuarterStartMonth(currentMonth);\n\n startDate.setMonth(quarterStartMonth);\n startDate.setDate(1);\n\n endDate.setMonth(quarterStartMonth + 3);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get nextQuarter(): SkyDateRange {\n const startDate = new Date();\n const endDate = new Date();\n\n const currentMonth = startDate.getMonth();\n const quarterStartMonth =\n SkyDateRangeRelativeValue.getQuarterStartMonth(currentMonth);\n\n startDate.setMonth(quarterStartMonth + 3);\n startDate.setDate(1);\n\n endDate.setMonth(quarterStartMonth + 6);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get lastQuarter(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n\n const endDate = new Date();\n endDate.setDate(1);\n\n const currentMonth = startDate.getMonth();\n const quarterStartMonth =\n SkyDateRangeRelativeValue.getQuarterStartMonth(currentMonth);\n\n startDate.setMonth(quarterStartMonth - 3);\n startDate.setDate(1);\n\n endDate.setMonth(quarterStartMonth);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get thisCalendarYear(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(0);\n\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(0);\n endDate.setFullYear(endDate.getFullYear() + 1);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get nextCalendarYear(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(0);\n startDate.setFullYear(startDate.getFullYear() + 1);\n\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(0);\n endDate.setFullYear(startDate.getFullYear() + 1);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get lastCalendarYear(): SkyDateRange {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(0);\n startDate.setFullYear(startDate.getFullYear() - 1);\n\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(0);\n endDate.setDate(0);\n\n return {\n startDate,\n endDate,\n };\n }\n\n public static get thisFiscalYear(): SkyDateRange {\n const start = new Date();\n start.setDate(1);\n\n return SkyDateRangeRelativeValue.getClosestFiscalYearRange(start);\n }\n\n public static get nextFiscalYear(): SkyDateRange {\n const start = new Date();\n start.setDate(1);\n start.setFullYear(start.getFullYear() + 1);\n\n return SkyDateRangeRelativeValue.getClosestFiscalYearRange(start);\n }\n\n public static get lastFiscalYear(): SkyDateRange {\n const start = new Date();\n start.setDate(1);\n start.setFullYear(start.getFullYear() - 1);\n\n return SkyDateRangeRelativeValue.getClosestFiscalYearRange(start);\n }\n\n private static getQuarterStartMonth(currentMonth: number): number {\n let month: number;\n if (currentMonth < 3) {\n month = 0;\n } else if (currentMonth < 6) {\n month = 3;\n } else if (currentMonth < 9) {\n month = 6;\n } else {\n month = 9;\n }\n\n return month;\n }\n\n /**\n * Return a fiscal year based on a start date.\n * (The fiscal year starts in October and continues through to next September.)\n */\n private static getClosestFiscalYearRange(startDate: Date): SkyDateRange {\n const endDate = new Date(startDate);\n\n if (startDate.getMonth() >= 9) {\n startDate.setMonth(9);\n endDate.setFullYear(startDate.getFullYear() + 1);\n endDate.setMonth(9);\n endDate.setDate(0);\n } else {\n startDate.setFullYear(startDate.getFullYear() - 1);\n startDate.setMonth(9);\n endDate.setMonth(9);\n endDate.setDate(0);\n }\n\n return {\n startDate,\n endDate,\n };\n }\n}\n","import { ValidationErrors } from '@angular/forms';\n\nimport { SkyDateRangeCalculatorId } from './date-range-calculator-id';\nimport { SkyDateRangeCalculatorType } from './date-range-calculator-type';\nimport { SkyDateRangeDefaultCalculatorConfig } from './date-range-default-calculator-config';\nimport { SkyDateRangeRelativeValue } from './date-range-relative-value';\n\nexport const SKY_DEFAULT_CALCULATOR_IDS: SkyDateRangeCalculatorId[] = [\n SkyDateRangeCalculatorId.AnyTime,\n SkyDateRangeCalculatorId.Before,\n SkyDateRangeCalculatorId.After,\n SkyDateRangeCalculatorId.SpecificRange,\n SkyDateRangeCalculatorId.Yesterday,\n SkyDateRangeCalculatorId.Today,\n SkyDateRangeCalculatorId.Tomorrow,\n SkyDateRangeCalculatorId.LastWeek,\n SkyDateRangeCalculatorId.ThisWeek,\n SkyDateRangeCalculatorId.NextWeek,\n SkyDateRangeCalculatorId.LastMonth,\n SkyDateRangeCalculatorId.ThisMonth,\n SkyDateRangeCalculatorId.NextMonth,\n SkyDateRangeCalculatorId.LastQuarter,\n SkyDateRangeCalculatorId.ThisQuarter,\n SkyDateRangeCalculatorId.NextQuarter,\n SkyDateRangeCalculatorId.LastCalendarYear,\n SkyDateRangeCalculatorId.ThisCalendarYear,\n SkyDateRangeCalculatorId.NextCalendarYear,\n SkyDateRangeCalculatorId.LastFiscalYear,\n SkyDateRangeCalculatorId.ThisFiscalYear,\n SkyDateRangeCalculatorId.NextFiscalYear,\n];\n\nexport const SKY_DEFAULT_CALCULATOR_CONFIGS: SkyDateRangeDefaultCalculatorConfig[] =\n [\n {\n calculatorId: SkyDateRangeCalculatorId.AnyTime,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_any_time',\n getValue: (startDate, endDate) => ({ startDate, endDate }),\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.Before,\n type: SkyDateRangeCalculatorType.Before,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_before',\n getValue: (startDate, endDate) => ({ startDate, endDate }),\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.After,\n type: SkyDateRangeCalculatorType.After,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_after',\n getValue: (startDate, endDate) => ({ startDate, endDate }),\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.SpecificRange,\n type: SkyDateRangeCalculatorType.Range,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_specific_range',\n getValue: (startDate, endDate) => ({ startDate, endDate }),\n validate: (value): ValidationErrors | null => {\n if (\n value &&\n value.startDate &&\n value.endDate &&\n value.startDate > value.endDate\n ) {\n return {\n endDateBeforeStartDate: true,\n };\n }\n return null;\n },\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.LastFiscalYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_last_fiscal_year',\n getValue: () => SkyDateRangeRelativeValue.lastFiscalYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.LastMonth,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_last_month',\n getValue: () => SkyDateRangeRelativeValue.lastMonth,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.LastQuarter,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_last_quarter',\n getValue: () => SkyDateRangeRelativeValue.lastQuarter,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.LastWeek,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_last_week',\n getValue: () => SkyDateRangeRelativeValue.lastWeek,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.LastCalendarYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_last_calendar_year',\n getValue: () => SkyDateRangeRelativeValue.lastCalendarYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.NextFiscalYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_next_fiscal_year',\n getValue: () => SkyDateRangeRelativeValue.nextFiscalYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.NextMonth,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_next_month',\n getValue: () => SkyDateRangeRelativeValue.nextMonth,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.NextQuarter,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_next_quarter',\n getValue: () => SkyDateRangeRelativeValue.nextQuarter,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.NextWeek,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_next_week',\n getValue: () => SkyDateRangeRelativeValue.nextWeek,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.NextCalendarYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_next_calendar_year',\n getValue: () => SkyDateRangeRelativeValue.nextCalendarYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.ThisFiscalYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_this_fiscal_year',\n getValue: () => SkyDateRangeRelativeValue.thisFiscalYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.ThisMonth,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_this_month',\n getValue: () => SkyDateRangeRelativeValue.thisMonth,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.ThisQuarter,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_this_quarter',\n getValue: () => SkyDateRangeRelativeValue.thisQuarter,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.ThisWeek,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_this_week',\n getValue: () => SkyDateRangeRelativeValue.thisWeek,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.ThisCalendarYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_this_calendar_year',\n getValue: () => SkyDateRangeRelativeValue.thisCalendarYear,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.Today,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_today',\n getValue: () => SkyDateRangeRelativeValue.today,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.Tomorrow,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_tomorrow',\n getValue: () => SkyDateRangeRelativeValue.tomorrow,\n },\n\n {\n calculatorId: SkyDateRangeCalculatorId.Yesterday,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey:\n 'skyux_date_range_picker_format_label_yesterday',\n getValue: () => SkyDateRangeRelativeValue.yesterday,\n },\n ];\n","import { Injectable, inject } from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\n\nimport { SkyDateRangeCalculator } from './types/date-range-calculator';\nimport { SkyDateRangeCalculatorConfig } from './types/date-range-calculator-config';\nimport { SkyDateRangeCalculatorId } from './types/date-range-calculator-id';\nimport { SKY_DEFAULT_CALCULATOR_CONFIGS } from './types/date-range-default-calculator-configs';\n\n// Start the count higher than the number of available values\n// provided in the SkyDateRangeCalculatorId enum.\nlet lastId = 1000;\n\n/**\n * Creates and manages `SkyDateRangeCalculator` instances.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyDateRangeService {\n readonly #libResourcesSvc = inject(SkyLibResourcesService);\n\n public get calculators(): SkyDateRangeCalculator[] {\n return this.#calculators;\n }\n\n #calculators = this.#createDefaultCalculators();\n\n /**\n * Creates a custom date range calculator.\n * @param config The calculator config.\n */\n public createCalculator(\n config: SkyDateRangeCalculatorConfig,\n ): SkyDateRangeCalculator {\n const newId = lastId++;\n const calculator = new SkyDateRangeCalculator(\n newId,\n config,\n this.#libResourcesSvc,\n );\n\n this.#calculators.push(calculator);\n\n return calculator;\n }\n\n /**\n * Returns calculators from an array of calculator IDs.\n * @param calculatorIds The array of calculator IDs.\n */\n public filterCalculators(\n calculatorIds: SkyDateRangeCalculatorId[],\n ): SkyDateRangeCalculator[] {\n const filtered: SkyDateRangeCalculator[] = [];\n\n for (const calculatorId of calculatorIds) {\n const found = this.#calculators.find(\n (c) => c.calculatorId === calculatorId,\n );\n\n if (found) {\n filtered.push(found);\n }\n }\n\n return filtered;\n }\n\n /**\n * Returns calculators from an array of calculator IDs.\n * @param ids The array of calculator IDs.\n * @deprecated Call `filterCalculators()` instead.\n */\n public getCalculators(\n ids: SkyDateRangeCalculatorId[],\n ): Promise<SkyDateRangeCalculator[]> {\n const promises = ids.map((id) => {\n return this.getCalculatorById(id);\n });\n\n return Promise.all(promises);\n }\n\n /**\n * Returns a calculator from a calculator ID.\n * @param id The calculator ID.\n * @deprecated Call `filterCalculators()` instead.\n */\n public getCalculatorById(\n id: SkyDateRangeCalculatorId,\n ): Promise<SkyDateRangeCalculator> {\n const calculatorId = +id;\n\n const found = this.#calculators.find((calculator) => {\n return calculator.calculatorId === calculatorId;\n });\n\n return new Promise((resolve, reject) => {\n if (!found) {\n reject(new Error(`A calculator with the ID ${id} was not found.`));\n return;\n }\n\n resolve(found);\n });\n }\n\n /**\n * Returns default date range calculators with unresolved resources strings.\n */\n #createDefaultCalculators(): SkyDateRangeCalculator[] {\n const calculators: SkyDateRangeCalculator[] = [];\n\n for (const defaultConfig of SKY_DEFAULT_CALCULATOR_CONFIGS) {\n calculators.push(\n new SkyDateRangeCalculator(\n defaultConfig.calculatorId,\n {\n getValue: defaultConfig.getValue,\n validate: defaultConfig.validate,\n shortDescription: '',\n type: defaultConfig.type,\n },\n this.#libResourcesSvc,\n defaultConfig.shortDescriptionResourceKey,\n ),\n );\n }\n\n return calculators;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n HostBinding,\n Injector,\n Input,\n Signal,\n TemplateRef,\n booleanAttribute,\n computed,\n inject,\n runInInjectionContext,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n ReactiveFormsModule,\n StatusChangeEvent,\n TouchedChangeEvent,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyLogService } from '@skyux/core';\nimport {\n SKY_FORM_ERRORS_ENABLED,\n SkyFormErrorsModule,\n SkyInputBoxModule,\n} from '@skyux/forms';\n\nimport { distinctUntilChanged, filter, map } from 'rxjs';\n\nimport { SkyDatepickerComponent } from '../datepicker/datepicker.component';\nimport { SkyDatepickerModule } from '../datepicker/datepicker.module';\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\n\nimport { SkyDateRangePickerEndDateResourceKeyPipe } from './date-range-picker-end-date-resource-key.pipe';\nimport { SkyDateRangePickerStartDateResourceKeyPipe } from './date-range-picker-start-date-resource-key.pipe';\nimport { SkyDateRangeService } from './date-range.service';\nimport { SkyDateRangeCalculation } from './types/date-range-calculation';\nimport { SkyDateRangeCalculator } from './types/date-range-calculator';\nimport { SkyDateRangeCalculatorId } from './types/date-range-calculator-id';\nimport { SkyDateRangeCalculatorType } from './types/date-range-calculator-type';\nimport { SKY_DEFAULT_CALCULATOR_IDS } from './types/date-range-default-calculator-configs';\n\ntype DateValue = Date | string | null | undefined;\n\nfunction areDateRangesEqual(\n rangeA: SkyDateRangeCalculation | undefined,\n rangeB: SkyDateRangeCalculation | undefined,\n): boolean {\n return (\n !!rangeA &&\n !!rangeB &&\n rangeA.calculatorId === rangeB.calculatorId &&\n areDatesEqual(rangeA.startDate, rangeB.startDate) &&\n areDatesEqual(rangeA.endDate, rangeB.endDate)\n );\n}\n\nfunction areDatesEqual(a: DateValue, b: DateValue): boolean {\n if (typeof a !== typeof b) {\n return false;\n }\n\n if (!a && !b) {\n return true;\n }\n\n if (typeof a === 'string' && a === b) {\n return true;\n }\n\n return a instanceof Date && b instanceof Date && a.getTime() === b.getTime();\n}\n\nfunction isNullOrUndefined(value: unknown): value is undefined | null {\n return value === undefined || value === null;\n}\n\nfunction isPartialValue(\n value: Partial<SkyDateRangeCalculation> | null | undefined,\n): value is Partial<SkyDateRangeCalculation> | null | undefined {\n return (\n isNullOrUndefined(value) ||\n isNullOrUndefined(value.calculatorId) ||\n !('endDate' in value) ||\n !('startDate' in value)\n );\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(focusout)': 'onFocusout($event)',\n },\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SkyDatepickerModule,\n SkyDateRangePickerEndDateResourceKeyPipe,\n SkyDateRangePickerStartDateResourceKeyPipe,\n SkyDatetimeResourcesModule,\n SkyInputBoxModule,\n SkyFormErrorsModule,\n ],\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: SkyDateRangePickerComponent,\n multi: true,\n },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SkyDateRangePickerComponent,\n multi: true,\n },\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n selector: 'sky-date-range-picker',\n styleUrl: './date-range-picker.component.scss',\n templateUrl: './date-range-picker.component.html',\n})\nexport class SkyDateRangePickerComponent\n implements AfterViewInit, ControlValueAccessor, Validator\n{\n readonly #dateRangeSvc = inject(SkyDateRangeService);\n readonly #destroyRef = inject(DestroyRef);\n readonly #elementRef = inject(ElementRef);\n readonly #injector = inject(Injector);\n readonly #logger = inject(SkyLogService);\n\n /**\n * IDs for the date range options to include in the picker's dropdown.\n * The options specify calculator objects that return two `Date` objects to represent date ranges.\n * By default, this property includes all `SkyDateRangeCalculatorId` values.\n */\n @Input()\n public set calculatorIds(\n calculatorIds: SkyDateRangeCalculatorId[] | undefined,\n ) {\n const currentCalculatorId = this.#getValue().calculatorId;\n\n this.#_calculatorIds = calculatorIds ?? SKY_DEFAULT_CALCULATOR_IDS;\n this.calculators = this.#dateRangeSvc.filterCalculators(\n this.#_calculatorIds,\n );\n\n // If the currently selected calculator isn't available anymore,\n // select the first calculator in the new array.\n if (!this.#_calculatorIds.includes(currentCalculatorId)) {\n this.#setValue({ calculatorId: this.calculatorIds[0] });\n }\n }\n\n public get calculatorIds(): SkyDateRangeCalculatorId[] {\n return this.#_calculatorIds;\n }\n\n /**\n * The date format for\n * [the `sky-datepicker` components](https://developer.blackbaud.com/skyux/components/datepicker)\n * that make up the date range picker. The text input is a composite component of\n * up to two `sky-datepicker` components.\n * @default \"MM/DD/YYYY\"\n */\n @Input()\n public dateFormat: string | undefined;\n\n /**\n * Whether to disable the date range picker on template-driven forms. Don't use\n * this input on reactive forms because they may overwrite the input or leave\n * the control out of sync. To set the disabled state on reactive forms,\n * use the `FormControl` instead.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n if (value) {\n this.formGroup.disable();\n } else {\n this.formGroup.enable();\n }\n }\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to date range picker. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * The label for the date range picker.\n * @deprecated Use the `labelText` input instead.\n */\n @Input()\n public set label(value: string | undefined) {\n this.#_label = value;\n\n if (value) {\n this.#logger.deprecated('SkyDateRangePickerComponent.label', {\n deprecationMajorVersion: 10,\n replacementRecommendation: 'Use the `labelText` input instead.',\n });\n }\n }\n\n public get label(): string | undefined {\n return this.#_label;\n }\n\n /**\n * The text to display as the date range picker's label.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Whether the date range picker is stacked on another form component. When specified, the appropriate\n * vertical spacing is automatically added to the date range picker.\n */\n @Input({ transform: booleanAttribute })\n @HostBinding('class.sky-form-field-stacked')\n public stacked = false;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the date range picker label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n protected calculators = this.#dateRangeSvc.calculators;\n protected datepickers = viewChildren(SkyDatepickerComponent);\n protected hostControl: AbstractControl | null | undefined;\n protected selectedCalculator = this.calculators[0];\n protected showEndDatePicker = signal<boolean>(false);\n protected showStartDatePicker = signal<boolean>(false);\n\n #_calculatorIds = SKY_DEFAULT_CALCULATOR_IDS;\n #_label: string | undefined;\n #_value = this.selectedCalculator.getValue();\n\n #hostHasCustomError: Signal<boolean | undefined> | undefined;\n #notifyChange: ((_: SkyDateRangeCalculation) => void) | undefined;\n #notifyTouched: (() => void) | undefined;\n\n #calculatorIdControl = new FormControl<number>(\n this.#getValue().calculatorId,\n { nonNullable: true },\n );\n #calculatorIdInvalid = this.#createStatusChangeSignal(\n this.#calculatorIdControl,\n );\n #calculatorIdTouched = this.#createTouchedChangeSignal(\n this.#calculatorIdControl,\n );\n\n #endDateControl = new FormControl<DateValue>(this.#getValue().endDate);\n #endDateInvalid = this.#createStatusChangeSignal(this.#endDateControl);\n #endDateTouched = this.#createTouchedChangeSignal(this.#endDateControl);\n\n #startDateControl = new FormControl<DateValue>(this.#getValue().startDate);\n #startDateInvalid = this.#createStatusChangeSignal(this.#startDateControl);\n #startDateTouched = this.#createTouchedChangeSignal(this.#startDateControl);\n\n protected formGroup = inject(FormBuilder).group({\n calculatorId: this.#calculatorIdControl,\n startDate: this.#startDateControl,\n endDate: this.#endDateControl,\n });\n\n protected readonly calculatorIdHasErrors = computed(() => {\n const touched = this.#calculatorIdTouched();\n const invalid = this.#calculatorIdInvalid() || this.#hostHasCustomError?.();\n return touched && invalid;\n });\n\n protected readonly endDateHasErrors = computed(() => {\n const calculatorIdHasErrors = this.calculatorIdHasErrors();\n const touched = this.#endDateTouched();\n const invalid = this.#endDateInvalid();\n\n return calculatorIdHasErrors || (touched && invalid);\n });\n\n protected readonly startDateHasErrors = computed(() => {\n const calculatorIdHasErrors = this.calculatorIdHasErrors();\n const touched = this.#startDateTouched();\n const invalid = this.#startDateInvalid();\n\n return calculatorIdHasErrors || (touched && invalid);\n });\n\n public ngAfterViewInit(): void {\n this.hostControl = this.#injector.get(NgControl, null, {\n optional: true,\n self: true,\n })?.control;\n\n runInInjectionContext(this.#injector, () => {\n if (this.hostControl) {\n this.#hostHasCustomError = this.#createHostCustomErrorChangeSignal(\n this.hostControl,\n );\n }\n });\n\n // Set a default value on the control if it's undefined on init.\n // We need to use setTimeout to avoid interfering with the first\n // validation cycle.\n if (isPartialValue(this.hostControl?.value)) {\n setTimeout(() => {\n this.hostControl?.setValue(this.#getValue(), {\n emitEvent: false,\n });\n });\n }\n\n // If the datepickers' statuses change, we want to retrigger the host\n // control's validation so that their errors are reflected back to the host.\n this.formGroup.events\n .pipe(\n filter((evt) => evt instanceof StatusChangeEvent),\n map((evt: StatusChangeEvent) => evt.status),\n distinctUntilChanged(),\n takeUntilDestroyed(this.#destroyRef),\n )\n .subscribe(() => {\n this.hostControl?.updateValueAndValidity({\n emitEvent: false,\n onlySelf: true,\n });\n });\n\n // Mark all fields as touched if the host control is touched.\n this.hostControl?.events\n .pipe(\n filter((evt) => evt instanceof TouchedChangeEvent),\n map((evt: TouchedChangeEvent) => evt.touched),\n distinctUntilChanged(),\n takeUntilDestroyed(this.#destroyRef),\n )\n .subscribe(() => {\n this.formGroup.markAllAsTouched();\n });\n }\n\n // Implemented as part of ControlValueAccessor.\n public registerOnChange(fn: (_: unknown) => void): void {\n this.#notifyChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n public registerOnTouched(fn: () => void): void {\n this.#notifyTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // Implemented as part of Validator.\n public validate(control: AbstractControl): ValidationErrors | null {\n let errors: ValidationErrors | null = null;\n\n const calculatorErrors = this.selectedCalculator.validate(control.value);\n const startDateErrors = this.#startDateControl.errors;\n const endDateErrors = this.#endDateControl.errors;\n\n if (calculatorErrors) {\n errors = {\n skyDateRange: {\n calculatorId: this.#getValue().calculatorId,\n errors: calculatorErrors,\n },\n };\n }\n\n // Set calculator errors on the select so that they appear beneath it.\n this.#calculatorIdControl.setErrors(errors);\n\n if (this.showStartDatePicker() && startDateErrors) {\n errors ||= {};\n errors = { ...errors, ...startDateErrors };\n }\n\n if (this.showEndDatePicker() && endDateErrors) {\n errors ||= {};\n errors = { ...errors, ...endDateErrors };\n }\n\n return errors;\n }\n\n // Implemented as part of ControlValueAccessor.\n // The date range picker always has a value, so if the consumer passes in a\n // partial value (via `patchValue`) or null, we need to update the host control's\n // value with the complete value after it's been modified.\n public writeValue(value: Partial<SkyDateRangeCalculation> | undefined): void {\n this.#patchValue(value);\n\n // Update the host control if it is set to a partial or null value.\n if (isPartialValue(value)) {\n this.hostControl?.setValue(this.#getValue(), {\n emitEvent: false,\n onlySelf: true,\n });\n }\n }\n\n /**\n * Fires when a user changes the selected calculator ID.\n */\n protected onCalculatorIdChange(): void {\n // Reset the value when the calculator ID changes.\n this.#setValue({ calculatorId: +this.#calculatorIdControl.value });\n this.onDateChange();\n }\n\n /**\n * Fires when a user interacts with a date range picker.\n */\n protected onDateChange(): void {\n // Wait until the form control is updated before retrieving its value.\n setTimeout(() => {\n this.#notifyChange?.(\n this.formGroup.getRawValue() as SkyDateRangeCalculation,\n );\n });\n }\n\n /**\n * Fires when the date range picker loses focus.\n */\n protected onFocusout({ relatedTarget }: FocusEvent): void {\n if (\n relatedTarget &&\n !this.#elementRef.nativeElement.contains(relatedTarget) &&\n !this.datepickers().some((picker) => picker.containsTarget(relatedTarget))\n ) {\n this.#notifyTouched?.();\n }\n }\n\n #getCalculator(calculatorId: number): SkyDateRangeCalculator {\n const found = this.calculators.find((c) => c.calculatorId === calculatorId);\n\n /*istanbul ignore if: safety check*/\n if (!found) {\n throw new Error(\n `A date range calculator with ID (${calculatorId}) could not be found.`,\n );\n }\n\n return found;\n }\n\n #getValue(): SkyDateRangeCalculation {\n // Important! Return a clone to avoid changing the properties by reference.\n return { ...this.#_value };\n }\n\n #patchValue(\n partialValue: Partial<SkyDateRangeCalculation> | null | undefined,\n ): void {\n if (isNullOrUndefined(partialValue)) {\n this.#setValue(null);\n return;\n }\n\n const oldValue = this.#getValue();\n\n // If the new ID is distinct, erase the old start and end dates because\n // they're no longer applicable.\n if (\n !isNullOrUndefined(partialValue.calculatorId) &&\n oldValue.calculatorId !== partialValue.calculatorId\n ) {\n delete oldValue.endDate;\n delete oldValue.startDate;\n }\n\n const value = {\n ...oldValue,\n ...partialValue,\n };\n\n this.#setValue(value);\n }\n\n /**\n * Sets the value to be used by the date range picker form control.\n */\n #setValue(value: SkyDateRangeCalculation | null | undefined): void {\n const oldValue = this.#getValue();\n\n const isValueEmpty = !value || isNullOrUndefined(value.calculatorId);\n const valueOrDefault = isValueEmpty\n ? this.calculators[0].getValue()\n : {\n ...this.#getCalculator(value.calculatorId).getValue(),\n ...value,\n };\n\n // Ensure falsy values are set to null.\n valueOrDefault.endDate = valueOrDefault.endDate || null;\n valueOrDefault.startDate = valueOrDefault.startDate || null;\n\n if (!areDateRangesEqual(oldValue, valueOrDefault)) {\n this.#_value = valueOrDefault;\n\n if (oldValue.calculatorId !== valueOrDefault.calculatorId) {\n this.selectedCalculator = this.#getCalculator(\n valueOrDefault.calculatorId,\n );\n\n this.#updatePickerVisibility(this.selectedCalculator);\n }\n\n this.formGroup.patchValue(valueOrDefault);\n }\n }\n\n #updatePickerVisibility(calculator: SkyDateRangeCalculator): void {\n let showEndDatePicker = false;\n let showStartDatePicker = false;\n\n switch (calculator.type) {\n case SkyDateRangeCalculatorType.Before:\n showEndDatePicker = true;\n break;\n\n case SkyDateRangeCalculatorType.After:\n showStartDatePicker = true;\n break;\n\n case SkyDateRangeCalculatorType.Range:\n showEndDatePicker = true;\n showStartDatePicker = true;\n break;\n\n default:\n break;\n }\n\n this.showEndDatePicker.set(showEndDatePicker);\n this.showStartDatePicker.set(showStartDatePicker);\n }\n\n #createHostCustomErrorChangeSignal(\n control: AbstractControl,\n ): Signal<boolean | undefined> {\n return toSignal(\n control.events.pipe(\n filter((evt) => evt instanceof StatusChangeEvent),\n map((evt: StatusChangeEvent) => {\n const errors = evt.source.errors ?? [];\n const knownErrors = ['required', 'skyDate'];\n\n return Object.keys(errors).some((error) => {\n return !knownErrors.includes(error);\n });\n }),\n ),\n );\n }\n\n #createStatusChangeSignal(control: FormControl): Signal<boolean | undefined> {\n return toSignal(\n control.events.pipe(\n filter((evt) => evt instanceof StatusChangeEvent),\n map((evt: StatusChangeEvent) => evt.status === 'INVALID'),\n takeUntilDestroyed(this.#destroyRef),\n ),\n );\n }\n\n #createTouchedChangeSignal(\n control: FormControl,\n ): Signal<boolean | undefined> {\n return toSignal(\n control.events.pipe(\n filter((evt) => evt instanceof TouchedChangeEvent),\n map((evt: TouchedChangeEvent) => evt.touched),\n takeUntilDestroyed(this.#destroyRef),\n ),\n );\n }\n}\n","<div class=\"sky-date-range-picker\" [formGroup]=\"formGroup\">\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-picker-select-calculator\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n !showStartDatePicker() && !showEndDatePicker()\n }\"\n >\n <sky-input-box\n [hasErrors]=\"calculatorIdHasErrors()\"\n [helpKey]=\"helpKey\"\n [helpPopoverContent]=\"helpPopoverContent\"\n [helpPopoverTitle]=\"helpPopoverTitle\"\n [hintText]=\"hintText\"\n [labelText]=\"\n labelText ||\n label ||\n ('skyux_date_range_picker_default_label' | skyLibResources)\n \"\n >\n <select formControlName=\"calculatorId\" (change)=\"onCalculatorIdChange()\">\n @for (calculator of calculators; track calculator.calculatorId) {\n <option [value]=\"calculator.calculatorId\">\n {{ calculator.shortDescription$ | async }}\n </option>\n }\n </select>\n @if (\n hostControl?.errors?.['skyDateRange']?.errors?.[\n 'endDateBeforeStartDate'\n ] && labelText\n ) {\n <sky-form-error\n errorName=\"endDateBeforeStartDate\"\n [errorText]=\"\n 'skyux_date_range_picker_end_date_before_start_date_error_label_text'\n | skyLibResources\n \"\n />\n }\n <span class=\"sky-input-box-descendent-form-error\">\n <ng-content select=\"sky-form-error\" />\n </span>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper sky-date-range-picker-start-date\"\n [hidden]=\"!showStartDatePicker()\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n showStartDatePicker() && !showEndDatePicker()\n }\"\n >\n <sky-input-box\n [hasErrors]=\"startDateHasErrors()\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker (calendarDateChange)=\"onDateChange()\">\n <input\n formControlName=\"startDate\"\n name=\"startDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showStartDatePicker()\"\n (change)=\"onDateChange()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper sky-date-range-picker-end-date\"\n [hidden]=\"!showEndDatePicker()\"\n [ngClass]=\"{ 'sky-date-range-picker-last-input': showEndDatePicker() }\"\n >\n <sky-input-box\n [hasErrors]=\"endDateHasErrors()\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker (calendarDateChange)=\"onDateChange()\">\n <input\n formControlName=\"endDate\"\n name=\"endDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showEndDatePicker()\"\n (change)=\"onDateChange()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { SkyFormErrorModule } from '@skyux/forms';\n\nimport { SkyDateRangePickerComponent } from './date-range-picker.component';\n\n@NgModule({\n exports: [SkyDateRangePickerComponent, SkyFormErrorModule],\n imports: [SkyDateRangePickerComponent],\n})\nexport class SkyDateRangePickerModule {}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n Inject,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {\n SKY_STACKING_CONTEXT,\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyCoreAdapterService,\n SkyOverlayInstance,\n SkyOverlayService,\n SkyStackingContext,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport moment from 'moment';\nimport { Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyTimepickerTimeFormatType } from './timepicker-time-format-type';\nimport { SkyTimepickerTimeOutput } from './timepicker-time-output';\n\nlet nextId = 0;\n\n/**\n * Creates a SKY UX-themed replacement for the HTML `input` element with `type=\"time\"`.\n * The value that users select is driven through the `ngModel` attribute\n * specified on the `input` element. You must wrap this component around an `input`\n * with the `skyTimepickerInput` directive.\n */\n@Component({\n selector: 'sky-timepicker',\n templateUrl: './timepicker.component.html',\n styleUrls: ['./timepicker.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyTimepickerComponent implements OnInit, OnDestroy {\n /**\n * Fires when the value in the timepicker input changes.\n */\n @Output()\n public selectedTimeChanged: EventEmitter<SkyTimepickerTimeOutput> =\n new EventEmitter<SkyTimepickerTimeOutput>();\n\n public set disabled(value: boolean) {\n this.#_disabled = value;\n this.#changeDetector.markForCheck();\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n public set selectedHour(setHour: number) {\n let hourOffset = 0;\n if (this.selectedMeridies === 'AM' && setHour === 12) {\n hourOffset = -12;\n }\n if (this.selectedMeridies === 'PM' && setHour !== 12) {\n hourOffset = 12;\n }\n if (this.is8601) {\n hourOffset = 0;\n }\n const hour = moment({ hour: setHour }).add(hourOffset, 'hours').hour();\n\n this.activeTime = moment({\n hour: hour,\n minute: moment(this.activeTime).get('minute') + 0,\n }).toDate();\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n\n public get selectedHour(): number {\n if (!this.is8601) {\n /* istanbul ignore next */\n return parseInt(moment(this.activeTime).format('h'), 0) || 1;\n } else {\n return moment(this.activeTime).hour() + 0;\n }\n }\n\n public set selectedMeridies(meridies: string) {\n meridies = meridies.trim();\n /* istanbul ignore else */\n if (meridies !== this.selectedMeridies) {\n switch (meridies) {\n case 'AM':\n this.activeTime = moment(this.activeTime)\n .subtract(12, 'hours')\n .toDate();\n break;\n\n case 'PM':\n this.activeTime = moment(this.activeTime).add(12, 'hours').toDate();\n break;\n }\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n }\n\n public get selectedMeridies(): string {\n if (this.activeTime) {\n return moment(this.activeTime).format('A');\n }\n return '';\n }\n\n public set selectedMinute(minute: number) {\n this.activeTime = moment({\n hour: moment(this.activeTime).get('hour') + 0,\n minute: minute,\n }).toDate();\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n\n public get selectedMinute(): number {\n return moment(this.activeTime).minute() + 0;\n }\n\n public set selectedTime(newTime: SkyTimepickerTimeOutput | undefined) {\n if (typeof newTime !== 'undefined') {\n /* sanity check */\n /* istanbul ignore else */\n if (newTime.local !== 'Invalid date') {\n this.activeTime = newTime.iso8601;\n this.#changeDetector.markForCheck();\n }\n }\n }\n\n public get selectedTime(): SkyTimepickerTimeOutput | undefined {\n const time: SkyTimepickerTimeOutput = {\n hour: moment(this.activeTime).hour(),\n minute: moment(this.activeTime).minute(),\n meridie: moment(this.activeTime).format('A'),\n timezone: parseInt(moment(this.activeTime).format('Z'), 10),\n iso8601: this.activeTime,\n local: moment(this.activeTime).format(this.localeFormat),\n customFormat:\n typeof this.returnFormat !== 'undefined'\n ? this.returnFormat\n : this.localeFormat,\n };\n\n return time;\n }\n\n public activeTime: Date = new Date();\n\n public hours: number[] = [];\n\n public is8601 = false;\n\n public isOpen = false;\n\n public isVisible = false;\n\n public localeFormat = 'h:mm A';\n\n public minutes: number[] = [];\n\n public minuteMultiplier: number | undefined;\n\n public returnFormat: string | undefined;\n\n public timeFormat: SkyTimepickerTimeFormatType = 'hh';\n\n public timepickerId: string;\n\n public triggerButtonId: string;\n\n @ViewChild('timepickerRef', { read: ElementRef })\n public set timepickerRef(value: ElementRef | undefined) {\n if (value) {\n this.#_timepickerRef = value;\n\n this.#addKeyupListener();\n\n // Wait for the timepicker component to render before gauging dimensions.\n setTimeout(() => {\n this.#destroyAffixer();\n this.#createAffixer();\n\n setTimeout(() => {\n if (this.timepickerRef) {\n this.#coreAdapter.getFocusableChildrenAndApplyFocus(\n this.timepickerRef,\n '.sky-timepicker-content',\n false,\n );\n }\n\n this.isVisible = true;\n this.#changeDetector.markForCheck();\n });\n });\n }\n }\n\n public get timepickerRef(): ElementRef | undefined {\n return this.#_timepickerRef;\n }\n\n @ViewChild('timepickerTemplateRef', { read: TemplateRef })\n public timepickerTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('triggerButtonRef', { read: ElementRef })\n public triggerButtonRef: ElementRef | undefined;\n\n @ViewChild('inputTemplateRef', { read: TemplateRef, static: true })\n public inputTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('triggerButtonTemplateRef', { read: TemplateRef, static: true })\n public triggerButtonTemplateRef: TemplateRef<unknown> | undefined;\n\n #affixer: SkyAffixer | undefined;\n\n #timepickerUnsubscribe = new Subject<void>();\n\n #ngUnsubscribe = new Subject<void>();\n\n #overlay: SkyOverlayInstance | undefined;\n\n #overlayKeyupListener: Subscription | undefined;\n\n #_disabled = false;\n\n #_timepickerRef: ElementRef | undefined;\n\n #affixService: SkyAffixService;\n #changeDetector: ChangeDetectorRef;\n #coreAdapter: SkyCoreAdapterService;\n readonly #environmentInjector = inject(EnvironmentInjector);\n #overlayService: SkyOverlayService;\n #zIndex: Observable<number> | undefined;\n\n constructor(\n affixService: SkyAffixService,\n changeDetector: ChangeDetectorRef,\n coreAdapter: SkyCoreAdapterService,\n overlayService: SkyOverlayService,\n @Optional() public inputBoxHostService?: SkyInputBoxHostService,\n @Optional() themeSvc?: SkyThemeService,\n @Optional()\n @Inject(SKY_STACKING_CONTEXT)\n stackingContext?: SkyStackingContext,\n ) {\n this.#affixService = affixService;\n this.#changeDetector = changeDetector;\n this.#coreAdapter = coreAdapter;\n this.#overlayService = overlayService;\n this.#zIndex = stackingContext?.zIndex;\n\n const uniqueId = nextId++;\n this.timepickerId = `sky-timepicker-${uniqueId}`;\n this.triggerButtonId = `sky-timepicker-button-${uniqueId}`;\n\n // Update icons when theme changes.\n themeSvc?.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n\n public ngOnInit(): void {\n this.setFormat(this.timeFormat);\n this.#addKeyupListener();\n\n if (this.inputBoxHostService && this.inputTemplateRef) {\n this.inputBoxHostService.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.triggerButtonTemplateRef,\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#removePickerEventListeners();\n this.#destroyAffixer();\n this.#destroyOverlay();\n }\n\n public setFormat(format: SkyTimepickerTimeFormatType): void {\n let h = 12;\n let m = 12;\n let minuteMultiplier = 5;\n let localeFormat = 'h:mm A';\n if (format === 'hh') {\n h = 12;\n m = 12;\n minuteMultiplier = 5;\n localeFormat = 'h:mm A';\n this.is8601 = false;\n }\n if (format === 'HH') {\n h = 24;\n m = 4;\n minuteMultiplier = 15;\n localeFormat = 'HH:mm';\n this.is8601 = true;\n }\n\n const data: {\n hours: number[];\n minutes: number[];\n localeFormat: string;\n minuteMultiplier: number;\n } = {\n // Create a sparse array with a length equal to the hour.\n hours: Array(...Array(h)).map((_, i) => {\n if (format === 'hh') {\n return ++i;\n }\n /* istanbul ignore else */\n if (format === 'HH') {\n return i;\n }\n /* istanbul ignore next */\n /* sanity check */\n return 0;\n }),\n // Create a sparse array with a length equal to the minute.\n minutes: Array(...Array(m)).map(function (_, i) {\n return i * minuteMultiplier;\n }),\n localeFormat: localeFormat,\n minuteMultiplier: minuteMultiplier,\n };\n\n this.hours = data.hours;\n this.minutes = data.minutes;\n this.localeFormat = data.localeFormat;\n this.minuteMultiplier = data.minuteMultiplier;\n }\n\n public onCloseButtonClick(): void {\n this.#closePicker();\n }\n\n public setTime(event: any): void {\n /* istanbul ignore else */\n if (typeof event !== 'undefined') {\n /* istanbul ignore else */\n if (event.type === 'click') {\n event.stopPropagation();\n if (event.target.name === 'hour') {\n this.selectedHour = parseInt(event.target.innerHTML, 0);\n }\n if (event.target.name === 'minute') {\n this.selectedMinute = parseInt(event.target.innerHTML, 0);\n }\n if (event.target.name === 'meridie') {\n this.selectedMeridies = event.target.innerHTML;\n }\n }\n }\n }\n\n public onTriggerButtonClick(): void {\n this.#openPicker();\n }\n\n protected highlightMinute(selectedMinute: number, minute: number): boolean {\n const radix = this.is8601 ? 15 : 5;\n return Math.floor(selectedMinute / radix) === minute / radix;\n }\n\n #closePicker(): void {\n this.#destroyAffixer();\n this.#destroyOverlay();\n this.#removePickerEventListeners();\n this.triggerButtonRef?.nativeElement.focus();\n this.isOpen = false;\n }\n\n #openPicker(): void {\n this.isVisible = false;\n this.#changeDetector.markForCheck();\n\n this.#removePickerEventListeners();\n this.#destroyOverlay();\n this.#createOverlay();\n\n this.isOpen = true;\n this.#changeDetector.markForCheck();\n }\n\n #createAffixer(): void {\n if (this.timepickerRef && this.triggerButtonRef) {\n const affixer = this.#affixService.createAffixer(this.timepickerRef);\n\n // Hide timepicker when trigger button is scrolled off screen.\n affixer.placementChange\n .pipe(takeUntil(this.#timepickerUnsubscribe))\n .subscribe((change) => {\n this.isVisible = change.placement !== null;\n this.#changeDetector.markForCheck();\n });\n\n affixer.affixTo(this.triggerButtonRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n horizontalAlignment: 'right',\n isSticky: true,\n placement: 'below',\n });\n\n this.#affixer = affixer;\n }\n }\n\n #destroyAffixer(): void {\n /*istanbul ignore else*/\n if (this.#affixer) {\n this.#affixer.destroy();\n this.#affixer = undefined;\n }\n }\n\n #createOverlay(): void {\n if (this.timepickerTemplateRef) {\n const overlay = this.#overlayService.create({\n enableClose: false,\n enablePointerEvents: false,\n environmentInjector: this.#environmentInjector,\n });\n\n if (this.#zIndex) {\n this.#zIndex\n .pipe(takeUntil(this.#timepickerUnsubscribe))\n .subscribe((zIndex) => {\n overlay.componentRef.instance.zIndex = zIndex.toString(10);\n });\n }\n\n overlay.backdropClick\n .pipe(takeUntil(this.#timepickerUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.#closePicker();\n }\n });\n\n overlay.attachTemplate(this.timepickerTemplateRef);\n\n this.#overlay = overlay;\n }\n }\n\n #destroyOverlay(): void {\n /*istanbul ignore else*/\n if (this.#overlay) {\n this.#overlayService.close(this.#overlay);\n this.#overlay = undefined;\n }\n }\n\n #addKeyupListener(): void {\n const timepickerMenuElement = this.timepickerRef?.nativeElement;\n\n if (timepickerMenuElement) {\n this.#overlayKeyupListener = fromEvent<KeyboardEvent>(\n timepickerMenuElement,\n 'keyup',\n )\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((event) => {\n const key = event.key?.toLowerCase();\n /* istanbul ignore else */\n if (key === 'escape' && this.isOpen) {\n this.#closePicker();\n event.stopPropagation();\n event.preventDefault();\n }\n });\n }\n }\n\n #removePickerEventListeners(): void {\n /* istanbul ignore else */\n if (this.#timepickerUnsubscribe) {\n this.#timepickerUnsubscribe.next();\n this.#timepickerUnsubscribe.complete();\n this.#timepickerUnsubscribe = new Subject<void>();\n }\n /* istanbul ignore next */\n this.#overlayKeyupListener?.unsubscribe();\n }\n}\n","<div class=\"sky-timepicker\">\n @if (!inputBoxHostService) {\n <div class=\"sky-input-group\">\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\" />\n <ng-container *ngTemplateOutlet=\"triggerButtonTemplateRef\" />\n </div>\n }\n</div>\n\n<ng-template #inputTemplateRef>\n <ng-content />\n</ng-template>\n\n<ng-template #triggerButtonTemplateRef>\n <div class=\"sky-input-group-btn\">\n <button\n #triggerButtonRef\n aria-haspopup=\"dialog\"\n class=\"sky-btn sky-btn-default sky-input-group-timepicker-btn\"\n type=\"button\"\n [attr.aria-controls]=\"isOpen ? timepickerId : null\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-label]=\"\n inputBoxHostService?.labelText\n ? ('skyux_timepicker_button_label_context'\n | skyLibResources: inputBoxHostService?.labelText)\n : ('skyux_timepicker_button_label' | skyLibResources)\n \"\n [attr.id]=\"triggerButtonId\"\n [attr.title]=\"\n inputBoxHostService?.labelText\n ? ('skyux_timepicker_button_label_context'\n | skyLibResources: inputBoxHostService?.labelText)\n : ('skyux_timepicker_button_label' | skyLibResources)\n \"\n [disabled]=\"disabled\"\n (click)=\"onTriggerButtonClick()\"\n >\n <sky-icon iconName=\"clock\" iconSize=\"l\" />\n </button>\n </div>\n</ng-template>\n\n<ng-template #timepickerTemplateRef>\n <div\n #timepickerRef\n class=\"sky-timepicker-container sky-shadow sky-box sky-elevation-4\"\n role=\"dialog\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n [attr.id]=\"timepickerId\"\n [class.sky-timepicker-hidden]=\"!isVisible\"\n >\n <div class=\"sky-timepicker-content\">\n <section\n class=\"sky-timepicker-column sky-timepicker-column-hours\"\n [ngClass]=\"{ 'sky-timepicker-24hour': is8601 }\"\n >\n <ol>\n @for (hour of hours; track hour) {\n <li>\n <button\n name=\"hour\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedHour === hour }\"\n (click)=\"setTime($event)\"\n >\n {{ hour }}\n </button>\n </li>\n }\n </ol>\n </section>\n <section class=\"sky-timepicker-column sky-timepicker-column-minutes\">\n <ol>\n @for (minute of minutes; track minute) {\n <li>\n <button\n name=\"minute\"\n type=\"button\"\n [ngClass]=\"{\n 'sky-btn-active': highlightMinute(selectedMinute, minute)\n }\"\n (click)=\"setTime($event)\"\n >\n {{ '00'.substring(0, 2 - minute.toString().length) + minute }}\n </button>\n </li>\n }\n </ol>\n </section>\n @if (!is8601) {\n <section class=\"sky-timepicker-column sky-timepicker-column-meridies\">\n <ol>\n <li>\n <button\n name=\"meridie\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedMeridies === 'AM' }\"\n (click)=\"setTime($event)\"\n >\n AM\n </button>\n </li>\n <li>\n <button\n name=\"meridie\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedMeridies === 'PM' }\"\n (click)=\"setTime($event)\"\n >\n PM\n </button>\n </li>\n </ol>\n </section>\n }\n </div>\n <div class=\"sky-timepicker-footer\">\n <section class=\"sky-timepicker-column\">\n <button\n class=\"sky-btn sky-btn-primary\"\n type=\"button\"\n (click)=\"onCloseButtonClick()\"\n >\n {{ 'skyux_timepicker_close' | skyLibResources }}\n </button>\n </section>\n </div>\n </div>\n</ng-template>\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n forwardRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport moment from 'moment';\nimport { Subscription } from 'rxjs';\n\nimport { SkyTimepickerTimeFormatType } from './timepicker-time-format-type';\nimport { SkyTimepickerTimeOutput } from './timepicker-time-output';\nimport { SkyTimepickerComponent } from './timepicker.component';\n\nconst SKY_TIMEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyTimepickerInputDirective),\n multi: true,\n};\n\nconst SKY_TIMEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyTimepickerInputDirective),\n multi: true,\n};\n\n@Directive({\n selector: '[skyTimepickerInput]',\n providers: [SKY_TIMEPICKER_VALUE_ACCESSOR, SKY_TIMEPICKER_VALIDATOR],\n standalone: false,\n})\nexport class SkyTimepickerInputDirective\n implements\n OnInit,\n OnDestroy,\n ControlValueAccessor,\n Validator,\n OnChanges,\n AfterContentInit\n{\n public pickerChangedSubscription: Subscription | undefined;\n #_timeFormat: SkyTimepickerTimeFormatType = 'hh';\n\n // TODO: In a future breaking change - grab the parent component through dependency injection and remove this setter.\n // Also remove the HostBinding that references it.\n /**\n * Creates the timepicker input field and picker. Place this attribute on an `input` element,\n * and wrap the input in a `sky-timepicker` component.\n * This attribute must be set to the instance of the `sky-timepicker`.\n * @required\n */\n @Input()\n public get skyTimepickerInput(): SkyTimepickerComponent | undefined {\n return this.#_skyTimepickerInput;\n }\n\n public set skyTimepickerInput(value: SkyTimepickerComponent | undefined) {\n this.#_skyTimepickerInput = value;\n this.#updateTimepickerInput();\n }\n\n @HostBinding('attr.skyTimepickerInput')\n public get hostTimepickerInput(): SkyTimepickerComponent | undefined {\n return this.skyTimepickerInput;\n }\n\n // TODO: In a future breaking change - make this more specific than \"string\"\n /**\n * The 12-hour `hh` or 24-hour `HH` time format for the input.\n * @default \"hh\"\n */\n @Input()\n public set timeFormat(value: SkyTimepickerTimeFormatType | undefined) {\n this.#_timeFormat = value || 'hh';\n }\n\n public get timeFormat(): SkyTimepickerTimeFormatType {\n return this.#_timeFormat;\n }\n\n /**\n * The custom time format. For examples,\n * see the [moment.js](https://momentjs.com/docs/#/displaying/format/) docs.\n */\n @Input()\n public returnFormat: string | undefined;\n\n /**\n * Whether to disable the timepicker on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input()\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value || false;\n\n this.#updateTimepickerInput();\n\n this.#renderer.setProperty(this.#elRef.nativeElement, 'disabled', value);\n }\n\n get #modelValue(): SkyTimepickerTimeOutput | undefined {\n return this.#_modelValue;\n }\n\n set #modelValue(value: SkyTimepickerTimeOutput | undefined) {\n if (value !== this.#_modelValue) {\n this.#_modelValue = value;\n this.#updateTimepickerInput();\n this.#setInputValue(value);\n this.#_validatorChange();\n this.#_onChange(value);\n }\n }\n\n #control: AbstractControl | undefined;\n\n #_disabled = false;\n #_modelValue: SkyTimepickerTimeOutput | undefined;\n #_skyTimepickerInput: SkyTimepickerComponent | undefined;\n\n #renderer: Renderer2;\n #elRef: ElementRef;\n #changeDetector: ChangeDetectorRef;\n\n constructor(\n renderer: Renderer2,\n elRef: ElementRef,\n changeDetector: ChangeDetectorRef,\n ) {\n this.#renderer = renderer;\n this.#elRef = elRef;\n this.#changeDetector = changeDetector;\n }\n\n public ngOnInit(): void {\n this.#renderer.addClass(this.#elRef.nativeElement, 'sky-form-control');\n this.pickerChangedSubscription =\n this.skyTimepickerInput?.selectedTimeChanged.subscribe(\n (newTime: string) => {\n this.writeValue(newTime);\n this.#_onTouched();\n },\n );\n }\n\n public ngAfterContentInit(): void {\n // Watch for the control to be added and initialize the value immediately.\n /* istanbul ignore else */\n if (this.#control && this.#control.parent) {\n this.#control.setValue(this.#modelValue, { emitEvent: false });\n this.#changeDetector.markForCheck();\n }\n }\n\n public ngOnDestroy(): void {\n /* istanbul ignore else */\n if (this.pickerChangedSubscription) {\n this.pickerChangedSubscription.unsubscribe();\n }\n }\n\n public ngOnChanges(): void {\n if (this.skyTimepickerInput) {\n this.skyTimepickerInput.setFormat(this.timeFormat);\n this.skyTimepickerInput.returnFormat = this.returnFormat;\n }\n }\n\n @HostListener('change', ['$event'])\n public onChange(event: any): void {\n this.writeValue(event.target.value);\n }\n\n /* istanbul ignore next */\n @HostListener('blur')\n public onBlur(): void {\n this.#_onTouched();\n }\n\n public registerOnChange(fn: (value: any) => any): void {\n this.#_onChange = fn;\n }\n public registerOnTouched(fn: () => any): void {\n this.#_onTouched = fn;\n }\n public registerOnValidatorChange(fn: () => void): void {\n this.#_validatorChange = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public writeValue(value: any): void {\n this.#modelValue = this.#formatter(value);\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (!this.#control) {\n this.#control = control;\n }\n\n const value = control.value;\n if (!value) {\n return null;\n }\n\n /* istanbul ignore next */\n if (value.local === 'Invalid date') {\n return { skyTime: { invalid: control.value } };\n }\n\n return null;\n }\n\n #setInputValue(value: SkyTimepickerTimeOutput | undefined): void {\n let formattedValue = '';\n if (value) {\n const output = moment(value).format(value.customFormat);\n /* istanbul ignore else */\n if (output !== 'Invalid date') {\n formattedValue = output;\n }\n }\n\n this.#renderer.setProperty(\n this.#elRef.nativeElement,\n 'value',\n formattedValue,\n );\n }\n\n // TODO: This method technically returns `SkyTimepickerTimeOutput | string | undefined`. However, the value it is set to is set to `SkyTimepickerTimeOutput | undefined`. We need to clean this up.\n #formatter(time: any): any {\n if (time && typeof time !== 'string' && 'local' in time) {\n return time;\n }\n if (typeof time === 'string') {\n if (time.length === 0) {\n return '';\n }\n const currentFormat = this.timeFormat === 'HH' ? 'H:mm' : 'h:mm A';\n\n if (typeof this.returnFormat === 'undefined') {\n this.returnFormat = currentFormat;\n }\n\n const formatTime: SkyTimepickerTimeOutput = {\n hour: moment(time, currentFormat).hour(),\n minute: moment(time, currentFormat).minute(),\n meridie: moment(time, currentFormat).format('A'),\n timezone: parseInt(moment(time, currentFormat).format('Z'), 10),\n iso8601: moment(time, currentFormat).toDate(),\n local: moment(time, currentFormat).format(currentFormat),\n customFormat: this.returnFormat,\n };\n return formatTime;\n }\n }\n\n #updateTimepickerInput(): void {\n if (this.skyTimepickerInput) {\n this.skyTimepickerInput.disabled = this.disabled;\n\n /* istanbul ignore else */\n if (this.skyTimepickerInput.selectedTime !== this.#modelValue) {\n this.skyTimepickerInput.selectedTime = this.#modelValue;\n }\n }\n }\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n #_onChange = (_: any): void => {};\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #_onTouched = (): void => {};\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #_validatorChange = (): void => {};\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyAffixModule } from '@skyux/core';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\n\nimport { SkyTimepickerComponent } from './timepicker.component';\nimport { SkyTimepickerInputDirective } from './timepicker.directive';\n\n@NgModule({\n declarations: [SkyTimepickerInputDirective, SkyTimepickerComponent],\n imports: [\n CommonModule,\n SkyIconModule,\n SkyDatetimeResourcesModule,\n SkyAffixModule,\n SkyThemeModule,\n ],\n exports: [SkyTimepickerInputDirective, SkyTimepickerComponent],\n})\nexport class SkyTimepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SkyFuzzyDateService","takeUntil","i1.SkyDatepickerCalendarInnerComponent","i1","i2","i1.SkyDatepickerConfigService","nextId","i4","i5","i6","i3.SkyDatepickerComponent","i2.SkyFuzzyDateService","i3","i4.SkyDatepickerComponent","distinctUntilChanged","i4.SkyDatepickerInputDirective"],"mappings":"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"}