@skyux/datetime 13.11.5 → 13.12.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":["../tmp-esm2022/lib/modules/shared/sky-datetime-resources.module.js","../tmp-esm2022/lib/modules/date-pipe/date.service.js","../tmp-esm2022/lib/modules/date-pipe/date.pipe.js","../tmp-esm2022/lib/modules/datepicker/fuzzy/fuzzy-date.service.js","../tmp-esm2022/lib/modules/date-pipe/fuzzy-date.pipe.js","../tmp-esm2022/lib/modules/date-pipe/date-pipe.module.js","../tmp-esm2022/lib/modules/datepicker/date-formatter.js","../tmp-esm2022/lib/modules/datepicker/calendar/datepicker-calendar-inner.component.js","../tmp-esm2022/lib/modules/datepicker/calendar/datepicker-calendar.service.js","../tmp-esm2022/lib/modules/datepicker/calendar/datepicker-calendar-label.pipe.js","../tmp-esm2022/lib/modules/datepicker/calendar/daypicker-button.component.js","../tmp-esm2022/lib/modules/datepicker/calendar/daypicker-cell.component.js","../tmp-esm2022/lib/modules/datepicker/calendar/daypicker.component.js","../tmp-esm2022/lib/modules/datepicker/calendar/monthpicker.component.js","../tmp-esm2022/lib/modules/datepicker/calendar/yearpicker.component.js","../tmp-esm2022/lib/modules/datepicker/datepicker-config.service.js","../tmp-esm2022/lib/modules/datepicker/calendar/datepicker-calendar.component.js","../tmp-esm2022/lib/modules/datepicker/datepicker-host.service.js","../tmp-esm2022/lib/modules/datepicker/datepicker.component.js","../tmp-esm2022/lib/modules/datepicker/datepicker-input.directive.js","../tmp-esm2022/lib/modules/datepicker/fuzzy/datepicker-input-fuzzy.directive.js","../tmp-esm2022/lib/modules/datepicker/datepicker.module.js","../tmp-esm2022/lib/modules/date-range-picker/types/date-range-calculator-type.js","../tmp-esm2022/lib/modules/date-range-picker/date-range-picker-end-date-resource-key.pipe.js","../tmp-esm2022/lib/modules/date-range-picker/date-range-picker-start-date-resource-key.pipe.js","../tmp-esm2022/lib/modules/date-range-picker/types/date-range-calculator.js","../tmp-esm2022/lib/modules/date-range-picker/types/date-range-calculator-id.js","../tmp-esm2022/lib/modules/date-range-picker/types/date-range-relative-value.js","../tmp-esm2022/lib/modules/date-range-picker/types/date-range-default-calculator-configs.js","../tmp-esm2022/lib/modules/date-range-picker/date-range.service.js","../tmp-esm2022/lib/modules/date-range-picker/date-range-picker.component.js","../tmp-esm2022/lib/modules/date-range-picker/date-range-picker.module.js","../tmp-esm2022/lib/modules/timepicker/timepicker.component.js","../tmp-esm2022/lib/modules/timepicker/timepicker.directive.js","../tmp-esm2022/lib/modules/timepicker/timepicker.module.js","../tmp-esm2022/skyux-datetime.js"],"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 { SkyI18nModule, SkyLibResourcesService, } from '@skyux/i18n';\nimport * as i0 from \"@angular/core\";\nconst RESOURCES = {\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: '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: '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};\nSkyLibResourcesService.addResources(RESOURCES);\n/**\n * Import into any component library module that needs to use resource strings.\n */\nexport class SkyDatetimeResourcesModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatetimeResourcesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatetimeResourcesModule, exports: [SkyI18nModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatetimeResourcesModule, imports: [SkyI18nModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatetimeResourcesModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [SkyI18nModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5LWRhdGV0aW1lLXJlc291cmNlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL3NoYXJlZC9za3ktZGF0ZXRpbWUtcmVzb3VyY2VzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxhQUFhLEVBRWIsc0JBQXNCLEdBQ3ZCLE1BQU0sYUFBYSxDQUFDOztBQUVyQixNQUFNLFNBQVMsR0FBb0M7SUFDakQsT0FBTyxFQUFFO1FBQ1AscURBQXFELEVBQUU7WUFDckQsT0FBTyxFQUFFLHFCQUFxQjtTQUMvQjtRQUNELHFEQUFxRCxFQUFFO1lBQ3JELE9BQU8sRUFBRSxxQkFBcUI7U0FDL0I7UUFDRCxxREFBcUQsRUFBRTtZQUNyRCxPQUFPLEVBQUUscUJBQXFCO1NBQy9CO0tBQ0Y7SUFDRCxPQUFPLEVBQUU7UUFDUCxxREFBcUQsRUFBRTtZQUNyRCxPQUFPLEVBQUUscUJBQXFCO1NBQy9CO1FBQ0QscURBQXFELEVBQUU7WUFDckQsT0FBTyxFQUFFLHFCQUFxQjtTQUMvQjtRQUNELHFEQUFxRCxFQUFFO1lBQ3JELE9BQU8sRUFBRSxxQkFBcUI7U0FDL0I7S0FDRjtJQUNELE9BQU8sRUFBRTtRQUNQLHFEQUFxRCxFQUFFO1lBQ3JELE9BQU8sRUFBRSxxQkFBcUI7U0FDL0I7UUFDRCxxREFBcUQsRUFBRTtZQUNyRCxPQUFPLEVBQUUscUJBQXFCO1NBQy9CO1FBQ0QscURBQXFELEVBQUU7WUFDckQsT0FBTyxFQUFFLHFCQUFxQjtTQUMvQjtLQUNGO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsaUNBQWlDLEVBQUUsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUU7UUFDckUscUNB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QWMsRUFBRTtLQUN4RTtDQUNGLENBQUM7QUFFRixzQkFBc0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFL0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8sMEJBQTBCOytHQUExQiwwQkFBMEI7Z0hBQTFCLDBCQUEwQixZQUYzQixhQUFhO2dIQUVaLDBCQUEwQixZQUYzQixhQUFhOzs0RkFFWiwwQkFBMEI7a0JBSHRDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO2lCQUN6QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIE5PVElDRTogRE8gTk9UIE1PRElGWSBUSElTIEZJTEUhXG4gKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIHdlcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnlcbiAqIHRoZSAnbmcgZ2VuZXJhdGUgQHNreXV4L2kxOG46bGliLXJlc291cmNlcy1tb2R1bGUgbGliL21vZHVsZXMvc2hhcmVkL3NreS1kYXRldGltZScgc2NoZW1hdGljLlxuICogVG8gdXBkYXRlIHRoaXMgZmlsZSwgc2ltcGx5IHJlcnVuIHRoZSBjb21tYW5kLlxuICovXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2t5STE4bk1vZHVsZSxcbiAgU2t5TGliUmVzb3VyY2VzLFxuICBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLFxufSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmNvbnN0IFJFU09VUkNFUzogUmVjb3JkPHN0cmluZywgU2t5TGliUmVzb3VyY2VzPiA9IHtcbiAgJ0VOLUFVJzoge1xuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9sYXN0X2Zpc2NhbF95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnTGFzdCBmaW5hbmNpYWwgeWVhcicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfdGhpc19maXNjYWxfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ1RoaXMgZmluYW5jaWFsIHllYXInLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX25leHRfZmlzY2FsX3llYXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdOZXh0IGZpbmFuY2lhbCB5ZWFyJyxcbiAgICB9LFxuICB9LFxuICAnRU4tR0InOiB7XG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX2xhc3RfZmlzY2FsX3llYXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdMYXN0IGZpbmFuY2lhbCB5ZWFyJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90aGlzX2Zpc2NhbF95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnVGhpcyBmaW5hbmNpYWwgeWVhcicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbmV4dF9maXNjYWxfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ05leHQgZmluYW5jaWFsIHllYXInLFxuICAgIH0sXG4gIH0sXG4gICdFTi1OWic6IHtcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9maXNjYWxfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ0xhc3QgZmluYW5jaWFsIHllYXInLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3RoaXNfZmlzY2FsX3llYXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdUaGlzIGZpbmFuY2lhbCB5ZWFyJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9uZXh0X2Zpc2NhbF95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnTmV4dCBmaW5hbmNpYWwgeWVhcicsXG4gICAgfSxcbiAgfSxcbiAgJ0VOLVVTJzoge1xuICAgIHNreXV4X2RhdGVwaWNrZXJfZm9ybWF0X2hpbnRfdGV4dDogeyBtZXNzYWdlOiAnVXNlIHRoZSBmb3JtYXQgezB9LicgfSxcbiAgICBza3l1eF9kYXRlcGlja2VyX3RyaWdnZXJfYnV0dG9uX2xhYmVsOiB7IG1lc3NhZ2U6ICdTZWxlY3QgZGF0ZScgfSxcbiAgICBza3l1eF9kYXRlcGlja2VyX3RyaWdnZXJfYnV0dG9uX2xhYmVsX2NvbnRleHQ6IHtcbiAgICAgIG1lc3NhZ2U6ICdPcGVuIGNhbGVuZGFyIGZvciB7MH0nLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZXBpY2tlcl9tb3ZlX2NhbGVuZGFyX3ByZXZpb3VzX2RheTogeyBtZXNzYWdlOiAnUHJldmlvdXMgbW9udGgnIH0sXG4gICAgc2t5dXhfZGF0ZXBpY2tlcl9tb3ZlX2NhbGVuZGFyX25leHRfZGF5OiB7IG1lc3NhZ2U6ICdOZXh0IG1vbnRoJyB9LFxuICAgIHNreXV4X2RhdGVwaWNrZXJfbW92ZV9jYWxlbmRhcl9wcmV2aW91c19tb250aDogeyBtZXNzYWdlOiAnUHJldmlvdXMgeWVhcicgfSxcbiAgICBza3l1eF9kYXRlcGlja2VyX21vdmVfY2FsZW5kYXJfbmV4dF9tb250aDogeyBtZXNzYWdlOiAnTmV4dCB5ZWFyJyB9LFxuICAgIHNreXV4X2RhdGVwaWNrZXJfbW92ZV9jYWxlbmRhcl9wcmV2aW91c195ZWFyOiB7IG1lc3NhZ2U6ICdQcmV2aW91cyBwYWdlJyB9LFxuICAgIHNreXV4X2RhdGVwaWNrZXJfbW92ZV9jYWxlbmRhcl9uZXh0X3llYXI6IHsgbWVzc2FnZTogJ05leHQgcGFnZScgfSxcbiAgICBza3l1eF90aW1lcGlja2VyX2J1dHRvbl9sYWJlbDogeyBtZXNzYWdlOiAnQ2hvb3NlIHRpbWUnIH0sXG4gICAgc2t5dXhfdGltZXBpY2tlcl9idXR0b25fbGFiZWxfY29udGV4dDoge1xuICAgICAgbWVzc2FnZTogJ09wZW4gdGltZSBwaWNrZXIgZm9yIHswfScsXG4gICAgfSxcbiAgICBza3l1eF90aW1lcGlja2VyX2Nsb3NlOiB7IG1lc3NhZ2U6ICdEb25lJyB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2RlZmF1bHRfbGFiZWw6IHsgbWVzc2FnZTogJ1NlbGVjdCBhIGRhdGUgcmFuZ2UnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZW5kX2RhdGVfYmVmb3JlX3N0YXJ0X2RhdGVfZXJyb3JfbGFiZWxfdGV4dDoge1xuICAgICAgbWVzc2FnZTpcbiAgICAgICAgJ0NoYW5nZSB0aGUgZGF0ZSByYW5nZSBzbyB0aGF0IHRoZSBlbmQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IGRhdGUuJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9zcGVjaWZpY19yYW5nZToge1xuICAgICAgbWVzc2FnZTogJ1NwZWNpZmljIHJhbmdlJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9iZWZvcmU6IHsgbWVzc2FnZTogJ0JlZm9yZScgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfYWZ0ZXI6IHsgbWVzc2FnZTogJ0FmdGVyJyB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9hbnlfdGltZTogeyBtZXNzYWdlOiAnQXQgYW55IHRpbWUnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3llc3RlcmRheTogeyBtZXNzYWdlOiAnWWVzdGVyZGF5JyB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90b2RheTogeyBtZXNzYWdlOiAnVG9kYXknIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3RvbW9ycm93OiB7IG1lc3NhZ2U6ICdUb21vcnJvdycgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF93ZWVrOiB7IG1lc3NhZ2U6ICdMYXN0IHdlZWsnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3RoaXNfd2VlazogeyBtZXNzYWdlOiAnVGhpcyB3ZWVrJyB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9uZXh0X3dlZWs6IHsgbWVzc2FnZTogJ05leHQgd2VlaycgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9tb250aDogeyBtZXNzYWdlOiAnTGFzdCBtb250aCcgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfdGhpc19tb250aDogeyBtZXNzYWdlOiAnVGhpcyBtb250aCcgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbmV4dF9tb250aDogeyBtZXNzYWdlOiAnTmV4dCBtb250aCcgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9xdWFydGVyOiB7XG4gICAgICBtZXNzYWdlOiAnTGFzdCBxdWFydGVyJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90aGlzX3F1YXJ0ZXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdUaGlzIHF1YXJ0ZXInLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX25leHRfcXVhcnRlcjoge1xuICAgICAgbWVzc2FnZTogJ05leHQgcXVhcnRlcicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9jYWxlbmRhcl95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnTGFzdCBjYWxlbmRhciB5ZWFyJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90aGlzX2NhbGVuZGFyX3llYXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdUaGlzIGNhbGVuZGFyIHllYXInLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX25leHRfY2FsZW5kYXJfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ05leHQgY2FsZW5kYXIgeWVhcicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9maXNjYWxfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ0xhc3QgZmlzY2FsIHllYXInLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3RoaXNfZmlzY2FsX3llYXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdUaGlzIGZpc2NhbCB5ZWFyJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9uZXh0X2Zpc2NhbF95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnTmV4dCBmaXNjYWwgeWVhcicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9zdGFydF9kYXRlX2xhYmVsOiB7IG1lc3NhZ2U6ICdGcm9tIGRhdGUnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZW5kX2RhdGVfbGFiZWw6IHsgbWVzc2FnZTogJ1RvIGRhdGUnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfYmVmb3JlX2RhdGVfbGFiZWw6IHsgbWVzc2FnZTogJ0JlZm9yZSBkYXRlJyB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2FmdGVyX2RhdGVfbGFiZWw6IHsgbWVzc2FnZTogJ0FmdGVyIGRhdGUnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZGVmYXVsdF9hcmlhX2xhYmVsOiB7IG1lc3NhZ2U6ICd7MH0gZm9yIHsxfScgfSxcbiAgfSxcbiAgJ0ZSLUNBJzoge1xuICAgIHNreXV4X2RhdGVwaWNrZXJfZm9ybWF0X2hpbnRfdGV4dDogeyBtZXNzYWdlOiAnVXRpbGlzZXogbGUgZm9ybWF0IHswfS4nIH0sXG4gICAgc2t5dXhfZGF0ZXBpY2tlcl90cmlnZ2VyX2J1dHRvbl9sYWJlbDogeyBtZXNzYWdlOiAnU8OpbGVjdGlvbm5lciBsYSBkYXRlJyB9LFxuICAgIHNreXV4X2RhdGVwaWNrZXJfdHJpZ2dlcl9idXR0b25fbGFiZWxfY29udGV4dDoge1xuICAgICAgbWVzc2FnZTogJ091dnJpciBsZSBjYWxlbmRyaWVyIHBvdXIgezB9JyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVwaWNrZXJfbW92ZV9jYWxlbmRhcl9wcmV2aW91c19kYXk6IHsgbWVzc2FnZTogJ01vaXMgcHLDqWPDqWRlbnQnIH0sXG4gICAgc2t5dXhfZGF0ZXBpY2tlcl9tb3ZlX2NhbGVuZGFyX25leHRfZGF5OiB7IG1lc3NhZ2U6ICdMZSBtb2lzIHByb2NoYWluJyB9LFxuICAgIHNreXV4X2RhdGVwaWNrZXJfbW92ZV9jYWxlbmRhcl9wcmV2aW91c19tb250aDoge1xuICAgICAgbWVzc2FnZTogJ0FubsOpZSBwcsOpY8OpZGVudGUnLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZXBpY2tlcl9tb3ZlX2NhbGVuZGFyX25leHRfbW9udGg6IHsgbWVzc2FnZTogJ0FubsOpZSBzdWl2YW50ZScgfSxcbiAgICBza3l1eF9kYXRlcGlja2VyX21vdmVfY2FsZW5kYXJfcHJldmlvdXNfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ1BhZ2UgcHLDqWPDqWRlbnRlJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVwaWNrZXJfbW92ZV9jYWxlbmRhcl9uZXh0X3llYXI6IHsgbWVzc2FnZTogJ1BhZ2Ugc3VpdmFudGUnIH0sXG4gICAgc2t5dXhfdGltZXBpY2tlcl9idXR0b25fbGFiZWw6IHsgbWVzc2FnZTogJ0Nob2lzaXIgbOKAmWhldXJlJyB9LFxuICAgIHNreXV4X3RpbWVwaWNrZXJfYnV0dG9uX2xhYmVsX2NvbnRleHQ6IHtcbiAgICAgIG1lc3NhZ2U6ICdPdXZyaXIgbGUgc8OpbGVjdGV1ciBk4oCZaGV1cmUgcG91ciB7MH0nLFxuICAgIH0sXG4gICAgc2t5dXhfdGltZXBpY2tlcl9jbG9zZTogeyBtZXNzYWdlOiAnVGVybWluw6knIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZGVmYXVsdF9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ1PDqWxlY3Rpb25uZXIgdW5lIHBsYWdlIGRlIGRhdGVzJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2VuZF9kYXRlX2JlZm9yZV9zdGFydF9kYXRlX2Vycm9yX2xhYmVsX3RleHQ6IHtcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgICdNb2RpZmlleiBsYSBwbGFnZSBkZSBkYXRlIGRlIGZhw6dvbiDDoCBjZSBxdWUgbGEgZGF0ZSBkZSBmaW4gc29pdCBhdmFudCBsYSBkYXRlIGRlIGTDqWJ1dC4nLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3NwZWNpZmljX3JhbmdlOiB7XG4gICAgICBtZXNzYWdlOiAnUGxhZ2Ugc3DDqWNpZmlxdWUnLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX2JlZm9yZTogeyBtZXNzYWdlOiAnQXZhbnQnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX2FmdGVyOiB7IG1lc3NhZ2U6ICdBcHLDqHMnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX2FueV90aW1lOiB7XG4gICAgICBtZXNzYWdlOiAnTuKAmWltcG9ydGUgcXVhbmQnLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3llc3RlcmRheTogeyBtZXNzYWdlOiAnSGllcicgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfdG9kYXk6IHsgbWVzc2FnZTogJ0F1am91cmTigJlodWknIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3RvbW9ycm93OiB7IG1lc3NhZ2U6ICdEZW1haW4nIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX2xhc3Rfd2Vlazoge1xuICAgICAgbWVzc2FnZTogJ0xhIHNlbWFpbmUgZGVybmnDqHJlJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90aGlzX3dlZWs6IHtcbiAgICAgIG1lc3NhZ2U6ICdDZXR0ZSBzZW1haW5lJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9uZXh0X3dlZWs6IHtcbiAgICAgIG1lc3NhZ2U6ICdMYSBzZW1haW5lIHByb2NoYWluZScsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9tb250aDoge1xuICAgICAgbWVzc2FnZTogJ0xlIG1vaXMgZGVybmllcicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfdGhpc19tb250aDogeyBtZXNzYWdlOiAnQ2UgbW9pcy1jaScgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbmV4dF9tb250aDoge1xuICAgICAgbWVzc2FnZTogJ0xlIG1vaXMgcHJvY2hhaW4nLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX2xhc3RfcXVhcnRlcjoge1xuICAgICAgbWVzc2FnZTogJ0xlIHRyaW1lc3RyZSBkZXJuaWVyJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90aGlzX3F1YXJ0ZXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdDZSB0cmltZXN0cmUnLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX25leHRfcXVhcnRlcjoge1xuICAgICAgbWVzc2FnZTogJ0xlIHRyaW1lc3RyZSBwcm9jaGFpbicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9jYWxlbmRhcl95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnRGVybmnDqHJlIGFubsOpZSBjaXZpbGUnLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3RoaXNfY2FsZW5kYXJfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ0NldHRlIGFubsOpZSBjaXZpbGUnLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX25leHRfY2FsZW5kYXJfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ1Byb2NoYWluZSBhbm7DqWUgY2l2aWxlJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9sYXN0X2Zpc2NhbF95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnRGVybmllciBleGVyY2ljZScsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfdGhpc19maXNjYWxfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ0zigJlleGVyY2ljZSBlbiBjb3VycycsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbmV4dF9maXNjYWxfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ0xlIHByb2NoYWluIGV4ZXJjaWNlJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX3N0YXJ0X2RhdGVfbGFiZWw6IHtcbiAgICAgIG1lc3NhZ2U6ICfDgCBwYXJ0aXIgZGUgbGEgZGF0ZSBkdScsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9lbmRfZGF0ZV9sYWJlbDogeyBtZXNzYWdlOiAnw4AgY2Ugam91cicgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9iZWZvcmVfZGF0ZV9sYWJlbDogeyBtZXNzYWdlOiAnRGF0ZSBhdmFudCcgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9hZnRlcl9kYXRlX2xhYmVsOiB7IG1lc3NhZ2U6ICdEYXRlIGFwcsOocycgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9kZWZhdWx0X2FyaWFfbGFiZWw6IHsgbWVzc2FnZTogJ3swfSBwb3VyIHsxfScgfSxcbiAgfSxcbn07XG5cblNreUxpYlJlc291cmNlc1NlcnZpY2UuYWRkUmVzb3VyY2VzKFJFU09VUkNFUyk7XG5cbi8qKlxuICogSW1wb3J0IGludG8gYW55IGNvbXBvbmVudCBsaWJyYXJ5IG1vZHVsZSB0aGF0IG5lZWRzIHRvIHVzZSByZXNvdXJjZSBzdHJpbmdzLlxuICovXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbU2t5STE4bk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGV0aW1lUmVzb3VyY2VzTW9kdWxlIHt9XG4iXX0=","// 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, inject } from '@angular/core';\nimport { SkyAppLocaleProvider, SkyIntlDateFormatter, } from '@skyux/i18n';\nimport moment from 'moment';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport * as i0 from \"@angular/core\";\n/**\n * @internal\n */\nexport class SkyDateService {\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 = {\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 #defaultFormat = 'short';\n #defaultLocale = 'en-US';\n #ngUnsubscribe = new Subject();\n constructor() {\n inject(SkyAppLocaleProvider)\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo) => {\n this.#defaultLocale = localeInfo.locale;\n });\n }\n ngOnDestroy() {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n format(value, locale, format) {\n let date;\n const pattern = format || this.#defaultFormat;\n if (isBlank(value) || value !== value) {\n return undefined;\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 // 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 }\n else {\n throw new Error('Invalid value: ' + value);\n }\n return SkyIntlDateFormatter.format(date, locale || this.#defaultLocale, this.#ALIASES[pattern] || pattern);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\nfunction isBlank(obj) {\n return !obj;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXBpcGUvZGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlGQUF5RjtBQUN6Riw2RkFBNkY7QUFDN0Ysb0JBQW9CO0FBQ3BCLHVGQUF1RjtBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBRUwsb0JBQW9CLEVBQ3BCLG9CQUFvQixHQUNyQixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRTNDOztHQUVHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFDekIsMkJBQTJCO0lBQzNCLDZGQUE2RjtJQUM3Riw2R0FBNkc7SUFDN0csUUFBUSxHQUEyQjtRQUNqQyw0REFBNEQ7UUFDNUQsS0FBSyxFQUFFLE9BQU87UUFDZCxpRUFBaUU7UUFDakUsTUFBTSxFQUFFLFVBQVU7UUFDbEIsdUdBQXVHO1FBQ3ZHLElBQUksRUFBRSx3QkFBd0I7UUFDOUIsZ0hBQWdIO1FBQ2hILElBQUksRUFBRSw4QkFBOEI7UUFDcEMsb0RBQW9EO1FBQ3BELFNBQVMsRUFBRSxLQUFLO1FBQ2hCLHNEQUFzRDtRQUN0RCxVQUFVLEVBQUUsT0FBTztRQUNuQix1REFBdUQ7UUFDdkQsUUFBUSxFQUFFLFFBQVE7UUFDbEIsNkRBQTZEO1FBQzdELFFBQVEsRUFBRSxZQUFZO1FBQ3RCLG9EQUFvRDtRQUNwRCxTQUFTLEVBQUUsSUFBSTtRQUNmLHVEQUF1RDtRQUN2RCxVQUFVLEVBQUUsS0FBSztRQUNqQiw0RkFBNEY7UUFDNUYsUUFBUSxFQUFFLGFBQWE7UUFDdkIsK0ZBQStGO1FBQy9GLFFBQVEsRUFBRSxhQUFhO0tBQ3hCLENBQUM7SUFDRiwwQkFBMEI7SUFFMUIsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUN6QixjQUFjLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXJDO1FBQ0UsTUFBTSxDQUFDLG9CQUFvQixDQUFDO2FBQ3pCLGFBQWEsRUFBRTthQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLFVBQTRCLEVBQUUsRUFBRTtZQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVNLE1BQU0sQ0FDWCxLQUFVLEVBQ1YsTUFBZSxFQUNmLE1BQWU7UUFFZixJQUFJLElBQVUsQ0FBQztRQUNmLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRTlDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsd0VBQXdFO1FBQ3hFLHVGQUF1RjtRQUN2Riw2QkFBNkI7UUFDN0IsSUFBSSxLQUFLLFlBQVksTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCwyRkFBMkY7UUFDM0YsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDekIsSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELE9BQU8sb0JBQW9CLENBQUMsTUFBTSxDQUNoQyxJQUFJLEVBQ0osTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUNsQyxDQUFDO0lBQ0osQ0FBQzsrR0FsRlUsY0FBYzttSEFBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBc0ZELFNBQVMsT0FBTyxDQUFDLEdBQVE7SUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGNsYXNzIGlzIG1vc3RseSBwb3J0ZWQgZnJvbSB0aGUgQW5ndWxhciA0LnggRGF0ZVBpcGUgaW4gb3JkZXIgdG8gbWFpbnRhaW4gdGhlIG9sZFxuLy8gYmVoYXZpb3Igb2YgdXNpbmcgdGhlIGBJbnRsYCBBUEkgZm9yIGZvcm1hdHRpbmcgZGF0ZXMgcmF0aGVyIHRoYW4gaGF2aW5nIHRvIHJlZ2lzdGVyIGV2ZXJ5XG4vLyBzdXBwb3J0ZWQgbG9jYWxlLlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzQuNC54L3BhY2thZ2VzL2NvbW1vbi9zcmMvcGlwZXMvZGF0ZV9waXBlLnRzXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2t5QXBwTG9jYWxlSW5mbyxcbiAgU2t5QXBwTG9jYWxlUHJvdmlkZXIsXG4gIFNreUludGxEYXRlRm9ybWF0dGVyLFxufSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyogc3BlbGwtY2hlY2tlcjpkaXNhYmxlICovXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzE3LjMueC9wYWNrYWdlcy9jb21tb24vc3JjL3BpcGVzL2RhdGVfcGlwZS50c1xuICAvLyBTZWU6IGh0dHBzOi8vd3d3LmlibS5jb20vZG9jcy9lbi9hcHAtY29ubmVjdC8xMS4wLjA/dG9waWM9ZnVuY3Rpb24tZm9ybWF0dGluZy1wYXJzaW5nLWRhdGV0aW1lcy1hcy1zdHJpbmdzXG4gICNBTElBU0VTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCAnTS9kL3l5LCBoOm1tIGEnIGluIGEgYnJlYWtpbmcgY2hhbmdlLlxuICAgIHNob3J0OiAneU1kam0nLFxuICAgIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCAnTU1NIGQsIHksIGg6bW06c3MgYScgaW4gYSBicmVha2luZyBjaGFuZ2UuXG4gICAgbWVkaXVtOiAneU1NTWRqbXMnLFxuICAgIC8vIFRPRE86IFRoaXMgZm9ybWF0IHdhcyBtb2RpZmllZCBmcm9tICdNTU1NIGQsIHksIGg6bW06c3MgYSB6JyBkdWUgdG8gdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBJbnRsIEFQSS5cbiAgICBsb25nOiAnTU1NTSBkLCB5LCBoOm1tOnNzIGEgWicsXG4gICAgLy8gVE9ETzogVGhpcyBmb3JtYXQgd2FzIG1vZGlmaWVkIGZyb20gJ0VFRUUsIE1NTU0gZCwgeSwgaDptbTpzcyBhIHp6enonIGR1ZSB0byB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIEludGwgQVBJLlxuICAgIGZ1bGw6ICdFRUVFLCBNTU1NIGQsIHksIGg6bW06c3MgYSB6JyxcbiAgICAvLyBUT0RPOiBSZXBsYWNlIHdpdGggJ00vZC95eScgaW4gYSBicmVha2luZyBjaGFuZ2UuXG4gICAgc2hvcnREYXRlOiAneU1kJyxcbiAgICAvLyBUT0RPOiBSZXBsYWNlIHdpdGggJ01NTSBkLCB5JyBpbiBhIGJyZWFraW5nIGNoYW5nZS5cbiAgICBtZWRpdW1EYXRlOiAneU1NTWQnLFxuICAgIC8vIFRPRE86IFJlcGxhY2Ugd2l0aCAnTU1NTSBkLCB5JyBpbiBhIGJyZWFraW5nIGNoYW5nZS5cbiAgICBsb25nRGF0ZTogJ3lNTU1NZCcsXG4gICAgLy8gVE9ETzogUmVwbGFjZSB3aXRoICdFRUVFLCBNTU1NIGQsIHknIGluIGEgYnJlYWtpbmcgY2hhbmdlLlxuICAgIGZ1bGxEYXRlOiAneU1NTU1FRUVFZCcsXG4gICAgLy8gVE9ETzogUmVwbGFjZSB3aXRoICdoOm1tIGEnIGluIGEgYnJlYWtpbmcgY2hhbmdlLlxuICAgIHNob3J0VGltZTogJ2ptJyxcbiAgICAvLyBUT0RPOiBSZXBsYWNlIHdpdGggJ2g6bW06c3MgYScgaW4gYSBicmVha2luZyBjaGFuZ2UuXG4gICAgbWVkaXVtVGltZTogJ2ptcycsXG4gICAgLy8gVE9ETzogVGhpcyBmb3JtYXQgd2FzIG1vZGlmaWVkIGZyb20gJ2g6bW06c3MgYSB6JyBkdWUgdG8gdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBJbnRsIEFQSS5cbiAgICBsb25nVGltZTogJ2g6bW06c3MgYSBaJyxcbiAgICAvLyBUT0RPOiBUaGlzIGZvcm1hdCB3YXMgbW9kaWZpZWQgZnJvbSAnaDptbTpzcyBhIHp6enonIGR1ZSB0byB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIEludGwgQVBJLlxuICAgIGZ1bGxUaW1lOiAnaDptbTpzcyBhIHonLFxuICB9O1xuICAvKiBzcGVsbC1jaGVja2VyOmVuYWJsZSAqL1xuXG4gICNkZWZhdWx0Rm9ybWF0ID0gJ3Nob3J0JztcbiAgI2RlZmF1bHRMb2NhbGUgPSAnZW4tVVMnO1xuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaW5qZWN0KFNreUFwcExvY2FsZVByb3ZpZGVyKVxuICAgICAgLmdldExvY2FsZUluZm8oKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxlSW5mbzogU2t5QXBwTG9jYWxlSW5mbykgPT4ge1xuICAgICAgICB0aGlzLiNkZWZhdWx0TG9jYWxlID0gbG9jYWxlSW5mby5sb2NhbGU7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0KFxuICAgIHZhbHVlOiBhbnksXG4gICAgbG9jYWxlPzogc3RyaW5nLFxuICAgIGZvcm1hdD86IHN0cmluZyxcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgZGF0ZTogRGF0ZTtcbiAgICBjb25zdCBwYXR0ZXJuID0gZm9ybWF0IHx8IHRoaXMuI2RlZmF1bHRGb3JtYXQ7XG5cbiAgICBpZiAoaXNCbGFuayh2YWx1ZSkgfHwgdmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIE1vbWVudCB3aWxsIGludGVycHJldCBhbnkgbm9uLWRhdGUgb2JqZWN0IGFzIHRvZGF5J3MgZGF0ZS4gVGhhdCB3b3VsZFxuICAgIC8vIGludHJvZHVjZSBhIGJyZWFraW5nIGNoYW5nZSwgc28gd2UgY2hlY2sgZm9yIGl0IGhlcmUuIFRoaXMgY291bGQgcHJvYmFibHkgYmUgcmVtb3ZlZFxuICAgIC8vIGluIGEgZnV0dXJlIG1ham9yIHZlcnNpb24uXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlOiAnICsgdmFsdWUpO1xuICAgIH1cblxuICAgIC8vIFVzZSBtb21lbnQgdG8gYXZvaWQgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gYnJvd3NlcnMgaW50ZXJwcmV0aW5nIHRoZSB2YWx1ZSBkaWZmZXJlbnRseS5cbiAgICBjb25zdCBtb21lbnREYXRlID0gbW9tZW50KHZhbHVlKTtcbiAgICBpZiAobW9tZW50RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIGRhdGUgPSBtb21lbnREYXRlLnRvRGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWU6ICcgKyB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNreUludGxEYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgIGRhdGUsXG4gICAgICBsb2NhbGUgfHwgdGhpcy4jZGVmYXVsdExvY2FsZSxcbiAgICAgIHRoaXMuI0FMSUFTRVNbcGF0dGVybl0gfHwgcGF0dGVybixcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQmxhbmsob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuICFvYmo7XG59XG4iXX0=","import { Pipe, inject } from '@angular/core';\nimport { SkyAppLocaleProvider } from '@skyux/i18n';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SkyDateService } from './date.service';\nimport * as i0 from \"@angular/core\";\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 */\nexport class SkyDatePipe {\n #dateSvc = inject(SkyDateService);\n #defaultFormat = 'short';\n #defaultLocale = 'en-US';\n #format;\n #formattedValue;\n #locale;\n #ngUnsubscribe = new Subject();\n #value;\n constructor() {\n inject(SkyAppLocaleProvider)\n .getLocaleInfo()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((localeInfo) => {\n this.#defaultLocale = localeInfo.locale;\n this.#updateFormattedValue();\n });\n }\n ngOnDestroy() {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\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.dev/api/common/DatePipe#pre-defined-format-options) format options.\n * @param locale Specifies the locale code to use in the transform.\n */\n transform(value, format, locale) {\n this.#value = value;\n this.#format = format;\n this.#locale = locale;\n this.#updateFormattedValue();\n return this.#formattedValue ?? '';\n }\n #updateFormattedValue() {\n const locale = this.#locale || this.#defaultLocale;\n const format = this.#format || this.#defaultFormat;\n this.#formattedValue = this.#dateSvc.format(this.#value, locale, format);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatePipe, isStandalone: true, name: \"skyDate\", pure: false }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'skyDate',\n pure: false,\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXBpcGUvZGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYSxJQUFJLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQW9CLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFaEQ7Ozs7Ozs7O0dBUUc7QUFLSCxNQUFNLE9BQU8sV0FBVztJQUN0QixRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xDLGNBQWMsR0FBRyxPQUFPLENBQUM7SUFDekIsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUN6QixPQUFPLENBQXFCO0lBQzVCLGVBQWUsQ0FBcUI7SUFDcEMsT0FBTyxDQUFxQjtJQUM1QixjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUNyQyxNQUFNLENBQU07SUFFWjtRQUNFLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQzthQUN6QixhQUFhLEVBQUU7YUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNwQyxTQUFTLENBQUMsQ0FBQyxVQUE0QixFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksU0FBUyxDQUFDLEtBQVUsRUFBRSxNQUFlLEVBQUUsTUFBZTtRQUMzRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUV0QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUU3QixPQUFPLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUVuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNFLENBQUM7K0dBaERVLFdBQVc7NkdBQVgsV0FBVzs7NEZBQVgsV0FBVztrQkFKdkIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsU0FBUztvQkFDZixJQUFJLEVBQUUsS0FBSztpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9uRGVzdHJveSwgUGlwZSwgUGlwZVRyYW5zZm9ybSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lBcHBMb2NhbGVJbmZvLCBTa3lBcHBMb2NhbGVQcm92aWRlciB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lEYXRlU2VydmljZSB9IGZyb20gJy4vZGF0ZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBGb3JtYXRzIGRhdGUgdmFsdWVzIGFjY29yZGluZyB0byBsb2NhbGUgcnVsZXMuXG4gKiBAZXhhbXBsZVxuICogYGBgbWFya3VwXG4gKiB7eyBteURhdGUgfCBza3lEYXRlIH19XG4gKiB7eyBteURhdGUgfCBza3lEYXRlOidtZWRpdW0nIH19XG4gKiB7eyBteURhdGUgfCBza3lEYXRlOidtZWRpdW0nOidlbi1DQScgfX1cbiAqIGBgYFxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICdza3lEYXRlJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGVQaXBlIGltcGxlbWVudHMgT25EZXN0cm95LCBQaXBlVHJhbnNmb3JtIHtcbiAgI2RhdGVTdmMgPSBpbmplY3QoU2t5RGF0ZVNlcnZpY2UpO1xuICAjZGVmYXVsdEZvcm1hdCA9ICdzaG9ydCc7XG4gICNkZWZhdWx0TG9jYWxlID0gJ2VuLVVTJztcbiAgI2Zvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjZm9ybWF0dGVkVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgI2xvY2FsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICN2YWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGluamVjdChTa3lBcHBMb2NhbGVQcm92aWRlcilcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm86IFNreUFwcExvY2FsZUluZm8pID0+IHtcbiAgICAgICAgdGhpcy4jZGVmYXVsdExvY2FsZSA9IGxvY2FsZUluZm8ubG9jYWxlO1xuICAgICAgICB0aGlzLiN1cGRhdGVGb3JtYXR0ZWRWYWx1ZSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgYSBkYXRlIHZhbHVlIHVzaW5nIGxvY2FsZSBhbmQgZm9ybWF0IHJ1bGVzLlxuICAgKiBAcGFyYW0gdmFsdWUgU3BlY2lmaWVzIHRoZSBkYXRlIHZhbHVlIHRvIHRyYW5zZm9ybS5cbiAgICogQHBhcmFtIGZvcm1hdCBTcGVjaWZpZXMgdGhlIGZvcm1hdCB0byBhcHBseSB0byB0aGUgdHJhbnNmb3JtLiBUaGUgZm9ybWF0IHN0cmluZyBpc1xuICAgKiBjb25zdHJ1Y3RlZCBieSBhIHNlcmllcyBvZiBzeW1ib2xzIHRoYXQgcmVwcmVzZW50IGRhdGUtdGltZSB2YWx1ZXMuIFRoZSBzeW1ib2xzIGFyZVxuICAgKiBpZGVudGljYWwgdG8gW0FuZ3VsYXIncyBgRGF0ZVBpcGVgXShodHRwczovL2FuZ3VsYXIuZGV2L2FwaS9jb21tb24vRGF0ZVBpcGUjcHJlLWRlZmluZWQtZm9ybWF0LW9wdGlvbnMpIGZvcm1hdCBvcHRpb25zLlxuICAgKiBAcGFyYW0gbG9jYWxlIFNwZWNpZmllcyB0aGUgbG9jYWxlIGNvZGUgdG8gdXNlIGluIHRoZSB0cmFuc2Zvcm0uXG4gICAqL1xuICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGZvcm1hdD86IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0aGlzLiN2YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2Zvcm1hdCA9IGZvcm1hdDtcbiAgICB0aGlzLiNsb2NhbGUgPSBsb2NhbGU7XG5cbiAgICB0aGlzLiN1cGRhdGVGb3JtYXR0ZWRWYWx1ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuI2Zvcm1hdHRlZFZhbHVlID8/ICcnO1xuICB9XG5cbiAgI3VwZGF0ZUZvcm1hdHRlZFZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuI2xvY2FsZSB8fCB0aGlzLiNkZWZhdWx0TG9jYWxlO1xuICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuI2Zvcm1hdCB8fCB0aGlzLiNkZWZhdWx0Rm9ybWF0O1xuXG4gICAgdGhpcy4jZm9ybWF0dGVkVmFsdWUgPSB0aGlzLiNkYXRlU3ZjLmZvcm1hdCh0aGlzLiN2YWx1ZSwgbG9jYWxlLCBmb3JtYXQpO1xuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport moment from 'moment';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@skyux/i18n\";\n/**\n * @internal\n */\nexport class SkyFuzzyDateService {\n #currentLocale;\n #ngUnsubscribe = new Subject();\n constructor(localeProvider) {\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 /* istanbul ignore next */\n ngOnDestroy() {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n /**\n * Returns the browser's current locale string.\n */\n getCurrentLocale() {\n return this.#currentLocale;\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 getLocaleShortFormat(locale) {\n return moment.localeData(locale || this.#currentLocale).longDateFormat('L');\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 format(fuzzyDate, format, locale) {\n if (!this.#isFuzzyDateValid(fuzzyDate)) {\n return '';\n }\n if (!format) {\n return '';\n }\n const separator = this.#getDateSeparator(format);\n const dateParts = [];\n const formatTokens = separator\n ? format.split(separator)\n : [format];\n locale = locale || this.#currentLocale;\n const fuzzyDateMoment = this.getMomentFromFuzzyDate(fuzzyDate).locale(locale);\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 return dateParts.join(separator);\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 getMomentFromFuzzyDate(fuzzyDate) {\n if (!fuzzyDate) {\n return;\n }\n const year = fuzzyDate.year || this.#getDefaultYear(fuzzyDate);\n const month = fuzzyDate.month && fuzzyDate.month > 0 ? fuzzyDate.month - 1 : 0;\n const day = fuzzyDate.day || 1;\n return moment([year, month, day]);\n }\n /**\n * Gets a string instance of a fuzzy date.\n * @deprecated Deprecated in favor of the `format` function.\n */\n getStringFromFuzzyDate(fuzzyDate, dateFormat) {\n if (!fuzzyDate || !dateFormat) {\n return;\n }\n const separator = this.#getDateSeparator(dateFormat);\n const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);\n let dateString = '';\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, b) => a.index - b.index);\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 return dateString.trim();\n }\n getFuzzyDateFromSelectedDate(selectedDate, dateFormat) {\n if (!selectedDate || !dateFormat) {\n return;\n }\n const fuzzyDate = {};\n const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);\n if (dateFormatIndexes.yearIndex > -1) {\n fuzzyDate.year = selectedDate.getFullYear();\n }\n if (dateFormatIndexes.dayIndex > -1) {\n fuzzyDate.day = selectedDate.getDate();\n }\n if (dateFormatIndexes.monthIndex > -1) {\n fuzzyDate.month = selectedDate.getMonth() + 1; // getMonth() is 0-indexed.\n }\n return fuzzyDate;\n }\n getFuzzyDateFromString(date, dateFormat) {\n if (!date || !dateFormat) {\n return;\n }\n let day;\n let month;\n let year;\n const dateComponents = this.#getDateComponents(date);\n const indexes = this.#getDateValueIndexes(date, dateFormat);\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 }\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 }\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 if (month) {\n // Check if month is valid.\n month = this.#getMonthNumber(month);\n if (month === undefined) {\n return;\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 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 return {\n month: month,\n day: day,\n year: year,\n };\n }\n getFuzzyDateRange(startFuzzyDate, endFuzzyDate) {\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 if (startFuzzyDate &&\n startFuzzyDate.year &&\n endFuzzyDate &&\n endFuzzyDate.year) {\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 return {\n years: years,\n months: months,\n days: days,\n startDate: start.toDate(),\n endDate: end.toDate(),\n valid: valid,\n };\n }\n getCurrentFuzzyDate() {\n const currentDate = moment();\n return {\n day: currentDate.date(),\n month: currentDate.month() + 1, // month() is 0-indexed.\n year: currentDate.year(),\n };\n }\n #getMostRecentLeapYear() {\n let leapYear = new Date().getFullYear();\n while (!this.#isLeapYear(leapYear)) {\n leapYear -= 1;\n }\n return leapYear;\n }\n /**\n * Returns the first separator found in the provided date format string.\n * Accepted separators: ['/', '.', '-', ' '].\n * @param dateFormat\n */\n #getDateSeparator(dateFormat) {\n let returnValue;\n const separators = ['/', '.', '-', ' '];\n separators.forEach((separator) => {\n if (!returnValue && dateFormat.indexOf(separator) > 0) {\n returnValue = separator;\n }\n });\n return returnValue;\n }\n #get4DigitYearFromDateString(date) {\n let year;\n const separator = this.#getDateSeparator(date);\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 if (year && !isNaN(Number(year))) {\n return parseInt(year, 10);\n }\n return undefined;\n }\n #isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n #getMonthNumber(month) {\n let returnValue;\n const monthAsNumber = parseInt(month, 10);\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 }\n else {\n returnValue = monthAsNumber;\n }\n // Ensure that the month is between 1 and 12\n if (!(1 <= returnValue && returnValue <= 12)) {\n return;\n }\n return returnValue;\n }\n #getDefaultYear(fuzzyDate) {\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 }\n else {\n return new Date().getFullYear();\n }\n }\n #getDateComponents(date) {\n const separator = this.#getDateSeparator(date);\n if (separator) {\n return date.split(separator);\n }\n else {\n return [date];\n }\n }\n // Returns the order of year, month, and day from the provided date format.\n #getDateFormatIndexes(dateFormat) {\n dateFormat = dateFormat.toLowerCase();\n return {\n yearIndex: dateFormat.indexOf('y'),\n monthIndex: dateFormat.indexOf('m'),\n dayIndex: dateFormat.indexOf('d'),\n };\n }\n // Returns the index of each of the date components in the provided string (month, day, year).\n #getDateValueIndexes(date, dateFormat) {\n const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);\n const dateComponentIndexes = [];\n if (dateFormatIndexes.yearIndex > -1) {\n dateComponentIndexes.push(dateFormatIndexes.yearIndex);\n }\n if (dateFormatIndexes.monthIndex > -1) {\n dateComponentIndexes.push(dateFormatIndexes.monthIndex);\n }\n if (dateFormatIndexes.dayIndex > -1) {\n dateComponentIndexes.push(dateFormatIndexes.dayIndex);\n }\n dateComponentIndexes.sort(function (a, b) {\n return a - b;\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 * 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) {\n if (!fuzzyDate) {\n return false;\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 // If only month is specified, return false.\n if (!fuzzyDate.day && fuzzyDate.month && !fuzzyDate.year) {\n return false;\n }\n // If only day is specified, return false.\n if (fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {\n return false;\n }\n return true;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyFuzzyDateService, deps: [{ token: i1.SkyAppLocaleProvider }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyFuzzyDateService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyFuzzyDateService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.SkyAppLocaleProvider }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnV6enktZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5L2Z1enp5LWRhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBR3RELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBeUIzQzs7R0FFRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsY0FBYyxDQUFTO0lBRXZCLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXJDLFlBQVksY0FBb0M7UUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1FBQ25ELGNBQWM7YUFDWCxhQUFhLEVBQUU7YUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNwQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsMEJBQTBCO0lBQ25CLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLG9C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QUMsVUFBVSxDQUFDO1lBQ3RFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1NBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaUJBQWlCLENBQUMsU0FBdUI7UUFDdkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQseURBQXlEO1FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCwwQ0FBMEM7UUFDMUMsSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBdGRVLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUFwcExvY2FsZVByb3ZpZGVyIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreUZ1enp5RGF0ZSB9IGZyb20gJy4vZnV6enktZGF0ZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBTa3lEYXRlSW5kZXhlcyB7XG4gIHllYXJJbmRleDogbnVtYmVyO1xuICBtb250aEluZGV4OiBudW1iZXI7XG4gIGRheUluZGV4OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBTa3lGdXp6eURhdGVSYW5nZSB7XG4gIHllYXJzOiBzdHJpbmc7XG4gIG1vbnRoczogc3RyaW5nO1xuICBkYXlzOiBzdHJpbmc7XG4gIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgZW5kRGF0ZTogRGF0ZTtcbiAgdmFsaWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lGdXp6eURhdGVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgI2N1cnJlbnRMb2NhbGU6IHN0cmluZztcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IobG9jYWxlUHJvdmlkZXI6IFNreUFwcExvY2FsZVByb3ZpZGVyKSB7XG4gICAgdGhpcy4jY3VycmVudExvY2FsZSA9IGxvY2FsZVByb3ZpZGVyLmRlZmF1bHRMb2NhbGU7XG4gICAgbG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm8pID0+IHtcbiAgICAgICAgdGhpcy4jY3VycmVudExvY2FsZSA9IGxvY2FsZUluZm8ubG9jYWxlO1xuICAgICAgfSk7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJyb3dzZXIncyBjdXJyZW50IGxvY2FsZSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50TG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNob3J0IGZvcm1hdCBvZiB0aGUgcHJvdmlkZWQgbG9jYWxlLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBsb2NhbGUgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBsb2NhbGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9jYWxlU2hvcnRGb3JtYXQobG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50LmxvY2FsZURhdGEobG9jYWxlIHx8IHRoaXMuI2N1cnJlbnRMb2NhbGUpLmxvbmdEYXRlRm9ybWF0KCdMJyk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhIGZ1enp5IGRhdGUgYnkgdXNpbmcgdGhlIHByb3ZpZGVkIGZvcm1hdCBhbmQgbG9jYWxlIHN0cmluZ3MuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGxvY2FsZSB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGJyb3dzZXIncyBkZWZhdWx0IGxvY2FsZS5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXQoXG4gICAgZnV6enlEYXRlOiBTa3lGdXp6eURhdGUsXG4gICAgZm9ybWF0Pzogc3RyaW5nLFxuICAgIGxvY2FsZT86IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuI2lzRnV6enlEYXRlVmFsaWQoZnV6enlEYXRlKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICghZm9ybWF0KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy4jZ2V0RGF0ZVNlcGFyYXRvcihmb3JtYXQpO1xuICAgIGNvbnN0IGRhdGVQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBmb3JtYXRUb2tlbnM6IHN0cmluZ1tdID0gc2VwYXJhdG9yXG4gICAgICA/IGZvcm1hdC5zcGxpdChzZXBhcmF0b3IpXG4gICAgICA6IFtmb3JtYXRdO1xuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCB0aGlzLiNjdXJyZW50TG9jYWxlO1xuICAgIGNvbnN0IGZ1enp5RGF0ZU1vbWVudCA9XG4gICAgICB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoZnV6enlEYXRlKS5sb2NhbGUobG9jYWxlKTtcblxuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgZm9ybWF0VG9rZW5zKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIHN3aXRjaCAodG9rZW4uc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgIGlmIChmdXp6eURhdGUueWVhcikge1xuICAgICAgICAgICAgICBkYXRlUGFydHMucHVzaChmdXp6eURhdGVNb21lbnQuZm9ybWF0KHRva2VuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgIGlmIChmdXp6eURhdGUubW9udGgpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBpZiAoZnV6enlEYXRlLmRheSkge1xuICAgICAgICAgICAgICBkYXRlUGFydHMucHVzaChmdXp6eURhdGVNb21lbnQuZm9ybWF0KHRva2VuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlUGFydHMuam9pbihzZXBhcmF0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIG5vdCBwcm92aWRlZCwgeWVhcnMgd2lsbCBkZWZhdWx0IHRvIGN1cnJlbnQgeWVhcjsgbW9udGhzIHdpbGwgZGVmYXVsdCB0byBKYW51YXJ5O1xuICAgKiBkYXlzIHdpbGwgZGVmYXVsdCB0byAxc3Qgb2YgdGhlIG1vbnRoLlxuICAgKi9cbiAgcHVibGljIGdldE1vbWVudEZyb21GdXp6eURhdGUoZnV6enlEYXRlPzogU2t5RnV6enlEYXRlKTogYW55IHtcbiAgICBpZiAoIWZ1enp5RGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHllYXIgPSBmdXp6eURhdGUueWVhciB8fCB0aGlzLiNnZXREZWZhdWx0WWVhcihmdXp6eURhdGUpO1xuICAgIGNvbnN0IG1vbnRoID1cbiAgICAgIGZ1enp5RGF0ZS5tb250aCAmJiBmdXp6eURhdGUubW9udGggPiAwID8gZnV6enlEYXRlLm1vbnRoIC0gMSA6IDA7XG4gICAgY29uc3QgZGF5ID0gZnV6enlEYXRlLmRheSB8fCAxO1xuXG4gICAgcmV0dXJuIG1vbWVudChbeWVhciwgbW9udGgsIGRheV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBzdHJpbmcgaW5zdGFuY2Ugb2YgYSBmdXp6eSBkYXRlLlxuICAgKiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSBgZm9ybWF0YCBmdW5jdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXRTdHJpbmdGcm9tRnV6enlEYXRlKFxuICAgIGZ1enp5RGF0ZT86IFNreUZ1enp5RGF0ZSxcbiAgICBkYXRlRm9ybWF0Pzogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghZnV6enlEYXRlIHx8ICFkYXRlRm9ybWF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy4jZ2V0RGF0ZVNlcGFyYXRvcihkYXRlRm9ybWF0KTtcbiAgICBjb25zdCBkYXRlRm9ybWF0SW5kZXhlcyA9IHRoaXMuI2dldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQpO1xuICAgIGxldCBkYXRlU3RyaW5nID0gJyc7XG5cbiAgICAvLyBHZXQgdGhlIGNvbXBvbmVudHMgb2YgdGhlIGRhdGUgaW4gdGhlIG9yZGVyIGV4cGVjdGVkIG9mIHRoZSBsb2NhbCBmb3JtYXQuXG4gICAgY29uc3QgZGF0ZUNvbXBvbmVudHMgPSBbXG4gICAgICB7IHZhbHVlOiBmdXp6eURhdGUueWVhciB8fCAwLCBpbmRleDogZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4IH0sXG4gICAgICB7IHZhbHVlOiBmdXp6eURhdGUubW9udGggfHwgMCwgaW5kZXg6IGRhdGVGb3JtYXRJbmRleGVzLm1vbnRoSW5kZXggfSxcbiAgICAgIHsgdmFsdWU6IGZ1enp5RGF0ZS5kYXkgfHwgMCwgaW5kZXg6IGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4IH0sXG4gICAgXTtcbiAgICBkYXRlQ29tcG9uZW50cy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuXG4gICAgZGF0ZUNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XG4gICAgICBpZiAoY29tcG9uZW50LnZhbHVlID4gMCAmJiBjb21wb25lbnQuaW5kZXggPiAtMSkge1xuICAgICAgICBpZiAoZGF0ZVN0cmluZykge1xuICAgICAgICAgIGRhdGVTdHJpbmcgKz0gc2VwYXJhdG9yO1xuICAgICAgICB9XG4gICAgICAgIGRhdGVTdHJpbmcgKz0gY29tcG9uZW50LnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0ZVN0cmluZy50cmltKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnV6enlEYXRlRnJvbVNlbGVjdGVkRGF0ZShcbiAgICBzZWxlY3RlZERhdGU/OiBEYXRlLFxuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmcsXG4gICk6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzZWxlY3RlZERhdGUgfHwgIWRhdGVGb3JtYXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSA9IHt9O1xuICAgIGNvbnN0IGRhdGVGb3JtYXRJbmRleGVzID0gdGhpcy4jZ2V0RGF0ZUZvcm1hdEluZGV4ZXMoZGF0ZUZvcm1hdCk7XG5cbiAgICBpZiAoZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS55ZWFyID0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS5kYXkgPSBzZWxlY3RlZERhdGUuZ2V0RGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS5tb250aCA9IHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICsgMTsgLy8gZ2V0TW9udGgoKSBpcyAwLWluZGV4ZWQuXG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1enp5RGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdXp6eURhdGVGcm9tU3RyaW5nKFxuICAgIGRhdGU6IHN0cmluZyxcbiAgICBkYXRlRm9ybWF0Pzogc3RyaW5nLFxuICApOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICghZGF0ZSB8fCAhZGF0ZUZvcm1hdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBkYXk6IGFueTtcbiAgICBsZXQgbW9udGg6IGFueTtcbiAgICBsZXQgeWVhcjogYW55O1xuXG4gICAgY29uc3QgZGF0ZUNvbXBvbmVudHMgPSB0aGlzLiNnZXREYXRlQ29tcG9uZW50cyhkYXRlKTtcbiAgICBjb25zdCBpbmRleGVzID0gdGhpcy4jZ2V0RGF0ZVZhbHVlSW5kZXhlcyhkYXRlLCBkYXRlRm9ybWF0KTtcblxuICAgIC8vIExvb2sgYXQgdGhlIGRhdGUgc3RyaW5nJ3MgY29tcG9uZW50IGNvdW50OlxuICAgIC8vIDMgaW5kaWNhdGVzIGEgZnVsbCBkYXRlXG4gICAgLy8gMiBpbmRpY2F0ZXMgYSBtb250aC15ZWFyIG9yIG1vbnRoLWRheSBkYXRlXG4gICAgLy8gMSBpbmRpY2F0ZXMgYSB5ZWFyXG4gICAgLy8gT3RoZXIgaW5kaWNhdGVzIGEgcHJvYmxlbVxuICAgIHN3aXRjaCAoZGF0ZUNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHllYXIgPSBkYXRlQ29tcG9uZW50c1tpbmRleGVzLnllYXJJbmRleF07XG4gICAgICAgIG1vbnRoID0gZGF0ZUNvbXBvbmVudHNbaW5kZXhlcy5tb250aEluZGV4XTtcbiAgICAgICAgZGF5ID0gZGF0ZUNvbXBvbmVudHNbaW5kZXhlcy5kYXlJbmRleF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICAvLyBGaXJzdCwgY2hlY2sgZm9yIGEgNC1kaWdpdCB5ZWFyLiBJZiB5ZWFyIGV4aXN0cywgdGhlbiB3ZSBhc3N1bWUgdGhlIG90aGVyIGNvbXBvbmVudFxuICAgICAgICAvLyBpcyB0aGUgbW9udGguIE90aGVyd2lzZSwgd2UgY2FuIGFzc3VtZSB0aGUgaW5wdXQgaXMgbW0vZGQgb3IgbW0veXkgKDItZGlnaXQgeWVhcikuXG4gICAgICAgIHllYXIgPSB0aGlzLiNnZXQ0RGlnaXRZZWFyRnJvbURhdGVTdHJpbmcoZGF0ZSk7XG4gICAgICAgIGlmICh5ZWFyKSB7XG4gICAgICAgICAgbW9udGggPVxuICAgICAgICAgICAgZGF0ZUNvbXBvbmVudHNbMF0gPT09IHllYXIudG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/IGRhdGVDb21wb25lbnRzWzFdXG4gICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGluZGV4ZXMuZGF5SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgLy8gbW0vZGRcbiAgICAgICAgICAgIG1vbnRoID1cbiAgICAgICAgICAgICAgaW5kZXhlcy5tb250aEluZGV4IDwgaW5kZXhlcy5kYXlJbmRleFxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgZGF5ID1cbiAgICAgICAgICAgICAgbW9udGggPT09IGRhdGVDb21wb25lbnRzWzFdXG4gICAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1swXVxuICAgICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG1tL3l5XG4gICAgICAgICAgICBtb250aCA9XG4gICAgICAgICAgICAgIGluZGV4ZXMubW9udGhJbmRleCA8IGluZGV4ZXMueWVhckluZGV4XG4gICAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1swXVxuICAgICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMV07XG4gICAgICAgICAgICB5ZWFyID1cbiAgICAgICAgICAgICAgbW9udGggPT09IGRhdGVDb21wb25lbnRzWzFdXG4gICAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1swXVxuICAgICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICB5ZWFyID0gZGF0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1vbnRoKSB7XG4gICAgICAvLyBDaGVjayBpZiBtb250aCBpcyB2YWxpZC5cbiAgICAgIG1vbnRoID0gdGhpcy4jZ2V0TW9udGhOdW1iZXIobW9udGgpO1xuICAgICAgaWYgKG1vbnRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBkYXkgaXMgdmFsaWQuXG4gICAgICBpZiAoZGF5KSB7XG4gICAgICAgIGRheSA9IHBhcnNlSW50KGRheSwgMTApO1xuICAgICAgICBjb25zdCBmdXp6eU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZSh7XG4gICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgIHllYXI6IHllYXIsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaXNOYU4oZGF5KSB8fCAhZnV6enlNb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHllYXIpIHtcbiAgICAgIHllYXIgPVxuICAgICAgICB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyXG4gICAgICAgICAgPyBtb21lbnQucGFyc2VUd29EaWdpdFllYXIoeWVhcilcbiAgICAgICAgICA6IHBhcnNlSW50KHllYXIudG9TdHJpbmcoKSwgMTApO1xuICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IHllYXIudG9TdHJpbmcoKS5sZW5ndGggIT09IDQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtb250aDogbW9udGgsXG4gICAgICBkYXk6IGRheSxcbiAgICAgIHllYXI6IHllYXIsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdXp6eURhdGVSYW5nZShcbiAgICBzdGFydEZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLFxuICAgIGVuZEZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLFxuICApOiBTa3lGdXp6eURhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoc3RhcnRGdXp6eURhdGUpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShlbmRGdXp6eURhdGUpO1xuICAgIGxldCBkYXlzO1xuICAgIGxldCBtb250aHM7XG4gICAgbGV0IHllYXJzO1xuICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuXG4gICAgaWYgKFxuICAgICAgc3RhcnRGdXp6eURhdGUgJiZcbiAgICAgIHN0YXJ0RnV6enlEYXRlLnllYXIgJiZcbiAgICAgIGVuZEZ1enp5RGF0ZSAmJlxuICAgICAgZW5kRnV6enlEYXRlLnllYXJcbiAgICApIHtcbiAgICAgIHllYXJzID0gZW5kLmRpZmYoc3RhcnQsICd5ZWFycycpO1xuICAgICAgbW9udGhzID0gZW5kLmRpZmYoc3RhcnQsICdtb250aHMnKTtcbiAgICAgIGRheXMgPSBlbmQuZGlmZihzdGFydCwgJ2RheXMnKTtcbiAgICAgIHZhbGlkID0gZW5kLmRpZmYoc3RhcnQpID49IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXJzOiB5ZWFycyxcbiAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgZGF5czogZGF5cyxcbiAgICAgIHN0YXJ0RGF0ZTogc3RhcnQudG9EYXRlKCksXG4gICAgICBlbmREYXRlOiBlbmQudG9EYXRlKCksXG4gICAgICB2YWxpZDogdmFsaWQsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXJyZW50RnV6enlEYXRlKCk6IFNreUZ1enp5RGF0ZSB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBtb21lbnQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXk6IGN1cnJlbnREYXRlLmRhdGUoKSxcbiAgICAgIG1vbnRoOiBjdXJyZW50RGF0ZS5tb250aCgpICsgMSwgLy8gbW9udGgoKSBpcyAwLWluZGV4ZWQuXG4gICAgICB5ZWFyOiBjdXJyZW50RGF0ZS55ZWFyKCksXG4gICAgfTtcbiAgfVxuXG4gICNnZXRNb3N0UmVjZW50TGVhcFllYXIoKTogbnVtYmVyIHtcbiAgICBsZXQgbGVhcFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbiAgICB3aGlsZSAoIXRoaXMuI2lzTGVhcFllYXIobGVhcFllYXIpKSB7XG4gICAgICBsZWFwWWVhciAtPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFwWWVhcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBzZXBhcmF0b3IgZm91bmQgaW4gdGhlIHByb3ZpZGVkIGRhdGUgZm9ybWF0IHN0cmluZy5cbiAgICogQWNjZXB0ZWQgc2VwYXJhdG9yczogWycvJywgJy4nLCAnLScsICcgJ10uXG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0XG4gICAqL1xuICAjZ2V0RGF0ZVNlcGFyYXRvcihkYXRlRm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXR1cm5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNlcGFyYXRvcnMgPSBbJy8nLCAnLicsICctJywgJyAnXTtcblxuICAgIHNlcGFyYXRvcnMuZm9yRWFjaCgoc2VwYXJhdG9yKSA9PiB7XG4gICAgICBpZiAoIXJldHVyblZhbHVlICYmIGRhdGVGb3JtYXQuaW5kZXhPZihzZXBhcmF0b3IpID4gMCkge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IHNlcGFyYXRvcjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gICNnZXQ0RGlnaXRZZWFyRnJvbURhdGVTdHJpbmcoZGF0ZTogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgeWVhcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuI2dldERhdGVTZXBhcmF0b3IoZGF0ZSk7XG5cbiAgICBpZiAoc2VwYXJhdG9yKSB7XG4gICAgICAvLyBGaW5kIHRoZSBudW1iZXIgdmFsdWUgaW4gdGhlIHN0cmluZyB0aGF0IGlzIDQgZGlnaXRzIGxvbmcuXG4gICAgICBkYXRlLnNwbGl0KHNlcGFyYXRvcikuZm9yRWFjaCgoZGF0ZUNvbXBvbmVudCkgPT4ge1xuICAgICAgICBpZiAoIXllYXIgJiYgcGFyc2VJbnQoZGF0ZUNvbXBvbmVudCwgMTApLnRvU3RyaW5nKCkubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgeWVhciA9IGRhdGVDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh5ZWFyICYmICFpc05hTihOdW1iZXIoeWVhcikpKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQoeWVhciwgMTApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgI2lzTGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICB9XG5cbiAgI2dldE1vbnRoTnVtYmVyKG1vbnRoOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXR1cm5WYWx1ZTogbnVtYmVyO1xuICAgIGNvbnN0IG1vbnRoQXNOdW1iZXIgPSBwYXJzZUludChtb250aCwgMTApO1xuXG4gICAgLy8gSWYgdGhlIG1vbnRoIGNvbXBvbmVudCBpcyBhIHN0cmluZyAoXCJKYW51YXJ5XCIpLCB3ZSBjaGVjayB0byBzZWUgaWYgaXQgaXMgYSB2YWxpZCBtb250aFxuICAgIGlmIChpc05hTihtb250aEFzTnVtYmVyKSkge1xuICAgICAgaWYgKCFtb21lbnQobW9udGgsICdNTU1NJykuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVyblZhbHVlID0gcGFyc2VJbnQobW9tZW50KCkubW9udGgobW9udGgpLmZvcm1hdCgnTScpLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblZhbHVlID0gbW9udGhBc051bWJlcjtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbW9udGggaXMgYmV0d2VlbiAxIGFuZCAxMlxuICAgIGlmICghKDEgPD0gcmV0dXJuVmFsdWUgJiYgcmV0dXJuVmFsdWUgPD0gMTIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgI2dldERlZmF1bHRZZWFyKGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlKTogbnVtYmVyIHtcbiAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHJldHVybiBhIGxlYXAgeWVhciBvciB0aGUgY3VycmVudCB5ZWFyLlxuICAgIGlmIChmdXp6eURhdGUubW9udGggPT09IDIgJiYgZnV6enlEYXRlLmRheSA9PT0gMjkpIHtcbiAgICAgIHJldHVybiB0aGlzLiNnZXRNb3N0UmVjZW50TGVhcFllYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gIH1cblxuICAjZ2V0RGF0ZUNvbXBvbmVudHMoZGF0ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuI2dldERhdGVTZXBhcmF0b3IoZGF0ZSk7XG4gICAgaWYgKHNlcGFyYXRvcikge1xuICAgICAgcmV0dXJuIGRhdGUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtkYXRlXTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBvcmRlciBvZiB5ZWFyLCBtb250aCwgYW5kIGRheSBmcm9tIHRoZSBwcm92aWRlZCBkYXRlIGZvcm1hdC5cbiAgI2dldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQ6IHN0cmluZyk6IFNreURhdGVJbmRleGVzIHtcbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVGb3JtYXQuaW5kZXhPZigneScpLFxuICAgICAgbW9udGhJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdtJyksXG4gICAgICBkYXlJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdkJyksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIGVhY2ggb2YgdGhlIGRhdGUgY29tcG9uZW50cyBpbiB0aGUgcHJvdmlkZWQgc3RyaW5nIChtb250aCwgZGF5LCB5ZWFyKS5cbiAgI2dldERhdGVWYWx1ZUluZGV4ZXMoZGF0ZTogc3RyaW5nLCBkYXRlRm9ybWF0OiBzdHJpbmcpOiBTa3lEYXRlSW5kZXhlcyB7XG4gICAgY29uc3QgZGF0ZUZvcm1hdEluZGV4ZXMgPSB0aGlzLiNnZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0KTtcbiAgICBjb25zdCBkYXRlQ29tcG9uZW50SW5kZXhlcyA9IFtdO1xuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXggPiAtMSkge1xuICAgICAgZGF0ZUNvbXBvbmVudEluZGV4ZXMucHVzaChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMuZGF5SW5kZXgpO1xuICAgIH1cblxuICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4KSxcbiAgICAgIG1vbnRoSW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCksXG4gICAgICBkYXlJbmRleDogZGF0ZUNvbXBvbmVudEluZGV4ZXMuaW5kZXhPZihkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIFNreUZ1enp5RGF0ZSBvYmplY3QuIFZhbGlkIGZ1enp5IGRhdGVzIGFyZSBhcyBmb2xsb3dzOlxuICAgKiBtb250aCwgZGF5LCB5ZWFyXG4gICAqIG1vbnRoLCB5ZWFyXG4gICAqIG1vbnRoLCBkYXlcbiAgICogeWVhciBvbmx5XG4gICAqL1xuICAjaXNGdXp6eURhdGVWYWxpZChmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghZnV6enlEYXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgbm9uZSBvZiB0aGUgZGF0ZXMgcGFydCBhcmUgc3BlY2lmaWVkLCByZXR1cm4gZmFsc2UuXG4gICAgaWYgKCFmdXp6eURhdGUuZGF5ICYmICFmdXp6eURhdGUubW9udGggJiYgIWZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBtb250aCBpcyBzcGVjaWZpZWQsIHJldHVybiBmYWxzZS5cbiAgICBpZiAoIWZ1enp5RGF0ZS5kYXkgJiYgZnV6enlEYXRlLm1vbnRoICYmICFmdXp6eURhdGUueWVhcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgZGF5IGlzIHNwZWNpZmllZCwgcmV0dXJuIGZhbHNlLlxuICAgIGlmIChmdXp6eURhdGUuZGF5ICYmICFmdXp6eURhdGUubW9udGggJiYgIWZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../datepicker/fuzzy/fuzzy-date.service\";\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 */\nexport class SkyFuzzyDatePipe {\n #fuzzyDateService;\n constructor(fuzzyDateService) {\n this.#fuzzyDateService = fuzzyDateService;\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 transform(value, format, locale) {\n if (!value) {\n return '';\n }\n const fuzzyDateFormat = format || this.#fuzzyDateService.getLocaleShortFormat(locale);\n const fuzzyDateLocale = locale || this.#fuzzyDateService.getCurrentLocale();\n return this.#fuzzyDateService.format(value, fuzzyDateFormat, fuzzyDateLocale);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyFuzzyDatePipe, deps: [{ token: i1.SkyFuzzyDateService }], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyFuzzyDatePipe, isStandalone: true, name: \"skyFuzzyDate\", pure: false }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyFuzzyDatePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'skyFuzzyDate',\n pure: false,\n }]\n }], ctorParameters: () => [{ type: i1.SkyFuzzyDateService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnV6enktZGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXBpcGUvZnV6enktZGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7QUFLcEQ7Ozs7Ozs7O0dBUUc7QUFLSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLGlCQUFpQixDQUFzQjtJQUV2QyxZQUFZLGdCQUFxQztRQUMvQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxTQUFTLENBQ2QsS0FBbUIsRUFDbkIsTUFBZSxFQUNmLE1BQWU7UUFFZixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxNQUFNLGVBQWUsR0FDbkIsTUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRSxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUUsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUNsQyxLQUFLLEVBQ0wsZUFBZSxFQUNmLGVBQWUsQ0FDaEIsQ0FBQztJQUNKLENBQUM7K0dBbENVLGdCQUFnQjs2R0FBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUo1QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxjQUFjO29CQUNwQixJQUFJLEVBQUUsS0FBSztpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5RnV6enlEYXRlIH0gZnJvbSAnLi4vZGF0ZXBpY2tlci9mdXp6eS9mdXp6eS1kYXRlJztcbmltcG9ydCB7IFNreUZ1enp5RGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9kYXRlcGlja2VyL2Z1enp5L2Z1enp5LWRhdGUuc2VydmljZSc7XG5cbi8qKlxuICogRm9ybWF0cyBkYXRlIHZhbHVlcyB1c2luZyB0d28gb3IgbW9yZSBkYXRlIHRva2VucyB0aGF0IHJlcHJlc2VudCB0aGUgZGF5LCBtb250aCxcbiAqIGFuZCB5ZWFyLiBUaGUgdG9rZW5zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFttb21lbnQuanMgdmFsdWVzXShodHRwczovL21vbWVudGpzLmNvbS9kb2NzLyMvZGlzcGxheWluZy8pLlxuICogQGV4YW1wbGVcbiAqIGBgYG1hcmt1cFxuICoge3sgbXlGdXp6eURhdGUgfCBza3lGdXp6eURhdGU6J01NTSBZJyB9fVxuICoge3sgbXlGdXp6eURhdGUgfCBza3lGdXp6eURhdGU6J01NTSBZJzonZW4tQ0EnIH19XG4gKiBgYGBcbiAqL1xuQFBpcGUoe1xuICBuYW1lOiAnc2t5RnV6enlEYXRlJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFNreUZ1enp5RGF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgI2Z1enp5RGF0ZVNlcnZpY2U6IFNreUZ1enp5RGF0ZVNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoZnV6enlEYXRlU2VydmljZTogU2t5RnV6enlEYXRlU2VydmljZSkge1xuICAgIHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UgPSBmdXp6eURhdGVTZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgZnV6enkgZGF0ZSB2YWx1ZXMgdXNpbmcgdHdvIG9yIG1vcmUgZGF0ZSB0b2tlbnMgdGhhdCByZXByZXNlbnQgdGhlIGRheSwgbW9udGgsXG4gICAqIGFuZCB5ZWFyLlxuICAgKiBAcGFyYW0gdmFsdWUgU3BlY2lmaWVzIHRoZSBkYXRlIHZhbHVlIHRvIHRyYW5zZm9ybS5cbiAgICogQHBhcmFtIGZvcm1hdCBTcGVjaWZpZXMgdGhlIGZvcm1hdCB0byBhcHBseSB0byB0aGUgdHJhbnNmb3JtLiBZb3UgY29uc3RydWN0IHRoZSBmb3JtYXRcbiAgICogc3RyaW5nIHdpdGggYSB0d28gb3IgbW9yZSB0b2tlbnMgdGhhdCBzcGVjaWZ5IHRoZSBjb21wb25lbnRzIG9mIGRhdGUtdGltZSB2YWx1ZS4gVGhlXG4gICAqIHRva2VucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBbbW9tZW50LmpzIHZhbHVlc10oaHR0cHM6Ly9tb21lbnRqcy5jb20vZG9jcy8jL2Rpc3BsYXlpbmcvKS5cbiAgICogSWYgeW91IGRvbid0IHByb3ZpZGUgYSBmb3JtYXQsIGBTa3lGdXp6eURhdGVQaXBlYCBhdHRlbXB0cyB0byBmb3JtYXQgZnV6enkgZGF0ZXMgYmFzZWRcbiAgICogb24gdGhlIGJyb3dzZXIncyBkZWZhdWx0IGxvY2FsZS5cbiAgICogQHBhcmFtIGxvY2FsZSBTcGVjaWZpZXMgdGhlIGxvY2FsZSBjb2RlIHRvIHVzZSBpbiB0aGUgdHJhbnNmb3JtLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybShcbiAgICB2YWx1ZTogU2t5RnV6enlEYXRlLFxuICAgIGZvcm1hdD86IHN0cmluZyxcbiAgICBsb2NhbGU/OiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBmdXp6eURhdGVGb3JtYXQgPVxuICAgICAgZm9ybWF0IHx8IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0TG9jYWxlU2hvcnRGb3JtYXQobG9jYWxlKTtcbiAgICBjb25zdCBmdXp6eURhdGVMb2NhbGUgPSBsb2NhbGUgfHwgdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRDdXJyZW50TG9jYWxlKCk7XG4gICAgcmV0dXJuIHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZm9ybWF0KFxuICAgICAgdmFsdWUsXG4gICAgICBmdXp6eURhdGVGb3JtYXQsXG4gICAgICBmdXp6eURhdGVMb2NhbGUsXG4gICAgKTtcbiAgfVxufVxuIl19","import { NgModule } from '@angular/core';\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\nimport { SkyDatePipe } from './date.pipe';\nimport { SkyFuzzyDatePipe } from './fuzzy-date.pipe';\nimport * as i0 from \"@angular/core\";\nexport class SkyDatePipeModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatePipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatePipeModule, imports: [SkyDatetimeResourcesModule, SkyDatePipe, SkyFuzzyDatePipe], exports: [SkyDatePipe, SkyFuzzyDatePipe] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatePipeModule, providers: [SkyDatePipe, SkyFuzzyDatePipe], imports: [SkyDatetimeResourcesModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatePipeModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [SkyDatetimeResourcesModule, SkyDatePipe, SkyFuzzyDatePipe],\n providers: [SkyDatePipe, SkyFuzzyDatePipe],\n exports: [SkyDatePipe, SkyFuzzyDatePipe],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waXBlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS9zcmMvbGliL21vZHVsZXMvZGF0ZS1waXBlL2RhdGUtcGlwZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUVyRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQU9yRCxNQUFNLE9BQU8saUJBQWlCOytHQUFqQixpQkFBaUI7Z0hBQWpCLGlCQUFpQixZQUpsQiwwQkFBMEIsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLGFBRXpELFdBQVcsRUFBRSxnQkFBZ0I7Z0hBRTVCLGlCQUFpQixhQUhqQixDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxZQURoQywwQkFBMEI7OzRGQUl6QixpQkFBaUI7a0JBTDdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDO29CQUNwRSxTQUFTLEVBQUUsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUM7b0JBQzFDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQztpQkFDekMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTa3lEYXRldGltZVJlc291cmNlc01vZHVsZSB9IGZyb20gJy4uL3NoYXJlZC9za3ktZGF0ZXRpbWUtcmVzb3VyY2VzLm1vZHVsZSc7XG5cbmltcG9ydCB7IFNreURhdGVQaXBlIH0gZnJvbSAnLi9kYXRlLnBpcGUnO1xuaW1wb3J0IHsgU2t5RnV6enlEYXRlUGlwZSB9IGZyb20gJy4vZnV6enktZGF0ZS5waXBlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1NreURhdGV0aW1lUmVzb3VyY2VzTW9kdWxlLCBTa3lEYXRlUGlwZSwgU2t5RnV6enlEYXRlUGlwZV0sXG4gIHByb3ZpZGVyczogW1NreURhdGVQaXBlLCBTa3lGdXp6eURhdGVQaXBlXSxcbiAgZXhwb3J0czogW1NreURhdGVQaXBlLCBTa3lGdXp6eURhdGVQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0ZVBpcGVNb2R1bGUge31cbiJdfQ==","import moment from 'moment';\nexport class SkyDateFormatter {\n static { this.defaultLocale = 'en-US'; }\n static { this.defaultShortDateFormat = 'MM/DD/YYYY'; }\n /**\n * Sets moment's global locale.\n */\n static setLocale(locale) {\n moment.locale(locale || SkyDateFormatter.defaultLocale);\n }\n /**\n * Returns the preferred short date format for the current locale.\n */\n static getPreferredShortDateFormat() {\n /* istanbul ignore next */\n return (moment.localeData().longDateFormat('L') ||\n SkyDateFormatter.defaultShortDateFormat);\n }\n format(date, format) {\n return moment(date.getTime()).format(format);\n }\n getDateFromString(dateString, format, \n /* istanbul ignore next */\n strict = false) {\n let momentValue = moment(dateString, format, strict);\n if (!momentValue.isValid()) {\n momentValue = moment(dateString, 'YYYY-MM-DDThh:mm:ss.SZ', strict);\n }\n return momentValue.toDate();\n }\n dateIsValid(date) {\n return !!(date &&\n date instanceof Date &&\n !isNaN(date.valueOf()) &&\n !isNaN(new Date(date).getDate()));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZS1mb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE1BQU0sT0FBTyxnQkFBZ0I7YUFDWixrQkFBYSxHQUFHLE9BQU8sQ0FBQzthQUV4QiwyQkFBc0IsR0FBRyxZQUFZLENBQUM7SUFFckQ7O09BRUc7SUFDSSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQWM7UUFDcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLDJCQUEyQjtRQUN2QywwQkFBMEI7UUFDMUIsT0FBTyxDQUNMLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO1lBQ3ZDLGdCQUFnQixDQUFDLHNCQUFzQixDQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVNLE1BQU0sQ0FBQyxJQUFVLEVBQUUsTUFBZTtRQUN2QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLGlCQUFpQixDQUN0QixVQUFrQixFQUNsQixNQUFlO0lBQ2YsMEJBQTBCO0lBQzFCLE1BQU0sR0FBRyxLQUFLO1FBRWQsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzNCLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU0sV0FBVyxDQUFDLElBQXNCO1FBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQ1AsSUFBSTtZQUNKLElBQUksWUFBWSxJQUFJO1lBQ3BCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUNqQyxDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuZXhwb3J0IGNsYXNzIFNreURhdGVGb3JtYXR0ZXIge1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0TG9jYWxlID0gJ2VuLVVTJztcblxuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0U2hvcnREYXRlRm9ybWF0ID0gJ01NL0REL1lZWVknO1xuXG4gIC8qKlxuICAgKiBTZXRzIG1vbWVudCdzIGdsb2JhbCBsb2NhbGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNldExvY2FsZShsb2NhbGU6IHN0cmluZyk6IHZvaWQge1xuICAgIG1vbWVudC5sb2NhbGUobG9jYWxlIHx8IFNreURhdGVGb3JtYXR0ZXIuZGVmYXVsdExvY2FsZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJlZmVycmVkIHNob3J0IGRhdGUgZm9ybWF0IGZvciB0aGUgY3VycmVudCBsb2NhbGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdCgpOiBzdHJpbmcge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIChcbiAgICAgIG1vbWVudC5sb2NhbGVEYXRhKCkubG9uZ0RhdGVGb3JtYXQoJ0wnKSB8fFxuICAgICAgU2t5RGF0ZUZvcm1hdHRlci5kZWZhdWx0U2hvcnREYXRlRm9ybWF0XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXQoZGF0ZTogRGF0ZSwgZm9ybWF0Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50KGRhdGUuZ2V0VGltZSgpKS5mb3JtYXQoZm9ybWF0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRlRnJvbVN0cmluZyhcbiAgICBkYXRlU3RyaW5nOiBzdHJpbmcsXG4gICAgZm9ybWF0Pzogc3RyaW5nLFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgc3RyaWN0ID0gZmFsc2UsXG4gICk6IERhdGUge1xuICAgIGxldCBtb21lbnRWYWx1ZSA9IG1vbWVudChkYXRlU3RyaW5nLCBmb3JtYXQsIHN0cmljdCk7XG5cbiAgICBpZiAoIW1vbWVudFZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgbW9tZW50VmFsdWUgPSBtb21lbnQoZGF0ZVN0cmluZywgJ1lZWVktTU0tRERUaGg6bW06c3MuU1onLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIHJldHVybiBtb21lbnRWYWx1ZS50b0RhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBkYXRlSXNWYWxpZChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKFxuICAgICAgZGF0ZSAmJlxuICAgICAgZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiZcbiAgICAgICFpc05hTihkYXRlLnZhbHVlT2YoKSkgJiZcbiAgICAgICFpc05hTihuZXcgRGF0ZShkYXRlKS5nZXREYXRlKCkpXG4gICAgKTtcbiAgfVxufVxuIl19","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation, inject, } from '@angular/core';\nimport { SkyLiveAnnouncerService } from '@skyux/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\nimport { Subject, takeUntil } from 'rxjs';\nimport { SkyDateFormatter } from '../date-formatter';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@skyux/icon\";\nimport * as i3 from \"@skyux/theme\";\nlet nextDatepickerId = 0;\n/**\n * @internal\n */\nexport class SkyDatepickerCalendarInnerComponent {\n constructor() {\n this.selectedDateChange = new EventEmitter(undefined);\n this.calendarModeChange = new EventEmitter();\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 this.activeDate = new Date();\n this.activeDateId = '';\n this.title = '';\n this.minMode = 'day';\n this.maxMode = 'year';\n this.monthColLimit = 3;\n this.yearColLimit = 5;\n this.datepickerMode = 'day';\n this.yearRange = 20;\n this.formatDay = 'DD';\n this.formatMonth = 'MMMM';\n this.formatYear = 'YYYY';\n this.formatDayHeader = 'dd';\n this.formatDayTitle = 'MMMM YYYY';\n this.formatMonthTitle = 'YYYY';\n this.formatDayLabel = 'dddd, MMMM Do YYYY';\n this.formatMonthLabel = 'MMMM YYYY';\n this.formatYearLabel = 'YYYY';\n this.datepickerId = `sky-datepicker-${++nextDatepickerId}`;\n this.stepDay = {};\n this.stepMonth = {};\n this.stepYear = {};\n this.modes = ['day', 'month', 'year'];\n this.dateFormatter = new SkyDateFormatter();\n this.keys = [\n 'enter',\n ' ',\n 'spacebar',\n 'pageup',\n 'pagedown',\n 'end',\n 'home',\n 'arrowleft',\n 'arrowup',\n 'arrowright',\n 'arrowdown',\n ];\n this.#ngUnsubscribe = new Subject();\n this.#_startingDay = 0;\n this.#resourcesSvc = inject(SkyLibResourcesService);\n this.#liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n }\n set startingDay(value) {\n this.#_startingDay = value || 0;\n }\n get startingDay() {\n return this.#_startingDay;\n }\n set selectedDate(value) {\n if (value && this.dateFormatter.dateIsValid(value)) {\n this.#_selectedDate = value;\n this.activeDate = value;\n }\n else {\n this.#_selectedDate = undefined;\n this.activeDate = new Date();\n }\n }\n get selectedDate() {\n return this.#_selectedDate;\n }\n #ngUnsubscribe;\n #prevDay;\n #nextDay;\n #prevMonth;\n #nextMonth;\n #prevYear;\n #nextYear;\n #_selectedDate;\n #_startingDay;\n #resourcesSvc;\n #liveAnnouncerSvc;\n ngOnInit() {\n if (this.selectedDate) {\n this.activeDate = new Date(this.selectedDate);\n }\n else {\n this.activeDate = this.startAtDate ?? new Date();\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 this.refreshView();\n });\n }\n ngOnChanges(changes) {\n this.refreshView();\n }\n ngOnDestroy() {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n setCompareHandler(handler, type) {\n if (type === 'day') {\n this.compareHandlerDay = handler;\n }\n if (type === 'month') {\n this.compareHandlerMonth = handler;\n }\n if (type === 'year') {\n this.compareHandlerYear = handler;\n }\n }\n compare(date1, date2) {\n if (date1 === undefined || date2 === undefined) {\n return undefined;\n }\n if (this.datepickerMode === 'day' && this.compareHandlerDay) {\n return this.compareHandlerDay(date1, date2);\n }\n if (this.datepickerMode === 'month' && this.compareHandlerMonth) {\n return this.compareHandlerMonth(date1, date2);\n }\n /* istanbul ignore else */\n /* sanity check */\n if (this.datepickerMode === 'year' && this.compareHandlerYear) {\n return this.compareHandlerYear(date1, date2);\n }\n /* istanbul ignore next */\n return undefined;\n }\n setRefreshViewHandler(handler, type) {\n if (type === 'day') {\n this.refreshViewHandlerDay = handler;\n }\n if (type === 'month') {\n this.refreshViewHandlerMonth = handler;\n }\n if (type === 'year') {\n this.refreshViewHandlerYear = handler;\n }\n }\n refreshView() {\n if (this.datepickerMode === 'day' && this.refreshViewHandlerDay) {\n this.title = this.refreshViewHandlerDay();\n this.previousLabel = this.#prevDay;\n this.nextLabel = this.#nextDay;\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 if (this.datepickerMode === 'year' && this.refreshViewHandlerYear) {\n this.title = this.refreshViewHandlerYear();\n this.previousLabel = this.#prevYear;\n this.nextLabel = this.#nextYear;\n }\n }\n setKeydownHandler(handler, type) {\n if (type === 'day') {\n this.handleKeydownDay = handler;\n }\n if (type === 'month') {\n this.handleKeydownMonth = handler;\n }\n if (type === 'year') {\n this.handleKeydownYear = handler;\n }\n }\n handleKeydown(key, event) {\n if (this.datepickerMode === 'day' && this.handleKeydownDay) {\n this.handleKeydownDay(key, event);\n }\n if (this.datepickerMode === 'month' && this.handleKeydownMonth) {\n this.handleKeydownMonth(key, event);\n }\n if (this.datepickerMode === 'year' && this.handleKeydownYear) {\n this.handleKeydownYear(key, event);\n }\n }\n dateFilter(date, format) {\n return this.dateFormatter.format(date, format);\n }\n isActive(dateObject) {\n if (this.compare(dateObject.date, this.activeDate) === 0) {\n this.activeDateId = dateObject.uid;\n return true;\n }\n return false;\n }\n onKeydown(event) {\n const key = event.key?.toLowerCase();\n if (!this.keys.includes(key) || event.shiftKey) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n if (key === 'enter' || key === 'spacebar' || key === ' ') {\n if (this.isDisabled(this.activeDate)) {\n return;\n }\n this.select(this.activeDate);\n }\n else if (event.ctrlKey && (key === 'arrowup' || key === 'arrowdown')) {\n this.toggleMode(key === 'arrowup' ? 1 : -1);\n }\n else {\n this.handleKeydown(key, event);\n this.refreshView();\n }\n }\n createDateObject(date, format, isSecondary, id) {\n const customDateMatch = this.#getCustomDate(date);\n const dateObject = {\n date: new Date(date.getFullYear(), date.getMonth(), date.getDate()),\n label: this.dateFilter(date, format),\n selected: !!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 return dateObject;\n }\n createCalendarRows(dates, size) {\n const rows = [];\n while (dates.length > 0) {\n rows.push(dates.splice(0, size));\n }\n return rows;\n }\n /*\n This is ensures that no strangeness happens when converting a date to local time.\n */\n fixTimeZone(date) {\n const newDate = new Date(date);\n newDate.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n return newDate;\n }\n selectCalendar(event, date, closePicker = false) {\n if (!closePicker) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.select(date);\n }\n select(date, isManual = true) {\n this.activeDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());\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 }\n else {\n this.datepickerMode =\n this.modes[this.modes.indexOf(this.datepickerMode) - 1];\n this.calendarModeChange.emit(this.datepickerMode);\n }\n this.refreshView();\n }\n moveCalendar(event, direction) {\n event.preventDefault();\n event.stopPropagation();\n this.move(direction);\n }\n move(direction) {\n let expectedStep;\n if (this.datepickerMode === 'day') {\n expectedStep = this.stepDay;\n }\n if (this.datepickerMode === 'month') {\n expectedStep = this.stepMonth;\n }\n if (this.datepickerMode === 'year') {\n expectedStep = this.stepYear;\n }\n /* istanbul ignore else */\n /* sanity check */\n if (expectedStep) {\n const year = this.activeDate.getFullYear() + direction * (expectedStep.years || 0);\n const month = this.activeDate.getMonth() + direction * (expectedStep.months || 0);\n this.activeDate = new Date(year, month, 1);\n this.refreshView();\n }\n }\n toggleModeCalendar(event) {\n event.preventDefault();\n event.stopPropagation();\n this.toggleMode(1);\n }\n toggleMode(direction) {\n /*istanbul ignore next */\n direction = direction || 1;\n /* istanbul ignore else */\n /* sanity check */\n if (!(direction === 1 && this.datepickerMode === this.maxMode) &&\n !(this.datepickerMode === this.minMode && direction === -1)) {\n this.datepickerMode =\n this.modes[this.modes.indexOf(this.datepickerMode) + direction];\n this.calendarModeChange.emit(this.datepickerMode);\n this.refreshView();\n }\n }\n announceDate(date, format) {\n const caption = this.dateFilter(date, format);\n this.#liveAnnouncerSvc.announce(caption);\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 isDisabled(date) {\n const customDate = this.#getCustomDate(date);\n const minDateCompare = this.compare(date, this.minDate);\n const maxDateCompare = this.compare(date, this.maxDate);\n return ((minDateCompare !== undefined && minDateCompare < 0) ||\n (maxDateCompare !== undefined && maxDateCompare > 0) ||\n !!customDate?.disabled);\n }\n #getCustomDate(date) {\n if (this.customDates) {\n return this.customDates.find((customDate) => {\n return customDate.date.getTime() === date.getTime();\n });\n }\n return undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerCalendarInnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", type: SkyDatepickerCalendarInnerComponent, isStandalone: true, selector: \"sky-datepicker-inner\", inputs: { customDates: \"customDates\", startingDay: \"startingDay\", minDate: \"minDate\", maxDate: \"maxDate\", startAtDate: \"startAtDate\", selectedDate: \"selectedDate\" }, outputs: { selectedDateChange: \"selectedDateChange\", calendarModeChange: \"calendarModeChange\" }, usesOnChanges: true, ngImport: i0, template: \"@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-datepicker-btn-previous\\\"\\n [attr.aria-label]=\\\"previousLabel\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-btn-default sky-btn-sm': 'default',\\n 'sky-btn-icon-borderless': 'modern'\\n }\\\"\\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-datepicker-calendar-title\\\"\\n [id]=\\\"datepickerId + '-title'\\\"\\n [disabled]=\\\"datepickerMode === maxMode\\\"\\n [ngClass]=\\\"{\\n 'sky-btn-disabled': datepickerMode === maxMode\\n }\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-btn-default sky-btn-sm': 'default',\\n 'sky-btn-link': 'modern'\\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-datepicker-btn-next\\\"\\n [attr.aria-label]=\\\"nextLabel\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-btn-default sky-btn-sm': 'default',\\n 'sky-btn-icon-borderless': 'modern'\\n }\\\"\\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\", styles: [\".sky-datepicker-calendar-inner:not(.sky-theme-modern *){--sky-override-button-box-shadow: none;--sky-override-button-box-shadow-focus: none;--sky-override-chevron-color: #212327;--sky-override-datepicker-background-color: #ffffff;--sky-override-datepicker-border: 1px solid #e2e3e4;--sky-override-datepicker-border-color-hover: #eeeeef;--sky-override-datepicker-border-radius: 5px;--sky-override-datepicker-button-background-color: #ffffff;--sky-override-datepicker-button-background-color-active: #eeeeef;--sky-override-datepicker-button-background-color-disabled: #ffffff;--sky-override-datepicker-button-background-color-hover: #eeeeef;--sky-override-datepicker-button-border: 2px solid #ffffff;--sky-override-datepicker-button-selected-background: #c1e8fb;--sky-override-datepicker-button-selected-border: 2px solid #00b4f1;--sky-override-datepicker-calendar-top-padding: 0;--sky-override-datepicker-day-btn-font-size: 12px;--sky-override-datepicker-day-btn-line-height: 1.5;--sky-override-datepicker-day-button-padding: 5px 10px;--sky-override-datepicker-day-button-size: 100%;--sky-override-datepicker-focus-outline: auto;--sky-override-datepicker-horizontal-padding: 0;--sky-override-datepicker-month-year-button-padding: 6px 12px;--sky-override-datepicker-month-year-button-width: auto;--sky-override-datepicker-nav-button-padding: 5px 10px;--sky-override-datepicker-nav-space: 0;--sky-override-datepicker-secondary-date-color: #686c73;--sky-override-datepicker-table-border-spacing: 2px;--sky-override-datepicker-td-padding: 1px;--sky-override-datepicker-title-font-style: 700;--sky-override-datepicker-title-font-weight: 12px;--sky-override-datepicker-vertical-padding: 0;--sky-override-datepicker-weekday-font-size: 12px;--sky-override-datepicker-weekday-font-weight: 900}.sky-datepicker-calendar-inner{border-radius:var(--sky-override-datepicker-border-radius, var(--sky-border-radius-s));background-color:var(--sky-override-datepicker-background-color, var(--sky-color-background-container-menu));border:var(--sky-override-datepicker-border)}.sky-datepicker-calendar-inner .sky-datepicker-calendar-header{width:100%;display:flex;padding:var(--sky-override-datepicker-vertical-padding, var(--sky-comp-datepicker-header-space-inset-top)) var(--sky-override-datepicker-horizontal-padding, var(--sky-comp-datepicker-header-space-inset-right)) 0 var(--sky-override-datepicker-horizontal-padding, var(--sky-comp-datepicker-header-space-inset-left))}.sky-datepicker-calendar-inner .sky-datepicker-calendar-table-container{padding:var(--sky-override-datepicker-calendar-top-padding, var(--sky-comp-datepicker-calendar-space-inset-top)) var(--sky-override-datepicker-horizontal-padding, var(--sky-comp-datepicker-calendar-space-inset-right)) var(--sky-override-datepicker-vertical-padding, var(--sky-comp-datepicker-calendar-space-inset-bottom)) var(--sky-override-datepicker-horizontal-padding, var(--sky-comp-datepicker-calendar-space-inset-left))}.sky-datepicker-calendar-inner .sky-datepicker-calendar-table-container:focus-visible{outline:var(--sky-override-datepicker-focus-outline, none)}.sky-datepicker-calendar-inner .sky-datepicker-calendar-table-container:focus-visible .sky-btn.sky-btn-active{border:var(--sky-override-datepicker-button-selected-border, none);box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-active) var(--sky-color-border-action-tertiary-active))}.sky-datepicker-calendar-inner .sky-datepicker-btn-previous{margin-right:var(--sky-override-datepicker-nav-space, var(--sky-space-gap-action_group-s));padding:var(--sky-override-datepicker-nav-button-padding, var(--sky-comp-button-borderless-space-inset-top) var(--sky-comp-button-borderless-space-inset-right) var(--sky-comp-button-borderless-space-inset-bottom) var(--sky-comp-button-borderless-space-inset-left));height:auto;width:auto}.sky-datepicker-calendar-inner .sky-datepicker-btn-next{margin-left:var(--sky-override-datepicker-nav-space, var(--sky-space-gap-action_group-s));padding:var(--sky-override-datepicker-nav-button-padding, var(--sky-comp-button-borderless-space-inset-top) var(--sky-comp-button-borderless-space-inset-right) var(--sky-comp-button-borderless-space-inset-bottom) var(--sky-comp-button-borderless-space-inset-left));height:auto;width:auto}.sky-datepicker-calendar-inner .sky-datepicker-calendar-title{font-size:var(--sky-override-datepicker-title-font-weight, var(--sky-font-size-body-m));font-weight:var(--sky-override-datepicker-title-font-style, var(--sky-font-style-default));padding:var(--sky-override-datepicker-nav-button-padding, var(--sky-comp-button-borderless-space-inset-top) var(--sky-comp-button-borderless-space-inset-right) var(--sky-comp-button-borderless-space-inset-bottom) var(--sky-comp-button-borderless-space-inset-left))}.sky-datepicker-calendar-inner .sky-btn-link{color:var(--sky-color-text-default);padding:var(--sky-override-datepicker-nav-button-padding, var(--sky-comp-button-borderless-space-inset-top) var(--sky-comp-button-borderless-space-inset-right) var(--sky-comp-button-borderless-space-inset-bottom) var(--sky-comp-button-borderless-space-inset-left))}.sky-datepicker-calendar-inner .sky-btn-default{background-color:var(--sky-override-datepicker-button-background-color, var(--sky-color-background-action-tertiary-base));border:var(--sky-override-datepicker-button-border, none);box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-base) var(--sky-color-border-action-tertiary-base))}.sky-datepicker-calendar-inner .sky-btn-default:hover{background-color:var(--sky-override-datepicker-button-background-color-hover, var(--sky-color-background-action-tertiary-hover));border-color:var(--sky-override-datepicker-border-color-hover);box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-hover) var(--sky-color-border-action-tertiary-hover))}.sky-datepicker-calendar-inner .sky-btn-default:active{background-color:var(--sky-override-datepicker-button-background-color-active, var(--sky-color-background-action-tertiary-active));box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-active) var(--sky-color-border-action-tertiary-active))}.sky-datepicker-calendar-inner .sky-btn-default:focus-visible:not(:active){box-shadow:var(--sky-override-button-box-shadow-focus, inset 0 0 0 var(--sky-border-width-action-focus) var(--sky-color-border-action-tertiary-focus))}.sky-datepicker-calendar-inner .sky-btn-default.sky-btn.sky-datepicker-btn-date.sky-btn-disabled{background-color:var(--sky-override-datepicker-button-background-color-disabled, var(--sky-color-background-action-tertiary-disabled));box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-disabled) var(--sky-color-border-action-tertiary-disabled))}.sky-datepicker-calendar-inner .sky-datepicker-btn-date{min-width:100%}.sky-datepicker-calendar-inner .sky-btn-sm.sky-datepicker-btn-date{font-size:var(--sky-override-datepicker-day-btn-font-size, var(--sky-font-size-body-m));height:var(--sky-override-datepicker-day-button-size, var(--sky-size-picker_btn));line-height:var(--sky-override-datepicker-day-btn-line-height, var(--sky-font-line_height-body-m));min-width:var(--sky-override-datepicker-day-button-size, 0);padding:var(--sky-override-datepicker-day-button-padding, 0);width:var(--sky-override-datepicker-day-button-size, var(--sky-size-picker_btn))}.sky-datepicker-calendar-inner .sky-datepicker-center{text-align:center}.sky-datepicker-calendar-inner .sky-btn.sky-btn-default.sky-datepicker-btn-selected,.sky-datepicker-calendar-inner .sky-btn.sky-btn-default.sky-datepicker-btn-selected:hover{background-color:var(--sky-override-datepicker-button-selected-background, var(--sky-color-background-selected-soft));border:var(--sky-override-datepicker-button-selected-border);box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-selected-s) var(--sky-color-border-selected))}.sky-datepicker-calendar-inner .sky-btn.sky-btn-active{box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-active) var(--sky-color-border-action-tertiary-active));background-color:var(--sky-override-datepicker-button-background-color-active, var(--sky-color-background-action-tertiary-active))}.sky-datepicker-calendar-inner .sky-datepicker-secondary{color:var(--sky-override-datepicker-secondary-date-color, var(--sky-color-text-deemphasized))}.sky-datepicker-calendar-inner .sky-datepicker-calendar-title{width:100%}.sky-datepicker-calendar-inner .sky-datepicker-header-left{text-align:left}.sky-datepicker-calendar-inner .sky-datepicker-header-center{display:flex;width:100%}.sky-datepicker-calendar-inner .sky-datepicker-header-right{text-align:right}.sky-datepicker-calendar-inner table{border-spacing:var(--sky-override-datepicker-table-border-spacing, var(--sky-space-gap-action_group-s))}.sky-datepicker-calendar-inner table td{padding:var(--sky-override-datepicker-td-padding, 0)}.sky-datepicker-calendar-inner table th{padding-bottom:var(--sky-override-datepicker-td-padding, calc(var(--sky-space-gap-text_action-xs) - var(--sky-space-gap-action_group-s)))}.sky-datepicker-chevron{color:var(--sky-override-chevron-color, var(--sky-color-icon-deemphasized))}sky-yearpicker .sky-btn.sky-btn-default,sky-monthpicker .sky-btn.sky-btn-default{padding:var(--sky-override-datepicker-month-year-button-padding, var(--sky-comp-datepicker-m_y_button-space-inset-top) var(--sky-comp-datepicker-m_y_button-space-inset-right) var(--sky-comp-datepicker-m_y_button-space-inset-bottom) var(--sky-comp-datepicker-m_y_button-space-inset-left))}sky-yearpicker td{width:var(--sky-override-datepicker-month-year-button-width, 20%)}sky-monthpicker td{width:var(--sky-override-datepicker-month-year-button-width, 33%)}.sky-datepicker-weekday-text{font-size:var(--sky-override-datepicker-weekday-font-size, var(--sky-font-size-body-m));font-weight:var(--sky-override-datepicker-weekday-font-weight, var(--sky-font-style-emphasized))}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"ngmodule\", type: SkyIconModule }, { kind: \"component\", type: i2.λ1, selector: \"sky-icon\", inputs: [\"iconName\", \"variant\", \"iconSize\"] }, { kind: \"ngmodule\", type: SkyThemeModule }, { kind: \"directive\", type: i3.λ2, selector: \"[skyThemeClass]\", inputs: [\"class\", \"skyThemeClass\"] }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerCalendarInnerComponent, decorators: [{\n type: Component,\n args: [{ encapsulation: ViewEncapsulation.None, imports: [CommonModule, SkyIconModule, SkyThemeModule], selector: 'sky-datepicker-inner', template: \"@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-datepicker-btn-previous\\\"\\n [attr.aria-label]=\\\"previousLabel\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-btn-default sky-btn-sm': 'default',\\n 'sky-btn-icon-borderless': 'modern'\\n }\\\"\\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-datepicker-calendar-title\\\"\\n [id]=\\\"datepickerId + '-title'\\\"\\n [disabled]=\\\"datepickerMode === maxMode\\\"\\n [ngClass]=\\\"{\\n 'sky-btn-disabled': datepickerMode === maxMode\\n }\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-btn-default sky-btn-sm': 'default',\\n 'sky-btn-link': 'modern'\\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-datepicker-btn-next\\\"\\n [attr.aria-label]=\\\"nextLabel\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-btn-default sky-btn-sm': 'default',\\n 'sky-btn-icon-borderless': 'modern'\\n }\\\"\\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\", styles: [\".sky-datepicker-calendar-inner:not(.sky-theme-modern *){--sky-override-button-box-shadow: none;--sky-override-button-box-shadow-focus: none;--sky-override-chevron-color: #212327;--sky-override-datepicker-background-color: #ffffff;--sky-override-datepicker-border: 1px solid #e2e3e4;--sky-override-datepicker-border-color-hover: #eeeeef;--sky-override-datepicker-border-radius: 5px;--sky-override-datepicker-button-background-color: #ffffff;--sky-override-datepicker-button-background-color-active: #eeeeef;--sky-override-datepicker-button-background-color-disabled: #ffffff;--sky-override-datepicker-button-background-color-hover: #eeeeef;--sky-override-datepicker-button-border: 2px solid #ffffff;--sky-override-datepicker-button-selected-background: #c1e8fb;--sky-override-datepicker-button-selected-border: 2px solid #00b4f1;--sky-override-datepicker-calendar-top-padding: 0;--sky-override-datepicker-day-btn-font-size: 12px;--sky-override-datepicker-day-btn-line-height: 1.5;--sky-override-datepicker-day-button-padding: 5px 10px;--sky-override-datepicker-day-button-size: 100%;--sky-override-datepicker-focus-outline: auto;--sky-override-datepicker-horizontal-padding: 0;--sky-override-datepicker-month-year-button-padding: 6px 12px;--sky-override-datepicker-month-year-button-width: auto;--sky-override-datepicker-nav-button-padding: 5px 10px;--sky-override-datepicker-nav-space: 0;--sky-override-datepicker-secondary-date-color: #686c73;--sky-override-datepicker-table-border-spacing: 2px;--sky-override-datepicker-td-padding: 1px;--sky-override-datepicker-title-font-style: 700;--sky-override-datepicker-title-font-weight: 12px;--sky-override-datepicker-vertical-padding: 0;--sky-override-datepicker-weekday-font-size: 12px;--sky-override-datepicker-weekday-font-weight: 900}.sky-datepicker-calendar-inner{border-radius:var(--sky-override-datepicker-border-radius, var(--sky-border-radius-s));background-color:var(--sky-override-datepicker-background-color, var(--sky-color-background-container-menu));border:var(--sky-override-datepicker-border)}.sky-datepicker-calendar-inner .sky-datepicker-calendar-header{width:100%;display:flex;padding:var(--sky-override-datepicker-vertical-padding, var(--sky-comp-datepicker-header-space-inset-top)) var(--sky-override-datepicker-horizontal-padding, var(--sky-comp-datepicker-header-space-inset-right)) 0 var(--sky-override-datepicker-horizontal-padding, var(--sky-comp-datepicker-header-space-inset-left))}.sky-datepicker-calendar-inner .sky-datepicker-calendar-table-container{padding:var(--sky-override-datepicker-calendar-top-padding, var(--sky-comp-datepicker-calendar-space-inset-top)) var(--sky-override-datepicker-horizontal-padding, var(--sky-comp-datepicker-calendar-space-inset-right)) var(--sky-override-datepicker-vertical-padding, var(--sky-comp-datepicker-calendar-space-inset-bottom)) var(--sky-override-datepicker-horizontal-padding, var(--sky-comp-datepicker-calendar-space-inset-left))}.sky-datepicker-calendar-inner .sky-datepicker-calendar-table-container:focus-visible{outline:var(--sky-override-datepicker-focus-outline, none)}.sky-datepicker-calendar-inner .sky-datepicker-calendar-table-container:focus-visible .sky-btn.sky-btn-active{border:var(--sky-override-datepicker-button-selected-border, none);box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-active) var(--sky-color-border-action-tertiary-active))}.sky-datepicker-calendar-inner .sky-datepicker-btn-previous{margin-right:var(--sky-override-datepicker-nav-space, var(--sky-space-gap-action_group-s));padding:var(--sky-override-datepicker-nav-button-padding, var(--sky-comp-button-borderless-space-inset-top) var(--sky-comp-button-borderless-space-inset-right) var(--sky-comp-button-borderless-space-inset-bottom) var(--sky-comp-button-borderless-space-inset-left));height:auto;width:auto}.sky-datepicker-calendar-inner .sky-datepicker-btn-next{margin-left:var(--sky-override-datepicker-nav-space, var(--sky-space-gap-action_group-s));padding:var(--sky-override-datepicker-nav-button-padding, var(--sky-comp-button-borderless-space-inset-top) var(--sky-comp-button-borderless-space-inset-right) var(--sky-comp-button-borderless-space-inset-bottom) var(--sky-comp-button-borderless-space-inset-left));height:auto;width:auto}.sky-datepicker-calendar-inner .sky-datepicker-calendar-title{font-size:var(--sky-override-datepicker-title-font-weight, var(--sky-font-size-body-m));font-weight:var(--sky-override-datepicker-title-font-style, var(--sky-font-style-default));padding:var(--sky-override-datepicker-nav-button-padding, var(--sky-comp-button-borderless-space-inset-top) var(--sky-comp-button-borderless-space-inset-right) var(--sky-comp-button-borderless-space-inset-bottom) var(--sky-comp-button-borderless-space-inset-left))}.sky-datepicker-calendar-inner .sky-btn-link{color:var(--sky-color-text-default);padding:var(--sky-override-datepicker-nav-button-padding, var(--sky-comp-button-borderless-space-inset-top) var(--sky-comp-button-borderless-space-inset-right) var(--sky-comp-button-borderless-space-inset-bottom) var(--sky-comp-button-borderless-space-inset-left))}.sky-datepicker-calendar-inner .sky-btn-default{background-color:var(--sky-override-datepicker-button-background-color, var(--sky-color-background-action-tertiary-base));border:var(--sky-override-datepicker-button-border, none);box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-base) var(--sky-color-border-action-tertiary-base))}.sky-datepicker-calendar-inner .sky-btn-default:hover{background-color:var(--sky-override-datepicker-button-background-color-hover, var(--sky-color-background-action-tertiary-hover));border-color:var(--sky-override-datepicker-border-color-hover);box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-hover) var(--sky-color-border-action-tertiary-hover))}.sky-datepicker-calendar-inner .sky-btn-default:active{background-color:var(--sky-override-datepicker-button-background-color-active, var(--sky-color-background-action-tertiary-active));box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-active) var(--sky-color-border-action-tertiary-active))}.sky-datepicker-calendar-inner .sky-btn-default:focus-visible:not(:active){box-shadow:var(--sky-override-button-box-shadow-focus, inset 0 0 0 var(--sky-border-width-action-focus) var(--sky-color-border-action-tertiary-focus))}.sky-datepicker-calendar-inner .sky-btn-default.sky-btn.sky-datepicker-btn-date.sky-btn-disabled{background-color:var(--sky-override-datepicker-button-background-color-disabled, var(--sky-color-background-action-tertiary-disabled));box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-disabled) var(--sky-color-border-action-tertiary-disabled))}.sky-datepicker-calendar-inner .sky-datepicker-btn-date{min-width:100%}.sky-datepicker-calendar-inner .sky-btn-sm.sky-datepicker-btn-date{font-size:var(--sky-override-datepicker-day-btn-font-size, var(--sky-font-size-body-m));height:var(--sky-override-datepicker-day-button-size, var(--sky-size-picker_btn));line-height:var(--sky-override-datepicker-day-btn-line-height, var(--sky-font-line_height-body-m));min-width:var(--sky-override-datepicker-day-button-size, 0);padding:var(--sky-override-datepicker-day-button-padding, 0);width:var(--sky-override-datepicker-day-button-size, var(--sky-size-picker_btn))}.sky-datepicker-calendar-inner .sky-datepicker-center{text-align:center}.sky-datepicker-calendar-inner .sky-btn.sky-btn-default.sky-datepicker-btn-selected,.sky-datepicker-calendar-inner .sky-btn.sky-btn-default.sky-datepicker-btn-selected:hover{background-color:var(--sky-override-datepicker-button-selected-background, var(--sky-color-background-selected-soft));border:var(--sky-override-datepicker-button-selected-border);box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-selected-s) var(--sky-color-border-selected))}.sky-datepicker-calendar-inner .sky-btn.sky-btn-active{box-shadow:var(--sky-override-button-box-shadow, inset 0 0 0 var(--sky-border-width-action-active) var(--sky-color-border-action-tertiary-active));background-color:var(--sky-override-datepicker-button-background-color-active, var(--sky-color-background-action-tertiary-active))}.sky-datepicker-calendar-inner .sky-datepicker-secondary{color:var(--sky-override-datepicker-secondary-date-color, var(--sky-color-text-deemphasized))}.sky-datepicker-calendar-inner .sky-datepicker-calendar-title{width:100%}.sky-datepicker-calendar-inner .sky-datepicker-header-left{text-align:left}.sky-datepicker-calendar-inner .sky-datepicker-header-center{display:flex;width:100%}.sky-datepicker-calendar-inner .sky-datepicker-header-right{text-align:right}.sky-datepicker-calendar-inner table{border-spacing:var(--sky-override-datepicker-table-border-spacing, var(--sky-space-gap-action_group-s))}.sky-datepicker-calendar-inner table td{padding:var(--sky-override-datepicker-td-padding, 0)}.sky-datepicker-calendar-inner table th{padding-bottom:var(--sky-override-datepicker-td-padding, calc(var(--sky-space-gap-text_action-xs) - var(--sky-space-gap-action_group-s)))}.sky-datepicker-chevron{color:var(--sky-override-chevron-color, var(--sky-color-icon-deemphasized))}sky-yearpicker .sky-btn.sky-btn-default,sky-monthpicker .sky-btn.sky-btn-default{padding:var(--sky-override-datepicker-month-year-button-padding, var(--sky-comp-datepicker-m_y_button-space-inset-top) var(--sky-comp-datepicker-m_y_button-space-inset-right) var(--sky-comp-datepicker-m_y_button-space-inset-bottom) var(--sky-comp-datepicker-m_y_button-space-inset-left))}sky-yearpicker td{width:var(--sky-override-datepicker-month-year-button-width, 20%)}sky-monthpicker td{width:var(--sky-override-datepicker-month-year-button-width, 33%)}.sky-datepicker-weekday-text{font-size:var(--sky-override-datepicker-weekday-font-size, var(--sky-font-size-body-m));font-weight:var(--sky-override-datepicker-weekday-font-weight, var(--sky-font-style-emphasized))}\\n\"] }]\n }], propDecorators: { customDates: [{\n type: Input\n }], startingDay: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], startAtDate: [{\n type: Input\n }], selectedDate: [{\n type: Input\n }], selectedDateChange: [{\n type: Output\n }], calendarModeChange: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvY2FsZW5kYXIvZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvY2FsZW5kYXIvZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7OztBQVFyRCxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUV6Qjs7R0FFRztBQVFILE1BQU0sT0FBTyxtQ0FBbUM7SUFQaEQ7UUErQ1MsdUJBQWtCLEdBQXVCLElBQUksWUFBWSxDQUM5RCxTQUFTLENBQ1YsQ0FBQztR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LG1DQUFtQyw0V0N4Q2hELHN6REFxREEscTVURGxCWSxZQUFZLDRIQUFFLGFBQWEscUlBQUUsY0FBYzs7NEZBSzFDLG1DQUFtQztrQkFQL0MsU0FBUztvQ0FDTyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUMsWUFDNUMsc0JBQXNCOztzQkFPL0IsS0FBSzs7c0JBR0wsS0FBSzs7c0JBU0wsS0FBSzs7c0JBR0wsS0FBSzs7c0JBR0wsS0FBSzs7c0JBR0wsS0FBSzs7c0JBZUwsTUFBTTs7c0JBS04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lMaXZlQW5ub3VuY2VyU2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5pbXBvcnQgeyBTa3lJY29uTW9kdWxlIH0gZnJvbSAnQHNreXV4L2ljb24nO1xuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5RGF0ZUZvcm1hdHRlciB9IGZyb20gJy4uL2RhdGUtZm9ybWF0dGVyJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDdXN0b21EYXRlIH0gZnJvbSAnLi4vZGF0ZXBpY2tlci1jdXN0b20tZGF0ZSc7XG5cbmltcG9ydCB7IFNreURheVBpY2tlckNvbnRleHQgfSBmcm9tICcuL2RheXBpY2tlci1jb250ZXh0JztcblxudHlwZSBEYXRlQ29tcGFyYXRvciA9IChkYXRlMTogRGF0ZSwgZGF0ZTI6IERhdGUpID0+IG51bWJlciB8IHVuZGVmaW5lZDtcbnR5cGUgS2V5Ym9hcmRFdmVudEhhbmRsZXIgPSAoa2V5OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkO1xuXG5sZXQgbmV4dERhdGVwaWNrZXJJZCA9IDA7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTa3lJY29uTW9kdWxlLCBTa3lUaGVtZU1vZHVsZV0sXG4gIHNlbGVjdG9yOiAnc2t5LWRhdGVwaWNrZXItaW5uZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRlcGlja2VyLWNhbGVuZGFyLWlubmVyLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzXG57XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21EYXRlczogU2t5RGF0ZXBpY2tlckN1c3RvbURhdGVbXSB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0YXJ0aW5nRGF5KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc3RhcnRpbmdEYXkgPSB2YWx1ZSB8fCAwO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGFydGluZ0RheSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfc3RhcnRpbmdEYXk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWluRGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4RGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3RhcnRBdERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZERhdGUodmFsdWU6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgJiYgdGhpcy5kYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgdGhpcy4jX3NlbGVjdGVkRGF0ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI19zZWxlY3RlZERhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWREYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfc2VsZWN0ZWREYXRlO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZERhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oXG4gICAgdW5kZWZpbmVkLFxuICApO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2FsZW5kYXJNb2RlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8vIFRPRE86IGBhY3RpdmVEYXRlYCBpcyB2ZXJ5IHNpbWlsYXIgdG8gYHNlbGVjdGVkRGF0ZWAgYW5kIGF0IHRoZSB2ZXJ5IGxlYXN0IHNob3VsZCBiZSBhYmxlIHRvIGJlIHVuZGVmaW5lZC4gSG93ZXZlciwgdGhpcyB3b3VsZCB0YWtlIGNvbnNpZGVyYWJsZSByZWZhY3RvcmluZyB0byBkbyBhbmQgdGh1cyBoYXMgYmVlbiBkZWZlcnJlZC5cbiAgcHVibGljIGFjdGl2ZURhdGUgPSBuZXcgRGF0ZSgpO1xuICBwdWJsaWMgYWN0aXZlRGF0ZUlkID0gJyc7XG5cbiAgcHVibGljIHRpdGxlID0gJyc7XG5cbiAgcHVibGljIG1pbk1vZGUgPSAnZGF5JztcbiAgcHVibGljIG1heE1vZGUgPSAneWVhcic7XG4gIHB1YmxpYyBtb250aENvbExpbWl0ID0gMztcbiAgcHVibGljIHllYXJDb2xMaW1pdCA9IDU7XG4gIHB1YmxpYyBkYXRlcGlja2VyTW9kZSA9ICdkYXknO1xuICBwdWJsaWMgeWVhclJhbmdlID0gMjA7XG5cbiAgcHVibGljIGZvcm1hdERheSA9ICdERCc7XG4gIHB1YmxpYyBmb3JtYXRNb250aCA9ICdNTU1NJztcbiAgcHVibGljIGZvcm1hdFllYXIgPSAnWVlZWSc7XG4gIHB1YmxpYyBmb3JtYXREYXlIZWFkZXIgPSAnZGQnO1xuICBwdWJsaWMgZm9ybWF0RGF5VGl0bGUgPSAnTU1NTSBZWVlZJztcbiAgcHVibGljIGZvcm1hdE1vbnRoVGl0bGUgPSAnWVlZWSc7XG4gIHB1YmxpYyBmb3JtYXREYXlMYWJlbCA9ICdkZGRkLCBNTU1NIERvIFlZWVknO1xuICBwdWJsaWMgZm9ybWF0TW9udGhMYWJlbCA9ICdNTU1NIFlZWVknO1xuICBwdWJsaWMgZm9ybWF0WWVhckxhYmVsID0gJ1lZWVknO1xuXG4gIHB1YmxpYyBwcmV2aW91c0xhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBuZXh0TGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZGF0ZXBpY2tlcklkID0gYHNreS1kYXRlcGlja2VyLSR7KytuZXh0RGF0ZXBpY2tlcklkfWA7XG5cbiAgcHVibGljIHN0ZXBEYXk6IGFueSA9IHt9O1xuICBwdWJsaWMgc3RlcE1vbnRoOiBhbnkgPSB7fTtcbiAgcHVibGljIHN0ZXBZZWFyOiBhbnkgPSB7fTtcblxuICBwcm90ZWN0ZWQgbW9kZXM6IHN0cmluZ1tdID0gWydkYXknLCAnbW9udGgnLCAneWVhciddO1xuICBwcm90ZWN0ZWQgZGF0ZUZvcm1hdHRlcjogU2t5RGF0ZUZvcm1hdHRlciA9IG5ldyBTa3lEYXRlRm9ybWF0dGVyKCk7XG5cbiAgcHVibGljIHJlZnJlc2hWaWV3SGFuZGxlckRheTogKCgpID0+IHN0cmluZykgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBjb21wYXJlSGFuZGxlckRheTogRGF0ZUNvbXBhcmF0b3IgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWZyZXNoVmlld0hhbmRsZXJNb250aDogKCgpID0+IHN0cmluZykgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBjb21wYXJlSGFuZGxlck1vbnRoOiBEYXRlQ29tcGFyYXRvciB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHJlZnJlc2hWaWV3SGFuZGxlclllYXI6ICgoKSA9PiBzdHJpbmcpIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgY29tcGFyZUhhbmRsZXJZZWFyOiBEYXRlQ29tcGFyYXRvciB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgaGFuZGxlS2V5ZG93bkRheTogS2V5Ym9hcmRFdmVudEhhbmRsZXIgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBoYW5kbGVLZXlkb3duTW9udGg6IEtleWJvYXJkRXZlbnRIYW5kbGVyIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgaGFuZGxlS2V5ZG93blllYXI6IEtleWJvYXJkRXZlbnRIYW5kbGVyIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBrZXlzID0gW1xuICAgICdlbnRlcicsXG4gICAgJyAnLFxuICAgICdzcGFjZWJhcicsXG4gICAgJ3BhZ2V1cCcsXG4gICAgJ3BhZ2Vkb3duJyxcbiAgICAnZW5kJyxcbiAgICAnaG9tZScsXG4gICAgJ2Fycm93bGVmdCcsXG4gICAgJ2Fycm93dXAnLFxuICAgICdhcnJvd3JpZ2h0JyxcbiAgICAnYXJyb3dkb3duJyxcbiAgXTtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICNwcmV2RGF5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNuZXh0RGF5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNwcmV2TW9udGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgI25leHRNb250aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjcHJldlllYXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgI25leHRZZWFyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI19zZWxlY3RlZERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gICNfc3RhcnRpbmdEYXkgPSAwO1xuXG4gIHJlYWRvbmx5ICNyZXNvdXJjZXNTdmMgPSBpbmplY3QoU2t5TGliUmVzb3VyY2VzU2VydmljZSk7XG4gIHJlYWRvbmx5ICNsaXZlQW5ub3VuY2VyU3ZjID0gaW5qZWN0KFNreUxpdmVBbm5vdW5jZXJTZXJ2aWNlKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlKSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuc3RhcnRBdERhdGUgPz8gbmV3IERhdGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLiNyZXNvdXJjZXNTdmNcbiAgICAgIC5nZXRTdHJpbmdzKHtcbiAgICAgICAgcHJldkRheTogJ3NreXV4X2RhdGVwaWNrZXJfbW92ZV9jYWxlbmRhcl9wcmV2aW91c19kYXknLFxuICAgICAgICBuZXh0RGF5OiAnc2t5dXhfZGF0ZXBpY2tlcl9tb3ZlX2NhbGVuZGFyX25leHRfZGF5JyxcbiAgICAgICAgcHJldk1vbnRoOiAnc2t5dXhfZGF0ZXBpY2tlcl9tb3ZlX2NhbGVuZGFyX3ByZXZpb3VzX21vbnRoJyxcbiAgICAgICAgbmV4dE1vbnRoOiAnc2t5dXhfZGF0ZXBpY2tlcl9tb3ZlX2NhbGVuZGFyX25leHRfbW9udGgnLFxuICAgICAgICBwcmV2WWVhcjogJ3NreXV4X2RhdGVwaWNrZXJfbW92ZV9jYWxlbmRhcl9wcmV2aW91c195ZWFyJyxcbiAgICAgICAgbmV4dFllYXI6ICdza3l1eF9kYXRlcGlja2VyX21vdmVfY2FsZW5kYXJfbmV4dF95ZWFyJyxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChyZXNvdXJjZXMpID0+IHtcbiAgICAgICAgdGhpcy4jcHJldkRheSA9IHJlc291cmNlcy5wcmV2RGF5O1xuICAgICAgICB0aGlzLiNuZXh0RGF5ID0gcmVzb3VyY2VzLm5leHREYXk7XG4gICAgICAgIHRoaXMuI3ByZXZNb250aCA9IHJlc291cmNlcy5wcmV2TW9udGg7XG4gICAgICAgIHRoaXMuI25leHRNb250aCA9IHJlc291cmNlcy5uZXh0TW9udGg7XG4gICAgICAgIHRoaXMuI3ByZXZZZWFyID0gcmVzb3VyY2VzLnByZXZZZWFyO1xuICAgICAgICB0aGlzLiNuZXh0WWVhciA9IHJlc291cmNlcy5uZXh0WWVhcjtcblxuICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21wYXJlSGFuZGxlcihoYW5kbGVyOiBEYXRlQ29tcGFyYXRvciwgdHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgPT09ICdkYXknKSB7XG4gICAgICB0aGlzLmNvbXBhcmVIYW5kbGVyRGF5ID0gaGFuZGxlcjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ21vbnRoJykge1xuICAgICAgdGhpcy5jb21wYXJlSGFuZGxlck1vbnRoID0gaGFuZGxlcjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3llYXInKSB7XG4gICAgICB0aGlzLmNvbXBhcmVIYW5kbGVyWWVhciA9IGhhbmRsZXI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNvbXBhcmUoXG4gICAgZGF0ZTE6IERhdGUgfCB1bmRlZmluZWQsXG4gICAgZGF0ZTI6IERhdGUgfCB1bmRlZmluZWQsXG4gICk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGRhdGUxID09PSB1bmRlZmluZWQgfHwgZGF0ZTIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ2RheScgJiYgdGhpcy5jb21wYXJlSGFuZGxlckRheSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZUhhbmRsZXJEYXkoZGF0ZTEsIGRhdGUyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ21vbnRoJyAmJiB0aGlzLmNvbXBhcmVIYW5kbGVyTW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVIYW5kbGVyTW9udGgoZGF0ZTEsIGRhdGUyKTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAneWVhcicgJiYgdGhpcy5jb21wYXJlSGFuZGxlclllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVIYW5kbGVyWWVhcihkYXRlMSwgZGF0ZTIpO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRSZWZyZXNoVmlld0hhbmRsZXIoaGFuZGxlcjogKCkgPT4gc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZSA9PT0gJ2RheScpIHtcbiAgICAgIHRoaXMucmVmcmVzaFZpZXdIYW5kbGVyRGF5ID0gaGFuZGxlcjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ21vbnRoJykge1xuICAgICAgdGhpcy5yZWZyZXNoVmlld0hhbmRsZXJNb250aCA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICd5ZWFyJykge1xuICAgICAgdGhpcy5yZWZyZXNoVmlld0hhbmRsZXJZZWFyID0gaGFuZGxlcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaFZpZXcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09ICdkYXknICYmIHRoaXMucmVmcmVzaFZpZXdIYW5kbGVyRGF5KSB7XG4gICAgICB0aGlzLnRpdGxlID0gdGhpcy5yZWZyZXNoVmlld0hhbmRsZXJEYXkoKTtcbiAgICAgIHRoaXMucHJldmlvdXNMYWJlbCA9IHRoaXMuI3ByZXZEYXk7XG4gICAgICB0aGlzLm5leHRMYWJlbCA9IHRoaXMuI25leHREYXk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09ICdtb250aCcgJiYgdGhpcy5yZWZyZXNoVmlld0hhbmRsZXJNb250aCkge1xuICAgICAgdGhpcy50aXRsZSA9IHRoaXMucmVmcmVzaFZpZXdIYW5kbGVyTW9udGgoKTtcbiAgICAgIHRoaXMucHJldmlvdXNMYWJlbCA9IHRoaXMuI3ByZXZNb250aDtcbiAgICAgIHRoaXMubmV4dExhYmVsID0gdGhpcy4jbmV4dE1vbnRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAneWVhcicgJiYgdGhpcy5yZWZyZXNoVmlld0hhbmRsZXJZZWFyKSB7XG4gICAgICB0aGlzLnRpdGxlID0gdGhpcy5yZWZyZXNoVmlld0hhbmRsZXJZZWFyKCk7XG4gICAgICB0aGlzLnByZXZpb3VzTGFiZWwgPSB0aGlzLiNwcmV2WWVhcjtcbiAgICAgIHRoaXMubmV4dExhYmVsID0gdGhpcy4jbmV4dFllYXI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEtleWRvd25IYW5kbGVyKGhhbmRsZXI6IEtleWJvYXJkRXZlbnRIYW5kbGVyLCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZSA9PT0gJ2RheScpIHtcbiAgICAgIHRoaXMuaGFuZGxlS2V5ZG93bkRheSA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdtb250aCcpIHtcbiAgICAgIHRoaXMuaGFuZGxlS2V5ZG93bk1vbnRoID0gaGFuZGxlcjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3llYXInKSB7XG4gICAgICB0aGlzLmhhbmRsZUtleWRvd25ZZWFyID0gaGFuZGxlcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5ZG93bihrZXk6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ2RheScgJiYgdGhpcy5oYW5kbGVLZXlkb3duRGF5KSB7XG4gICAgICB0aGlzLmhhbmRsZUtleWRvd25EYXkoa2V5LCBldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09ICdtb250aCcgJiYgdGhpcy5oYW5kbGVLZXlkb3duTW9udGgpIHtcbiAgICAgIHRoaXMuaGFuZGxlS2V5ZG93bk1vbnRoKGtleSwgZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAneWVhcicgJiYgdGhpcy5oYW5kbGVLZXlkb3duWWVhcikge1xuICAgICAgdGhpcy5oYW5kbGVLZXlkb3duWWVhcihrZXksIGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGF0ZUZpbHRlcihkYXRlOiBEYXRlLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1hdHRlci5mb3JtYXQoZGF0ZSwgZm9ybWF0KTtcbiAgfVxuXG4gIHB1YmxpYyBpc0FjdGl2ZShkYXRlT2JqZWN0OiBTa3lEYXlQaWNrZXJDb250ZXh0KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY29tcGFyZShkYXRlT2JqZWN0LmRhdGUsIHRoaXMuYWN0aXZlRGF0ZSkgPT09IDApIHtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZUlkID0gZGF0ZU9iamVjdC51aWQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5Py50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCF0aGlzLmtleXMuaW5jbHVkZXMoa2V5KSB8fCBldmVudC5zaGlmdEtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoa2V5ID09PSAnZW50ZXInIHx8IGtleSA9PT0gJ3NwYWNlYmFyJyB8fCBrZXkgPT09ICcgJykge1xuICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCh0aGlzLmFjdGl2ZURhdGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5jdHJsS2V5ICYmIChrZXkgPT09ICdhcnJvd3VwJyB8fCBrZXkgPT09ICdhcnJvd2Rvd24nKSkge1xuICAgICAgdGhpcy50b2dnbGVNb2RlKGtleSA9PT0gJ2Fycm93dXAnID8gMSA6IC0xKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVLZXlkb3duKGtleSwgZXZlbnQpO1xuICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVEYXRlT2JqZWN0KFxuICAgIGRhdGU6IERhdGUsXG4gICAgZm9ybWF0OiBzdHJpbmcsXG4gICAgaXNTZWNvbmRhcnk6IGJvb2xlYW4sXG4gICAgaWQ6IHN0cmluZyxcbiAgKTogU2t5RGF5UGlja2VyQ29udGV4dCB7XG4gICAgY29uc3QgY3VzdG9tRGF0ZU1hdGNoID0gdGhpcy4jZ2V0Q3VzdG9tRGF0ZShkYXRlKTtcblxuICAgIGNvbnN0IGRhdGVPYmplY3Q6IFNreURheVBpY2tlckNvbnRleHQgPSB7XG4gICAgICBkYXRlOiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpLFxuICAgICAgbGFiZWw6IHRoaXMuZGF0ZUZpbHRlcihkYXRlLCBmb3JtYXQpLFxuICAgICAgc2VsZWN0ZWQ6XG4gICAgICAgICEhdGhpcy5zZWxlY3RlZERhdGUgJiYgdGhpcy5jb21wYXJlKGRhdGUsIHRoaXMuc2VsZWN0ZWREYXRlKSA9PT0gMCxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmlzRGlzYWJsZWQoZGF0ZSksXG4gICAgICBjdXJyZW50OiB0aGlzLmNvbXBhcmUoZGF0ZSwgbmV3IERhdGUoKSkgPT09IDAsXG4gICAgICBzZWNvbmRhcnk6IGlzU2Vjb25kYXJ5LFxuICAgICAgdWlkOiBpZCxcbiAgICAgIGtleURhdGU6IGN1c3RvbURhdGVNYXRjaCA/IGN1c3RvbURhdGVNYXRjaC5rZXlEYXRlIDogdW5kZWZpbmVkLFxuICAgICAga2V5RGF0ZVRleHQ6IGN1c3RvbURhdGVNYXRjaCA/IGN1c3RvbURhdGVNYXRjaC5rZXlEYXRlVGV4dCA6IFtdLFxuICAgIH07XG5cbiAgICByZXR1cm4gZGF0ZU9iamVjdDtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVDYWxlbmRhclJvd3MoXG4gICAgZGF0ZXM6IFNreURheVBpY2tlckNvbnRleHRbXSxcbiAgICBzaXplOiBudW1iZXIsXG4gICk6IFNreURheVBpY2tlckNvbnRleHRbXVtdIHtcbiAgICBjb25zdCByb3dzOiBTa3lEYXlQaWNrZXJDb250ZXh0W11bXSA9IFtdO1xuICAgIHdoaWxlIChkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICByb3dzLnB1c2goZGF0ZXMuc3BsaWNlKDAsIHNpemUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cblxuICAvKlxuICAgIFRoaXMgaXMgZW5zdXJlcyB0aGF0IG5vIHN0cmFuZ2VuZXNzIGhhcHBlbnMgd2hlbiBjb252ZXJ0aW5nIGEgZGF0ZSB0byBsb2NhbCB0aW1lLlxuICAqL1xuICBwdWJsaWMgZml4VGltZVpvbmUoZGF0ZTogRGF0ZSk6IERhdGUge1xuICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICBuZXdEYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XG5cbiAgICByZXR1cm4gbmV3RGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RDYWxlbmRhcihldmVudDogRXZlbnQsIGRhdGU6IERhdGUsIGNsb3NlUGlja2VyID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIWNsb3NlUGlja2VyKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0KGRhdGUpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdChkYXRlOiBEYXRlLCBpc01hbnVhbCA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgRGF0ZShcbiAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICk7XG5cbiAgICAvKlxuICAgICAgICBPbmx5IGFjdHVhbGx5IHNlbGVjdCBkYXRlIGlmIGluIG1pbk1vZGUgKGRheSBwaWNrZXIgbW9kZSkuXG4gICAgICAgIE90aGVyd2lzZSwganVzdCBjaGFuZ2UgdGhlIGFjdGl2ZSB2aWV3IGZvciB0aGUgZGF0ZXBpY2tlci5cbiAgICAqL1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSB0aGlzLm1pbk1vZGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgIGlmIChpc01hbnVhbCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRlcGlja2VyTW9kZSA9XG4gICAgICAgIHRoaXMubW9kZXNbdGhpcy5tb2Rlcy5pbmRleE9mKHRoaXMuZGF0ZXBpY2tlck1vZGUpIC0gMV07XG4gICAgICB0aGlzLmNhbGVuZGFyTW9kZUNoYW5nZS5lbWl0KHRoaXMuZGF0ZXBpY2tlck1vZGUpO1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlQ2FsZW5kYXIoZXZlbnQ6IEV2ZW50LCBkaXJlY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5tb3ZlKGRpcmVjdGlvbik7XG4gIH1cblxuICBwdWJsaWMgbW92ZShkaXJlY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBleHBlY3RlZFN0ZXA6IGFueTtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ2RheScpIHtcbiAgICAgIGV4cGVjdGVkU3RlcCA9IHRoaXMuc3RlcERheTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ21vbnRoJykge1xuICAgICAgZXhwZWN0ZWRTdGVwID0gdGhpcy5zdGVwTW9udGg7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09ICd5ZWFyJykge1xuICAgICAgZXhwZWN0ZWRTdGVwID0gdGhpcy5zdGVwWWVhcjtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIGlmIChleHBlY3RlZFN0ZXApIHtcbiAgICAgIGNvbnN0IHllYXIgPVxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSArIGRpcmVjdGlvbiAqIChleHBlY3RlZFN0ZXAueWVhcnMgfHwgMCk7XG4gICAgICBjb25zdCBtb250aCA9XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpICsgZGlyZWN0aW9uICogKGV4cGVjdGVkU3RlcC5tb250aHMgfHwgMCk7XG5cbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKTtcblxuICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVNb2RlQ2FsZW5kYXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRvZ2dsZU1vZGUoMSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlTW9kZShkaXJlY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIC8qaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgMTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgaWYgKFxuICAgICAgIShkaXJlY3Rpb24gPT09IDEgJiYgdGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gdGhpcy5tYXhNb2RlKSAmJlxuICAgICAgISh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSB0aGlzLm1pbk1vZGUgJiYgZGlyZWN0aW9uID09PSAtMSlcbiAgICApIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlck1vZGUgPVxuICAgICAgICB0aGlzLm1vZGVzW3RoaXMubW9kZXMuaW5kZXhPZih0aGlzLmRhdGVwaWNrZXJNb2RlKSArIGRpcmVjdGlvbl07XG4gICAgICB0aGlzLmNhbGVuZGFyTW9kZUNoYW5nZS5lbWl0KHRoaXMuZGF0ZXBpY2tlck1vZGUpO1xuICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhbm5vdW5jZURhdGUoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5kYXRlRmlsdGVyKGRhdGUsIGZvcm1hdCk7XG4gICAgdGhpcy4jbGl2ZUFubm91bmNlclN2Yy5hbm5vdW5jZShjYXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEYXRlIGlzIGRpc2FibGVkIGlmIGl0IG1lZXRzIGFueSBvZiB0aGVzZSBjcml0ZXJpYTpcbiAgICogMS4gRGF0ZSBmYWxscyBvdXRzaWRlIHRoZSBtaW4gb3IgbWF4IGRhdGVzIHNldCBieSB0aGUgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UuXG4gICAqIDIuIERhdGUgaXMgbWFya2VkIGFzIGRpc2FibGVkIGluIHRoZSBjdXN0b21EYXRlcyBhcnJheS5cbiAgICovXG4gIHByb3RlY3RlZCBpc0Rpc2FibGVkKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXN0b21EYXRlID0gdGhpcy4jZ2V0Q3VzdG9tRGF0ZShkYXRlKTtcbiAgICBjb25zdCBtaW5EYXRlQ29tcGFyZSA9IHRoaXMuY29tcGFyZShkYXRlLCB0aGlzLm1pbkRhdGUpO1xuICAgIGNvbnN0IG1heERhdGVDb21wYXJlID0gdGhpcy5jb21wYXJlKGRhdGUsIHRoaXMubWF4RGF0ZSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgKG1pbkRhdGVDb21wYXJlICE9PSB1bmRlZmluZWQgJiYgbWluRGF0ZUNvbXBhcmUgPCAwKSB8fFxuICAgICAgKG1heERhdGVDb21wYXJlICE9PSB1bmRlZmluZWQgJiYgbWF4RGF0ZUNvbXBhcmUgPiAwKSB8fFxuICAgICAgISFjdXN0b21EYXRlPy5kaXNhYmxlZFxuICAgICk7XG4gIH1cblxuICAjZ2V0Q3VzdG9tRGF0ZShkYXRlOiBEYXRlKTogU2t5RGF0ZXBpY2tlckN1c3RvbURhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmN1c3RvbURhdGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21EYXRlcy5maW5kKChjdXN0b21EYXRlOiBTa3lEYXRlcGlja2VyQ3VzdG9tRGF0ZSkgPT4ge1xuICAgICAgICByZXR1cm4gY3VzdG9tRGF0ZS5kYXRlLmdldFRpbWUoKSA9PT0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiQGlmIChkYXRlcGlja2VyTW9kZSkge1xuICA8ZGl2IGNsYXNzPVwic2t5LWRhdGVwaWNrZXItY2FsZW5kYXItaW5uZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2t5LWRhdGVwaWNrZXItY2FsZW5kYXItaGVhZGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInNreS1kYXRlcGlja2VyLWhlYWRlci1sZWZ0XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWRhdGVwaWNrZXItYnRuLXByZXZpb3VzXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByZXZpb3VzTGFiZWxcIlxuICAgICAgICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICAgICAgICdza3ktYnRuLWRlZmF1bHQgc2t5LWJ0bi1zbSc6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdza3ktYnRuLWljb24tYm9yZGVybGVzcyc6ICdtb2Rlcm4nXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1vdmVDYWxlbmRhcigkZXZlbnQsIC0xKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c2t5LWljb24gY2xhc3M9XCJza3ktZGF0ZXBpY2tlci1jaGV2cm9uXCIgaWNvbk5hbWU9XCJjaGV2cm9uLWxlZnRcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2t5LWRhdGVwaWNrZXItaGVhZGVyLWNlbnRlclwiPlxuICAgICAgICA8IS0tIGRpc3BsYXk6IGlubGluZSAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktZGF0ZXBpY2tlci1jYWxlbmRhci10aXRsZVwiXG4gICAgICAgICAgW2lkXT1cImRhdGVwaWNrZXJJZCArICctdGl0bGUnXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGF0ZXBpY2tlck1vZGUgPT09IG1heE1vZGVcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdza3ktYnRuLWRpc2FibGVkJzogZGF0ZXBpY2tlck1vZGUgPT09IG1heE1vZGVcbiAgICAgICAgICB9XCJcbiAgICAgICAgICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgICAgICAgICAnc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4tc20nOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAnc2t5LWJ0bi1saW5rJzogJ21vZGVybidcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTW9kZUNhbGVuZGFyKCRldmVudClcIlxuICAgICAgICAgID57eyB0aXRsZSB9fTwvYnV0dG9uXG4gICAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2t5LWRhdGVwaWNrZXItaGVhZGVyLXJpZ2h0XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWRhdGVwaWNrZXItYnRuLW5leHRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibmV4dExhYmVsXCJcbiAgICAgICAgICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgICAgICAgICAnc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4tc20nOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAnc2t5LWJ0bi1pY29uLWJvcmRlcmxlc3MnOiAnbW9kZXJuJ1xuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJtb3ZlQ2FsZW5kYXIoJGV2ZW50LCAxKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c2t5LWljb24gY2xhc3M9XCJza3ktZGF0ZXBpY2tlci1jaGV2cm9uXCIgaWNvbk5hbWU9XCJjaGV2cm9uLXJpZ2h0XCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgPC9kaXY+XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\n/**\n * Manages the state of the calendar picker.\n * @internal\n */\nexport class SkyDatepickerCalendarService {\n constructor() {\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 this.keyDatePopoverStream = new Subject();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerCalendarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerCalendarService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerCalendarService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2NhbGVuZGFyL2RhdGVwaWNrZXItY2FsZW5kYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSS9COzs7R0FHRztBQUVILE1BQU0sT0FBTyw0QkFBNEI7SUFEekM7UUFFRTs7O1dBR0c7UUFDSSx5QkFBb0IsR0FDekIsSUFBSSxPQUFPLEVBQW1DLENBQUM7S0FDbEQ7K0dBUFksNEJBQTRCO21IQUE1Qiw0QkFBNEI7OzRGQUE1Qiw0QkFBNEI7a0JBRHhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5RGF5UGlja2VyQ29udGV4dCB9IGZyb20gJy4vZGF5cGlja2VyLWNvbnRleHQnO1xuXG4vKipcbiAqIE1hbmFnZXMgdGhlIHN0YXRlIG9mIHRoZSBjYWxlbmRhciBwaWNrZXIuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreURhdGVwaWNrZXJDYWxlbmRhclNlcnZpY2Uge1xuICAvKipcbiAgICogV2hldGhlciBhIGtleSBkYXRlIHBvcG92ZXIgaXMgY3VycmVudGx5IGRpc3BsYXllZC5cbiAgICogVXNlZnVsIGZvciBjb21tdW5pY2F0aW5nIGFjcm9zcyBhbGwgZGF5cGlja2VyIHNpYmxpbmdzIHdoZW4gYSBwb3BvdmVyIGlzIGRpc3BsYXllZC5cbiAgICovXG4gIHB1YmxpYyBrZXlEYXRlUG9wb3ZlclN0cmVhbTogU3ViamVjdDxTa3lEYXlQaWNrZXJDb250ZXh0IHwgdW5kZWZpbmVkPiA9XG4gICAgbmV3IFN1YmplY3Q8U2t5RGF5UGlja2VyQ29udGV4dCB8IHVuZGVmaW5lZD4oKTtcbn1cbiJdfQ==","import { Pipe, inject } from '@angular/core';\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport * as i0 from \"@angular/core\";\n/**\n * Formats date values according to formatting rules.\n * @example\n * ```markup\n * {{ myDate | skyDatepickerCalendarLabel }}\n * {{ myDate | skyDatepickerCalendarLabel:'YYYY' }}\n * ```\n * @internal\n */\nexport class SkyDatepickerCalendarLabelPipe {\n #datepicker = inject(SkyDatepickerCalendarInnerComponent);\n #defaultFormat = this.#datepicker.formatDayLabel;\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 transform(value, format) {\n let formattedValue = '';\n if (value && value instanceof Date) {\n formattedValue = this.#datepicker.dateFilter(value, format || this.#defaultFormat);\n }\n return formattedValue;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerCalendarLabelPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerCalendarLabelPipe, isStandalone: true, name: \"skyDatepickerCalendarLabel\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerCalendarLabelPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'skyDatepickerCalendarLabel',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1jYWxlbmRhci1sYWJlbC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2NhbGVuZGFyL2RhdGVwaWNrZXItY2FsZW5kYXItbGFiZWwucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBRTVGOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLDhCQUE4QjtJQUN6QyxXQUFXLEdBQUcsTUFBTSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDMUQsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO0lBRWpEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLEtBQWMsRUFBRSxNQUFlO1FBQzlDLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUV4QixJQUFJLEtBQUssSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDbkMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUMxQyxLQUFLLEVBQ0wsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQzlCLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQzsrR0FyQlUsOEJBQThCOzZHQUE5Qiw4QkFBOEI7OzRGQUE5Qiw4QkFBOEI7a0JBSDFDLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLDRCQUE0QjtpQkFDbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXItY2FsZW5kYXItaW5uZXIuY29tcG9uZW50JztcblxuLyoqXG4gKiBGb3JtYXRzIGRhdGUgdmFsdWVzIGFjY29yZGluZyB0byBmb3JtYXR0aW5nIHJ1bGVzLlxuICogQGV4YW1wbGVcbiAqIGBgYG1hcmt1cFxuICoge3sgbXlEYXRlIHwgc2t5RGF0ZXBpY2tlckNhbGVuZGFyTGFiZWwgfX1cbiAqIHt7IG15RGF0ZSB8IHNreURhdGVwaWNrZXJDYWxlbmRhckxhYmVsOidZWVlZJyB9fVxuICogYGBgXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICBuYW1lOiAnc2t5RGF0ZXBpY2tlckNhbGVuZGFyTGFiZWwnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRlcGlja2VyQ2FsZW5kYXJMYWJlbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgI2RhdGVwaWNrZXIgPSBpbmplY3QoU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQpO1xuICAjZGVmYXVsdEZvcm1hdCA9IHRoaXMuI2RhdGVwaWNrZXIuZm9ybWF0RGF5TGFiZWw7XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgYSBkYXRlIHZhbHVlIHVzaW5nIGxvY2FsZSBhbmQgZm9ybWF0IHJ1bGVzLlxuICAgKiBAcGFyYW0gdmFsdWUgU3BlY2lmaWVzIHRoZSBkYXRlIHZhbHVlIHRvIHRyYW5zZm9ybS5cbiAgICogQHBhcmFtIGZvcm1hdCBTcGVjaWZpZXMgdGhlIGZvcm1hdCB0byBhcHBseSB0byB0aGUgdHJhbnNmb3JtLiBUaGUgZm9ybWF0IHN0cmluZyBpc1xuICAgKiBjb25zdHJ1Y3RlZCBieSBhIHNlcmllcyBvZiBzeW1ib2xzIHRoYXQgcmVwcmVzZW50IGRhdGUtdGltZSB2YWx1ZXMuXG4gICAqL1xuICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBmb3JtYXQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBmb3JtYXR0ZWRWYWx1ZSA9ICcnO1xuXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLiNkYXRlcGlja2VyLmRhdGVGaWx0ZXIoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBmb3JtYXQgfHwgdGhpcy4jZGVmYXVsdEZvcm1hdCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZFZhbHVlO1xuICB9XG59XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { SkyDatepickerCalendarLabelPipe } from './datepicker-calendar-label.pipe';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./datepicker-calendar-inner.component\";\nimport * as i2 from \"@angular/common\";\n/**\n * @internal\n */\nexport class SkyDayPickerButtonComponent {\n constructor(datepicker) {\n this.datepicker = datepicker;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDayPickerButtonComponent, deps: [{ token: i1.SkyDatepickerCalendarInnerComponent }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", type: SkyDayPickerButtonComponent, isStandalone: true, selector: \"sky-daypicker-button\", inputs: { date: \"date\" }, ngImport: i0, template: \"@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\", styles: [\".sky-datepicker-btn-date:not(.sky-theme-modern *){--sky-override-daypicker-disabled-style: italic;--sky-override-daypicker-key-date-color: #d93a3d;--sky-override-daypicker-key-date-left: 15px;--sky-override-daypicker-key-date-size: 5px;--sky-override-daypicker-key-date-top: 22px}.sky-datepicker-btn-disabled{font-style:var(--sky-override-daypicker-disabled-style)}.sky-datepicker-btn-key-date{position:relative}.sky-datepicker-btn-key-date:before{position:absolute;content:\\\"\\\";height:var(--sky-override-daypicker-key-date-size, var(--sky-size-icon-xxxs));width:var(--sky-override-daypicker-key-date-size, var(--sky-size-icon-xxxs));background-color:var(--sky-override-daypicker-key-date-color, var(--sky-color-icon-danger));border-radius:50%;left:var(--sky-override-daypicker-key-date-left, calc(50% - var(--sky-size-icon-xxxs) / 2));top:var(--sky-override-daypicker-key-date-top, calc(50% + var(--sky-font-size-body-m) * var(--sky-font-line_height-body-m) / 2 - var(--sky-size-icon-xxxs) / 2))}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"pipe\", type: SkyDatepickerCalendarLabelPipe, name: \"skyDatepickerCalendarLabel\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDayPickerButtonComponent, decorators: [{\n type: Component,\n args: [{ imports: [CommonModule, SkyDatepickerCalendarLabelPipe], selector: 'sky-daypicker-button', template: \"@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\", styles: [\".sky-datepicker-btn-date:not(.sky-theme-modern *){--sky-override-daypicker-disabled-style: italic;--sky-override-daypicker-key-date-color: #d93a3d;--sky-override-daypicker-key-date-left: 15px;--sky-override-daypicker-key-date-size: 5px;--sky-override-daypicker-key-date-top: 22px}.sky-datepicker-btn-disabled{font-style:var(--sky-override-daypicker-disabled-style)}.sky-datepicker-btn-key-date{position:relative}.sky-datepicker-btn-key-date:before{position:absolute;content:\\\"\\\";height:var(--sky-override-daypicker-key-date-size, var(--sky-size-icon-xxxs));width:var(--sky-override-daypicker-key-date-size, var(--sky-size-icon-xxxs));background-color:var(--sky-override-daypicker-key-date-color, var(--sky-color-icon-danger));border-radius:50%;left:var(--sky-override-daypicker-key-date-left, calc(50% - var(--sky-size-icon-xxxs) / 2));top:var(--sky-override-daypicker-key-date-top, calc(50% + var(--sky-font-size-body-m) * var(--sky-font-line_height-body-m) / 2 - var(--sky-size-icon-xxxs) / 2))}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.SkyDatepickerCalendarInnerComponent }], propDecorators: { date: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlja2VyLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvY2FsZW5kYXIvZGF5cGlja2VyLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvY2FsZW5kYXIvZGF5cGlja2VyLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHakQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7QUFHbEY7O0dBRUc7QUFPSCxNQUFNLE9BQU8sMkJBQTJCO0lBT3RDLFlBQW1CLFVBQStDO1FBQS9DLGVBQVUsR0FBVixVQUFVLENBQXFDO0lBQUcsQ0FBQzsrR0FQM0QsMkJBQTJCO21HQUEzQiwyQkFBMkIsMEdDaEJ4QyxpdEJBcUJBLGdpQ0RWWSxZQUFZLHdIQUFFLDhCQUE4Qjs7NEZBSzNDLDJCQUEyQjtrQkFOdkMsU0FBUzs4QkFDQyxDQUFDLFlBQVksRUFBRSw4QkFBOEIsQ0FBQyxZQUM3QyxzQkFBc0I7O3NCQVEvQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXItY2FsZW5kYXItaW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDYWxlbmRhckxhYmVsUGlwZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jYWxlbmRhci1sYWJlbC5waXBlJztcbmltcG9ydCB7IFNreURheVBpY2tlckNvbnRleHQgfSBmcm9tICcuL2RheXBpY2tlci1jb250ZXh0JztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFNreURhdGVwaWNrZXJDYWxlbmRhckxhYmVsUGlwZV0sXG4gIHNlbGVjdG9yOiAnc2t5LWRheXBpY2tlci1idXR0b24nLFxuICBzdHlsZVVybDogJy4vZGF5cGlja2VyLWJ1dHRvbi5jb21wb25lbnQuc2NzcycsXG4gIHRlbXBsYXRlVXJsOiAnZGF5cGlja2VyLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreURheVBpY2tlckJ1dHRvbkNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0aGlzIHBpY2tlciBidXR0b24gd2lsbCByZXByZXNlbnQgb24gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRhdGU6IFNreURheVBpY2tlckNvbnRleHQgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRhdGVwaWNrZXI6IFNreURhdGVwaWNrZXJDYWxlbmRhcklubmVyQ29tcG9uZW50KSB7fVxufVxuIiwiQGlmIChkYXRlKSB7XG4gIDxidXR0b25cbiAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1zbSBza3ktYnRuLWRlZmF1bHQgc2t5LWRhdGVwaWNrZXItYnRuLWRhdGVcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIFtkaXNhYmxlZF09XCJkYXRlLmRpc2FibGVkXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LWRhdGVwaWNrZXItYnRuLXNlbGVjdGVkJzogZGF0ZS5zZWxlY3RlZCxcbiAgICAgICdza3ktYnRuLWRpc2FibGVkJzogZGF0ZS5kaXNhYmxlZCxcbiAgICAgICdza3ktYnRuLWFjdGl2ZSc6IGRhdGVwaWNrZXIuaXNBY3RpdmUoZGF0ZSksXG4gICAgICAnc2t5LWRhdGVwaWNrZXItYnRuLWRpc2FibGVkJzogZGF0ZS5kaXNhYmxlZCxcbiAgICAgICdza3ktZGF0ZXBpY2tlci1idG4ta2V5LWRhdGUnOiBkYXRlLmtleURhdGVcbiAgICB9XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRhdGUuZGF0ZSB8IHNreURhdGVwaWNrZXJDYWxlbmRhckxhYmVsXCJcbiAgICAoY2xpY2spPVwiZGF0ZXBpY2tlci5zZWxlY3RDYWxlbmRhcigkZXZlbnQsIGRhdGUuZGF0ZSwgdHJ1ZSlcIlxuICA+XG4gICAgPHNwYW4gW25nQ2xhc3NdPVwieyAnc2t5LWRhdGVwaWNrZXItc2Vjb25kYXJ5JzogZGF0ZS5zZWNvbmRhcnkgfVwiPlxuICAgICAge3sgZGF0ZS5sYWJlbCB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG59XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SkyPopoverMessageType, SkyPopoverModule, } from '@skyux/popovers';\nimport { BehaviorSubject } from 'rxjs';\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDatepickerCalendarService } from './datepicker-calendar.service';\nimport { SkyDayPickerButtonComponent } from './daypicker-button.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@skyux/popovers\";\n/**\n * @internal\n */\nexport class SkyDayPickerCellComponent {\n #calendarSvc;\n #datepicker;\n constructor() {\n this.#calendarSvc = inject(SkyDatepickerCalendarService);\n this.#datepicker = inject(SkyDatepickerCalendarInnerComponent);\n /**\n * Whether the active date has been changed.\n */\n this.activeDateHasChanged = input(false, ...(ngDevMode ? [{ debugName: \"activeDateHasChanged\" }] : []));\n /**\n * The date this picker cell will represent on the calendar.\n */\n this.date = input(...(ngDevMode ? [undefined, { debugName: \"date\" }] : []));\n this.ariaLabel = computed(() => {\n const date = this.date();\n if (date?.keyDateText) {\n return date.keyDateText.join(', ');\n }\n /* istanbul ignore next: safety check */\n return '';\n }, ...(ngDevMode ? [{ debugName: \"ariaLabel\" }] : []));\n this.hasTooltip = computed(() => {\n const date = this.date();\n return (date &&\n date.keyDate &&\n date.keyDateText &&\n date.keyDateText.length > 0 &&\n date.keyDateText[0].length > 0);\n }, ...(ngDevMode ? [{ debugName: \"hasTooltip\" }] : []));\n this.popoverController = new BehaviorSubject({});\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 if (date &&\n activeDateHasChanged &&\n hasTooltip &&\n this.#datepicker.isActive(date)) {\n this.#showTooltip();\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 onDayMouseenter() {\n if (this.hasTooltip()) {\n this.#showTooltip();\n this.#calendarSvc.keyDatePopoverStream.next(this.date());\n }\n }\n onDayMouseleave() {\n if (this.hasTooltip()) {\n this.#hideTooltip();\n this.#calendarSvc.keyDatePopoverStream.next(undefined);\n }\n }\n #hideTooltip() {\n this.popoverController.next({ type: SkyPopoverMessageType.Close });\n }\n #showTooltip() {\n this.popoverController.next({ type: SkyPopoverMessageType.Open });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDayPickerCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", type: SkyDayPickerCellComponent, isStandalone: true, selector: \"sky-daypicker-cell\", inputs: { activeDateHasChanged: { classPropertyName: \"activeDateHasChanged\", publicName: \"activeDateHasChanged\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: \"@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\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: SkyDayPickerButtonComponent, selector: \"sky-daypicker-button\", inputs: [\"date\"] }, { kind: \"ngmodule\", type: SkyPopoverModule }, { kind: \"component\", type: i2.λ6, selector: \"sky-popover\", inputs: [\"alignment\", \"placement\", \"popoverTitle\", \"popoverType\"], outputs: [\"popoverClosed\", \"popoverOpened\"] }, { kind: \"directive\", type: i2.λ7, selector: \"[skyPopover]\", inputs: [\"skyPopover\", \"skyPopoverAlignment\", \"skyPopoverMessageStream\", \"skyPopoverPlacement\", \"skyPopoverTrigger\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDayPickerCellComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, SkyDayPickerButtonComponent, SkyPopoverModule], selector: 'sky-daypicker-cell', template: \"@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\" }]\n }], ctorParameters: () => [], propDecorators: { activeDateHasChanged: [{ type: i0.Input, args: [{ isSignal: true, alias: \"activeDateHasChanged\", required: false }] }], date: [{ type: i0.Input, args: [{ isSignal: true, alias: \"date\", required: false }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlja2VyLWNlbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2NhbGVuZGFyL2RheXBpY2tlci1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS9zcmMvbGliL21vZHVsZXMvZGF0ZXBpY2tlci9jYWxlbmRhci9kYXlwaWNrZXItY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFFTCxxQkFBcUIsRUFDckIsZ0JBQWdCLEdBQ2pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQUczRTs7R0FFRztBQU9ILE1BQU0sT0FBTyx5QkFBeUI7SUFDM0IsWUFBWSxDQUF3QztJQUNwRCxXQUFXLENBQStDO0lBcUNuRTtRQXRDUyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3BELGdCQUFXLEdBQUcsTUFBTSxD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QUksQ0FBQyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7K0dBdkZVLHlCQUF5QjttR0FBekIseUJBQXlCLG9YQ2hDdEMsaTRCQWdDQSwyQ0RKWSxZQUFZLHNNQUFFLDJCQUEyQixrRkFBRSxnQkFBZ0I7OzRGQUkxRCx5QkFBeUI7a0JBTnJDLFNBQVM7c0NBQ1MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLFlBQVksRUFBRSwyQkFBMkIsRUFBRSxnQkFBZ0IsQ0FBQyxZQUM1RCxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBTa3lQb3BvdmVyTWVzc2FnZSxcbiAgU2t5UG9wb3Zlck1lc3NhZ2VUeXBlLFxuICBTa3lQb3BvdmVyTW9kdWxlLFxufSBmcm9tICdAc2t5dXgvcG9wb3ZlcnMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXItY2FsZW5kYXItaW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuL2RhdGVwaWNrZXItY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXlQaWNrZXJCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2RheXBpY2tlci1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFNreURheVBpY2tlckNvbnRleHQgfSBmcm9tICcuL2RheXBpY2tlci1jb250ZXh0JztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTa3lEYXlQaWNrZXJCdXR0b25Db21wb25lbnQsIFNreVBvcG92ZXJNb2R1bGVdLFxuICBzZWxlY3RvcjogJ3NreS1kYXlwaWNrZXItY2VsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXlwaWNrZXItY2VsbC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreURheVBpY2tlckNlbGxDb21wb25lbnQge1xuICByZWFkb25seSAjY2FsZW5kYXJTdmMgPSBpbmplY3QoU2t5RGF0ZXBpY2tlckNhbGVuZGFyU2VydmljZSk7XG4gIHJlYWRvbmx5ICNkYXRlcGlja2VyID0gaW5qZWN0KFNreURhdGVwaWNrZXJDYWxlbmRhcklubmVyQ29tcG9uZW50KTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYWN0aXZlIGRhdGUgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICovXG4gIHB1YmxpYyBhY3RpdmVEYXRlSGFzQ2hhbmdlZCA9IGlucHV0KGZhbHNlKTtcblxuICAvKipcbiAgICogVGhlIGRhdGUgdGhpcyBwaWNrZXIgY2VsbCB3aWxsIHJlcHJlc2VudCBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBwdWJsaWMgZGF0ZSA9IGlucHV0PFNreURheVBpY2tlckNvbnRleHQgfCB1bmRlZmluZWQ+KCk7XG5cbiAgcHJvdGVjdGVkIGFyaWFMYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlKCk7XG5cbiAgICBpZiAoZGF0ZT8ua2V5RGF0ZVRleHQpIHtcbiAgICAgIHJldHVybiBkYXRlLmtleURhdGVUZXh0LmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNhZmV0eSBjaGVjayAqL1xuICAgIHJldHVybiAnJztcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGhhc1Rvb2x0aXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZSgpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGRhdGUgJiZcbiAgICAgIGRhdGUua2V5RGF0ZSAmJlxuICAgICAgZGF0ZS5rZXlEYXRlVGV4dCAmJlxuICAgICAgZGF0ZS5rZXlEYXRlVGV4dC5sZW5ndGggPiAwICYmXG4gICAgICBkYXRlLmtleURhdGVUZXh0WzBdLmxlbmd0aCA+IDBcbiAgICApO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcG9wb3ZlckNvbnRyb2xsZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNreVBvcG92ZXJNZXNzYWdlPih7fSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gc2hvdyB0aGUgdG9vbHRpcCBpZiB0aGlzIGlzIHRoZSBhY3RpdmUgZGF0ZSBhbmQgaXMgbm90IHRoZVxuICAgIC8vIGluaXRpYWwgYWN0aXZlIGRhdGUgKGFjdGl2ZURhdGVIYXNDaGFuZ2VkKVxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBhY3RpdmVEYXRlSGFzQ2hhbmdlZCA9IHRoaXMuYWN0aXZlRGF0ZUhhc0NoYW5nZWQoKTtcbiAgICAgIGNvbnN0IGhhc1Rvb2x0aXAgPSB0aGlzLmhhc1Rvb2x0aXAoKTtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGUoKTtcblxuICAgICAgaWYgKFxuICAgICAgICBkYXRlICYmXG4gICAgICAgIGFjdGl2ZURhdGVIYXNDaGFuZ2VkICYmXG4gICAgICAgIGhhc1Rvb2x0aXAgJiZcbiAgICAgICAgdGhpcy4jZGF0ZXBpY2tlci5pc0FjdGl2ZShkYXRlKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuI3Nob3dUb29sdGlwKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBIaWRlIHRoaXMgY2VsbCdzIHRvb2x0aXAgaWYgYW5vdGhlciBjZWxsIG9wZW5zIGEgdG9vbHRpcC5cbiAgICB0aGlzLiNjYWxlbmRhclN2Yy5rZXlEYXRlUG9wb3ZlclN0cmVhbVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChwb3BvdmVyRGF0ZSkgPT4ge1xuICAgICAgICBpZiAoIXBvcG92ZXJEYXRlIHx8IHBvcG92ZXJEYXRlPy51aWQgIT09IHRoaXMuZGF0ZSgpPy51aWQpIHtcbiAgICAgICAgICB0aGlzLiNoaWRlVG9vbHRpcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkRheU1vdXNlZW50ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzVG9vbHRpcCgpKSB7XG4gICAgICB0aGlzLiNzaG93VG9vbHRpcCgpO1xuICAgICAgdGhpcy4jY2FsZW5kYXJTdmMua2V5RGF0ZVBvcG92ZXJTdHJlYW0ubmV4dCh0aGlzLmRhdGUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uRGF5TW91c2VsZWF2ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNUb29sdGlwKCkpIHtcbiAgICAgIHRoaXMuI2hpZGVUb29sdGlwKCk7XG4gICAgICB0aGlzLiNjYWxlbmRhclN2Yy5rZXlEYXRlUG9wb3ZlclN0cmVhbS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgI2hpZGVUb29sdGlwKCk6IHZvaWQge1xuICAgIHRoaXMucG9wb3ZlckNvbnRyb2xsZXIubmV4dCh7IHR5cGU6IFNreVBvcG92ZXJNZXNzYWdlVHlwZS5DbG9zZSB9KTtcbiAgfVxuXG4gICNzaG93VG9vbHRpcCgpOiB2b2lkIHtcbiAgICB0aGlzLnBvcG92ZXJDb250cm9sbGVyLm5leHQoeyB0eXBlOiBTa3lQb3BvdmVyTWVzc2FnZVR5cGUuT3BlbiB9KTtcbiAgfVxufVxuIiwiQGlmIChoYXNUb29sdGlwKCkpIHtcbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWRheXBpY2tlci1jZWxsXCJcbiAgICBza3lQb3BvdmVyUGxhY2VtZW50PVwibGVmdFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwoKVwiXG4gICAgW3NreVBvcG92ZXJdPVwiZGF5SW5mb1BvcG92ZXJcIlxuICAgIFtza3lQb3BvdmVyTWVzc2FnZVN0cmVhbV09XCJwb3BvdmVyQ29udHJvbGxlclwiXG4gICAgKG1vdXNlZW50ZXIpPVwib25EYXlNb3VzZWVudGVyKClcIlxuICAgIChtb3VzZWxlYXZlKT1cIm9uRGF5TW91c2VsZWF2ZSgpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkYXlwaWNrZXJCdXR0b25UZW1wbGF0ZVJlZlwiIC8+XG4gICAgPHNreS1wb3BvdmVyICNkYXlJbmZvUG9wb3Zlcj5cbiAgICAgIEBmb3IgKHRleHQgb2YgZGF0ZSgpPy5rZXlEYXRlVGV4dDsgdHJhY2sgdGV4dCkge1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHt7IHRleHQgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9za3ktcG9wb3Zlcj5cbiAgPC9kaXY+XG59IEBlbHNlIHtcbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWRheXBpY2tlci1jZWxsXCJcbiAgICAobW91c2VlbnRlcik9XCJvbkRheU1vdXNlZW50ZXIoKVwiXG4gICAgKG1vdXNlbGVhdmUpPVwib25EYXlNb3VzZWxlYXZlKClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRheXBpY2tlckJ1dHRvblRlbXBsYXRlUmVmXCIgLz5cbiAgPC9kaXY+XG59XG5cbjxuZy10ZW1wbGF0ZSAjZGF5cGlja2VyQnV0dG9uVGVtcGxhdGVSZWY+XG4gIDxza3ktZGF5cGlja2VyLWJ1dHRvbiBbZGF0ZV09XCJkYXRlKClcIiAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","import { Component, EventEmitter, Input, Output, } from '@angular/core';\nimport { SkyWaitModule } from '@skyux/indicators';\nimport { Subject } from 'rxjs';\nimport { SkyDayPickerCellComponent } from './daypicker-cell.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./datepicker-calendar-inner.component\";\nimport * as i2 from \"@skyux/indicators\";\n/**\n * @internal\n */\nexport class SkyDayPickerComponent {\n set customDates(value) {\n /* istanbul ignore else */\n if (value) {\n this.#applyCustomDates(value, this.rows);\n }\n }\n #daysInMonth;\n #initialDate;\n #ngUnsubscribe;\n constructor(datepicker) {\n this.calendarDateRangeChange = new EventEmitter();\n this.isWaiting = false;\n this.activeDateHasChanged = false;\n this.labels = [];\n this.title = '';\n this.rows = [];\n this.weekNumbers = [];\n this.#daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n this.#ngUnsubscribe = new Subject();\n this.datepicker = datepicker;\n }\n ngOnInit() {\n this.datepicker.stepDay = { months: 1 };\n this.#initialDate = this.datepicker.activeDate.getDate();\n this.datepicker.setRefreshViewHandler(() => this.#refreshDayView(), 'day');\n this.datepicker.setCompareHandler(this.#compareDays, 'day');\n this.datepicker.setKeydownHandler((key, event) => {\n this.#keydownDays(key, event);\n }, 'day');\n this.datepicker.refreshView();\n }\n ngOnDestroy() {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n getDates(startDate, n) {\n const dates = new Array(n);\n let current = new Date(startDate.getTime());\n let i = 0;\n let 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(current.getFullYear(), current.getMonth(), current.getDate() + 1);\n }\n return dates;\n }\n #compareDays(date1, date2) {\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 #refreshDayView() {\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 = difference > 0 ? 7 - difference : -difference;\n const firstDate = new Date(firstDayOfMonth.getTime());\n if (this.datepicker.activeDate.getDate() !== this.#initialDate) {\n this.activeDateHasChanged = true;\n }\n /* istanbul ignore else */\n /* sanity check */\n if (numDisplayedFromPreviousMonth > 0) {\n firstDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n // 42 is the number of days on a six-week calendar\n const days = this.getDates(firstDate, 42);\n const pickerDates = [];\n for (let i = 0; i < 42; i++) {\n const _dateObject = this.datepicker.createDateObject(days[i], this.datepicker.formatDay, days[i].getMonth() !== month, this.datepicker.datepickerId + '-' + i);\n pickerDates[i] = _dateObject;\n }\n this.labels = [];\n for (let j = 0; j < 7; j++) {\n this.labels[j] = {};\n this.labels[j].abbr = this.datepicker.dateFilter(pickerDates[j].date, this.datepicker.formatDayHeader);\n this.labels[j].full = this.datepicker.dateFilter(pickerDates[j].date, 'EEEE');\n }\n const oldDateRange = this.#getDateRange(this.rows);\n this.rows = this.datepicker.createCalendarRows(pickerDates, 7);\n const newDateRange = this.#getDateRange(this.rows);\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 }\n else {\n this.calendarDateRangeChange.next(undefined);\n }\n }\n return this.datepicker.dateFilter(this.datepicker.activeDate, this.datepicker.formatDayTitle);\n }\n #keydownDays(key, event) {\n let date = this.datepicker.activeDate.getDate();\n /* istanbul ignore else */\n /* sanity check */\n if (key === 'arrowleft') {\n date = date - 1;\n }\n else if (key === 'arrowup') {\n date = date - 7;\n }\n else if (key === 'arrowright') {\n date = date + 1;\n }\n else if (key === 'arrowdown') {\n date = date + 7;\n }\n else if (key === 'pageup' || key === 'pagedown') {\n const month = this.datepicker.activeDate.getMonth() + (key === 'pageup' ? -1 : 1);\n this.datepicker.activeDate.setMonth(month, 1);\n date = Math.min(this.#getDaysInMonth(this.datepicker.activeDate.getFullYear(), this.datepicker.activeDate.getMonth()), date);\n }\n else if (key === 'home') {\n date = 1;\n }\n else if (key === 'end') {\n date = this.#getDaysInMonth(this.datepicker.activeDate.getFullYear(), this.datepicker.activeDate.getMonth());\n }\n this.datepicker.activeDate.setDate(date);\n this.datepicker.announceDate(this.datepicker.activeDate, this.datepicker.formatDayLabel);\n }\n #getDaysInMonth(year, month) {\n return month === 1 &&\n year % 4 === 0 &&\n (year % 400 === 0 || year % 100 !== 0)\n ? 29\n : this.#daysInMonth[month];\n }\n /**\n * Applies custom date properties to the existing dates displayed in the calendar.\n */\n #applyCustomDates(customDates, dateRows) {\n let date;\n let newDate;\n let dateIndex;\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 #dateRangeRowsAreEqual(rangeA, rangeB) {\n /* istanbul ignore if */\n if (!rangeA && !rangeB) {\n return true;\n }\n else if (rangeA && rangeB) {\n return (this.#compareDays(rangeA.startDate, rangeB.startDate) === 0 &&\n this.#compareDays(rangeA.endDate, rangeB.endDate) === 0);\n }\n else {\n return false;\n }\n }\n #getDateRange(rows) {\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 static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDayPickerComponent, deps: [{ token: i1.SkyDatepickerCalendarInnerComponent }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", type: SkyDayPickerComponent, isStandalone: true, selector: \"sky-daypicker\", inputs: { customDates: \"customDates\", isWaiting: \"isWaiting\" }, outputs: { calendarDateRangeChange: \"calendarDateRangeChange\" }, ngImport: i0, template: \"<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\", dependencies: [{ kind: \"component\", type: SkyDayPickerCellComponent, selector: \"sky-daypicker-cell\", inputs: [\"activeDateHasChanged\", \"date\"] }, { kind: \"ngmodule\", type: SkyWaitModule }, { kind: \"component\", type: i2.λ14, selector: \"sky-wait\", inputs: [\"ariaLabel\", \"isWaiting\", \"isFullPage\", \"isNonBlocking\", \"screenReaderCompletedText\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDayPickerComponent, decorators: [{\n type: Component,\n args: [{ imports: [SkyDayPickerCellComponent, SkyWaitModule], selector: 'sky-daypicker', template: \"<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\" }]\n }], ctorParameters: () => [{ type: i1.SkyDatepickerCalendarInnerComponent }], propDecorators: { customDates: [{\n type: Input\n }], calendarDateRangeChange: [{\n type: Output\n }], isWaiting: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS9zcmMvbGliL21vZHVsZXMvZGF0ZXBpY2tlci9jYWxlbmRhci9kYXlwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2NhbGVuZGFyL2RheXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTS9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBWXZFOztHQUVHO0FBTUgsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxJQUNXLFdBQVcsQ0FBQyxLQUE0QztRQUNqRSwwQkFBMEI7UUFDMUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBa0JELFlBQVksQ0FBOEQ7SUFDMUUsWUFBWSxDQUFxQjtJQUNqQyxjQUFjLENBQXVCO0lBRXJDLFlBQVksVUFBK0M7UUFuQnBELDRCQUF1QixHQUFHLElBQUksWUFBWSxFQUU5QyxDQUFDO1FBR0csY0FBUyxHQUF3QixLQUFLLENBQUM7UUFFdkMseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLFdBQU0sR0FBVSxFQUFFLENBQUM7UUFD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QUFhLENBQUMsSUFBNkI7UUFDekMsMEJBQTBCO1FBQzFCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTztnQkFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSTthQUN0RSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7K0dBblFVLHFCQUFxQjttR0FBckIscUJBQXFCLDBNQ3BDbEMsMmhDQW9DQSw0Q0RKWSx5QkFBeUIsd0dBQUUsYUFBYTs7NEZBSXZDLHFCQUFxQjtrQkFMakMsU0FBUzs4QkFDQyxDQUFDLHlCQUF5QixFQUFFLGFBQWEsQ0FBQyxZQUN6QyxlQUFlOztzQkFJeEIsS0FBSzs7c0JBUUwsTUFBTTs7c0JBS04sS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lXYWl0TW9kdWxlIH0gZnJvbSAnQHNreXV4L2luZGljYXRvcnMnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNreURhdGVwaWNrZXJDdXN0b21EYXRlIH0gZnJvbSAnLi4vZGF0ZXBpY2tlci1jdXN0b20tZGF0ZSc7XG5cbmltcG9ydCB7IFNreURhdGVwaWNrZXJDYWxlbmRhckNoYW5nZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jYWxlbmRhci1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXItY2FsZW5kYXItaW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreURheVBpY2tlckNlbGxDb21wb25lbnQgfSBmcm9tICcuL2RheXBpY2tlci1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lEYXlQaWNrZXJDb250ZXh0IH0gZnJvbSAnLi9kYXlwaWNrZXItY29udGV4dCc7XG5cbi8qKlxuICogSGVscGVyIGludGVyZmFjZSB0byBjb21wYXJlIGRhdGUgcmFuZ2VzLlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBTa3lEYXRlUmFuZ2Uge1xuICBlbmREYXRlOiBEYXRlO1xuICBzdGFydERhdGU6IERhdGU7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBpbXBvcnRzOiBbU2t5RGF5UGlja2VyQ2VsbENvbXBvbmVudCwgU2t5V2FpdE1vZHVsZV0sXG4gIHNlbGVjdG9yOiAnc2t5LWRheXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnZGF5cGlja2VyLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF5UGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGN1c3RvbURhdGVzKHZhbHVlOiBTa3lEYXRlcGlja2VyQ3VzdG9tRGF0ZVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI2FwcGx5Q3VzdG9tRGF0ZXModmFsdWUsIHRoaXMucm93cyk7XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjYWxlbmRhckRhdGVSYW5nZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgU2t5RGF0ZXBpY2tlckNhbGVuZGFyQ2hhbmdlIHwgdW5kZWZpbmVkXG4gID4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaXNXYWl0aW5nOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgcHVibGljIGFjdGl2ZURhdGVIYXNDaGFuZ2VkID0gZmFsc2U7XG4gIHB1YmxpYyBsYWJlbHM6IGFueVtdID0gW107XG4gIHB1YmxpYyB0aXRsZSA9ICcnO1xuICBwdWJsaWMgcm93czogU2t5RGF5UGlja2VyQ29udGV4dFtdW10gPSBbXTtcbiAgcHVibGljIHdlZWtOdW1iZXJzOiBudW1iZXJbXSA9IFtdO1xuICBwdWJsaWMgZGF0ZXBpY2tlcjogU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQ7XG4gIHB1YmxpYyBDVVJSRU5UX1RIRU1FX1RFTVBMQVRFOiBhbnk7XG5cbiAgI2RheXNJbk1vbnRoOiBudW1iZXJbXSA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcbiAgI2luaXRpYWxEYXRlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihkYXRlcGlja2VyOiBTa3lEYXRlcGlja2VyQ2FsZW5kYXJJbm5lckNvbXBvbmVudCkge1xuICAgIHRoaXMuZGF0ZXBpY2tlciA9IGRhdGVwaWNrZXI7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlcGlja2VyLnN0ZXBEYXkgPSB7IG1vbnRoczogMSB9O1xuICAgIHRoaXMuI2luaXRpYWxEYXRlID0gdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpO1xuXG4gICAgdGhpcy5kYXRlcGlja2VyLnNldFJlZnJlc2hWaWV3SGFuZGxlcigoKSA9PiB0aGlzLiNyZWZyZXNoRGF5VmlldygpLCAnZGF5Jyk7XG5cbiAgICB0aGlzLmRhdGVwaWNrZXIuc2V0Q29tcGFyZUhhbmRsZXIodGhpcy4jY29tcGFyZURheXMsICdkYXknKTtcblxuICAgIHRoaXMuZGF0ZXBpY2tlci5zZXRLZXlkb3duSGFuZGxlcigoa2V5OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLiNrZXlkb3duRGF5cyhrZXksIGV2ZW50KTtcbiAgICB9LCAnZGF5Jyk7XG5cbiAgICB0aGlzLmRhdGVwaWNrZXIucmVmcmVzaFZpZXcoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGF0ZXMoc3RhcnREYXRlOiBEYXRlLCBuOiBudW1iZXIpOiBEYXRlW10ge1xuICAgIGNvbnN0IGRhdGVzOiBEYXRlW10gPSBuZXcgQXJyYXkobik7XG4gICAgbGV0IGN1cnJlbnQgPSBuZXcgRGF0ZShzdGFydERhdGUuZ2V0VGltZSgpKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGRhdGU6IERhdGU7XG4gICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUoY3VycmVudC5nZXRUaW1lKCkpO1xuICAgICAgZGF0ZSA9IHRoaXMuZGF0ZXBpY2tlci5maXhUaW1lWm9uZShkYXRlKTtcbiAgICAgIGRhdGVzW2krK10gPSBkYXRlO1xuICAgICAgY3VycmVudCA9IG5ldyBEYXRlKFxuICAgICAgICBjdXJyZW50LmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGN1cnJlbnQuZ2V0TW9udGgoKSxcbiAgICAgICAgY3VycmVudC5nZXREYXRlKCkgKyAxLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbiAgI2NvbXBhcmVEYXlzKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IG51bWJlciB7XG4gICAgY29uc3QgZDEgPSBuZXcgRGF0ZShkYXRlMS5nZXRGdWxsWWVhcigpLCBkYXRlMS5nZXRNb250aCgpLCBkYXRlMS5nZXREYXRlKCkpO1xuICAgIGNvbnN0IGQyID0gbmV3IERhdGUoZGF0ZTIuZ2V0RnVsbFllYXIoKSwgZGF0ZTIuZ2V0TW9udGgoKSwgZGF0ZTIuZ2V0RGF0ZSgpKTtcbiAgICByZXR1cm4gZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpO1xuICB9XG5cbiAgI3JlZnJlc2hEYXlWaWV3KCk6IHN0cmluZyB7XG4gICAgY29uc3QgeWVhciA9IHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbW9udGggPSB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRNb250aCgpO1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKTtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdGhpcy5kYXRlcGlja2VyLnN0YXJ0aW5nRGF5IC0gZmlyc3REYXlPZk1vbnRoLmdldERheSgpO1xuICAgIGNvbnN0IG51bURpc3BsYXllZEZyb21QcmV2aW91c01vbnRoID1cbiAgICAgIGRpZmZlcmVuY2UgPiAwID8gNyAtIGRpZmZlcmVuY2UgOiAtZGlmZmVyZW5jZTtcbiAgICBjb25zdCBmaXJzdERhdGUgPSBuZXcgRGF0ZShmaXJzdERheU9mTW9udGguZ2V0VGltZSgpKTtcblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXREYXRlKCkgIT09IHRoaXMuI2luaXRpYWxEYXRlKSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGVIYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIGlmIChudW1EaXNwbGF5ZWRGcm9tUHJldmlvdXNNb250aCA+IDApIHtcbiAgICAgIGZpcnN0RGF0ZS5zZXREYXRlKC1udW1EaXNwbGF5ZWRGcm9tUHJldmlvdXNNb250aCArIDEpO1xuICAgIH1cblxuICAgIC8vIDQyIGlzIHRoZSBudW1iZXIgb2YgZGF5cyBvbiBhIHNpeC13ZWVrIGNhbGVuZGFyXG4gICAgY29uc3QgZGF5czogRGF0ZVtdID0gdGhpcy5nZXREYXRlcyhmaXJzdERhdGUsIDQyKTtcbiAgICBjb25zdCBwaWNrZXJEYXRlczogU2t5RGF5UGlja2VyQ29udGV4dFtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MjsgaSsrKSB7XG4gICAgICBjb25zdCBfZGF0ZU9iamVjdCA9IHRoaXMuZGF0ZXBpY2tlci5jcmVhdGVEYXRlT2JqZWN0KFxuICAgICAgICBkYXlzW2ldLFxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuZm9ybWF0RGF5LFxuICAgICAgICBkYXlzW2ldLmdldE1vbnRoKCkgIT09IG1vbnRoLFxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuZGF0ZXBpY2tlcklkICsgJy0nICsgaSxcbiAgICAgICk7XG4gICAgICBwaWNrZXJEYXRlc1tpXSA9IF9kYXRlT2JqZWN0O1xuICAgIH1cblxuICAgIHRoaXMubGFiZWxzID0gW107XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCA3OyBqKyspIHtcbiAgICAgIHRoaXMubGFiZWxzW2pdID0ge307XG4gICAgICB0aGlzLmxhYmVsc1tqXS5hYmJyID0gdGhpcy5kYXRlcGlja2VyLmRhdGVGaWx0ZXIoXG4gICAgICAgIHBpY2tlckRhdGVzW2pdLmRhdGUsXG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlci5mb3JtYXREYXlIZWFkZXIsXG4gICAgICApO1xuICAgICAgdGhpcy5sYWJlbHNbal0uZnVsbCA9IHRoaXMuZGF0ZXBpY2tlci5kYXRlRmlsdGVyKFxuICAgICAgICBwaWNrZXJEYXRlc1tqXS5kYXRlLFxuICAgICAgICAnRUVFRScsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG9sZERhdGVSYW5nZSA9IHRoaXMuI2dldERhdGVSYW5nZSh0aGlzLnJvd3MpO1xuICAgIHRoaXMucm93cyA9IHRoaXMuZGF0ZXBpY2tlci5jcmVhdGVDYWxlbmRhclJvd3MocGlja2VyRGF0ZXMsIDcpO1xuICAgIGNvbnN0IG5ld0RhdGVSYW5nZSA9IHRoaXMuI2dldERhdGVSYW5nZSh0aGlzLnJvd3MpO1xuXG4gICAgaWYgKCF0aGlzLiNkYXRlUmFuZ2VSb3dzQXJlRXF1YWwob2xkRGF0ZVJhbmdlLCBuZXdEYXRlUmFuZ2UpKSB7XG4gICAgICAvLyBTYWZldHkgY2hlY2tcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAobmV3RGF0ZVJhbmdlKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJEYXRlUmFuZ2VDaGFuZ2UubmV4dCh7XG4gICAgICAgICAgc3RhcnREYXRlOiBuZXdEYXRlUmFuZ2Uuc3RhcnREYXRlLFxuICAgICAgICAgIGVuZERhdGU6IG5ld0RhdGVSYW5nZS5lbmREYXRlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJEYXRlUmFuZ2VDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGVwaWNrZXIuZGF0ZUZpbHRlcihcbiAgICAgIHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLFxuICAgICAgdGhpcy5kYXRlcGlja2VyLmZvcm1hdERheVRpdGxlLFxuICAgICk7XG4gIH1cblxuICAja2V5ZG93bkRheXMoa2V5OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGRhdGUgPSB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXREYXRlKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICBpZiAoa2V5ID09PSAnYXJyb3dsZWZ0Jykge1xuICAgICAgZGF0ZSA9IGRhdGUgLSAxO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYXJyb3d1cCcpIHtcbiAgICAgIGRhdGUgPSBkYXRlIC0gNztcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2Fycm93cmlnaHQnKSB7XG4gICAgICBkYXRlID0gZGF0ZSArIDE7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdhcnJvd2Rvd24nKSB7XG4gICAgICBkYXRlID0gZGF0ZSArIDc7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdwYWdldXAnIHx8IGtleSA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgY29uc3QgbW9udGggPVxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRNb250aCgpICsgKGtleSA9PT0gJ3BhZ2V1cCcgPyAtMSA6IDEpO1xuICAgICAgdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuc2V0TW9udGgobW9udGgsIDEpO1xuICAgICAgZGF0ZSA9IE1hdGgubWluKFxuICAgICAgICB0aGlzLiNnZXREYXlzSW5Nb250aChcbiAgICAgICAgICB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgIHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLmdldE1vbnRoKCksXG4gICAgICAgICksXG4gICAgICAgIGRhdGUsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaG9tZScpIHtcbiAgICAgIGRhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZW5kJykge1xuICAgICAgZGF0ZSA9IHRoaXMuI2dldERheXNJbk1vbnRoKFxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRNb250aCgpLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuc2V0RGF0ZShkYXRlKTtcbiAgICB0aGlzLmRhdGVwaWNrZXIuYW5ub3VuY2VEYXRlKFxuICAgICAgdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUsXG4gICAgICB0aGlzLmRhdGVwaWNrZXIuZm9ybWF0RGF5TGFiZWwsXG4gICAgKTtcbiAgfVxuXG4gICNnZXREYXlzSW5Nb250aCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBtb250aCA9PT0gMSAmJlxuICAgICAgeWVhciAlIDQgPT09IDAgJiZcbiAgICAgICh5ZWFyICUgNDAwID09PSAwIHx8IHllYXIgJSAxMDAgIT09IDApXG4gICAgICA/IDI5XG4gICAgICA6IHRoaXMuI2RheXNJbk1vbnRoW21vbnRoXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGN1c3RvbSBkYXRlIHByb3BlcnRpZXMgdG8gdGhlIGV4aXN0aW5nIGRhdGVzIGRpc3BsYXllZCBpbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICAjYXBwbHlDdXN0b21EYXRlcyhcbiAgICBjdXN0b21EYXRlczogU2t5RGF0ZXBpY2tlckN1c3RvbURhdGVbXSxcbiAgICBkYXRlUm93czogU2t5RGF5UGlja2VyQ29udGV4dFtdW10sXG4gICk6IHZvaWQge1xuICAgIGxldCBkYXRlOiBTa3lEYXlQaWNrZXJDb250ZXh0O1xuICAgIGxldCBuZXdEYXRlOiBTa3lEYXlQaWNrZXJDb250ZXh0O1xuICAgIGxldCBkYXRlSW5kZXg6IG51bWJlcjtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGN1c3RvbURhdGVzICYmIGRhdGVSb3dzKSB7XG4gICAgICBjdXN0b21EYXRlcy5mb3JFYWNoKChjdXN0b21EYXRlKSA9PiB7XG4gICAgICAgIGRhdGVJbmRleCA9IC0xO1xuICAgICAgICBkYXRlUm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAoZGF0ZUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgZGF0ZUluZGV4ID0gcm93LmZpbmRJbmRleCgoZCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZC5kYXRlLmdldFRpbWUoKSA9PT0gY3VzdG9tRGF0ZS5kYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGRhdGVJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgIGRhdGUgPSByb3dbZGF0ZUluZGV4XTtcbiAgICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgZGF0ZSB3aXRoIGEgbmV3IGluc3RhbmNlIHNvIHRoZSBkaXNwbGF5IGdldHMgdXBkYXRlZC5cbiAgICAgICAgICAgICAgbmV3RGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50OiBkYXRlLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgZGF0ZTogZGF0ZS5kYXRlLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhIWRhdGUuZGlzYWJsZWQgfHwgISFjdXN0b21EYXRlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGtleURhdGU6ICEhY3VzdG9tRGF0ZS5rZXlEYXRlIHx8ICEhZGF0ZS5rZXlEYXRlLFxuICAgICAgICAgICAgICAgIGtleURhdGVUZXh0OiBjdXN0b21EYXRlLmtleURhdGVUZXh0IHx8IGRhdGUua2V5RGF0ZVRleHQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGRhdGUubGFiZWwsXG4gICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiBkYXRlLnNlY29uZGFyeSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZGF0ZS5zZWxlY3RlZCxcbiAgICAgICAgICAgICAgICB1aWQ6IGRhdGUudWlkLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByb3dbZGF0ZUluZGV4XSA9IG5ld0RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICNkYXRlUmFuZ2VSb3dzQXJlRXF1YWwoXG4gICAgcmFuZ2VBPzogU2t5RGF0ZVJhbmdlLFxuICAgIHJhbmdlQj86IFNreURhdGVSYW5nZSxcbiAgKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFyYW5nZUEgJiYgIXJhbmdlQikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChyYW5nZUEgJiYgcmFuZ2VCKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLiNjb21wYXJlRGF5cyhyYW5nZUEuc3RhcnREYXRlLCByYW5nZUIuc3RhcnREYXRlKSA9PT0gMCAmJlxuICAgICAgICB0aGlzLiNjb21wYXJlRGF5cyhyYW5nZUEuZW5kRGF0ZSwgcmFuZ2VCLmVuZERhdGUpID09PSAwXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgI2dldERhdGVSYW5nZShyb3dzOiBTa3lEYXlQaWNrZXJDb250ZXh0W11bXSk6IFNreURhdGVSYW5nZSB8IHVuZGVmaW5lZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0RGF0ZTogcm93c1swXVswXS5kYXRlLFxuICAgICAgICBlbmREYXRlOiByb3dzW3Jvd3MubGVuZ3RoIC0gMV1bcm93c1tyb3dzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIDFdLmRhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iLCI8dGFibGVcbiAgY2xhc3M9XCJza3ktZGF5cGlja2VyLXRhYmxlXCJcbiAgcm9sZT1cImdyaWRcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiZGF0ZXBpY2tlci5kYXRlcGlja2VySWQgKyAnLXRpdGxlJ1wiXG4+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICBAZm9yIChsYWJlbCBvZiBsYWJlbHM7IHRyYWNrIGxhYmVsLmZ1bGwpIHtcbiAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJza3ktZGF0ZXBpY2tlci1jZW50ZXIgc2t5LWRhdGVwaWNrZXItd2Vla2RheXNcIj5cbiAgICAgICAgICA8IS0tIGRpc3BsYXk6IGlubGluZSAtLT5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJza3ktZGF0ZXBpY2tlci13ZWVrZGF5LXRleHRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbC5mdWxsXCJcbiAgICAgICAgICAgID57eyBsYWJlbC5hYmJyIH19PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICA8L3RoPlxuICAgICAgfVxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICA8IS0tIFdhaXQgaW5kaWNhdG9yIGZvciBhc3luYyBjdXN0b20gZGF0ZSBzdHJlYW0gLS0+XG4gICAgPHNreS13YWl0IFtpc1dhaXRpbmddPVwiaXNXYWl0aW5nXCIgLz5cbiAgICBAZm9yIChyb3cgb2Ygcm93czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8dHIgcm9sZT1cInJvd1wiPlxuICAgICAgICBAZm9yIChkYXRlIG9mIHJvdzsgdHJhY2sgZGF0ZS51aWQpIHtcbiAgICAgICAgICA8dGQgY2xhc3M9XCJza3ktZGF0ZXBpY2tlci1jZW50ZXJcIiByb2xlPVwiZ3JpZGNlbGxcIiBbaWRdPVwiZGF0ZS51aWRcIj5cbiAgICAgICAgICAgIDxza3ktZGF5cGlja2VyLWNlbGxcbiAgICAgICAgICAgICAgW2FjdGl2ZURhdGVIYXNDaGFuZ2VkXT1cImFjdGl2ZURhdGVIYXNDaGFuZ2VkXCJcbiAgICAgICAgICAgICAgW2RhdGVdPVwiZGF0ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgIDwvdHI+XG4gICAgfVxuICA8L3Rib2R5PlxuPC90YWJsZT5cbiJdfQ==","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { SkyDatepickerCalendarLabelPipe } from './datepicker-calendar-label.pipe';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./datepicker-calendar-inner.component\";\nimport * as i2 from \"@angular/common\";\n/**\n * @internal\n */\nexport class SkyMonthPickerComponent {\n constructor(datepicker) {\n this.rows = [];\n this.title = '';\n this.datepicker = datepicker;\n }\n ngOnInit() {\n this.datepicker.stepMonth = {\n years: 1,\n };\n this.datepicker.setRefreshViewHandler(() => this.#refreshMonthView(), 'month');\n this.datepicker.setCompareHandler(this.#compareMonth, 'month');\n this.datepicker.refreshView();\n this.datepicker.setKeydownHandler((key, event) => {\n this.#keydownMonths(key, event);\n }, 'month');\n }\n #compareMonth(date1, date2) {\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 #refreshMonthView() {\n const months = new Array(12);\n const year = this.datepicker.activeDate.getFullYear();\n let date;\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(date, this.datepicker.formatMonth, false, this.datepicker.datepickerId + '-' + i);\n }\n this.rows = this.datepicker.createCalendarRows(months, this.datepicker.monthColLimit);\n return this.datepicker.dateFilter(this.datepicker.activeDate, this.datepicker.formatMonthTitle);\n }\n #keydownMonths(key, event) {\n let date = this.datepicker.activeDate.getMonth();\n /* istanbul ignore else */\n /* sanity check */\n if (key === 'arrowleft') {\n date = date - 1;\n }\n else if (key === 'arrowup') {\n date = date - this.datepicker.monthColLimit;\n }\n else if (key === 'arrowright') {\n date = date + 1;\n }\n else if (key === 'arrowdown') {\n date = date + this.datepicker.monthColLimit;\n }\n else if (key === 'pageup' || key === 'pagedown') {\n const year = this.datepicker.activeDate.getFullYear() + (key === 'pageup' ? -1 : 1);\n this.datepicker.activeDate.setFullYear(year);\n }\n else if (key === 'home') {\n date = 0;\n }\n else if (key === 'end') {\n date = 11;\n }\n this.datepicker.activeDate.setMonth(date);\n this.datepicker.announceDate(this.datepicker.activeDate, this.datepicker.formatMonthLabel);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyMonthPickerComponent, deps: [{ token: i1.SkyDatepickerCalendarInnerComponent }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", type: SkyMonthPickerComponent, isStandalone: true, selector: \"sky-monthpicker\", ngImport: i0, template: \"<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\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"pipe\", type: SkyDatepickerCalendarLabelPipe, name: \"skyDatepickerCalendarLabel\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyMonthPickerComponent, decorators: [{\n type: Component,\n args: [{ imports: [CommonModule, SkyDatepickerCalendarLabelPipe], selector: 'sky-monthpicker', template: \"<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\" }]\n }], ctorParameters: () => [{ type: i1.SkyDatepickerCalendarInnerComponent }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGhwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2NhbGVuZGFyL21vbnRocGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS9zcmMvbGliL21vZHVsZXMvZGF0ZXBpY2tlci9jYWxlbmRhci9tb250aHBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUdsRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7OztBQUdsRjs7R0FFRztBQU1ILE1BQU0sT0FBTyx1QkFBdUI7SUFPbEMsWUFBWSxVQUErQztRQUpwRCxTQUFJLEdBQTRCLEVBQUUsQ0FBQztRQUVuQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBR2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUc7WUFDMUIsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FDbkMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQzlCLE9BQU8sQ0FDUixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFF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VyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUMxQixJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FDakMsQ0FBQztJQUNKLENBQUM7K0dBMUZVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDJFQ2ZwQyxnbENBZ0NBLDJDRHJCWSxZQUFZLHdIQUFFLDhCQUE4Qjs7NEZBSTNDLHVCQUF1QjtrQkFMbkMsU0FBUzs4QkFDQyxDQUFDLFlBQVksRUFBRSw4QkFBOEIsQ0FBQyxZQUM3QyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXItY2FsZW5kYXItaW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDYWxlbmRhckxhYmVsUGlwZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jYWxlbmRhci1sYWJlbC5waXBlJztcbmltcG9ydCB7IFNreURheVBpY2tlckNvbnRleHQgfSBmcm9tICcuL2RheXBpY2tlci1jb250ZXh0JztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFNreURhdGVwaWNrZXJDYWxlbmRhckxhYmVsUGlwZV0sXG4gIHNlbGVjdG9yOiAnc2t5LW1vbnRocGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICdtb250aHBpY2tlci5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreU1vbnRoUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGRhdGVwaWNrZXI6IFNreURhdGVwaWNrZXJDYWxlbmRhcklubmVyQ29tcG9uZW50O1xuXG4gIHB1YmxpYyByb3dzOiBTa3lEYXlQaWNrZXJDb250ZXh0W11bXSA9IFtdO1xuXG4gIHB1YmxpYyB0aXRsZSA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGVwaWNrZXI6IFNreURhdGVwaWNrZXJDYWxlbmRhcklubmVyQ29tcG9uZW50KSB7XG4gICAgdGhpcy5kYXRlcGlja2VyID0gZGF0ZXBpY2tlcjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVwaWNrZXIuc3RlcE1vbnRoID0ge1xuICAgICAgeWVhcnM6IDEsXG4gICAgfTtcblxuICAgIHRoaXMuZGF0ZXBpY2tlci5zZXRSZWZyZXNoVmlld0hhbmRsZXIoXG4gICAgICAoKSA9PiB0aGlzLiNyZWZyZXNoTW9udGhWaWV3KCksXG4gICAgICAnbW9udGgnLFxuICAgICk7XG5cbiAgICB0aGlzLmRhdGVwaWNrZXIuc2V0Q29tcGFyZUhhbmRsZXIodGhpcy4jY29tcGFyZU1vbnRoLCAnbW9udGgnKTtcblxuICAgIHRoaXMuZGF0ZXBpY2tlci5yZWZyZXNoVmlldygpO1xuXG4gICAgdGhpcy5kYXRlcGlja2VyLnNldEtleWRvd25IYW5kbGVyKChrZXk6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuI2tleWRvd25Nb250aHMoa2V5LCBldmVudCk7XG4gICAgfSwgJ21vbnRoJyk7XG4gIH1cblxuICAjY29tcGFyZU1vbnRoKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IG51bWJlciB7XG4gICAgY29uc3QgZDEgPSBuZXcgRGF0ZShkYXRlMS5nZXRGdWxsWWVhcigpLCBkYXRlMS5nZXRNb250aCgpKTtcbiAgICBjb25zdCBkMiA9IG5ldyBEYXRlKGRhdGUyLmdldEZ1bGxZZWFyKCksIGRhdGUyLmdldE1vbnRoKCkpO1xuICAgIHJldHVybiBkMS5nZXRUaW1lKCkgLSBkMi5nZXRUaW1lKCk7XG4gIH1cblxuICAjcmVmcmVzaE1vbnRoVmlldygpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1vbnRocyA9IG5ldyBBcnJheTxTa3lEYXlQaWNrZXJDb250ZXh0PigxMik7XG4gICAgY29uc3QgeWVhcjogbnVtYmVyID0gdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBsZXQgZGF0ZTogRGF0ZTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIGksIDEpO1xuICAgICAgZGF0ZSA9IHRoaXMuZGF0ZXBpY2tlci5maXhUaW1lWm9uZShkYXRlKTtcbiAgICAgIG1vbnRoc1tpXSA9IHRoaXMuZGF0ZXBpY2tlci5jcmVhdGVEYXRlT2JqZWN0KFxuICAgICAgICBkYXRlLFxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuZm9ybWF0TW9udGgsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuZGF0ZXBpY2tlcklkICsgJy0nICsgaSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yb3dzID0gdGhpcy5kYXRlcGlja2VyLmNyZWF0ZUNhbGVuZGFyUm93cyhcbiAgICAgIG1vbnRocyxcbiAgICAgIHRoaXMuZGF0ZXBpY2tlci5tb250aENvbExpbWl0LFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRlcGlja2VyLmRhdGVGaWx0ZXIoXG4gICAgICB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZSxcbiAgICAgIHRoaXMuZGF0ZXBpY2tlci5mb3JtYXRNb250aFRpdGxlLFxuICAgICk7XG4gIH1cblxuICAja2V5ZG93bk1vbnRocyhrZXk6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZGF0ZSA9IHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLmdldE1vbnRoKCk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIGlmIChrZXkgPT09ICdhcnJvd2xlZnQnKSB7XG4gICAgICBkYXRlID0gZGF0ZSAtIDE7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdhcnJvd3VwJykge1xuICAgICAgZGF0ZSA9IGRhdGUgLSB0aGlzLmRhdGVwaWNrZXIubW9udGhDb2xMaW1pdDtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2Fycm93cmlnaHQnKSB7XG4gICAgICBkYXRlID0gZGF0ZSArIDE7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdhcnJvd2Rvd24nKSB7XG4gICAgICBkYXRlID0gZGF0ZSArIHRoaXMuZGF0ZXBpY2tlci5tb250aENvbExpbWl0O1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncGFnZXVwJyB8fCBrZXkgPT09ICdwYWdlZG93bicpIHtcbiAgICAgIGNvbnN0IHllYXIgPVxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpICsgKGtleSA9PT0gJ3BhZ2V1cCcgPyAtMSA6IDEpO1xuICAgICAgdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoeWVhcik7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdob21lJykge1xuICAgICAgZGF0ZSA9IDA7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdlbmQnKSB7XG4gICAgICBkYXRlID0gMTE7XG4gICAgfVxuICAgIHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLnNldE1vbnRoKGRhdGUpO1xuICAgIHRoaXMuZGF0ZXBpY2tlci5hbm5vdW5jZURhdGUoXG4gICAgICB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZSxcbiAgICAgIHRoaXMuZGF0ZXBpY2tlci5mb3JtYXRNb250aExhYmVsLFxuICAgICk7XG4gIH1cbn1cbiIsIjx0YWJsZSByb2xlPVwiZ3JpZFwiPlxuICA8dGJvZHk+XG4gICAgQGZvciAocm93IG9mIHJvd3M7IHRyYWNrICRpbmRleCkge1xuICAgICAgPHRyPlxuICAgICAgICBAZm9yIChkYXRlIG9mIHJvdzsgdHJhY2sgZGF0ZS51aWQpIHtcbiAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIHJvbGU9XCJncmlkY2VsbFwiIFtpZF09XCJkYXRlLnVpZFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktZGF0ZXBpY2tlci1idG4tZGF0ZVwiXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3NreS1kYXRlcGlja2VyLWJ0bi1zZWxlY3RlZCc6IGRhdGUuc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgJ3NreS1idG4tZGlzYWJsZWQnOiBkYXRlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgICdza3ktYnRuLWFjdGl2ZSc6IGRhdGVwaWNrZXIuaXNBY3RpdmUoZGF0ZSlcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgZGF0ZS5kYXRlXG4gICAgICAgICAgICAgICAgICB8IHNreURhdGVwaWNrZXJDYWxlbmRhckxhYmVsOiBkYXRlcGlja2VyLmZvcm1hdE1vbnRoTGFiZWxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRhdGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0ZXBpY2tlci5zZWxlY3RDYWxlbmRhcigkZXZlbnQsIGRhdGUuZGF0ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7ICdza3ktZGF0ZXBpY2tlci1jdXJyZW50JzogZGF0ZS5jdXJyZW50IH1cIj57e1xuICAgICAgICAgICAgICAgIGRhdGUubGFiZWxcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICA8L3RyPlxuICAgIH1cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { SkyDatepickerCalendarLabelPipe } from './datepicker-calendar-label.pipe';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./datepicker-calendar-inner.component\";\nimport * as i2 from \"@angular/common\";\n/**\n * @internal\n */\nexport class SkyYearPickerComponent {\n constructor(datepicker) {\n this.rows = [];\n this.title = '';\n this.datepicker = datepicker;\n }\n ngOnInit() {\n this.datepicker.stepYear = { years: this.datepicker.yearRange };\n this.datepicker.setRefreshViewHandler(() => this.#refreshYearView(), 'year');\n this.datepicker.setCompareHandler(this.#compareYears, 'year');\n this.datepicker.setKeydownHandler((key, event) => {\n this.#keydownYears(key, event);\n }, 'year');\n this.datepicker.refreshView();\n }\n getStartingYear(year) {\n return (Math.floor((year - 1) / this.datepicker.yearRange) *\n this.datepicker.yearRange +\n 1);\n }\n #compareYears(date1, date2) {\n return date1.getFullYear() - date2.getFullYear();\n }\n #refreshYearView() {\n const years = new Array(this.datepicker.yearRange);\n let date;\n const start = this.getStartingYear(this.datepicker.activeDate.getFullYear());\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 years[i] = this.datepicker.createDateObject(date, this.datepicker.formatYear, false, this.datepicker.datepickerId + '-' + i);\n }\n const newTitle = [\n years[0].label,\n years[this.datepicker.yearRange - 1].label,\n ].join(' - ');\n this.rows = this.datepicker.createCalendarRows(years, this.datepicker.yearColLimit);\n return newTitle;\n }\n #keydownYears(key, event) {\n let date = this.datepicker.activeDate.getFullYear();\n /* istanbul ignore else */\n /* sanity check */\n if (key === 'arrowleft') {\n date = date - 1;\n }\n else if (key === 'arrowup') {\n date = date - this.datepicker.yearColLimit;\n }\n else if (key === 'arrowright') {\n date = date + 1;\n }\n else if (key === 'arrowdown') {\n date = date + this.datepicker.yearColLimit;\n }\n else if (key === 'pageup' || key === 'pagedown') {\n date += (key === 'pageup' ? -1 : 1) * this.datepicker.yearRange;\n }\n else if (key === 'home') {\n date = this.getStartingYear(this.datepicker.activeDate.getFullYear());\n }\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(this.datepicker.activeDate, this.datepicker.formatYearLabel);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyYearPickerComponent, deps: [{ token: i1.SkyDatepickerCalendarInnerComponent }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", type: SkyYearPickerComponent, isStandalone: true, selector: \"sky-yearpicker\", ngImport: i0, template: \"<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\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"pipe\", type: SkyDatepickerCalendarLabelPipe, name: \"skyDatepickerCalendarLabel\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyYearPickerComponent, decorators: [{\n type: Component,\n args: [{ imports: [CommonModule, SkyDatepickerCalendarLabelPipe], selector: 'sky-yearpicker', template: \"<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\" }]\n }], ctorParameters: () => [{ type: i1.SkyDatepickerCalendarInnerComponent }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWVhcnBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvY2FsZW5kYXIveWVhcnBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvY2FsZW5kYXIveWVhcnBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUdsRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7OztBQUdsRjs7R0FFRztBQU1ILE1BQU0sT0FBTyxzQkFBc0I7SUFPakMsWUFBWSxVQUErQztRQUpwRCxTQUFJLEdBQTRCLEVBQUUsQ0FBQztRQUVuQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBR2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVoRSxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUNuQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFDN0IsTUFBTSxDQUNQLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFvQixFQUFFLEVBQUU7WUFDdEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRVgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRVMsZUFBZSxDQUFDLElBQVk7UUFDcEMsT0FBTyxDQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTO1lBQzNCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFXLEVBQUUsS0FBVztRQUNwQyxPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFzQixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksSUFBVSxDQUFDO1FBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQ3pDLENBQUM7UUFFRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNuRCxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWxDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUN6QyxJQUFJLEVBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQzFCLEtBQUssRUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUN2QyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHO1lBQ2YsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSztTQUMzQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FDNUMsS0FBSyxFQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUM3QixDQUFDO1FBRUYsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFXLEVBQUUsS0FBb0I7UUFDN0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFcEQsMEJBQTBCO1FBQzFCLGtCQUFrQjtRQUNsQixJQUFJLEdBQUcsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUN4QixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUM3QyxDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDaEMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDbEIsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQy9CLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDN0MsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ2xFLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUMxQixJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJO2dCQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzlELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztvQkFDekIsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUNoQyxDQUFDO0lBQ0osQ0FBQzsrR0FuR1Usc0JBQXNCO21HQUF0QixzQkFBc0IsMEVDZm5DLG9rQ0FnQ0EsMkNEckJZLFlBQVksd0hBQUUsOEJBQThCOzs0RkFJM0Msc0JBQXNCO2tCQUxsQyxTQUFTOzhCQUNDLENBQUMsWUFBWSxFQUFFLDhCQUE4QixDQUFDLFlBQzdDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ2FsZW5kYXJJbm5lckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNhbGVuZGFyTGFiZWxQaXBlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWNhbGVuZGFyLWxhYmVsLnBpcGUnO1xuaW1wb3J0IHsgU2t5RGF5UGlja2VyQ29udGV4dCB9IGZyb20gJy4vZGF5cGlja2VyLWNvbnRleHQnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU2t5RGF0ZXBpY2tlckNhbGVuZGFyTGFiZWxQaXBlXSxcbiAgc2VsZWN0b3I6ICdza3kteWVhcnBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAneWVhcnBpY2tlci5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreVllYXJQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgZGF0ZXBpY2tlcjogU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQ7XG5cbiAgcHVibGljIHJvd3M6IFNreURheVBpY2tlckNvbnRleHRbXVtdID0gW107XG5cbiAgcHVibGljIHRpdGxlID0gJyc7XG5cbiAgY29uc3RydWN0b3IoZGF0ZXBpY2tlcjogU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLmRhdGVwaWNrZXIgPSBkYXRlcGlja2VyO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZXBpY2tlci5zdGVwWWVhciA9IHsgeWVhcnM6IHRoaXMuZGF0ZXBpY2tlci55ZWFyUmFuZ2UgfTtcblxuICAgIHRoaXMuZGF0ZXBpY2tlci5zZXRSZWZyZXNoVmlld0hhbmRsZXIoXG4gICAgICAoKSA9PiB0aGlzLiNyZWZyZXNoWWVhclZpZXcoKSxcbiAgICAgICd5ZWFyJyxcbiAgICApO1xuXG4gICAgdGhpcy5kYXRlcGlja2VyLnNldENvbXBhcmVIYW5kbGVyKHRoaXMuI2NvbXBhcmVZZWFycywgJ3llYXInKTtcblxuICAgIHRoaXMuZGF0ZXBpY2tlci5zZXRLZXlkb3duSGFuZGxlcigoa2V5OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLiNrZXlkb3duWWVhcnMoa2V5LCBldmVudCk7XG4gICAgfSwgJ3llYXInKTtcblxuICAgIHRoaXMuZGF0ZXBpY2tlci5yZWZyZXNoVmlldygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXJ0aW5nWWVhcih5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICBNYXRoLmZsb29yKCh5ZWFyIC0gMSkgLyB0aGlzLmRhdGVwaWNrZXIueWVhclJhbmdlKSAqXG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlci55ZWFyUmFuZ2UgK1xuICAgICAgMVxuICAgICk7XG4gIH1cblxuICAjY29tcGFyZVllYXJzKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRhdGUxLmdldEZ1bGxZZWFyKCkgLSBkYXRlMi5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgI3JlZnJlc2hZZWFyVmlldygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHllYXJzID0gbmV3IEFycmF5PFNreURheVBpY2tlckNvbnRleHQ+KHRoaXMuZGF0ZXBpY2tlci55ZWFyUmFuZ2UpO1xuICAgIGxldCBkYXRlOiBEYXRlO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5nZXRTdGFydGluZ1llYXIoXG4gICAgICB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0ZXBpY2tlci55ZWFyUmFuZ2U7IGkrKykge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlKTtcbiAgICAgIGRhdGUuc2V0RnVsbFllYXIoc3RhcnQgKyBpLCAwLCAxKTtcblxuICAgICAgeWVhcnNbaV0gPSB0aGlzLmRhdGVwaWNrZXIuY3JlYXRlRGF0ZU9iamVjdChcbiAgICAgICAgZGF0ZSxcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyLmZvcm1hdFllYXIsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuZGF0ZXBpY2tlcklkICsgJy0nICsgaSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3VGl0bGUgPSBbXG4gICAgICB5ZWFyc1swXS5sYWJlbCxcbiAgICAgIHllYXJzW3RoaXMuZGF0ZXBpY2tlci55ZWFyUmFuZ2UgLSAxXS5sYWJlbCxcbiAgICBdLmpvaW4oJyAtICcpO1xuICAgIHRoaXMucm93cyA9IHRoaXMuZGF0ZXBpY2tlci5jcmVhdGVDYWxlbmRhclJvd3MoXG4gICAgICB5ZWFycyxcbiAgICAgIHRoaXMuZGF0ZXBpY2tlci55ZWFyQ29sTGltaXQsXG4gICAgKTtcblxuICAgIHJldHVybiBuZXdUaXRsZTtcbiAgfVxuXG4gICNrZXlkb3duWWVhcnMoa2V5OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGRhdGUgPSB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICBpZiAoa2V5ID09PSAnYXJyb3dsZWZ0Jykge1xuICAgICAgZGF0ZSA9IGRhdGUgLSAxO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYXJyb3d1cCcpIHtcbiAgICAgIGRhdGUgPSBkYXRlIC0gdGhpcy5kYXRlcGlja2VyLnllYXJDb2xMaW1pdDtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2Fycm93cmlnaHQnKSB7XG4gICAgICBkYXRlID0gZGF0ZSArIDE7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdhcnJvd2Rvd24nKSB7XG4gICAgICBkYXRlID0gZGF0ZSArIHRoaXMuZGF0ZXBpY2tlci55ZWFyQ29sTGltaXQ7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdwYWdldXAnIHx8IGtleSA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgZGF0ZSArPSAoa2V5ID09PSAncGFnZXVwJyA/IC0xIDogMSkgKiB0aGlzLmRhdGVwaWNrZXIueWVhclJhbmdlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaG9tZScpIHtcbiAgICAgIGRhdGUgPSB0aGlzLmdldFN0YXJ0aW5nWWVhcih0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2VuZCcpIHtcbiAgICAgIGRhdGUgPVxuICAgICAgICB0aGlzLmdldFN0YXJ0aW5nWWVhcih0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKSArXG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlci55ZWFyUmFuZ2UgLVxuICAgICAgICAxO1xuICAgIH1cbiAgICB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5zZXRGdWxsWWVhcihkYXRlKTtcbiAgICB0aGlzLmRhdGVwaWNrZXIuYW5ub3VuY2VEYXRlKFxuICAgICAgdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUsXG4gICAgICB0aGlzLmRhdGVwaWNrZXIuZm9ybWF0WWVhckxhYmVsLFxuICAgICk7XG4gIH1cbn1cbiIsIjx0YWJsZSByb2xlPVwiZ3JpZFwiPlxuICA8dGJvZHk+XG4gICAgQGZvciAocm93IG9mIHJvd3M7IHRyYWNrICRpbmRleCkge1xuICAgICAgPHRyPlxuICAgICAgICBAZm9yIChkYXRlIG9mIHJvdzsgdHJhY2sgZGF0ZS51aWQpIHtcbiAgICAgICAgICA8dGQgY2xhc3M9XCJza3ktZGF0ZXBpY2tlci1yb3dcIiByb2xlPVwiZ3JpZGNlbGxcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWRlZmF1bHQgc2t5LWRhdGVwaWNrZXItYnRuLWRhdGVcIlxuICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdza3ktZGF0ZXBpY2tlci1idG4tc2VsZWN0ZWQnOiBkYXRlLnNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICdza3ktYnRuLWRpc2FibGVkJzogZGF0ZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAnc2t5LWJ0bi1hY3RpdmUnOiBkYXRlcGlja2VyLmlzQWN0aXZlKGRhdGUpXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgIGRhdGUuZGF0ZVxuICAgICAgICAgICAgICAgICAgfCBza3lEYXRlcGlja2VyQ2FsZW5kYXJMYWJlbDogZGF0ZXBpY2tlci5mb3JtYXRZZWFyTGFiZWxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRhdGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0ZXBpY2tlci5zZWxlY3RDYWxlbmRhcigkZXZlbnQsIGRhdGUuZGF0ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7ICdza3ktZGF0ZXBpY2tlci1jdXJyZW50JzogZGF0ZS5jdXJyZW50IH1cIj57e1xuICAgICAgICAgICAgICAgIGRhdGUubGFiZWxcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICA8L3RyPlxuICAgIH1cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class SkyDatepickerConfigService {\n constructor() {\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 this.startingDay = 0;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerConfigService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerConfigService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS9zcmMvbGliL21vZHVsZXMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTywwQkFBMEI7SUFIdkM7UUEwQkU7Ozs7V0FJRztRQUNJLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO0tBQ3hCOytHQTdCWSwwQkFBMEI7bUhBQTFCLDBCQUEwQixjQUZ6QixNQUFNOzs0RkFFUCwwQkFBMEI7a0JBSHRDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2Uge1xuICAvKipcbiAgICogVGhlIGRhdGUgZm9ybWF0IGZvciB0aGUgaW5wdXQuXG4gICAqIEBkZWZhdWx0IFwiTU0vREQvWVlZWVwiXG4gICAqL1xuICBwdWJsaWMgZGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IHNlbGVjdGFibGUgZGF0ZSB0aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBwdWJsaWMgbWF4RGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGVhcmxpZXN0IHNlbGVjdGFibGUgZGF0ZSB0aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBwdWJsaWMgbWluRGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGRhdGUgdG8gb3BlbiB0aGUgY2FsZW5kYXIgdG8gaW5pdGlhbGx5LlxuICAgKiBAZGVmYXVsdCB0aGUgY3VycmVudCBkYXRlXG4gICAqL1xuICBwdWJsaWMgc3RhcnRBdERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFydGluZyBkYXkgb2YgdGhlIHdlZWsgaW4gdGhlIGNhbGVuZGFyLFxuICAgKiB3aGVyZSBgMGAgc2V0cyB0aGUgc3RhcnRpbmcgZGF5IHRvIFN1bmRheS5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgcHVibGljIHN0YXJ0aW5nRGF5ID0gMDtcbn1cbiJdfQ==","import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';\nimport { SkyDateFormatter } from '../date-formatter';\nimport { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';\nimport { SkyDayPickerComponent } from './daypicker.component';\nimport { SkyMonthPickerComponent } from './monthpicker.component';\nimport { SkyYearPickerComponent } from './yearpicker.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../datepicker-config.service\";\n/**\n * @internal\n */\nexport class SkyDatepickerCalendarComponent {\n /** starting day of the week from 0-6 (0=Sunday, ..., 6=Saturday) */\n set startingDay(start) {\n this.#_startingDay = start ?? 0;\n }\n get startingDay() {\n return this.#_startingDay;\n }\n #formatter;\n #_startingDay;\n #config;\n constructor(config) {\n this.calendarDateRangeChange = new EventEmitter();\n this.calendarModeChange = new EventEmitter();\n this.selectedDateChange = new EventEmitter(undefined);\n this._now = new Date();\n this.#formatter = new SkyDateFormatter();\n this.#_startingDay = 0;\n this.#config = config;\n this.configureOptions();\n }\n configureOptions() {\n Object.assign(this, this.#config);\n }\n onCalendarDateRangeChange(event) {\n this.calendarDateRangeChange.next(event);\n }\n onCalendarModeChange(event) {\n this.calendarModeChange.emit(event);\n }\n onSelectedDateChange(event) {\n this.selectedDateChange.emit(event);\n }\n writeValue(value) {\n if (value !== undefined &&\n this.#formatter.dateIsValid(value) &&\n this.selectedDate !== undefined &&\n this.datepicker?.compareHandlerDay &&\n this.datepicker.compareHandlerDay(value, this.selectedDate) === 0) {\n return;\n }\n if (value && this.#formatter.dateIsValid(value)) {\n this.selectedDate = value;\n this.datepicker?.select(value, false);\n }\n else {\n this.selectedDate = this.startAtDate ?? new Date();\n this.datepicker?.select(this.startAtDate ?? new Date(), false);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerCalendarComponent, deps: [{ token: i1.SkyDatepickerConfigService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", type: SkyDatepickerCalendarComponent, isStandalone: true, selector: \"sky-datepicker-calendar\", inputs: { customDates: \"customDates\", isDaypickerWaiting: \"isDaypickerWaiting\", minDate: \"minDate\", maxDate: \"maxDate\", startAtDate: \"startAtDate\", selectedDate: \"selectedDate\", startingDay: \"startingDay\" }, outputs: { calendarDateRangeChange: \"calendarDateRangeChange\", calendarModeChange: \"calendarModeChange\", selectedDateChange: \"selectedDateChange\" }, viewQueries: [{ propertyName: \"datepicker\", first: true, predicate: SkyDatepickerCalendarInnerComponent, descendants: true, read: SkyDatepickerCalendarInnerComponent, static: true }], ngImport: i0, template: \"<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\", styles: [\".sky-datepicker-calendar{display:block}\\n\"], dependencies: [{ kind: \"component\", type: SkyDatepickerCalendarInnerComponent, selector: \"sky-datepicker-inner\", inputs: [\"customDates\", \"startingDay\", \"minDate\", \"maxDate\", \"startAtDate\", \"selectedDate\"], outputs: [\"selectedDateChange\", \"calendarModeChange\"] }, { kind: \"component\", type: SkyDayPickerComponent, selector: \"sky-daypicker\", inputs: [\"customDates\", \"isWaiting\"], outputs: [\"calendarDateRangeChange\"] }, { kind: \"component\", type: SkyMonthPickerComponent, selector: \"sky-monthpicker\" }, { kind: \"component\", type: SkyYearPickerComponent, selector: \"sky-yearpicker\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerCalendarComponent, decorators: [{\n type: Component,\n args: [{ imports: [\n SkyDatepickerCalendarInnerComponent,\n SkyDayPickerComponent,\n SkyMonthPickerComponent,\n SkyYearPickerComponent,\n ], selector: 'sky-datepicker-calendar', template: \"<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\", styles: [\".sky-datepicker-calendar{display:block}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.SkyDatepickerConfigService }], propDecorators: { customDates: [{\n type: Input\n }], isDaypickerWaiting: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], startAtDate: [{\n type: Input\n }], selectedDate: [{\n type: Input\n }], startingDay: [{\n type: Input\n }], calendarDateRangeChange: [{\n type: Output\n }], calendarModeChange: [{\n type: Output\n }], selectedDateChange: [{\n type: Output\n }], datepicker: [{\n type: ViewChild,\n args: [SkyDatepickerCalendarInnerComponent, {\n read: SkyDatepickerCalendarInnerComponent,\n static: true,\n }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvY2FsZW5kYXIvZGF0ZXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvY2FsZW5kYXIvZGF0ZXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUtyRCxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBRWhFOztHQUVHO0FBWUgsTUFBTSxPQUFPLDhCQUE4QjtJQW9CekMsb0VBQW9FO0lBQ3BFLElBQ1csV0FBVyxDQUFDLEtBQXlCO1FBQzlDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBcUJELFVBQVUsQ0FBMEI7SUFFcEMsYUFBYSxDQUFLO0lBRWxCLE9BQU8sQ0FBNkI7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cHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreURhdGVGb3JtYXR0ZXIgfSBmcm9tICcuLi9kYXRlLWZvcm1hdHRlcic7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2RhdGVwaWNrZXItY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckN1c3RvbURhdGUgfSBmcm9tICcuLi9kYXRlcGlja2VyLWN1c3RvbS1kYXRlJztcblxuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNhbGVuZGFyQ2hhbmdlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWNhbGVuZGFyLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ2FsZW5kYXJJbm5lckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5RGF5UGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXlwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreU1vbnRoUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9tb250aHBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5WWVhclBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4veWVhcnBpY2tlci5jb21wb25lbnQnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgaW1wb3J0czogW1xuICAgIFNreURhdGVwaWNrZXJDYWxlbmRhcklubmVyQ29tcG9uZW50LFxuICAgIFNreURheVBpY2tlckNvbXBvbmVudCxcbiAgICBTa3lNb250aFBpY2tlckNvbXBvbmVudCxcbiAgICBTa3lZZWFyUGlja2VyQ29tcG9uZW50LFxuICBdLFxuICBzZWxlY3RvcjogJ3NreS1kYXRlcGlja2VyLWNhbGVuZGFyJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGVwaWNrZXItY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGVwaWNrZXJDYWxlbmRhckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21EYXRlczogU2t5RGF0ZXBpY2tlckN1c3RvbURhdGVbXSB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaXNEYXlwaWNrZXJXYWl0aW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5EYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGFydEF0RGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICAvKiogY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlbGVjdGVkRGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICAvKiogc3RhcnRpbmcgZGF5IG9mIHRoZSB3ZWVrIGZyb20gMC02ICgwPVN1bmRheSwgLi4uLCA2PVNhdHVyZGF5KSAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0YXJ0aW5nRGF5KHN0YXJ0OiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc3RhcnRpbmdEYXkgPSBzdGFydCA/PyAwO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGFydGluZ0RheSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfc3RhcnRpbmdEYXk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNhbGVuZGFyRGF0ZVJhbmdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICBTa3lEYXRlcGlja2VyQ2FsZW5kYXJDaGFuZ2UgfCB1bmRlZmluZWRcbiAgPigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2FsZW5kYXJNb2RlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KHVuZGVmaW5lZCk7XG5cbiAgQFZpZXdDaGlsZChTa3lEYXRlcGlja2VyQ2FsZW5kYXJJbm5lckNvbXBvbmVudCwge1xuICAgIHJlYWQ6IFNreURhdGVwaWNrZXJDYWxlbmRhcklubmVyQ29tcG9uZW50LFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHVibGljIGRhdGVwaWNrZXI6IFNreURhdGVwaWNrZXJDYWxlbmRhcklubmVyQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBfbm93OiBEYXRlID0gbmV3IERhdGUoKTtcblxuICAjZm9ybWF0dGVyID0gbmV3IFNreURhdGVGb3JtYXR0ZXIoKTtcblxuICAjX3N0YXJ0aW5nRGF5ID0gMDtcblxuICAjY29uZmlnOiBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlKSB7XG4gICAgdGhpcy4jY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGNvbmZpZ3VyZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB0aGlzLiNjb25maWcpO1xuICB9XG5cbiAgcHVibGljIG9uQ2FsZW5kYXJEYXRlUmFuZ2VDaGFuZ2UoXG4gICAgZXZlbnQ6IFNreURhdGVwaWNrZXJDYWxlbmRhckNoYW5nZSB8IHVuZGVmaW5lZCxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5jYWxlbmRhckRhdGVSYW5nZUNoYW5nZS5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNhbGVuZGFyTW9kZUNoYW5nZShldmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jYWxlbmRhck1vZGVDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3RlZERhdGVDaGFuZ2UoZXZlbnQ6IERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy4jZm9ybWF0dGVyLmRhdGVJc1ZhbGlkKHZhbHVlKSAmJlxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5kYXRlcGlja2VyPy5jb21wYXJlSGFuZGxlckRheSAmJlxuICAgICAgdGhpcy5kYXRlcGlja2VyLmNvbXBhcmVIYW5kbGVyRGF5KHZhbHVlLCB0aGlzLnNlbGVjdGVkRGF0ZSkgPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgJiYgdGhpcy4jZm9ybWF0dGVyLmRhdGVJc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlcj8uc2VsZWN0KHZhbHVlLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdGhpcy5zdGFydEF0RGF0ZSA/PyBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy5kYXRlcGlja2VyPy5zZWxlY3QodGhpcy5zdGFydEF0RGF0ZSA/PyBuZXcgRGF0ZSgpLCBmYWxzZSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2t5LWRhdGVwaWNrZXItY2FsZW5kYXJcIj5cbiAgPHNreS1kYXRlcGlja2VyLWlubmVyXG4gICAgW2N1c3RvbURhdGVzXT1cImN1c3RvbURhdGVzXCJcbiAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICBbc3RhcnRBdERhdGVdPVwic3RhcnRBdERhdGVcIlxuICAgIFtzZWxlY3RlZERhdGVdPVwic2VsZWN0ZWREYXRlXCJcbiAgICBbc3RhcnRpbmdEYXldPVwic3RhcnRpbmdEYXlcIlxuICAgIChjYWxlbmRhck1vZGVDaGFuZ2UpPVwib25DYWxlbmRhck1vZGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHNlbGVjdGVkRGF0ZUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic2t5LWRhdGVwaWNrZXItY2FsZW5kYXItdGFibGUtY29udGFpbmVyXCJcbiAgICAgIGF1dG9mb2N1c1xuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIChrZXlkb3duKT1cImRhdGVwaWNrZXI/Lm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICA+XG4gICAgICBAaWYgKGRhdGVwaWNrZXI/LmRhdGVwaWNrZXJNb2RlID09PSAnZGF5Jykge1xuICAgICAgICA8c2t5LWRheXBpY2tlclxuICAgICAgICAgIFtjdXN0b21EYXRlc109XCJjdXN0b21EYXRlc1wiXG4gICAgICAgICAgW2lzV2FpdGluZ109XCJpc0RheXBpY2tlcldhaXRpbmdcIlxuICAgICAgICAgIChjYWxlbmRhckRhdGVSYW5nZUNoYW5nZSk9XCJvbkNhbGVuZGFyRGF0ZVJhbmdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgfSBAZWxzZSBpZiAoZGF0ZXBpY2tlcj8uZGF0ZXBpY2tlck1vZGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgPHNreS1tb250aHBpY2tlciAvPlxuICAgICAgfSBAZWxzZSBpZiAoZGF0ZXBpY2tlcj8uZGF0ZXBpY2tlck1vZGUgPT09ICd5ZWFyJykge1xuICAgICAgICA8c2t5LXllYXJwaWNrZXIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9za3ktZGF0ZXBpY2tlci1pbm5lcj5cbjwvZGl2PlxuIl19","import { DestroyRef, Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject, fromEvent } from 'rxjs';\nimport * as i0 from \"@angular/core\";\n/**\n * Handles interactions between the datepicker host component and the input\n * directive.\n * @internal\n */\nexport class SkyDatepickerHostService {\n #destroyRef = inject(DestroyRef);\n /**\n * Fires when the picker or trigger button loses focus.\n */\n get focusout() {\n return this.#focusoutObs;\n }\n #focusout = new Subject();\n #focusoutObs = this.#focusout.asObservable();\n #host;\n #isInitialized = false;\n ngOnDestroy() {\n this.#focusout.complete();\n }\n init(host) {\n if (this.#isInitialized) {\n throw new Error('The datepicker host service is already initialized.');\n }\n this.#host = host;\n this.#isInitialized = true;\n const triggerButtonEl = this.#host.triggerButtonRef?.nativeElement;\n if (triggerButtonEl instanceof Element) {\n fromEvent(triggerButtonEl, 'focusout')\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe((evt) => {\n this.#handleFocusoutEvent(evt);\n });\n }\n }\n isFocusingDatepicker(evt) {\n const buttonEl = this.#host?.triggerButtonRef?.nativeElement;\n return buttonEl instanceof Element && buttonEl === evt.relatedTarget;\n }\n #handleFocusoutEvent(evt) {\n if (this.#host) {\n const relatedTarget = evt.relatedTarget;\n const overlayEl = this.#host.getPickerRef()?.nativeElement;\n const isFocusingOverlay = relatedTarget instanceof Element &&\n !!overlayEl?.contains(relatedTarget);\n if (relatedTarget === null || !isFocusingOverlay) {\n this.#focusout.next(evt);\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerHostService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerHostService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerHostService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1ob3N0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1ob3N0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUl0RDs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLHdCQUF3QjtJQUMxQixXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTFDOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDdEMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0MsS0FBSyxDQUFxQztJQUMxQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBRWhCLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sSUFBSSxDQUFDLElBQTRCO1FBQ3RDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFM0IsTUFBTSxlQUFlLEdBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDO1FBRTdDLElBQUksZUFBZSxZQUFZLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLFNBQVMsQ0FBYSxlQUFlLEVBQUUsVUFBVSxDQUFDO2lCQUMvQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUMxQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxHQUFlO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDO1FBRTdELE9BQU8sUUFBUSxZQUFZLE9BQU8sSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDLGFBQWEsQ0FBQztJQUN2RSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBZTtRQUNsQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7WUFDeEMsTUFBTSxTQUFTLEdBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLENBQUM7WUFFM0MsTUFBTSxpQkFBaUIsR0FDckIsYUFBYSxZQUFZLE9BQU87Z0JBQ2hDLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXZDLElBQUksYUFBYSxLQUFLLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0EzRFUsd0JBQXdCO21IQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuXG4vKipcbiAqIEhhbmRsZXMgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGRhdGVwaWNrZXIgaG9zdCBjb21wb25lbnQgYW5kIHRoZSBpbnB1dFxuICogZGlyZWN0aXZlLlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lEYXRlcGlja2VySG9zdFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICByZWFkb25seSAjZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgcGlja2VyIG9yIHRyaWdnZXIgYnV0dG9uIGxvc2VzIGZvY3VzLlxuICAgKi9cbiAgcHVibGljIGdldCBmb2N1c291dCgpOiBPYnNlcnZhYmxlPEZvY3VzRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy4jZm9jdXNvdXRPYnM7XG4gIH1cblxuICAjZm9jdXNvdXQgPSBuZXcgU3ViamVjdDxGb2N1c0V2ZW50PigpO1xuICAjZm9jdXNvdXRPYnMgPSB0aGlzLiNmb2N1c291dC5hc09ic2VydmFibGUoKTtcbiAgI2hvc3Q6IFNreURhdGVwaWNrZXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XG4gICNpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI2ZvY3Vzb3V0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdChob3N0OiBTa3lEYXRlcGlja2VyQ29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2lzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhdGVwaWNrZXIgaG9zdCBzZXJ2aWNlIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy4jaG9zdCA9IGhvc3Q7XG4gICAgdGhpcy4jaXNJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICBjb25zdCB0cmlnZ2VyQnV0dG9uRWw6IEVsZW1lbnQgfCB1bmRlZmluZWQgPVxuICAgICAgdGhpcy4jaG9zdC50cmlnZ2VyQnV0dG9uUmVmPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKHRyaWdnZXJCdXR0b25FbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgIGZyb21FdmVudDxGb2N1c0V2ZW50Pih0cmlnZ2VyQnV0dG9uRWwsICdmb2N1c291dCcpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgdGhpcy4jaGFuZGxlRm9jdXNvdXRFdmVudChldnQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNGb2N1c2luZ0RhdGVwaWNrZXIoZXZ0OiBGb2N1c0V2ZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgYnV0dG9uRWwgPSB0aGlzLiNob3N0Py50cmlnZ2VyQnV0dG9uUmVmPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgcmV0dXJuIGJ1dHRvbkVsIGluc3RhbmNlb2YgRWxlbWVudCAmJiBidXR0b25FbCA9PT0gZXZ0LnJlbGF0ZWRUYXJnZXQ7XG4gIH1cblxuICAjaGFuZGxlRm9jdXNvdXRFdmVudChldnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jaG9zdCkge1xuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IGV2dC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgY29uc3Qgb3ZlcmxheUVsOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHRoaXMuI2hvc3QuZ2V0UGlja2VyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIGNvbnN0IGlzRm9jdXNpbmdPdmVybGF5ID1cbiAgICAgICAgcmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcbiAgICAgICAgISFvdmVybGF5RWw/LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xuXG4gICAgICBpZiAocmVsYXRlZFRhcmdldCA9PT0gbnVsbCB8fCAhaXNGb2N1c2luZ092ZXJsYXkpIHtcbiAgICAgICAgdGhpcy4jZm9jdXNvdXQubmV4dChldnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, EnvironmentInjector, EventEmitter, Inject, Input, Optional, Output, TemplateRef, ViewChild, inject, output, } from '@angular/core';\nimport { SKY_STACKING_CONTEXT, SkyAffixAutoFitContext, SkyAppFormat, } from '@skyux/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { Subject, fromEvent } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\nimport { SkyDatepickerCalendarComponent } from './calendar/datepicker-calendar.component';\nimport { SkyDatepickerHostService } from './datepicker-host.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@skyux/core\";\nimport * as i2 from \"@skyux/forms\";\nimport * as i3 from \"@skyux/theme\";\nimport * as i4 from \"@angular/common\";\nimport * as i5 from \"@skyux/icon\";\nimport * as i6 from \"@skyux/i18n\";\nlet nextId = 0;\n/**\n * Creates the datepicker button and calendar.\n * You must wrap this component around an input with the `skyDatepickerInput`\n * or `skyFuzzyDatepickerInput` directive.\n */\nexport class SkyDatepickerComponent {\n set dateFormat(value) {\n this.#_dateFormat = value;\n this.dateFormatChange.emit(value);\n this.#populateInputBoxHelpText();\n }\n get dateFormat() {\n return this.#_dateFormat;\n }\n get disabled() {\n return this.#_disabled;\n }\n set disabled(value) {\n this.#_disabled = value;\n this.#changeDetector.markForCheck();\n }\n set selectedDate(value) {\n this.#_selectedDate = value;\n if (this.calendar) {\n this.calendar.writeValue(value);\n }\n }\n get selectedDate() {\n return this.#_selectedDate;\n }\n set calendarRef(value) {\n if (value) {\n this.#_calendarRef = value;\n this.#addKeyupListener();\n // Wait for the calendar component to render before gauging dimensions.\n setTimeout(() => {\n if (this.calendarRef) {\n this.calendar?.writeValue(this.selectedDate);\n this.#destroyAffixer();\n this.#createAffixer();\n setTimeout(() => {\n if (this.calendarRef) {\n this.#coreAdapter.applyAutoFocus(this.calendarRef);\n this.isVisible = true;\n this.#changeDetector.markForCheck();\n }\n });\n }\n });\n }\n }\n get calendarRef() {\n return this.#_calendarRef;\n }\n #affixer;\n #calendarUnsubscribe;\n #customDatesSubscription;\n #ngUnsubscribe;\n #overlay;\n #overlayKeyupListener;\n #_calendarRef;\n #_dateFormat;\n #_disabled;\n #_selectedDate;\n #affixService;\n #appFormatter;\n #changeDetector;\n #coreAdapter;\n #dateFormatHintTextTemplateString;\n #environmentInjector;\n #resourceSvc;\n #overlayService;\n #zIndex;\n #datepickerHostSvc;\n #elementRef;\n constructor(affixService, changeDetector, coreAdapter, overlayService, inputBoxHostService, themeSvc, stackingContext) {\n this.inputBoxHostService = inputBoxHostService;\n /**\n * Adds a class to the datepicker.\n * @default \"\"\n */\n this.pickerClass = '';\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 this.calendarDateRangeChange = new EventEmitter();\n /**\n * @internal\n */\n this.dateFormatChange = new EventEmitter();\n /**\n * @internal\n */\n this.openChange = new EventEmitter();\n /**\n * Fires when a user selects a date from the calendar.\n * @internal\n */\n this.calendarDateChange = output();\n this.dateChange = new EventEmitter();\n this.isDaypickerWaiting = false;\n this.isOpen = false;\n this.isVisible = false;\n this.#calendarUnsubscribe = new Subject();\n this.#ngUnsubscribe = new Subject();\n this.#_disabled = false;\n this.#appFormatter = inject(SkyAppFormat);\n this.#dateFormatHintTextTemplateString = '';\n this.#environmentInjector = inject(EnvironmentInjector);\n this.#resourceSvc = inject(SkyLibResourcesService);\n this.#datepickerHostSvc = inject(SkyDatepickerHostService);\n this.#elementRef = inject(ElementRef);\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 // Update icons when theme changes.\n themeSvc?.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n ngOnInit() {\n if (this.inputBoxHostService && this.inputTemplateRef) {\n this.inputBoxHostService.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.triggerButtonTemplateRef,\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 ngAfterViewInit() {\n this.#datepickerHostSvc.init(this);\n }\n ngOnDestroy() {\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 onCalendarModeChange() {\n // Let the calendar populate in the DOM before recalculating placement.\n setTimeout(() => {\n this.#affixer?.reaffix();\n });\n }\n onSelectedDateChange(value) {\n this.calendarDateChange.emit(value);\n this.dateChange.emit(value);\n this.#closePicker();\n }\n onTriggerButtonClick() {\n if (this.isOpen) {\n this.#closePicker();\n }\n else {\n this.#openPicker();\n }\n }\n onCalendarDateRangeChange(event) {\n /* istanbul ignore else */\n if (event) {\n this.#cancelCustomDatesSubscription();\n const args = {\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 this.#customDatesSubscription = args.customDates\n .pipe(debounceTime(250))\n .subscribe((result) => {\n this.customDates = result;\n this.isDaypickerWaiting = false;\n // Trigger change detection in child components to show changes in the calendar.\n this.#changeDetector.markForCheck();\n });\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 * Whether the datepicker component contains the provided focus event target.\n * @internal\n */\n containsTarget(target) {\n return (this.#elementRef.nativeElement.contains(target) ||\n this.getPickerRef()?.nativeElement.contains(target));\n }\n /**\n * Gets the element reference of the picker overlay.\n * @internal\n */\n getPickerRef() {\n return this.#overlay?.componentRef.location;\n }\n #closePicker() {\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 #openPicker() {\n this.isVisible = false;\n this.#changeDetector.markForCheck();\n this.#removePickerEventListeners();\n this.#destroyOverlay();\n this.#createOverlay();\n this.isOpen = true;\n this.#changeDetector.markForCheck();\n this.openChange.emit(true);\n }\n #createAffixer() {\n if (this.calendarRef && this.triggerButtonRef) {\n const affixer = this.#affixService.createAffixer(this.calendarRef);\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 affixer.affixTo(this.triggerButtonRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n horizontalAlignment: 'right',\n isSticky: true,\n placement: 'below',\n });\n this.#affixer = affixer;\n }\n }\n #destroyAffixer() {\n /*istanbul ignore else*/\n if (this.#affixer) {\n this.#affixer.destroy();\n this.#affixer = undefined;\n }\n }\n #createOverlay() {\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 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 overlay.backdropClick\n .pipe(takeUntil(this.#calendarUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.#closePicker();\n }\n });\n overlay.attachTemplate(this.calendarTemplateRef);\n this.#overlay = overlay;\n }\n }\n #destroyOverlay() {\n /*istanbul ignore else*/\n if (this.#overlay) {\n this.#overlayService.close(this.#overlay);\n this.#overlay = undefined;\n }\n }\n #addKeyupListener() {\n const datepickerCalendarElement = this.calendarRef?.nativeElement;\n if (datepickerCalendarElement) {\n this.#overlayKeyupListener = fromEvent(datepickerCalendarElement, 'keyup')\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 #removePickerEventListeners() {\n this.#calendarUnsubscribe.next();\n this.#calendarUnsubscribe.complete();\n this.#calendarUnsubscribe = new Subject();\n this.#overlayKeyupListener?.unsubscribe();\n }\n #cancelCustomDatesSubscription() {\n if (this.#customDatesSubscription) {\n this.#customDatesSubscription.unsubscribe();\n this.#customDatesSubscription = undefined;\n }\n }\n #populateInputBoxHelpText() {\n if (this.inputBoxHostService && this.inputTemplateRef) {\n /* safety check */\n /* istanbul ignore else */\n if (this.dateFormat) {\n this.inputBoxHostService?.setHintText(this.#appFormatter.formatText(this.#dateFormatHintTextTemplateString, this.dateFormat));\n }\n else {\n this.inputBoxHostService?.setHintText('');\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerComponent, deps: [{ token: i1.SkyAffixService }, { token: i0.ChangeDetectorRef }, { token: i1.SkyCoreAdapterService }, { token: i1.SkyOverlayService }, { token: i2.SkyInputBoxHostService, optional: true }, { token: i3.SkyThemeService, optional: true }, { token: SKY_STACKING_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", type: SkyDatepickerComponent, isStandalone: true, selector: \"sky-datepicker\", inputs: { pickerClass: \"pickerClass\" }, outputs: { calendarDateRangeChange: \"calendarDateRangeChange\", dateFormatChange: \"dateFormatChange\", openChange: \"openChange\", calendarDateChange: \"calendarDateChange\" }, providers: [SkyDatepickerHostService], viewQueries: [{ propertyName: \"calendar\", first: true, predicate: SkyDatepickerCalendarComponent, descendants: true }, { propertyName: \"calendarRef\", first: true, predicate: [\"calendarRef\"], descendants: true, read: ElementRef }, { propertyName: \"calendarTemplateRef\", first: true, predicate: [\"calendarTemplateRef\"], descendants: true, read: TemplateRef }, { propertyName: \"triggerButtonRef\", first: true, predicate: [\"triggerButtonRef\"], descendants: true, read: ElementRef }, { propertyName: \"inputTemplateRef\", first: true, predicate: [\"inputTemplateRef\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"triggerButtonTemplateRef\", first: true, predicate: [\"triggerButtonTemplateRef\"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: \"<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\", styles: [\".sky-datepicker-calendar-container:not(.sky-theme-modern *){--sky-override-datepicker-border-radius: 5px}.sky-datepicker-calendar-container{position:fixed;border-radius:var(--sky-override-datepicker-border-radius, var(--sky-border-radius-s))}.sky-datepicker-hidden{visibility:hidden}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i4.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: SkyDatepickerCalendarComponent, selector: \"sky-datepicker-calendar\", inputs: [\"customDates\", \"isDaypickerWaiting\", \"minDate\", \"maxDate\", \"startAtDate\", \"selectedDate\", \"startingDay\"], outputs: [\"calendarDateRangeChange\", \"calendarModeChange\", \"selectedDateChange\"] }, { kind: \"ngmodule\", type: SkyDatetimeResourcesModule }, { kind: \"ngmodule\", type: SkyIconModule }, { kind: \"component\", type: i5.λ1, selector: \"sky-icon\", inputs: [\"iconName\", \"variant\", \"iconSize\"] }, { kind: \"pipe\", type: i6.SkyLibResourcesPipe, name: \"skyLibResources\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n CommonModule,\n SkyDatepickerCalendarComponent,\n SkyDatetimeResourcesModule,\n SkyIconModule,\n ], providers: [SkyDatepickerHostService], selector: 'sky-datepicker', template: \"<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\", styles: [\".sky-datepicker-calendar-container:not(.sky-theme-modern *){--sky-override-datepicker-border-radius: 5px}.sky-datepicker-calendar-container{position:fixed;border-radius:var(--sky-override-datepicker-border-radius, var(--sky-border-radius-s))}.sky-datepicker-hidden{visibility:hidden}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.SkyAffixService }, { type: i0.ChangeDetectorRef }, { type: i1.SkyCoreAdapterService }, { type: i1.SkyOverlayService }, { type: i2.SkyInputBoxHostService, decorators: [{\n type: Optional\n }] }, { type: i3.SkyThemeService, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [SKY_STACKING_CONTEXT]\n }] }], propDecorators: { pickerClass: [{\n type: Input\n }], calendarDateRangeChange: [{\n type: Output\n }], dateFormatChange: [{\n type: Output\n }], openChange: [{\n type: Output\n }], calendarDateChange: [{ type: i0.Output, args: [\"calendarDateChange\"] }], calendar: [{\n type: ViewChild,\n args: [SkyDatepickerCalendarComponent]\n }], calendarRef: [{\n type: ViewChild,\n args: ['calendarRef', {\n read: ElementRef,\n }]\n }], calendarTemplateRef: [{\n type: ViewChild,\n args: ['calendarTemplateRef', {\n read: TemplateRef,\n }]\n }], triggerButtonRef: [{\n type: ViewChild,\n args: ['triggerButtonRef', {\n read: ElementRef,\n }]\n }], inputTemplateRef: [{\n type: ViewChild,\n args: ['inputTemplateRef', {\n read: TemplateRef,\n static: true,\n }]\n }], triggerButtonTemplateRef: [{\n type: ViewChild,\n args: ['triggerButtonTemplateRef', {\n read: TemplateRef,\n static: true,\n }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUd0QixZQUFZLEdBS2IsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHNUMsT0FBTyxFQUFjLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHckYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFMUYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENB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c0IsNlBBNkx2QixvQkFBb0I7bUdBN0xuQixzQkFBc0IsZ1JBTHRCLENBQUMsd0JBQXdCLENBQUMsb0VBOEYxQiw4QkFBOEIsd0hBSWpDLFVBQVUscUhBa0NWLFdBQVcsK0dBS1gsVUFBVSwrR0FLVixXQUFXLDZJQU1YLFdBQVcsMkNDak5yQixxckVBa0VBLHNWRFZJLFlBQVksc01BQ1osOEJBQThCLHdRQUM5QiwwQkFBMEIsOEJBQzFCLGFBQWE7OzRGQU9KLHNCQUFzQjtrQkFibEMsU0FBUztzQ0FDUyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFlBQVk7d0JBQ1osOEJBQThCO3dCQUM5QiwwQkFBMEI7d0JBQzFCLGFBQWE7cUJBQ2QsYUFDVSxDQUFDLHdCQUF3QixDQUFDLFlBQzNCLGdCQUFnQjs7MEJBOEx2QixRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFROzswQkFDUixNQUFNOzJCQUFDLG9CQUFvQjs7c0JBdEw3QixLQUFLOztzQkFzQ0wsTUFBTTs7c0JBT04sTUFBTTs7c0JBTU4sTUFBTTs7c0JBK0JOLFNBQVM7dUJBQUMsOEJBQThCOztzQkFHeEMsU0FBUzt1QkFBQyxhQUFhLEVBQUU7d0JBQ3hCLElBQUksRUFBRSxVQUFVO3FCQUNqQjs7c0JBZ0NBLFNBQVM7dUJBQUMscUJBQXFCLEVBQUU7d0JBQ2hDLElBQUksRUFBRSxXQUFXO3FCQUNsQjs7c0JBR0EsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRTt3QkFDN0IsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCOztzQkFHQSxTQUFTO3VCQUFDLGtCQUFrQixFQUFFO3dCQUM3QixJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2I7O3NCQUdBLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUU7d0JBQ3JDLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgaW5qZWN0LFxuICBvdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU0tZX1NUQUNLSU5HX0NPTlRFWFQsXG4gIFNreUFmZml4QXV0b0ZpdENvbnRleHQsXG4gIFNreUFmZml4U2VydmljZSxcbiAgU2t5QWZmaXhlcixcbiAgU2t5QXBwRm9ybWF0LFxuICBTa3lDb3JlQWRhcHRlclNlcnZpY2UsXG4gIFNreU92ZXJsYXlJbnN0YW5jZSxcbiAgU2t5T3ZlcmxheVNlcnZpY2UsXG4gIFNreVN0YWNraW5nQ29udGV4dCxcbn0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5SW5wdXRCb3hIb3N0U2VydmljZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuaW1wb3J0IHsgU2t5SWNvbk1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pY29uJztcbmltcG9ydCB7IFNreVRoZW1lU2VydmljZSB9IGZyb20gJ0Bza3l1eC90aGVtZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5RGF0ZXRpbWVSZXNvdXJjZXNNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQvc2t5LWRhdGV0aW1lLXJlc291cmNlcy5tb2R1bGUnO1xuXG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ2FsZW5kYXJDaGFuZ2UgfSBmcm9tICcuL2NhbGVuZGFyL2RhdGVwaWNrZXItY2FsZW5kYXItY2hhbmdlJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXIvZGF0ZXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckN1c3RvbURhdGUgfSBmcm9tICcuL2RhdGVwaWNrZXItY3VzdG9tLWRhdGUnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckhvc3RTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWhvc3Quc2VydmljZSc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGRhdGVwaWNrZXIgYnV0dG9uIGFuZCBjYWxlbmRhci5cbiAqIFlvdSBtdXN0IHdyYXAgdGhpcyBjb21wb25lbnQgYXJvdW5kIGFuIGlucHV0IHdpdGggdGhlIGBza3lEYXRlcGlja2VySW5wdXRgXG4gKiBvciBgc2t5RnV6enlEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFNreURhdGVwaWNrZXJDYWxlbmRhckNvbXBvbmVudCxcbiAgICBTa3lEYXRldGltZVJlc291cmNlc01vZHVsZSxcbiAgICBTa3lJY29uTW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6IFtTa3lEYXRlcGlja2VySG9zdFNlcnZpY2VdLFxuICBzZWxlY3RvcjogJ3NreS1kYXRlcGlja2VyJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGVwaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdFxue1xuICAvKipcbiAgICogQWRkcyBhIGNsYXNzIHRvIHRoZSBkYXRlcGlja2VyLlxuICAgKiBAZGVmYXVsdCBcIlwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcGlja2VyQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnO1xuXG4gIHB1YmxpYyBzZXQgZGF0ZUZvcm1hdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RhdGVGb3JtYXQgPSB2YWx1ZTtcbiAgICB0aGlzLmRhdGVGb3JtYXRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy4jcG9wdWxhdGVJbnB1dEJveEhlbHBUZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2RhdGVGb3JtYXQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfZGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHNlbGVjdGVkRGF0ZSh2YWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zZWxlY3RlZERhdGUgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5jYWxlbmRhcikge1xuICAgICAgdGhpcy5jYWxlbmRhci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkRGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3NlbGVjdGVkRGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSByYW5nZSBvZiBkaXNwbGF5ZWQgZGF0ZXMgaW4gdGhlIGNhbGVuZGFyIGNoYW5nZXMuIFByb3ZpZGVzIHRoZVxuICAgKiBjdXJyZW50IHJhbmdlIG9mIGRpc3BsYXllZCBkYXRlcyBhbmQgYSBtdXRhYmxlIGBjdXN0b21EYXRlYCBwcm9wZXJ0eSBjb25zdW1lcnMgY2FuIHVzZVxuICAgKiB0byBtb2RpZnkgaW5kaXZpZHVhbCBkYXRlcyBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGNhbGVuZGFyRGF0ZVJhbmdlQ2hhbmdlID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreURhdGVwaWNrZXJDYWxlbmRhckNoYW5nZT4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGRhdGVGb3JtYXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gYSB1c2VyIHNlbGVjdHMgYSBkYXRlIGZyb20gdGhlIGNhbGVuZGFyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBjYWxlbmRhckRhdGVDaGFuZ2UgPSBvdXRwdXQ8RGF0ZT4oKTtcblxuICBwdWJsaWMgY2FsZW5kYXJJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBjdXN0b21EYXRlczogU2t5RGF0ZXBpY2tlckN1c3RvbURhdGVbXSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBwdWJsaWMgaXNEYXlwaWNrZXJXYWl0aW5nID0gZmFsc2U7XG5cbiAgcHVibGljIGlzT3BlbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpc1Zpc2libGUgPSBmYWxzZTtcblxuICBwdWJsaWMgbWF4RGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgbWluRGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgc3RhcnRBdERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHN0YXJ0aW5nRGF5OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHRyaWdnZXJCdXR0b25JZDogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoU2t5RGF0ZXBpY2tlckNhbGVuZGFyQ29tcG9uZW50KVxuICBwdWJsaWMgY2FsZW5kYXI6IFNreURhdGVwaWNrZXJDYWxlbmRhckNvbXBvbmVudCB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdjYWxlbmRhclJlZicsIHtcbiAgICByZWFkOiBFbGVtZW50UmVmLFxuICB9KVxuICBwdWJsaWMgc2V0IGNhbGVuZGFyUmVmKHZhbHVlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLiNfY2FsZW5kYXJSZWYgPSB2YWx1ZTtcblxuICAgICAgdGhpcy4jYWRkS2V5dXBMaXN0ZW5lcigpO1xuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgY2FsZW5kYXIgY29tcG9uZW50IHRvIHJlbmRlciBiZWZvcmUgZ2F1Z2luZyBkaW1lbnNpb25zLlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhbGVuZGFyUmVmKSB7XG4gICAgICAgICAgdGhpcy5jYWxlbmRhcj8ud3JpdGVWYWx1ZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG5cbiAgICAgICAgICB0aGlzLiNkZXN0cm95QWZmaXhlcigpO1xuICAgICAgICAgIHRoaXMuI2NyZWF0ZUFmZml4ZXIoKTtcblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsZW5kYXJSZWYpIHtcbiAgICAgICAgICAgICAgdGhpcy4jY29yZUFkYXB0ZXIuYXBwbHlBdXRvRm9jdXModGhpcy5jYWxlbmRhclJlZik7XG5cbiAgICAgICAgICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBjYWxlbmRhclJlZigpOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2NhbGVuZGFyUmVmO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXJUZW1wbGF0ZVJlZicsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgfSlcbiAgcHVibGljIGNhbGVuZGFyVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ3RyaWdnZXJCdXR0b25SZWYnLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgfSlcbiAgcHVibGljIHRyaWdnZXJCdXR0b25SZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRUZW1wbGF0ZVJlZicsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHB1YmxpYyBpbnB1dFRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyQnV0dG9uVGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgdHJpZ2dlckJ1dHRvblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAjYWZmaXhlcjogU2t5QWZmaXhlciB8IHVuZGVmaW5lZDtcblxuICAjY2FsZW5kYXJVbnN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI2N1c3RvbURhdGVzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNvdmVybGF5OiBTa3lPdmVybGF5SW5zdGFuY2UgfCB1bmRlZmluZWQ7XG5cbiAgI292ZXJsYXlLZXl1cExpc3RlbmVyOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI19jYWxlbmRhclJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICAjX2RhdGVGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjX2Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgI19zZWxlY3RlZERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG5cbiAgI2FmZml4U2VydmljZTogU2t5QWZmaXhTZXJ2aWNlO1xuICByZWFkb25seSAjYXBwRm9ybWF0dGVyID0gaW5qZWN0KFNreUFwcEZvcm1hdCk7XG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNjb3JlQWRhcHRlcjogU2t5Q29yZUFkYXB0ZXJTZXJ2aWNlO1xuICAjZGF0ZUZvcm1hdEhpbnRUZXh0VGVtcGxhdGVTdHJpbmcgPSAnJztcbiAgcmVhZG9ubHkgI2Vudmlyb25tZW50SW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG4gIHJlYWRvbmx5ICNyZXNvdXJjZVN2YyA9IGluamVjdChTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlKTtcbiAgI292ZXJsYXlTZXJ2aWNlOiBTa3lPdmVybGF5U2VydmljZTtcbiAgcmVhZG9ubHkgI3pJbmRleDogT2JzZXJ2YWJsZTxudW1iZXI+IHwgdW5kZWZpbmVkO1xuXG4gIHJlYWRvbmx5ICNkYXRlcGlja2VySG9zdFN2YyA9IGluamVjdChTa3lEYXRlcGlja2VySG9zdFNlcnZpY2UpO1xuICByZWFkb25seSAjZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZSxcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgY29yZUFkYXB0ZXI6IFNreUNvcmVBZGFwdGVyU2VydmljZSxcbiAgICBvdmVybGF5U2VydmljZTogU2t5T3ZlcmxheVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIGlucHV0Qm94SG9zdFNlcnZpY2U/OiBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHRoZW1lU3ZjPzogU2t5VGhlbWVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChTS1lfU1RBQ0tJTkdfQ09OVEVYVClcbiAgICBzdGFja2luZ0NvbnRleHQ/OiBTa3lTdGFja2luZ0NvbnRleHQsXG4gICkge1xuICAgIHRoaXMuI2FmZml4U2VydmljZSA9IGFmZml4U2VydmljZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2NvcmVBZGFwdGVyID0gY29yZUFkYXB0ZXI7XG4gICAgdGhpcy4jb3ZlcmxheVNlcnZpY2UgPSBvdmVybGF5U2VydmljZTtcbiAgICBjb25zdCB1bmlxdWVJZCA9IG5leHRJZCsrO1xuICAgIHRoaXMuY2FsZW5kYXJJZCA9IGBza3ktZGF0ZXBpY2tlci1jYWxlbmRhci0ke3VuaXF1ZUlkfWA7XG4gICAgdGhpcy50cmlnZ2VyQnV0dG9uSWQgPSBgc2t5LWRhdGVwaWNrZXItYnV0dG9uLSR7dW5pcXVlSWR9YDtcbiAgICB0aGlzLiN6SW5kZXggPSBzdGFja2luZ0NvbnRleHQ/LnpJbmRleDtcblxuICAgIC8vIFVwZGF0ZSBpY29ucyB3aGVuIHRoZW1lIGNoYW5nZXMuXG4gICAgdGhlbWVTdmM/LnNldHRpbmdzQ2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dEJveEhvc3RTZXJ2aWNlICYmIHRoaXMuaW5wdXRUZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5pbnB1dEJveEhvc3RTZXJ2aWNlLnBvcHVsYXRlKHtcbiAgICAgICAgaW5wdXRUZW1wbGF0ZTogdGhpcy5pbnB1dFRlbXBsYXRlUmVmLFxuICAgICAgICBidXR0b25zVGVtcGxhdGU6IHRoaXMudHJpZ2dlckJ1dHRvblRlbXBsYXRlUmVmLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuI3Jlc291cmNlU3ZjXG4gICAgICAgIC5nZXRTdHJpbmcoJ3NreXV4X2RhdGVwaWNrZXJfZm9ybWF0X2hpbnRfdGV4dCcpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgodGVtcGxhdGVTdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLiNkYXRlRm9ybWF0SGludFRleHRUZW1wbGF0ZVN0cmluZyA9IHRlbXBsYXRlU3RyaW5nO1xuICAgICAgICAgIHRoaXMuI3BvcHVsYXRlSW5wdXRCb3hIZWxwVGV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2RhdGVwaWNrZXJIb3N0U3ZjLmluaXQodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI3JlbW92ZVBpY2tlckV2ZW50TGlzdGVuZXJzKCk7XG4gICAgdGhpcy4jZGVzdHJveUFmZml4ZXIoKTtcbiAgICB0aGlzLiNkZXN0cm95T3ZlcmxheSgpO1xuICB9XG5cbiAgcHVibGljIG9uQ2FsZW5kYXJNb2RlQ2hhbmdlKCk6IHZvaWQge1xuICAgIC8vIExldCB0aGUgY2FsZW5kYXIgcG9wdWxhdGUgaW4gdGhlIERPTSBiZWZvcmUgcmVjYWxjdWxhdGluZyBwbGFjZW1lbnQuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLiNhZmZpeGVyPy5yZWFmZml4KCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3RlZERhdGVDaGFuZ2UodmFsdWU6IERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGVuZGFyRGF0ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy4jY2xvc2VQaWNrZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRyaWdnZXJCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuI2Nsb3NlUGlja2VyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI29wZW5QaWNrZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DYWxlbmRhckRhdGVSYW5nZUNoYW5nZShldmVudD86IFNreURhdGVwaWNrZXJDYWxlbmRhckNoYW5nZSk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLiNjYW5jZWxDdXN0b21EYXRlc1N1YnNjcmlwdGlvbigpO1xuXG4gICAgICBjb25zdCBhcmdzOiBTa3lEYXRlcGlja2VyQ2FsZW5kYXJDaGFuZ2UgPSB7XG4gICAgICAgIHN0YXJ0RGF0ZTogZXZlbnQuc3RhcnREYXRlLFxuICAgICAgICBlbmREYXRlOiBldmVudC5lbmREYXRlLFxuICAgICAgICBjdXN0b21EYXRlczogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2FsZW5kYXJEYXRlUmFuZ2VDaGFuZ2UuZW1pdChhcmdzKTtcbiAgICAgIC8vIElmIGNvbnN1bWVyIGhhcyBhZGRlZCBhbiBvYnNlcnZhYmxlIHRvIHRoZSBhcmdzLCB3YXRjaCBmb3IgaW5jb21pbmcgY3VzdG9tIGRhdGVzLlxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChhcmdzLmN1c3RvbURhdGVzKSB7XG4gICAgICAgIHRoaXMuaXNEYXlwaWNrZXJXYWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgLy8gQXZvaWQgYW4gRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvci5cbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuI2N1c3RvbURhdGVzU3Vic2NyaXB0aW9uID0gYXJncy5jdXN0b21EYXRlc1xuICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyNTApKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21EYXRlcyA9IHJlc3VsdDtcbiAgICAgICAgICAgIHRoaXMuaXNEYXlwaWNrZXJXYWl0aW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpbiBjaGlsZCBjb21wb25lbnRzIHRvIHNob3cgY2hhbmdlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGNvbnN1bWVyIHJldHVybnMgYW4gdW5kZWZpbmVkIHZhbHVlIGFmdGVyIGN1c3RvbSBkYXRlcyBoYXZlXG4gICAgICAgIC8vIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZCwgcmVtb3ZlIGN1c3RvbSBkYXRlcy5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmN1c3RvbURhdGVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIC8vIEF2b2lkIGFuIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3IuXG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGRhdGVwaWNrZXIgY29tcG9uZW50IGNvbnRhaW5zIHRoZSBwcm92aWRlZCBmb2N1cyBldmVudCB0YXJnZXQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGNvbnRhaW5zVGFyZ2V0KHRhcmdldDogRXZlbnRUYXJnZXQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkgfHxcbiAgICAgIHRoaXMuZ2V0UGlja2VyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZWxlbWVudCByZWZlcmVuY2Ugb2YgdGhlIHBpY2tlciBvdmVybGF5LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBnZXRQaWNrZXJSZWYoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI292ZXJsYXk/LmNvbXBvbmVudFJlZi5sb2NhdGlvbjtcbiAgfVxuXG4gICNjbG9zZVBpY2tlcigpOiB2b2lkIHtcbiAgICB0aGlzLiNkZXN0cm95QWZmaXhlcigpO1xuICAgIHRoaXMuI2Rlc3Ryb3lPdmVybGF5KCk7XG4gICAgdGhpcy4jcmVtb3ZlUGlja2VyRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnRyaWdnZXJCdXR0b25SZWY/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gICNvcGVuUGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLiNyZW1vdmVQaWNrZXJFdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMuI2Rlc3Ryb3lPdmVybGF5KCk7XG4gICAgdGhpcy4jY3JlYXRlT3ZlcmxheSgpO1xuXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KHRydWUpO1xuICB9XG5cbiAgI2NyZWF0ZUFmZml4ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXJSZWYgJiYgdGhpcy50cmlnZ2VyQnV0dG9uUmVmKSB7XG4gICAgICBjb25zdCBhZmZpeGVyID0gdGhpcy4jYWZmaXhTZXJ2aWNlLmNyZWF0ZUFmZml4ZXIodGhpcy5jYWxlbmRhclJlZik7XG5cbiAgICAgIC8vIEhpZGUgY2FsZW5kYXIgd2hlbiB0cmlnZ2VyIGJ1dHRvbiBpcyBzY3JvbGxlZCBvZmYtc2NyZWVuLlxuICAgICAgYWZmaXhlci5wbGFjZW1lbnRDaGFuZ2VcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI2NhbGVuZGFyVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGNoYW5nZS5wbGFjZW1lbnQgIT09IG51bGw7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICBhZmZpeGVyLmFmZml4VG8odGhpcy50cmlnZ2VyQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgIGVuYWJsZUF1dG9GaXQ6IHRydWUsXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6ICdyaWdodCcsXG4gICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICBwbGFjZW1lbnQ6ICdiZWxvdycsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy4jYWZmaXhlciA9IGFmZml4ZXI7XG4gICAgfVxuICB9XG5cbiAgI2Rlc3Ryb3lBZmZpeGVyKCk6IHZvaWQge1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgIGlmICh0aGlzLiNhZmZpeGVyKSB7XG4gICAgICB0aGlzLiNhZmZpeGVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuI2FmZml4ZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgI2NyZWF0ZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXJUZW1wbGF0ZVJlZikge1xuICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuI292ZXJsYXlTZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgIHdyYXBwZXJDbGFzczogdGhpcy5waWNrZXJDbGFzcyxcbiAgICAgICAgZW5hYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICBlbmFibGVQb2ludGVyRXZlbnRzOiBmYWxzZSxcbiAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy4jZW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy4jekluZGV4KSB7XG4gICAgICAgIHRoaXMuI3pJbmRleFxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNjYWxlbmRhclVuc3Vic2NyaWJlKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCh6SW5kZXgpID0+IHtcbiAgICAgICAgICAgIG92ZXJsYXkuY29tcG9uZW50UmVmLmluc3RhbmNlLnpJbmRleCA9IHpJbmRleC50b1N0cmluZygxMCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIG92ZXJsYXkuYmFja2Ryb3BDbGlja1xuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jY2FsZW5kYXJVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLiNjbG9zZVBpY2tlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIG92ZXJsYXkuYXR0YWNoVGVtcGxhdGUodGhpcy5jYWxlbmRhclRlbXBsYXRlUmVmKTtcblxuICAgICAgdGhpcy4jb3ZlcmxheSA9IG92ZXJsYXk7XG4gICAgfVxuICB9XG5cbiAgI2Rlc3Ryb3lPdmVybGF5KCk6IHZvaWQge1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgIGlmICh0aGlzLiNvdmVybGF5KSB7XG4gICAgICB0aGlzLiNvdmVybGF5U2VydmljZS5jbG9zZSh0aGlzLiNvdmVybGF5KTtcbiAgICAgIHRoaXMuI292ZXJsYXkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgI2FkZEtleXVwTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZXBpY2tlckNhbGVuZGFyRWxlbWVudCA9IHRoaXMuY2FsZW5kYXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoZGF0ZXBpY2tlckNhbGVuZGFyRWxlbWVudCkge1xuICAgICAgdGhpcy4jb3ZlcmxheUtleXVwTGlzdGVuZXIgPSBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oXG4gICAgICAgIGRhdGVwaWNrZXJDYWxlbmRhckVsZW1lbnQsXG4gICAgICAgICdrZXl1cCcsXG4gICAgICApXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ2VzY2FwZScgJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuI2Nsb3NlUGlja2VyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAjcmVtb3ZlUGlja2VyRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy4jY2FsZW5kYXJVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jY2FsZW5kYXJVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI2NhbGVuZGFyVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHRoaXMuI292ZXJsYXlLZXl1cExpc3RlbmVyPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgI2NhbmNlbEN1c3RvbURhdGVzU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNjdXN0b21EYXRlc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy4jY3VzdG9tRGF0ZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuI2N1c3RvbURhdGVzU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gICNwb3B1bGF0ZUlucHV0Qm94SGVscFRleHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRCb3hIb3N0U2VydmljZSAmJiB0aGlzLmlucHV0VGVtcGxhdGVSZWYpIHtcbiAgICAgIC8qIHNhZmV0eSBjaGVjayAqL1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0aGlzLmRhdGVGb3JtYXQpIHtcbiAgICAgICAgdGhpcy5pbnB1dEJveEhvc3RTZXJ2aWNlPy5zZXRIaW50VGV4dChcbiAgICAgICAgICB0aGlzLiNhcHBGb3JtYXR0ZXIuZm9ybWF0VGV4dChcbiAgICAgICAgICAgIHRoaXMuI2RhdGVGb3JtYXRIaW50VGV4dFRlbXBsYXRlU3RyaW5nLFxuICAgICAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucHV0Qm94SG9zdFNlcnZpY2U/LnNldEhpbnRUZXh0KCcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktZGF0ZXBpY2tlclwiPlxuICBAaWYgKCFpbnB1dEJveEhvc3RTZXJ2aWNlKSB7XG4gICAgPGRpdiBjbGFzcz1cInNreS1pbnB1dC1ncm91cFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VGVtcGxhdGVSZWZcIiAvPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJCdXR0b25UZW1wbGF0ZVJlZlwiIC8+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2lucHV0VGVtcGxhdGVSZWY+XG4gIDxuZy1jb250ZW50IC8+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RyaWdnZXJCdXR0b25UZW1wbGF0ZVJlZj5cbiAgPGRpdiBjbGFzcz1cInNreS1pbnB1dC1ncm91cC1idG5cIj5cbiAgICA8YnV0dG9uXG4gICAgICAjdHJpZ2dlckJ1dHRvblJlZlxuICAgICAgYXJpYS1oYXNwb3B1cD1cImRpYWxvZ1wiXG4gICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1pbnB1dC1ncm91cC1kYXRlcGlja2VyLWJ0blwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXNPcGVuID8gY2FsZW5kYXJJZCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgaW5wdXRCb3hIb3N0U2VydmljZT8ubGFiZWxUZXh0XG4gICAgICAgICAgPyAoJ3NreXV4X2RhdGVwaWNrZXJfdHJpZ2dlcl9idXR0b25fbGFiZWxfY29udGV4dCdcbiAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiBpbnB1dEJveEhvc3RTZXJ2aWNlPy5sYWJlbFRleHQpXG4gICAgICAgICAgOiAoJ3NreXV4X2RhdGVwaWNrZXJfdHJpZ2dlcl9idXR0b25fbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgXCJcbiAgICAgIFthdHRyLmlkXT1cInRyaWdnZXJCdXR0b25JZFwiXG4gICAgICBbYXR0ci50aXRsZV09XCJcbiAgICAgICAgaW5wdXRCb3hIb3N0U2VydmljZT8ubGFiZWxUZXh0XG4gICAgICAgICAgPyAoJ3NreXV4X2RhdGVwaWNrZXJfdHJpZ2dlcl9idXR0b25fbGFiZWxfY29udGV4dCdcbiAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiBpbnB1dEJveEhvc3RTZXJ2aWNlPy5sYWJlbFRleHQpXG4gICAgICAgICAgOiAoJ3NreXV4X2RhdGVwaWNrZXJfdHJpZ2dlcl9idXR0b25fbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwib25UcmlnZ2VyQnV0dG9uQ2xpY2soKVwiXG4gICAgPlxuICAgICAgPHNreS1pY29uIGljb25OYW1lPVwiY2FsZW5kYXItbHRyXCIgaWNvblNpemU9XCJsXCIgLz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NhbGVuZGFyVGVtcGxhdGVSZWY+XG4gIDxkaXZcbiAgICAjY2FsZW5kYXJSZWZcbiAgICBjbGFzcz1cInNreS1kYXRlcGlja2VyLWNhbGVuZGFyLWNvbnRhaW5lciBza3ktc2hhZG93IHNreS1lbGV2YXRpb24tNFwiXG4gICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRyaWdnZXJCdXR0b25JZFwiXG4gICAgW2F0dHIuaWRdPVwiY2FsZW5kYXJJZFwiXG4gICAgW2NsYXNzLnNreS1kYXRlcGlja2VyLWhpZGRlbl09XCIhaXNWaXNpYmxlXCJcbiAgPlxuICAgIDxza3ktZGF0ZXBpY2tlci1jYWxlbmRhclxuICAgICAgY2RrVHJhcEZvY3VzXG4gICAgICBbY3VzdG9tRGF0ZXNdPVwiY3VzdG9tRGF0ZXNcIlxuICAgICAgW2lzRGF5cGlja2VyV2FpdGluZ109XCJpc0RheXBpY2tlcldhaXRpbmdcIlxuICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgIFtzdGFydEF0RGF0ZV09XCJzdGFydEF0RGF0ZVwiXG4gICAgICBbc3RhcnRpbmdEYXldPVwic3RhcnRpbmdEYXlcIlxuICAgICAgKGNhbGVuZGFyRGF0ZVJhbmdlQ2hhbmdlKT1cIm9uQ2FsZW5kYXJEYXRlUmFuZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAoY2FsZW5kYXJNb2RlQ2hhbmdlKT1cIm9uQ2FsZW5kYXJNb2RlQ2hhbmdlKClcIlxuICAgICAgKHNlbGVjdGVkRGF0ZUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=","import { Directive, HostListener, Input, Optional, forwardRef, inject, } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';\nimport moment from 'moment';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { SkyDateFormatter } from './date-formatter';\nimport { SkyDatepickerHostService } from './datepicker-host.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./datepicker-config.service\";\nimport * as i2 from \"@skyux/i18n\";\nimport * as i3 from \"./datepicker.component\";\nconst SKY_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyDatepickerInputDirective),\n multi: true,\n};\nconst SKY_DATEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyDatepickerInputDirective),\n multi: true,\n};\n/**\n * Provides date input functionality for inputs and handles date parsing, formatting and\n * validation. It emits valid dates as `Date` objects and invalid dates as raw string values.\n */\nexport class SkyDatepickerInputDirective {\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 set dateFormat(value) {\n /* istanbul ignore else */\n if (value !== this.#_dateFormat) {\n this.#_dateFormat = value;\n this.#applyDateFormat();\n }\n }\n // TODO: Refactor to not have getter logic\n get dateFormat() {\n return (this.#_dateFormat ||\n this.#configService.dateFormat ||\n this.#preferredShortDateFormat);\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 set disabled(value) {\n this.#_disabled = value || false;\n this.#datepickerComponent.disabled = value;\n this.#renderer.setProperty(this.#elementRef.nativeElement, 'disabled', value);\n }\n get disabled() {\n return this.#_disabled;\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 set maxDate(value) {\n this.#_maxDate = value;\n this.#datepickerComponent.maxDate = this.maxDate;\n this.#onValidatorChange();\n }\n // TODO: Refactor to not have getter logic\n get maxDate() {\n return this.#_maxDate || this.#configService.maxDate;\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 is 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 set minDate(value) {\n this.#_minDate = value;\n this.#datepickerComponent.minDate = this.minDate;\n this.#onValidatorChange();\n }\n // TODO: Refactor to not have getter logic\n get minDate() {\n return this.#_minDate || this.#configService.minDate;\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 set startAtDate(value) {\n this.#_startAtDate = value;\n this.#datepickerComponent.startAtDate = this.startAtDate;\n }\n // TODO: Refactor to not have getter logic\n get startAtDate() {\n return this.#_startAtDate || this.#configService.startAtDate;\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 set skyDatepickerInput(value) {\n if (value) {\n console.warn('[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 * The starting day of the week in the calendar. `0` sets the starting day to Sunday.\n * Place this attribute on the `input` element to override the default\n * in `SkyDatepickerConfigService`.\n * @default 0\n */\n set startingDay(value) {\n this.#_startingDay = value;\n this.#datepickerComponent.startingDay = this.startingDay;\n this.#onValidatorChange();\n }\n // TODO: Refactor to not have getter logic\n get startingDay() {\n return this.#_startingDay || this.#configService.startingDay;\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 set strict(value) {\n this.#_strict = value || false;\n }\n get strict() {\n return this.#_strict;\n }\n get #value() {\n return this.#_value;\n }\n set #value(value) {\n this.#updateValue(value);\n }\n #control;\n #dateFormatter;\n #preferredShortDateFormat;\n #ngUnsubscribe;\n #notifyTouched;\n #_dateFormat;\n #_disabled;\n #_maxDate;\n #_minDate;\n #_startAtDate;\n #_startingDay;\n #_strict;\n #_value;\n #changeDetector;\n #configService;\n #elementRef;\n #localeProvider;\n #renderer;\n #datepickerComponent;\n #datepickerHostSvc;\n constructor(changeDetector, configService, elementRef, localeProvider, renderer, datepickerComponent) {\n /**\n * Whether to disable date validation on the datepicker input.\n * @default false\n */\n this.skyDatepickerNoValidate = false;\n this.#dateFormatter = new SkyDateFormatter();\n this.#ngUnsubscribe = new Subject();\n this.#_disabled = false;\n this.#_strict = false;\n this.#datepickerHostSvc = inject(SkyDatepickerHostService, {\n optional: true,\n });\n // istanbul ignore next\n this.#onChange = (_) => { };\n // istanbul ignore next\n this.#onValidatorChange = () => { };\n if (!datepickerComponent) {\n throw new Error('You must wrap the `skyDatepickerInput` directive within a ' +\n '`<sky-datepicker>` component!');\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 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 this.#datepickerHostSvc?.focusout\n .pipe(takeUntilDestroyed())\n .subscribe((evt) => {\n const isFocusingInput = evt.relatedTarget === this.#elementRef.nativeElement;\n if (!isFocusingInput) {\n this.#notifyTouched?.();\n }\n });\n }\n ngOnInit() {\n const element = this.#elementRef.nativeElement;\n this.#renderer.addClass(element, 'sky-form-control');\n }\n ngAfterContentInit() {\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 ngAfterViewInit() {\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 this.#changeDetector.markForCheck();\n });\n }\n }\n ngOnDestroy() {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n onInputChange(event) {\n const value = event.target.value;\n if (this.skyDatepickerNoValidate) {\n this.#onValueChange(value);\n return;\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 this.#_value = value;\n this.#onChange(value);\n this.#control?.setErrors({\n skyDate: {\n invalid: value,\n },\n });\n }\n onInput() {\n this.#control?.markAsDirty();\n }\n writeValue(value) {\n this.#updateValue(value, false);\n }\n validate(control) {\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 if (this.skyDatepickerNoValidate) {\n return null;\n }\n const value = control.value;\n if (!value) {\n return null;\n }\n if (value instanceof Date) {\n const isDateValid = this.#dateFormatter.dateIsValid(value);\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 return {\n skyDate: {\n invalid: value,\n },\n };\n }\n const minDate = this.minDate;\n if (minDate &&\n this.#dateFormatter.dateIsValid(minDate) &&\n value < minDate) {\n return {\n skyDate: {\n minDate,\n minDateFormatted: this.#dateFormatter.format(minDate, this.dateFormat),\n },\n };\n }\n const maxDate = this.maxDate;\n if (maxDate &&\n this.#dateFormatter.dateIsValid(maxDate) &&\n value > maxDate) {\n return {\n skyDate: {\n maxDate,\n maxDateFormatted: this.#dateFormatter.format(maxDate, 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 return {\n skyDate: {\n invalid: value,\n },\n };\n }\n return null;\n }\n registerOnChange(fn) {\n this.#onChange = fn;\n }\n registerOnTouched(fn) {\n this.#notifyTouched = fn;\n }\n registerOnValidatorChange(fn) {\n this.#onValidatorChange = fn;\n }\n setDisabledState(disabled) {\n this.disabled = disabled;\n this.#datepickerComponent.disabled = disabled;\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 detectInputValueChange() {\n this.#onValueChange(this.#elementRef.nativeElement.value);\n }\n onFocusout(evt) {\n if (!this.#datepickerHostSvc?.isFocusingDatepicker(evt)) {\n this.#notifyTouched?.();\n }\n }\n #applyDateFormat() {\n this.#datepickerComponent.dateFormat = this.dateFormat;\n if (this.#value) {\n const formattedDate = this.#dateFormatter.format(this.#value, this.dateFormat);\n this.#setInputElementValue(formattedDate);\n this.#changeDetector.markForCheck();\n }\n }\n #onValueChange(newValue) {\n this.#value = newValue;\n }\n #setInputElementValue(value) {\n this.#renderer.setProperty(this.#elementRef.nativeElement, 'value', value);\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) {\n if (value instanceof Date) {\n return value;\n }\n else if (typeof value === 'string') {\n return this.#getShortcutOrDateValue(value);\n }\n return undefined;\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) {\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 if (formatTokensOnly && formatTokensOnly.length === 8) {\n const date = this.#dateFormatter.getDateFromString(value, formatTokensOnly, true);\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 }\n else {\n const date = this.#dateFormatter.getDateFromString(value, this.dateFormat, this.strict);\n if (this.#dateFormatter.dateIsValid(date)) {\n return date;\n }\n }\n return undefined;\n }\n /**\n * Validates the input value to ensure it is formatted correctly.\n */\n #isDateStringValid(value) {\n if (!value || typeof value !== 'string') {\n return true;\n }\n // Does the value only include digits, dashes, or slashes?\n const regexp = /^[\\d/-]+$/;\n const isValid = regexp.test(value);\n if (isValid) {\n return true;\n }\n return moment(value).isValid();\n }\n // istanbul ignore next\n #onChange;\n // istanbul ignore next\n #onValidatorChange;\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, emitEvent = true) {\n if (this.#_value === value) {\n return;\n }\n const isValidDateString = this.#isDateStringValid(value);\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 }\n else {\n this.#control?.setValue(this.#_value, { emitEvent: false });\n }\n this.#datepickerComponent.selectedDate = this.#_value;\n this.#setInputElementValue(value);\n }\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 = this.#getDateValue(value);\n const areDatesEqual = this.#_value instanceof Date &&\n dateValue &&\n dateValue.getTime() === this.#_value.getTime();\n if (dateValue !== this.#_value || !areDatesEqual) {\n this.#_value = dateValue || value;\n if (emitEvent) {\n this.#onChange(this.#_value);\n }\n else {\n this.#control?.setValue(this.#_value, { emitEvent: false });\n }\n this.#datepickerComponent.selectedDate = this.#_value;\n }\n if (dateValue) {\n const formattedDateString = this.#dateFormatter.format(dateValue, this.dateFormat);\n this.#setInputElementValue(formattedDateString);\n }\n else {\n this.#setInputElementValue(value || '');\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerInputDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyDatepickerConfigService }, { token: i0.ElementRef }, { token: i2.SkyAppLocaleProvider }, { token: i0.Renderer2 }, { token: i3.SkyDatepickerComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.15\", type: SkyDatepickerInputDirective, isStandalone: true, selector: \"[skyDatepickerInput]\", inputs: { dateFormat: \"dateFormat\", disabled: \"disabled\", maxDate: \"maxDate\", minDate: \"minDate\", startAtDate: \"startAtDate\", skyDatepickerInput: \"skyDatepickerInput\", skyDatepickerNoValidate: \"skyDatepickerNoValidate\", startingDay: \"startingDay\", strict: \"strict\" }, host: { listeners: { \"focusout\": \"onFocusout($event)\", \"change\": \"onInputChange($event)\", \"input\": \"onInput()\" } }, providers: [SKY_DATEPICKER_VALUE_ACCESSOR, SKY_DATEPICKER_VALIDATOR], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerInputDirective, decorators: [{\n type: Directive,\n args: [{\n host: {\n '(focusout)': 'onFocusout($event)',\n },\n providers: [SKY_DATEPICKER_VALUE_ACCESSOR, SKY_DATEPICKER_VALIDATOR],\n selector: '[skyDatepickerInput]',\n }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.SkyDatepickerConfigService }, { type: i0.ElementRef }, { type: i2.SkyAppLocaleProvider }, { type: i0.Renderer2 }, { type: i3.SkyDatepickerComponent, decorators: [{\n type: Optional\n }] }], propDecorators: { dateFormat: [{\n type: Input\n }], disabled: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], minDate: [{\n type: Input\n }], startAtDate: [{\n type: Input\n }], skyDatepickerInput: [{\n type: Input\n }], skyDatepickerNoValidate: [{\n type: Input\n }], startingDay: [{\n type: Input\n }], strict: [{\n type: Input\n }], onInputChange: [{\n type: HostListener,\n args: ['change', ['$event']]\n }], onInput: [{\n type: HostListener,\n args: ['input']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFFUixVQUFVLEVBQ1YsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFHTCxhQUFhLEVBQ2IsaUJBQWlCLEdBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7OztBQUdyRSxNQUFNLDZCQUE2QixHQUFHO0lBQ3BDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztJQUMxRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLHdCQUF3QixHQUFHO0lBQy9CLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUM7SUFDMUQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUY7OztHQUdHO0FBUUgsTUFB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aWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBSZW5kZXJlcjIsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lBcHBMb2NhbGVQcm92aWRlciB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5RGF0ZUZvcm1hdHRlciB9IGZyb20gJy4vZGF0ZS1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2RhdGVwaWNrZXItY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckhvc3RTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWhvc3Quc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5cbmNvbnN0IFNLWV9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfREFURVBJQ0tFUl9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRlIGlucHV0IGZ1bmN0aW9uYWxpdHkgZm9yIGlucHV0cyBhbmQgaGFuZGxlcyBkYXRlIHBhcnNpbmcsIGZvcm1hdHRpbmcgYW5kXG4gKiB2YWxpZGF0aW9uLiBJdCBlbWl0cyB2YWxpZCBkYXRlcyBhcyBgRGF0ZWAgb2JqZWN0cyBhbmQgaW52YWxpZCBkYXRlcyBhcyByYXcgc3RyaW5nIHZhbHVlcy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIGhvc3Q6IHtcbiAgICAnKGZvY3Vzb3V0KSc6ICdvbkZvY3Vzb3V0KCRldmVudCknLFxuICB9LFxuICBwcm92aWRlcnM6IFtTS1lfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiwgU0tZX0RBVEVQSUNLRVJfVkFMSURBVE9SXSxcbiAgc2VsZWN0b3I6ICdbc2t5RGF0ZXBpY2tlcklucHV0XScsXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZVxuICBpbXBsZW1lbnRzXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgVmFsaWRhdG9yXG57XG4gIC8qKlxuICAgKiBUaGUgZGF0ZSBmb3JtYXQgZm9yIHRoZSBpbnB1dC4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudFxuICAgKiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiB0aGUgYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgXCJNTS9ERC9ZWVlZXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0ZUZvcm1hdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodmFsdWUgIT09IHRoaXMuI19kYXRlRm9ybWF0KSB7XG4gICAgICB0aGlzLiNfZGF0ZUZvcm1hdCA9IHZhbHVlO1xuICAgICAgdGhpcy4jYXBwbHlEYXRlRm9ybWF0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgZGF0ZUZvcm1hdCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLiNfZGF0ZUZvcm1hdCB8fFxuICAgICAgdGhpcy4jY29uZmlnU2VydmljZS5kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLiNwcmVmZXJyZWRTaG9ydERhdGVGb3JtYXRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGF0ZXBpY2tlciBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZSB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZSB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy5cbiAgICogVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcywgdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2Rpc2FibGVkID0gdmFsdWUgfHwgZmFsc2U7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgIHZhbHVlLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxhdGVzdCBkYXRlIHRoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBjYWxlbmRhci4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb25cbiAgICogdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhEYXRlKHZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21heERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50Lm1heERhdGUgPSB0aGlzLm1heERhdGU7XG5cbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgbWF4RGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21heERhdGUgfHwgdGhpcy4jY29uZmlnU2VydmljZS5tYXhEYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlYXJsaWVzdCBkYXRlIHRoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBjYWxlbmRhci4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb25cbiAgICogdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLiBUbyBhdm9pZCB2YWxpZGF0aW9uIGVycm9ycywgdGhlIHRpbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtaW5pbXVtIGRhdGUgaXMgbWlkbmlnaHQuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRhdGVwaWNrZXIgYXV0b21hdGljYWxseSBzZXRzIHRoZSB0aW1lIG9uIHRoZSBEYXRlIG9iamVjdCBmb3Igc2VsZWN0ZWQgZGF0ZXMgdG8gbWlkbmlnaHQgaW4gdGhlIGN1cnJlbnQgdXNlcidzIHRpbWUgem9uZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWluRGF0ZSh2YWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19taW5EYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5taW5EYXRlID0gdGhpcy5taW5EYXRlO1xuXG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIHRvIG5vdCBoYXZlIGdldHRlciBsb2dpY1xuICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19taW5EYXRlIHx8IHRoaXMuI2NvbmZpZ1NlcnZpY2UubWluRGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0byBvcGVuIHRoZSBjYWxlbmRhciB0byBpbml0aWFsbHkuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgVGhlIGN1cnJlbnQgZGF0ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFydEF0RGF0ZSh2YWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zdGFydEF0RGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuc3RhcnRBdERhdGUgPSB0aGlzLnN0YXJ0QXREYXRlO1xuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgc3RhcnRBdERhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19zdGFydEF0RGF0ZSB8fCB0aGlzLiNjb25maWdTZXJ2aWNlLnN0YXJ0QXREYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGRhdGVwaWNrZXIgaW5wdXQgYW5kIGNhbGVuZGFyLiBQbGFjZSB0aGlzIGRpcmVjdGl2ZSBvbiBhbiBgaW5wdXRgIGVsZW1lbnQsXG4gICAqIGFuZCB3cmFwIHRoZSBpbnB1dCBpbiBhIGBza3ktZGF0ZXBpY2tlcmAgY29tcG9uZW50LiBUaGUgdmFsdWUgdGhhdCB1c2VycyBzZWxlY3QgaXMgZHJpdmVuXG4gICAqIHRocm91Z2ggdGhlIGBuZ01vZGVsYCBhdHRyaWJ1dGUgc3BlY2lmaWVkIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBza3lEYXRlcGlja2VySW5wdXQoXG4gICAgdmFsdWU6IFNreURhdGVwaWNrZXJDb21wb25lbnQgfCB1bmRlZmluZWQgfCAnJyxcbiAgKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdbRGVwcmVjYXRpb24gd2FybmluZ10gWW91IG5vIGxvbmdlciBuZWVkIHRvIHByb3ZpZGUgYSB0ZW1wbGF0ZSByZWZlcmVuY2UgdmFyaWFibGUgJyArXG4gICAgICAgICAgJ3RvIHRoZSBgc2t5RGF0ZXBpY2tlcklucHV0YCBhdHRyaWJ1dGUgKHRoaXMgd2lsbCBiZSBhIGJyZWFraW5nIGNoYW5nZSBpbiB0aGUgbmV4dCAnICtcbiAgICAgICAgICAnbWFqb3IgdmVyc2lvbiByZWxlYXNlKS5cXG4nICtcbiAgICAgICAgICAnRG8gdGhpcyBpbnN0ZWFkOlxcbicgK1xuICAgICAgICAgICc8c2t5LWRhdGVwaWNrZXI+XFxuICA8aW5wdXQgc2t5RGF0ZXBpY2tlcklucHV0IC8+XFxuPC9za3ktZGF0ZXBpY2tlcj4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIGRhdGUgdmFsaWRhdGlvbiBvbiB0aGUgZGF0ZXBpY2tlciBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBza3lEYXRlcGlja2VyTm9WYWxpZGF0ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhcnRpbmcgZGF5IG9mIHRoZSB3ZWVrIGluIHRoZSBjYWxlbmRhci4gYDBgIHNldHMgdGhlIHN0YXJ0aW5nIGRheSB0byBTdW5kYXkuXG4gICAqIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRcbiAgICogaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFydGluZ0RheSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3N0YXJ0aW5nRGF5ID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zdGFydGluZ0RheSA9IHRoaXMuc3RhcnRpbmdEYXk7XG5cbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgc3RhcnRpbmdEYXkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX3N0YXJ0aW5nRGF5IHx8IHRoaXMuI2NvbmZpZ1NlcnZpY2Uuc3RhcnRpbmdEYXk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZm9ybWF0IG9mIHRoZSBkYXRlIHZhbHVlIG11c3QgbWF0Y2ggdGhlIGZvcm1hdCBmcm9tIHRoZSBgZGF0ZUZvcm1hdGAgdmFsdWUuXG4gICAqIElmIHRoaXMgcHJvcGVydHkgaXMgYHRydWVgIGFuZCB0aGUgZGF0ZXBpY2tlciBpbnB1dCBkaXJlY3RpdmUgY2Fubm90IGZpbmQgYW4gZXhhY3QgbWF0Y2gsIHRoZW5cbiAgICogdGhlIGlucHV0IGlzIG1hcmtlZCBhcyBpbnZhbGlkLlxuICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIGBmYWxzZWAgYW5kIHRoZSBkYXRlcGlja2VyIGlucHV0IGRpcmVjdGl2ZSBjYW5ub3QgZmluZCBhbiBleGFjdCBtYXRjaCwgdGhlblxuICAgKiBpdCBhdHRlbXB0cyB0byBmb3JtYXQgdGhlIHN0cmluZyBiYXNlZCBvbiB0aGUgW0lTTyA4NjAxIHN0YW5kYXJkIGZvcm1hdF0oaHR0cHM6Ly93d3cuaXNvLm9yZy9pc28tODYwMS1kYXRlLWFuZC10aW1lLWZvcm1hdC5odG1sKS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3RyaWN0KHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3N0cmljdCA9IHZhbHVlIHx8IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJpY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19zdHJpY3Q7XG4gIH1cblxuICBnZXQgI3ZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuI192YWx1ZTtcbiAgfVxuXG4gIHNldCAjdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuI3VwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gICNjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCB1bmRlZmluZWQ7XG4gICNkYXRlRm9ybWF0dGVyID0gbmV3IFNreURhdGVGb3JtYXR0ZXIoKTtcbiAgI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICNub3RpZnlUb3VjaGVkOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgI19kYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNfZGlzYWJsZWQgPSBmYWxzZTtcbiAgI19tYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICAjX21pbkRhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gICNfc3RhcnRBdERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gICNfc3RhcnRpbmdEYXk6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgI19zdHJpY3QgPSBmYWxzZTtcbiAgI192YWx1ZTogYW55O1xuXG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNjb25maWdTZXJ2aWNlOiBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZTtcbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICNsb2NhbGVQcm92aWRlcjogU2t5QXBwTG9jYWxlUHJvdmlkZXI7XG4gICNyZW5kZXJlcjogUmVuZGVyZXIyO1xuICAjZGF0ZXBpY2tlckNvbXBvbmVudDogU2t5RGF0ZXBpY2tlckNvbXBvbmVudDtcblxuICByZWFkb25seSAjZGF0ZXBpY2tlckhvc3RTdmMgPSBpbmplY3QoU2t5RGF0ZXBpY2tlckhvc3RTZXJ2aWNlLCB7XG4gICAgb3B0aW9uYWw6IHRydWUsXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBjb25maWdTZXJ2aWNlOiBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZSxcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIGxvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBPcHRpb25hbCgpIGRhdGVwaWNrZXJDb21wb25lbnQ/OiBTa3lEYXRlcGlja2VyQ29tcG9uZW50LFxuICApIHtcbiAgICBpZiAoIWRhdGVwaWNrZXJDb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1lvdSBtdXN0IHdyYXAgdGhlIGBza3lEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZSB3aXRoaW4gYSAnICtcbiAgICAgICAgICAnYDxza3ktZGF0ZXBpY2tlcj5gIGNvbXBvbmVudCEnLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNjb25maWdTZXJ2aWNlID0gY29uZmlnU2VydmljZTtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNsb2NhbGVQcm92aWRlciA9IGxvY2FsZVByb3ZpZGVyO1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudCA9IGRhdGVwaWNrZXJDb21wb25lbnQ7XG5cbiAgICB0aGlzLiNsb2NhbGVQcm92aWRlclxuICAgICAgLmdldExvY2FsZUluZm8oKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxlSW5mbykgPT4ge1xuICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLnNldExvY2FsZShsb2NhbGVJbmZvLmxvY2FsZSk7XG4gICAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdCA9XG4gICAgICAgICAgU2t5RGF0ZUZvcm1hdHRlci5nZXRQcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQoKTtcbiAgICAgICAgdGhpcy4jYXBwbHlEYXRlRm9ybWF0KCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuI2RhdGVwaWNrZXJIb3N0U3ZjPy5mb2N1c291dFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgY29uc3QgaXNGb2N1c2luZ0lucHV0ID1cbiAgICAgICAgICBldnQucmVsYXRlZFRhcmdldCA9PT0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmICghaXNGb2N1c2luZ0lucHV0KSB7XG4gICAgICAgICAgdGhpcy4jbm90aWZ5VG91Y2hlZD8uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLiNyZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnc2t5LWZvcm0tY29udHJvbCcpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRhdGVGb3JtYXQgPSB0aGlzLmRhdGVGb3JtYXQ7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kYXRlQ2hhbmdlXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy4jdmFsdWUgPSB2YWx1ZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBhZGRyZXNzIGEgYnVnIGluIEFuZ3VsYXIgNC5cbiAgICAvLyBXaGVuIGEgY29udHJvbCB2YWx1ZSBpcyBzZXQgaW5pdGlhbGx5LCBpdHMgdmFsdWUgaXMgbm90IHJlcHJlc2VudGVkIG9uIHRoZSB2aWV3LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM3OTJcbiAgICAvLyBPZiBub3RlIGlzIHRoZSBwYXJlbnQgY2hlY2sgd2hpY2ggYWxsb3dzIHVzIHRvIGRldGVybWluZSBpZiB0aGUgZm9ybSBpcyByZWFjdGl2ZS5cbiAgICAvLyBXaXRob3V0IHRoaXMgY2hlY2sgdGhlcmUgaXMgYSBjaGFuZ2VkIGJlZm9yZSBjaGVja2VkIGVycm9yXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy4jY29udHJvbCAmJiB0aGlzLiNjb250cm9sLnBhcmVudCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI3ZhbHVlLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgaWYgKHRoaXMuc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGUpIHtcbiAgICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERvbid0IHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIHZhbHVlIGludG8gYSBEYXRlIHZhbHVlIGlmIGl0IGlzIG1hbGZvcm1lZC5cbiAgICBpZiAodGhpcy4jaXNEYXRlU3RyaW5nVmFsaWQodmFsdWUpKSB7XG4gICAgICB0aGlzLiNvblZhbHVlQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiNfdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLiNvbkNoYW5nZSh2YWx1ZSk7XG5cbiAgICB0aGlzLiNjb250cm9sPy5zZXRFcnJvcnMoe1xuICAgICAgc2t5RGF0ZToge1xuICAgICAgICBpbnZhbGlkOiB2YWx1ZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdpbnB1dCcpXG4gIHB1YmxpYyBvbklucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuI2NvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy4jdXBkYXRlVmFsdWUodmFsdWUsIGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLiNjb250cm9sKSB7XG4gICAgICB0aGlzLiNjb250cm9sID0gY29udHJvbDtcbiAgICAgIC8vIEFjY291bnQgZm9yIGFueSBkYXRlIGNvbnZlcnNpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cnJlZCBwcmlvciB0byB2YWxpZGF0aW9uLlxuICAgICAgaWYgKHRoaXMuI2NvbnRyb2wudmFsdWUgIT09IHRoaXMuI3ZhbHVlKSB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLiN2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZTogdW5rbm93biA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCBpc0RhdGVWYWxpZCA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQodmFsdWUpO1xuXG4gICAgICBpZiAoIWlzRGF0ZVZhbGlkKSB7XG4gICAgICAgIC8vIE1hcmsgdGhlIGludmFsaWQgY29udHJvbCBhcyB0b3VjaGVkIHNvIHRoYXQgdGhlIGlucHV0J3MgaW52YWxpZCBDU1Mgc3R5bGVzIGFwcGVhci5cbiAgICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgICB0aGlzLiNjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICAgIGludmFsaWQ6IHZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLm1pbkRhdGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWluRGF0ZSAmJlxuICAgICAgICB0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKG1pbkRhdGUpICYmXG4gICAgICAgIHZhbHVlIDwgbWluRGF0ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgICAgbWluRGF0ZSxcbiAgICAgICAgICAgIG1pbkRhdGVGb3JtYXR0ZWQ6IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZm9ybWF0KFxuICAgICAgICAgICAgICBtaW5EYXRlLFxuICAgICAgICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWF4RGF0ZSAmJlxuICAgICAgICB0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKG1heERhdGUpICYmXG4gICAgICAgIHZhbHVlID4gbWF4RGF0ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgICAgbWF4RGF0ZSxcbiAgICAgICAgICAgIG1heERhdGVGb3JtYXR0ZWQ6IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZm9ybWF0KFxuICAgICAgICAgICAgICBtYXhEYXRlLFxuICAgICAgICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1hcmsgdGhlIGludmFsaWQgY29udHJvbCBhcyB0b3VjaGVkIHNvIHRoYXQgdGhlIGlucHV0J3MgaW52YWxpZCBDU1Mgc3R5bGVzIGFwcGVhci5cbiAgICAgIC8vIChUaGlzIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiB0aGUgaW52YWxpZCB2YWx1ZSBpcyBzZXQgYnkgdGhlIEZvcm1Db250cm9sIGNvbnN0cnVjdG9yLilcbiAgICAgIHRoaXMuI2NvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgaW52YWxpZDogdmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNub3RpZnlUb3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0cyBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQncyB2YWx1ZSBhbmQgdXBkYXRlcyB0aGUgbmdNb2RlbCBhY2NvcmRpbmdseS5cbiAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSBuZ01vZGVsIHZhbHVlIGJlZm9yZSB0aGUgaW5wdXQgZWxlbWVudCBsb3NlcyBmb2N1cy5cbiAgICovXG4gIHB1YmxpYyBkZXRlY3RJbnB1dFZhbHVlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkZvY3Vzb3V0KGV2dDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jZGF0ZXBpY2tlckhvc3RTdmM/LmlzRm9jdXNpbmdEYXRlcGlja2VyKGV2dCkpIHtcbiAgICAgIHRoaXMuI25vdGlmeVRvdWNoZWQ/LigpO1xuICAgIH1cbiAgfVxuXG4gICNhcHBseURhdGVGb3JtYXQoKTogdm9pZCB7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kYXRlRm9ybWF0ID0gdGhpcy5kYXRlRm9ybWF0O1xuICAgIGlmICh0aGlzLiN2YWx1ZSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZm9ybWF0KFxuICAgICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgKTtcbiAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgI29uVmFsdWVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3ZhbHVlID0gbmV3VmFsdWU7XG4gIH1cblxuICAjc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRhdGUgdmFsdWUgZnJvbSBhIHZhbHVlIC0gaWYgcG9zc2libGUuXG4gICAqIFdpbGwgbm90IGNvbnZlcnQgdW5jb252ZXJ0aWJsZSBkYXRlcyBvciBudW1iZXJzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgbW9udGgncyBudW1iZXIgb2YgZGF5cy5cbiAgICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgdmFsdWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQuXG4gICAqL1xuICAjZ2V0RGF0ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMuI2dldFNob3J0Y3V0T3JEYXRlVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGEgZGF0ZSBvYmplY3QgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGRhdGUgc3RyaW5nLlxuICAgKiBJdCB3aWxsIGFsc28gY29udmVydCBudW1lcmljIGlucHV0IHRvIGEgZGF0ZSBpZiB0aGF0IG51bWJlciBpcyB3aXRoaW4gdGhlIGN1cnJlbnQgbW9udGgncyBudW1iZXIgb2YgZGF5cy5cbiAgICogSWYgdGhlIHN0cmluZyBjYW4gbm90IGJlIGNvbnZlcnRlZCwgYHVuZGVmaW5lZGAgYmUgcmV0dXJuZWQuXG4gICAqL1xuICAjZ2V0U2hvcnRjdXRPckRhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihudW0pKSB7XG4gICAgICAvLyBXZSByZXF1aXJlIDggZGlnaXRzIGluIG9yZGVyIHRvIGtub3cgdGhhdCB3ZSBoYXZlIGFsbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGV0ZXJtaW5lIHdoYXQgcGFydCBvZiB0aGUgbnVtYmVyIGlzIHRoZSBtb250aCAoMiksIGRheSAoMiksIGFuZCB5ZWFyICg0KS5cbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDgpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKC9cXGIoTU0pXFxifFxcYihERClcXGJ8XFxiKFlZKVxcYnxcXGIoWVlZWSlcXGIvLCAnZycpO1xuICAgICAgICBjb25zdCBmb3JtYXRUb2tlbnNPbmx5ID0gdGhpcy5kYXRlRm9ybWF0XG4gICAgICAgICAgPy5tYXRjaChyZWdleClcbiAgICAgICAgICA/LmpvaW4oJycpXG4gICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCgvWSsvKSwgJ1lZWVknKTtcblxuICAgICAgICBpZiAoZm9ybWF0VG9rZW5zT25seSAmJiBmb3JtYXRUb2tlbnNPbmx5Lmxlbmd0aCA9PT0gOCkge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmdldERhdGVGcm9tU3RyaW5nKFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBmb3JtYXRUb2tlbnNPbmx5LFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBzaG9ydGN1dERhdGUgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIG51bSk7XG4gICAgICBjb25zdCBkYXlzSW5Nb250aCA9IHNob3J0Y3V0RGF0ZS5nZXREYXRlKCk7XG4gICAgICBpZiAobnVtID4gMCAmJiBudW0gPD0gZGF5c0luTW9udGgpIHtcbiAgICAgICAgcmV0dXJuIHNob3J0Y3V0RGF0ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZ2V0RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgIHRoaXMuc3RyaWN0LFxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgaW5wdXQgdmFsdWUgdG8gZW5zdXJlIGl0IGlzIGZvcm1hdHRlZCBjb3JyZWN0bHkuXG4gICAqL1xuICAjaXNEYXRlU3RyaW5nVmFsaWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRG9lcyB0aGUgdmFsdWUgb25seSBpbmNsdWRlIGRpZ2l0cywgZGFzaGVzLCBvciBzbGFzaGVzP1xuICAgIGNvbnN0IHJlZ2V4cCA9IC9eW1xcZC8tXSskLztcbiAgICBjb25zdCBpc1ZhbGlkID0gcmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBtb21lbnQodmFsdWUpLmlzVmFsaWQoKTtcbiAgfVxuXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvbkNoYW5nZSA9IChfOiBhbnkpOiB2b2lkID0+IHt9O1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAjb25WYWxpZGF0b3JDaGFuZ2UgPSAoKTogdm9pZCA9PiB7fTtcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sIGFuZCBpbnB1dCBlbGVtZW50XG4gICAqIEBwYXJhbSBlbWl0RXZlbnQgRGVub3RlcyBpZiB3ZSBlbWl0IGFuIGV2ZW50IHRvIHRoZSBjb25zdW1lcidzIGZvcm0gY29udHJvbC4gV2UgZG8gbm90IHdhbnQgdG8gZG8gdGhpcyBpZiB0aGUgdmFsdWUgaXMgYmVpbmcgdXBkYXRlZCB2aWEgYSBgc2V0VmFsdWVgIGNhbGwgb3IgYSBgcGF0Y2hWYWx1ZWAgY2FsbCBhcyB0aGlzIGlzIGFscmVhZHkgaGFuZGxlZCBieSBBbmd1bGFyLlxuICAgKiBJbiB0aGVzZSBjYXNlcyB3ZSBkbyBub3Qgd2FudCB0byBmaXJlIGBvbkNoYW5nZWAgYXMgaXQgd2lsbCBjYXVzZSBleHRyYSBgdmFsdWVDaGFuZ2VgIGFuZCBgc3RhdHVzQ2hhbmdlYCBldmVudHMgYW5kIHRoZSBzdGF0dXMgb2YgdGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLlxuICAgKi9cbiAgI3VwZGF0ZVZhbHVlKHZhbHVlOiBhbnksIGVtaXRFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jX3ZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVmFsaWREYXRlU3RyaW5nID0gdGhpcy4jaXNEYXRlU3RyaW5nVmFsaWQodmFsdWUpO1xuXG4gICAgLy8gSWYgdGhlIHN0cmluZyB2YWx1ZSBzdXBwbGllZCBpcyBtYWxmb3JtZWQsIGRvIG5vdCBzZXQgdGhlIHZhbHVlIHRvIGl0cyBEYXRlIGVxdWl2YWxlbnQuXG4gICAgLy8gKEphdmFTY3JpcHQncyBEYXRlIHBhcnNlciB3aWxsIGNvbnZlcnQgcG9vcmx5IGZvcm1hdHRlZCBkYXRlcyB0byBEYXRlIG9iamVjdHMsIHN1Y2ggYXMgXCJhYmMgMTIzXCIsIHdoaWNoIGlzbid0IGlkZWFsLilcbiAgICBpZiAoIWlzVmFsaWREYXRlU3RyaW5nKSB7XG4gICAgICB0aGlzLiNfdmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgdGhpcy4jb25DaGFuZ2UodGhpcy4jX3ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI192YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnNlbGVjdGVkRGF0ZSA9IHRoaXMuI192YWx1ZTtcblxuICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIHZhbHVlIHJlcHJlc2VudHMgdGhlIGRhdGUgdmFsdWUgZm9yIHRoZSBpbnB1dCBpZiBwb3NzaWJsZS5cbiAgICAgIC8vIFRoaXMgdmFsdWUgd2lsbCB0YWtlIGludG8gYWNjb3VudCBhbGwgc2hvcnRjdXQgZnVuY3Rpb25hbGl0eS5cbiAgICAgIGNvbnN0IGRhdGVWYWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCA9IHRoaXMuI2dldERhdGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGNvbnN0IGFyZURhdGVzRXF1YWwgPVxuICAgICAgICB0aGlzLiNfdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmXG4gICAgICAgIGRhdGVWYWx1ZSAmJlxuICAgICAgICBkYXRlVmFsdWUuZ2V0VGltZSgpID09PSB0aGlzLiNfdmFsdWUuZ2V0VGltZSgpO1xuXG4gICAgICBpZiAoZGF0ZVZhbHVlICE9PSB0aGlzLiNfdmFsdWUgfHwgIWFyZURhdGVzRXF1YWwpIHtcbiAgICAgICAgdGhpcy4jX3ZhbHVlID0gZGF0ZVZhbHVlIHx8IHZhbHVlO1xuICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgICAgdGhpcy4jb25DaGFuZ2UodGhpcy4jX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiNfdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuc2VsZWN0ZWREYXRlID0gdGhpcy4jX3ZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0ZVZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGVTdHJpbmcgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgICAgICBkYXRlVmFsdWUsXG4gICAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlU3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVlIHx8ICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { Directive, HostListener, Input, Optional, forwardRef, inject, } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { SkyDateFormatter } from '../date-formatter';\nimport { SkyDatepickerHostService } from '../datepicker-host.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../datepicker-config.service\";\nimport * as i2 from \"./fuzzy-date.service\";\nimport * as i3 from \"@skyux/i18n\";\nimport * as i4 from \"../datepicker.component\";\nconst SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyFuzzyDatepickerInputDirective),\n multi: true,\n};\nconst SKY_FUZZY_DATEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyFuzzyDatepickerInputDirective),\n multi: true,\n};\nexport class SkyFuzzyDatepickerInputDirective {\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 set dateFormat(value) {\n this.#_dateFormat = value;\n if (this.#value) {\n const formattedDate = this.#fuzzyDateService.format(this.#value, this.dateFormat, this.#locale);\n this.#setInputElementValue(formattedDate);\n this.#changeDetector.markForCheck();\n }\n }\n // TODO: Refactor to not have getter logic\n get dateFormat() {\n return (this.#_dateFormat ||\n this.#configService.dateFormat ||\n this.#preferredShortDateFormat);\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 set disabled(value) {\n this.#_disabled = value;\n this.#datepickerComponent.disabled = value;\n this.#renderer.setProperty(this.#elementRef.nativeElement, 'disabled', value);\n }\n get disabled() {\n return this.#_disabled;\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 set futureDisabled(value) {\n this.#_futureDisabled = value;\n this.#datepickerComponent.maxDate = this.#getMaxDate();\n this.#onValidatorChange();\n }\n get futureDisabled() {\n return this.#_futureDisabled;\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 set maxDate(value) {\n this.#_maxDate = value;\n this.#datepickerComponent.maxDate = this.#getMaxDate();\n this.#onValidatorChange();\n }\n get maxDate() {\n return this.#_maxDate;\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 set minDate(value) {\n this.#_minDate = value;\n this.#datepickerComponent.minDate = this.#getMinDate();\n this.#onValidatorChange();\n }\n get minDate() {\n return this.#_minDate;\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 set startAtDate(value) {\n this.#_startAtDate = value;\n this.#datepickerComponent.startAtDate = this.#getStartAtDate();\n }\n // TODO: Refactor to not have getter logic\n get startAtDate() {\n return this.#_startAtDate;\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 set startingDay(value) {\n this.#_startingDay = value;\n this.#datepickerComponent.startingDay = this.startingDay;\n this.#onValidatorChange();\n }\n // TODO: Refactor to not have getter logic\n get startingDay() {\n return this.#_startingDay || this.#configService.startingDay;\n }\n /**\n * Whether to require the year in fuzzy dates.\n * @default false\n */\n set yearRequired(value) {\n this.#_yearRequired = value;\n this.#onValidatorChange();\n }\n get yearRequired() {\n return this.#_yearRequired;\n }\n get #value() {\n return this.#_value;\n }\n set #value(value) {\n this.#updateValue(value);\n }\n #control;\n #dateFormatter;\n #locale;\n #preferredShortDateFormat;\n #ngUnsubscribe;\n #notifyTouched;\n #_futureDisabled;\n #_dateFormat;\n #_disabled;\n #_maxDate;\n #_minDate;\n #_startAtDate;\n #_startingDay;\n #_value;\n #_yearRequired;\n #changeDetector;\n #configService;\n #elementRef;\n #fuzzyDateService;\n #renderer;\n #datepickerComponent;\n #datepickerHostSvc;\n constructor(changeDetector, configService, elementRef, fuzzyDateService, localeProvider, renderer, datepickerComponent) {\n /**\n * Whether to disable date validation on the fuzzy datepicker input.\n * @default false\n */\n this.skyDatepickerNoValidate = false;\n this.#dateFormatter = new SkyDateFormatter();\n this.#ngUnsubscribe = new Subject();\n this.#_futureDisabled = false;\n this.#_disabled = false;\n this.#_yearRequired = false;\n this.#datepickerHostSvc = inject(SkyDatepickerHostService, {\n optional: true,\n });\n // istanbul ignore next\n this.#onChange = (_) => { };\n // istanbul ignore next\n this.#onValidatorChange = () => { };\n if (!datepickerComponent) {\n throw new Error('You must wrap the `skyFuzzyDatepickerInput` directive within a ' +\n '`<sky-datepicker>` component!');\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 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 this.#datepickerHostSvc?.focusout\n .pipe(takeUntilDestroyed())\n .subscribe((evt) => {\n const isFocusingInput = evt.relatedTarget === this.#elementRef.nativeElement;\n if (!isFocusingInput) {\n this.#notifyTouched?.();\n }\n });\n }\n ngOnInit() {\n if (this.yearRequired) {\n if (this.dateFormat?.toLowerCase().indexOf('y') === -1) {\n throw new Error('You have configured conflicting settings. Year is required and dateFormat does not include year.');\n }\n }\n const element = this.#elementRef.nativeElement;\n this.#renderer.addClass(element, 'sky-form-control');\n }\n ngAfterContentInit() {\n this.#datepickerComponent.dateChange\n .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))\n .subscribe((value) => {\n this.#value = value;\n });\n }\n ngAfterViewInit() {\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 this.#changeDetector.markForCheck();\n });\n }\n }\n ngOnDestroy() {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n onInputChange(event) {\n this.#onValueChange(event.target.value);\n }\n onInputBlur() {\n const formattedDate = this.#fuzzyDateService.format(this.#value, this.dateFormat, this.#locale);\n if (this.#control?.valid) {\n this.#setInputElementValue(formattedDate);\n }\n }\n onInput() {\n this.#control?.markAsDirty();\n }\n writeValue(value) {\n this.#updateValue(value, false);\n }\n validate(control) {\n if (!this.#control) {\n this.#control = control;\n }\n if (this.skyDatepickerNoValidate) {\n return null;\n }\n if (!this.#control.value) {\n return null;\n }\n const value = control.value;\n let fuzzyDate;\n let validationError = null;\n if (typeof value === 'string') {\n fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromString(value, this.dateFormat);\n }\n else {\n fuzzyDate = value;\n }\n if (!fuzzyDate) {\n validationError = {\n skyFuzzyDate: {\n invalid: value,\n },\n };\n }\n else {\n if (!fuzzyDate.year && this.yearRequired) {\n validationError = {\n skyFuzzyDate: {\n yearRequired: value,\n },\n };\n }\n if (!validationError && fuzzyDate.year) {\n let fuzzyDateRange;\n if (this.maxDate) {\n fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(fuzzyDate, this.maxDate);\n if (!fuzzyDateRange.valid) {\n validationError = {\n skyFuzzyDate: {\n maxDate: value,\n maxDateFormatted: this.#dateFormatter.format(fuzzyDateRange.endDate, this.dateFormat),\n },\n };\n }\n }\n if (!validationError && this.minDate) {\n fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(this.minDate, fuzzyDate);\n if (!fuzzyDateRange.valid) {\n validationError = {\n skyFuzzyDate: {\n minDate: value,\n minDateFormatted: this.#dateFormatter.format(fuzzyDateRange.startDate, this.dateFormat),\n },\n };\n }\n }\n if (!validationError && this.futureDisabled) {\n fuzzyDateRange = this.#fuzzyDateService.getFuzzyDateRange(fuzzyDate, this.#fuzzyDateService.getCurrentFuzzyDate());\n if (!fuzzyDateRange.valid) {\n validationError = {\n skyFuzzyDate: {\n futureDisabled: value,\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 return validationError;\n }\n registerOnChange(fn) {\n this.#onChange = fn;\n }\n registerOnTouched(fn) {\n this.#notifyTouched = fn;\n }\n registerOnValidatorChange(fn) {\n this.#onValidatorChange = fn;\n }\n setDisabledState(disabled) {\n this.disabled = disabled;\n this.#datepickerComponent.disabled = disabled;\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 detectInputValueChange() {\n this.#onValueChange(this.#elementRef.nativeElement.value);\n }\n onFocusout(evt) {\n if (!this.#datepickerHostSvc?.isFocusingDatepicker(evt)) {\n this.#notifyTouched?.();\n }\n }\n #onValueChange(newValue) {\n this.#value = newValue;\n }\n #setInputElementValue(value) {\n this.#renderer.setProperty(this.#elementRef.nativeElement, 'value', value);\n }\n #getMaxDate() {\n if (this.maxDate) {\n const maxDate = this.#fuzzyDateService.getMomentFromFuzzyDate(this.maxDate);\n if (maxDate.isValid()) {\n return maxDate.toDate();\n }\n }\n else if (this.futureDisabled) {\n return new Date();\n }\n return this.#configService.maxDate;\n }\n #getMinDate() {\n if (this.minDate) {\n const minDate = this.#fuzzyDateService.getMomentFromFuzzyDate(this.minDate);\n if (minDate.isValid()) {\n return minDate.toDate();\n }\n }\n return this.#configService.minDate;\n }\n #getStartAtDate() {\n if (this.startAtDate) {\n const startAtDate = this.#fuzzyDateService.getMomentFromFuzzyDate(this.startAtDate);\n if (startAtDate.isValid()) {\n return startAtDate.toDate();\n }\n }\n return this.#configService.startAtDate;\n }\n /* istanbul ignore next */\n #fuzzyDatesEqual(dateA, dateB) {\n return !!(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 // istanbul ignore next\n #onChange;\n // istanbul ignore next\n #onValidatorChange;\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, emitEvent = true) {\n if (this.#_value === value ||\n (this.#_value === undefined && value === null)) {\n return;\n }\n let fuzzyDate;\n let fuzzyMoment;\n let dateValue;\n let formattedDate;\n if (value instanceof Date) {\n dateValue = value;\n formattedDate = this.#dateFormatter.format(value, this.dateFormat);\n fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromSelectedDate(value, this.dateFormat);\n }\n else if (typeof value === 'string') {\n fuzzyDate = this.#fuzzyDateService.getFuzzyDateFromString(value, this.dateFormat);\n if (fuzzyDate) {\n formattedDate = this.#fuzzyDateService.format(fuzzyDate, this.dateFormat, this.#locale);\n }\n if (!formattedDate) {\n formattedDate = value;\n }\n fuzzyMoment = this.#fuzzyDateService.getMomentFromFuzzyDate(fuzzyDate);\n if (fuzzyMoment) {\n dateValue = fuzzyMoment.toDate();\n }\n }\n else {\n fuzzyDate = value;\n formattedDate = this.#fuzzyDateService.format(fuzzyDate, this.dateFormat, this.#locale);\n fuzzyMoment = this.#fuzzyDateService.getMomentFromFuzzyDate(fuzzyDate);\n if (fuzzyMoment) {\n dateValue = fuzzyMoment.toDate();\n }\n }\n const areFuzzyDatesEqual = this.#fuzzyDatesEqual(this.#_value, fuzzyDate);\n const isNewValue = fuzzyDate !== this.#_value || !areFuzzyDatesEqual;\n this.#_value = fuzzyDate || value;\n if (isNewValue) {\n if (emitEvent) {\n this.#onChange(this.#_value);\n }\n else {\n this.#control?.setValue(this.#_value, { emitEvent: false });\n }\n this.#datepickerComponent.selectedDate = dateValue;\n }\n this.#setInputElementValue(formattedDate || '');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyFuzzyDatepickerInputDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyDatepickerConfigService }, { token: i0.ElementRef }, { token: i2.SkyFuzzyDateService }, { token: i3.SkyAppLocaleProvider }, { token: i0.Renderer2 }, { token: i4.SkyDatepickerComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.15\", type: SkyFuzzyDatepickerInputDirective, isStandalone: true, selector: \"[skyFuzzyDatepickerInput]\", inputs: { dateFormat: \"dateFormat\", disabled: \"disabled\", futureDisabled: \"futureDisabled\", maxDate: \"maxDate\", minDate: \"minDate\", startAtDate: \"startAtDate\", skyDatepickerNoValidate: \"skyDatepickerNoValidate\", startingDay: \"startingDay\", yearRequired: \"yearRequired\" }, host: { listeners: { \"focusout\": \"onFocusout($event)\", \"change\": \"onInputChange($event)\", \"blur\": \"onInputBlur()\", \"input\": \"onInput()\" } }, providers: [\n SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR,\n SKY_FUZZY_DATEPICKER_VALIDATOR,\n ], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyFuzzyDatepickerInputDirective, decorators: [{\n type: Directive,\n args: [{\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 }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.SkyDatepickerConfigService }, { type: i0.ElementRef }, { type: i2.SkyFuzzyDateService }, { type: i3.SkyAppLocaleProvider }, { type: i0.Renderer2 }, { type: i4.SkyDatepickerComponent, decorators: [{\n type: Optional\n }] }], propDecorators: { dateFormat: [{\n type: Input\n }], disabled: [{\n type: Input\n }], futureDisabled: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], minDate: [{\n type: Input\n }], startAtDate: [{\n type: Input\n }], skyDatepickerNoValidate: [{\n type: Input\n }], startingDay: [{\n type: Input\n }], yearRequired: [{\n type: Input\n }], onInputChange: [{\n type: HostListener,\n args: ['change', ['$event']]\n }], onInputBlur: [{\n type: HostListener,\n args: ['blur']\n }], onInput: [{\n type: HostListener,\n args: ['input']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZnV6enkvZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFFUixVQUFVLEVBQ1YsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFHTCxhQUFhLEVBQ2IsaUJBQWlCLEdBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFckQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztBQU10RSxNQUFNLG1DQUFtQyxHQUFHO0lBQzFDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUMvRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLDhCQUE4QixHQUFHO0lBQ3JDLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0NBQWdDLENBQUM7SUFDL0QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBWUYsTUFBTSxPQUFPLGdDQUFnQztJQVMzQzs7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VCxJQUFJLEVBQUU7d0JBQ0osWUFBWSxFQUFFLG9CQUFvQjtxQkFDbkM7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULG1DQUFtQzt3QkFDbkMsOEJBQThCO3FCQUMvQjtvQkFDRCxRQUFRLEVBQUUsMkJBQTJCO2lCQUN0Qzs7MEJBK05JLFFBQVE7O3NCQWhOVixLQUFLOztzQkE2QkwsS0FBSzs7c0JBcUJMLEtBQUs7O3NCQWlCTCxLQUFLOztzQkFpQkwsS0FBSzs7c0JBaUJMLEtBQUs7O3NCQWVMLEtBQUs7O3NCQVNMLEtBQUs7O3NCQWlCTCxLQUFLOztzQkF1SkwsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUtqQyxZQUFZO3VCQUFDLE1BQU07O3NCQWFuQixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUFwcExvY2FsZVByb3ZpZGVyIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lEYXRlRm9ybWF0dGVyIH0gZnJvbSAnLi4vZGF0ZS1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9kYXRlcGlja2VyLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJIb3N0U2VydmljZSB9IGZyb20gJy4uL2RhdGVwaWNrZXItaG9zdC5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFNreUZ1enp5RGF0ZSB9IGZyb20gJy4vZnV6enktZGF0ZSc7XG5pbXBvcnQgeyBTa3lGdXp6eURhdGVTZXJ2aWNlIH0gZnJvbSAnLi9mdXp6eS1kYXRlLnNlcnZpY2UnO1xuXG5jb25zdCBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgaG9zdDoge1xuICAgICcoZm9jdXNvdXQpJzogJ29uRm9jdXNvdXQoJGV2ZW50KScsXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIFNLWV9GVVpaWV9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SLFxuICAgIFNLWV9GVVpaWV9EQVRFUElDS0VSX1ZBTElEQVRPUixcbiAgXSxcbiAgc2VsZWN0b3I6ICdbc2t5RnV6enlEYXRlcGlja2VySW5wdXRdJyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RnV6enlEYXRlcGlja2VySW5wdXREaXJlY3RpdmVcbiAgaW1wbGVtZW50c1xuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvclxue1xuICAvKipcbiAgICogVGhlIGRhdGUgZm9ybWF0IGZvciB0aGUgaW5wdXQuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAgICogdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgXCJNTS9ERC9ZWVlZXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0ZUZvcm1hdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RhdGVGb3JtYXQgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLiN2YWx1ZSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZm9ybWF0KFxuICAgICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aGlzLiNsb2NhbGUsXG4gICAgICApO1xuICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZSk7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLiNjb25maWdTZXJ2aWNlLmRhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBkYXRlcGlja2VyIG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gdmFsdWU7XG5cbiAgICB0aGlzLiNyZW5kZXJlci5zZXRQcm9wZXJ0eShcbiAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdkaXNhYmxlZCcsXG4gICAgICB2YWx1ZSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHJldmVudCB1c2VycyBmcm9tIHNwZWNpZnlpbmcgZGF0ZXMgdGhhdCBhcmUgaW4gdGhlIGZ1dHVyZS5cbiAgICogUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZnV0dXJlRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZnV0dXJlRGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50Lm1heERhdGUgPSB0aGlzLiNnZXRNYXhEYXRlKCk7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZnV0dXJlRGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19mdXR1cmVEaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IGZ1enp5IGRhdGUgYWxsb3dlZC4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudFxuICAgKiB0byBwcmV2ZW50IGZ1enp5IGRhdGVzIGFmdGVyIGEgc3BlY2lmaWVkIGRhdGUuIFRoaXMgcHJvcGVydHkgYWNjZXB0c1xuICAgKiBhIGBTa3lGdXp6eURhdGVgIHZhbHVlIHRoYXQgaW5jbHVkZXMgbnVtZXJpYyBtb250aCwgZGF5LCBhbmQgeWVhciB2YWx1ZXMuXG4gICAqIEZvciBleGFtcGxlOiBgeyBtb250aDogMSwgZGF5OiAxLCB5ZWFyOiAyMDI3IH1gLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhEYXRlKHZhbHVlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWF4RGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQubWF4RGF0ZSA9IHRoaXMuI2dldE1heERhdGUoKTtcbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXhEYXRlKCk6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19tYXhEYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlYXJsaWVzdCBmdXp6eSBkYXRlIGFsbG93ZWQuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAgICogdG8gcHJldmVudCBmdXp6eSBkYXRlcyBiZWZvcmUgYSBzcGVjaWZpZWQgZGF0ZS4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGEgYFNreUZ1enp5RGF0ZWAgdmFsdWVcbiAgICogdGhhdCBpbmNsdWRlcyBudW1lcmljIG1vbnRoLCBkYXksIGFuZCB5ZWFyIHZhbHVlcy5cbiAgICogRm9yIGV4YW1wbGU6IGB7IG1vbnRoOiAxLCBkYXk6IDEsIHllYXI6IDIwMDcgfWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pbkRhdGUodmFsdWU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19taW5EYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5taW5EYXRlID0gdGhpcy4jZ2V0TWluRGF0ZSgpO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21pbkRhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZ1enp5IGRhdGUgdG8gb3BlbiB0aGUgY2FsZW5kYXIgdG8gaW5pdGlhbGx5LlxuICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYSBgU2t5RnV6enlEYXRlYCB2YWx1ZSB0aGF0IGluY2x1ZGVzIG51bWVyaWMgbW9udGgsIGRheSwgYW5kIHllYXIgdmFsdWVzLlxuICAgKiBGb3IgZXhhbXBsZTogYHsgbW9udGg6IDEsIGRheTogMSwgeWVhcjogMjAwNyB9YC5cbiAgICogQGRlZmF1bHQgVGhlIGN1cnJlbnQgZGF0ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFydEF0RGF0ZSh2YWx1ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3N0YXJ0QXREYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zdGFydEF0RGF0ZSA9IHRoaXMuI2dldFN0YXJ0QXREYXRlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBzdGFydEF0RGF0ZSgpOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfc3RhcnRBdERhdGU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIGRhdGUgdmFsaWRhdGlvbiBvbiB0aGUgZnV6enkgZGF0ZXBpY2tlciBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBza3lEYXRlcGlja2VyTm9WYWxpZGF0ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhcnRpbmcgZGF5IG9mIHRoZSB3ZWVrIGluIHRoZSBjYWxlbmRhciwgd2hlcmUgYDBgIHNldHMgdGhlIHN0YXJ0aW5nIGRheVxuICAgKiB0byBTdW5kYXkuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRcbiAgICogaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFydGluZ0RheSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3N0YXJ0aW5nRGF5ID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zdGFydGluZ0RheSA9IHRoaXMuc3RhcnRpbmdEYXk7XG5cbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgc3RhcnRpbmdEYXkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX3N0YXJ0aW5nRGF5IHx8IHRoaXMuI2NvbmZpZ1NlcnZpY2Uuc3RhcnRpbmdEYXk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byByZXF1aXJlIHRoZSB5ZWFyIGluIGZ1enp5IGRhdGVzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB5ZWFyUmVxdWlyZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfeWVhclJlcXVpcmVkID0gdmFsdWU7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgeWVhclJlcXVpcmVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfeWVhclJlcXVpcmVkO1xuICB9XG5cbiAgZ2V0ICN2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLiNfdmFsdWU7XG4gIH1cblxuICBzZXQgI3ZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAjY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkO1xuXG4gICNkYXRlRm9ybWF0dGVyID0gbmV3IFNreURhdGVGb3JtYXR0ZXIoKTtcblxuICAjbG9jYWxlOiBzdHJpbmc7XG5cbiAgI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjbm90aWZ5VG91Y2hlZDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICNfZnV0dXJlRGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAjX2RhdGVGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjX2Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgI19tYXhEYXRlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQ7XG5cbiAgI19taW5EYXRlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQ7XG5cbiAgI19zdGFydEF0RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuXG4gICNfc3RhcnRpbmdEYXk6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAjX3ZhbHVlOiBhbnk7XG5cbiAgI195ZWFyUmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjY29uZmlnU2VydmljZTogU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2U7XG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAjZnV6enlEYXRlU2VydmljZTogU2t5RnV6enlEYXRlU2VydmljZTtcbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG4gICNkYXRlcGlja2VyQ29tcG9uZW50OiBTa3lEYXRlcGlja2VyQ29tcG9uZW50O1xuXG4gIHJlYWRvbmx5ICNkYXRlcGlja2VySG9zdFN2YyA9IGluamVjdChTa3lEYXRlcGlja2VySG9zdFNlcnZpY2UsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGNvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgZnV6enlEYXRlU2VydmljZTogU2t5RnV6enlEYXRlU2VydmljZSxcbiAgICBsb2NhbGVQcm92aWRlcjogU2t5QXBwTG9jYWxlUHJvdmlkZXIsXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAT3B0aW9uYWwoKSBkYXRlcGlja2VyQ29tcG9uZW50PzogU2t5RGF0ZXBpY2tlckNvbXBvbmVudCxcbiAgKSB7XG4gICAgaWYgKCFkYXRlcGlja2VyQ29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdZb3UgbXVzdCB3cmFwIHRoZSBgc2t5RnV6enlEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZSB3aXRoaW4gYSAnICtcbiAgICAgICAgICAnYDxza3ktZGF0ZXBpY2tlcj5gIGNvbXBvbmVudCEnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2NvbmZpZ1NlcnZpY2UgPSBjb25maWdTZXJ2aWNlO1xuICAgIHRoaXMuI2VsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UgPSBmdXp6eURhdGVTZXJ2aWNlO1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudCA9IGRhdGVwaWNrZXJDb21wb25lbnQ7XG5cbiAgICB0aGlzLiNsb2NhbGUgPSBsb2NhbGVQcm92aWRlci5kZWZhdWx0TG9jYWxlO1xuICAgIGxvY2FsZVByb3ZpZGVyXG4gICAgICAuZ2V0TG9jYWxlSW5mbygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsb2NhbGVJbmZvKSA9PiB7XG4gICAgICAgIHRoaXMuI2xvY2FsZSA9IGxvY2FsZUluZm8ubG9jYWxlO1xuICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLnNldExvY2FsZSh0aGlzLiNsb2NhbGUpO1xuICAgICAgICB0aGlzLiNwcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQgPVxuICAgICAgICAgIFNreURhdGVGb3JtYXR0ZXIuZ2V0UHJlZmVycmVkU2hvcnREYXRlRm9ybWF0KCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuI2RhdGVwaWNrZXJIb3N0U3ZjPy5mb2N1c291dFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgY29uc3QgaXNGb2N1c2luZ0lucHV0ID1cbiAgICAgICAgICBldnQucmVsYXRlZFRhcmdldCA9PT0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmICghaXNGb2N1c2luZ0lucHV0KSB7XG4gICAgICAgICAgdGhpcy4jbm90aWZ5VG91Y2hlZD8uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnllYXJSZXF1aXJlZCkge1xuICAgICAgaWYgKHRoaXMuZGF0ZUZvcm1hdD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCd5JykgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnWW91IGhhdmUgY29uZmlndXJlZCBjb25mbGljdGluZyBzZXR0aW5ncy4gWWVhciBpcyByZXF1aXJlZCBhbmQgZGF0ZUZvcm1hdCBkb2VzIG5vdCBpbmNsdWRlIHllYXIuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ3NreS1mb3JtLWNvbnRyb2wnKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kYXRlQ2hhbmdlXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogRGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLiN2YWx1ZSA9IHZhbHVlO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGFkZHJlc3MgYSBidWcgaW4gQW5ndWxhciA0LlxuICAgIC8vIFdoZW4gYSBjb250cm9sIHZhbHVlIGlzIHNldCBpbml0aWFsbHksIGl0cyB2YWx1ZSBpcyBub3QgcmVwcmVzZW50ZWQgb24gdGhlIHZpZXcuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzc5MlxuICAgIC8vIE9mIG5vdGUgaXMgdGhlIHBhcmVudCBjaGVjayB3aGljaCBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmb3JtIGlzIHJlYWN0aXZlLlxuICAgIC8vIFdpdGhvdXQgdGhpcyBjaGVjayB0aGVyZSBpcyBhIGNoYW5nZWQgYmVmb3JlIGNoZWNrZWQgZXJyb3JcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXG4gICAgaWYgKHRoaXMuI2NvbnRyb2wgJiYgdGhpcy4jY29udHJvbC5wYXJlbnQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiN2YWx1ZSwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbklucHV0Q2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiNvblZhbHVlQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgcHVibGljIG9uSW5wdXRCbHVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgIHRoaXMuI3ZhbHVlLFxuICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgdGhpcy4jbG9jYWxlLFxuICAgICk7XG5cbiAgICBpZiAodGhpcy4jY29udHJvbD8udmFsaWQpIHtcbiAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgcHVibGljIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy4jY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2wgPSBjb250cm9sO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wudmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgbGV0IGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCB2YWxpZGF0aW9uRXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdXp6eURhdGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWZ1enp5RGF0ZSkge1xuICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICBpbnZhbGlkOiB2YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZnV6enlEYXRlLnllYXIgJiYgdGhpcy55ZWFyUmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgICAgeWVhclJlcXVpcmVkOiB2YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXZhbGlkYXRpb25FcnJvciAmJiBmdXp6eURhdGUueWVhcikge1xuICAgICAgICBsZXQgZnV6enlEYXRlUmFuZ2U7XG5cbiAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVSYW5nZShcbiAgICAgICAgICAgIGZ1enp5RGF0ZSxcbiAgICAgICAgICAgIHRoaXMubWF4RGF0ZSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCFmdXp6eURhdGVSYW5nZS52YWxpZCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICAgICAgICBtYXhEYXRlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBtYXhEYXRlRm9ybWF0dGVkOiB0aGlzLiNkYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgICAgICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlLmVuZERhdGUsXG4gICAgICAgICAgICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uRXJyb3IgJiYgdGhpcy5taW5EYXRlKSB7XG4gICAgICAgICAgZnV6enlEYXRlUmFuZ2UgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZVJhbmdlKFxuICAgICAgICAgICAgdGhpcy5taW5EYXRlLFxuICAgICAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFmdXp6eURhdGVSYW5nZS52YWxpZCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICAgICAgICBtaW5EYXRlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBtaW5EYXRlRm9ybWF0dGVkOiB0aGlzLiNkYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgICAgICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlLnN0YXJ0RGF0ZSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbGlkYXRpb25FcnJvciAmJiB0aGlzLmZ1dHVyZURpc2FibGVkKSB7XG4gICAgICAgICAgZnV6enlEYXRlUmFuZ2UgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZVJhbmdlKFxuICAgICAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICAgICAgdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRDdXJyZW50RnV6enlEYXRlKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWZ1enp5RGF0ZVJhbmdlLnZhbGlkKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgICAgICAgIGZ1dHVyZURpc2FibGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgdGhpcy4jY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNub3RpZnlUb3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0cyBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQncyB2YWx1ZSBhbmQgdXBkYXRlcyB0aGUgbmdNb2RlbCBhY2NvcmRpbmdseS5cbiAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSBuZ01vZGVsIHZhbHVlIGJlZm9yZSB0aGUgaW5wdXQgZWxlbWVudCBsb3NlcyBmb2N1cy5cbiAgICovXG4gIHB1YmxpYyBkZXRlY3RJbnB1dFZhbHVlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkZvY3Vzb3V0KGV2dDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jZGF0ZXBpY2tlckhvc3RTdmM/LmlzRm9jdXNpbmdEYXRlcGlja2VyKGV2dCkpIHtcbiAgICAgIHRoaXMuI25vdGlmeVRvdWNoZWQ/LigpO1xuICAgIH1cbiAgfVxuXG4gICNvblZhbHVlQ2hhbmdlKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiN2YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgI3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiNyZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgfVxuXG4gICNnZXRNYXhEYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLm1heERhdGUpIHtcbiAgICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldE1vbWVudEZyb21GdXp6eURhdGUoXG4gICAgICAgIHRoaXMubWF4RGF0ZSxcbiAgICAgICk7XG4gICAgICBpZiAobWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG1heERhdGUudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZ1dHVyZURpc2FibGVkKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI2NvbmZpZ1NlcnZpY2UubWF4RGF0ZTtcbiAgfVxuXG4gICNnZXRNaW5EYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcbiAgICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldE1vbWVudEZyb21GdXp6eURhdGUoXG4gICAgICAgIHRoaXMubWluRGF0ZSxcbiAgICAgICk7XG4gICAgICBpZiAobWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG1pbkRhdGUudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNjb25maWdTZXJ2aWNlLm1pbkRhdGU7XG4gIH1cblxuICAjZ2V0U3RhcnRBdERhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuc3RhcnRBdERhdGUpIHtcbiAgICAgIGNvbnN0IHN0YXJ0QXREYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRNb21lbnRGcm9tRnV6enlEYXRlKFxuICAgICAgICB0aGlzLnN0YXJ0QXREYXRlLFxuICAgICAgKTtcbiAgICAgIGlmIChzdGFydEF0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0QXREYXRlLnRvRGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jY29uZmlnU2VydmljZS5zdGFydEF0RGF0ZTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICNmdXp6eURhdGVzRXF1YWwoZGF0ZUE/OiBTa3lGdXp6eURhdGUsIGRhdGVCPzogU2t5RnV6enlEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKFxuICAgICAgZGF0ZUEgJiZcbiAgICAgIGRhdGVCICYmXG4gICAgICAoKCFkYXRlQS5kYXkgJiYgIWRhdGVCLmRheSkgfHwgZGF0ZUEuZGF5ID09PSBkYXRlQi5kYXkpICYmXG4gICAgICAoKCFkYXRlQS5tb250aCAmJiAhZGF0ZUIubW9udGgpIHx8IGRhdGVBLm1vbnRoID09PSBkYXRlQi5tb250aCkgJiZcbiAgICAgICgoIWRhdGVBLnllYXIgJiYgIWRhdGVCLnllYXIpIHx8IGRhdGVBLnllYXIgPT09IGRhdGVCLnllYXIpXG4gICAgKTtcbiAgfVxuXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvbkNoYW5nZSA9IChfOiBhbnkpOiB2b2lkID0+IHt9O1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAjb25WYWxpZGF0b3JDaGFuZ2UgPSAoKTogdm9pZCA9PiB7fTtcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sIGFuZCBpbnB1dCBlbGVtZW50XG4gICAqIEBwYXJhbSBlbWl0RXZlbnQgRGVub3RlcyBpZiB3ZSBlbWl0IGFuIGV2ZW50IHRvIHRoZSBjb25zdW1lcidzIGZvcm0gY29udHJvbC4gV2UgZG8gbm90IHdhbnQgdG8gZG8gdGhpcyBpZiB0aGUgdmFsdWUgaXMgYmVpbmcgdXBkYXRlZCB2aWEgYSBgc2V0VmFsdWVgIGNhbGwgb3IgYSBgcGF0Y2hWYWx1ZWAgY2FsbCBhcyB0aGlzIGlzIGFscmVhZHkgaGFuZGxlZCBieSBBbmd1bGFyLlxuICAgKiBJbiB0aGVzZSBjYXNlcyB3ZSBkbyBub3Qgd2FudCB0byBmaXJlIGBvbkNoYW5nZWAgYXMgaXQgd2lsbCBjYXVzZSBleHRyYSBgdmFsdWVDaGFuZ2VgIGFuZCBgc3RhdHVzQ2hhbmdlYCBldmVudHMgYW5kIHRoZSBzdGF0dXMgb2YgdGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLlxuICAgKi9cbiAgI3VwZGF0ZVZhbHVlKHZhbHVlOiBhbnksIGVtaXRFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLiNfdmFsdWUgPT09IHZhbHVlIHx8XG4gICAgICAodGhpcy4jX3ZhbHVlID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPT09IG51bGwpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBmdXp6eU1vbWVudDogYW55O1xuICAgIGxldCBkYXRlVmFsdWU6IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZvcm1hdHRlZERhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGRhdGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZm9ybWF0KHZhbHVlLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgICAgZnV6enlEYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVGcm9tU2VsZWN0ZWREYXRlKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZ1enp5RGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0RnV6enlEYXRlRnJvbVN0cmluZyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICk7XG4gICAgICBpZiAoZnV6enlEYXRlKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgICAgICBmdXp6eURhdGUsXG4gICAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICAgIHRoaXMuI2xvY2FsZSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGUgPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgZnV6enlNb21lbnQgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldE1vbWVudEZyb21GdXp6eURhdGUoZnV6enlEYXRlKTtcblxuICAgICAgaWYgKGZ1enp5TW9tZW50KSB7XG4gICAgICAgIGRhdGVWYWx1ZSA9IGZ1enp5TW9tZW50LnRvRGF0ZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmdXp6eURhdGUgPSB2YWx1ZSBhcyBTa3lGdXp6eURhdGU7XG4gICAgICBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5mb3JtYXQoXG4gICAgICAgIGZ1enp5RGF0ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aGlzLiNsb2NhbGUsXG4gICAgICApO1xuICAgICAgZnV6enlNb21lbnQgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldE1vbWVudEZyb21GdXp6eURhdGUoZnV6enlEYXRlKTtcblxuICAgICAgaWYgKGZ1enp5TW9tZW50KSB7XG4gICAgICAgIGRhdGVWYWx1ZSA9IGZ1enp5TW9tZW50LnRvRGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFyZUZ1enp5RGF0ZXNFcXVhbCA9IHRoaXMuI2Z1enp5RGF0ZXNFcXVhbCh0aGlzLiNfdmFsdWUsIGZ1enp5RGF0ZSk7XG4gICAgY29uc3QgaXNOZXdWYWx1ZSA9IGZ1enp5RGF0ZSAhPT0gdGhpcy4jX3ZhbHVlIHx8ICFhcmVGdXp6eURhdGVzRXF1YWw7XG5cbiAgICB0aGlzLiNfdmFsdWUgPSBmdXp6eURhdGUgfHwgdmFsdWU7XG5cbiAgICBpZiAoaXNOZXdWYWx1ZSkge1xuICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICB0aGlzLiNvbkNoYW5nZSh0aGlzLiNfdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jY29udHJvbD8uc2V0VmFsdWUodGhpcy4jX3ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuc2VsZWN0ZWREYXRlID0gZGF0ZVZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUgfHwgJycpO1xuICB9XG59XG4iXX0=","import { NgModule } from '@angular/core';\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';\nimport * as i0 from \"@angular/core\";\nexport class SkyDatepickerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerModule, imports: [SkyDatepickerCalendarComponent,\n SkyDatepickerCalendarInnerComponent,\n SkyDatepickerComponent,\n SkyDatepickerInputDirective,\n SkyDayPickerButtonComponent,\n SkyDayPickerCellComponent,\n SkyDayPickerComponent,\n SkyFuzzyDatepickerInputDirective,\n SkyMonthPickerComponent,\n SkyYearPickerComponent], exports: [SkyDatepickerCalendarComponent,\n SkyDatepickerComponent,\n SkyDatepickerInputDirective,\n SkyFuzzyDatepickerInputDirective] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerModule, providers: [SkyDatepickerCalendarService], imports: [SkyDatepickerCalendarComponent,\n SkyDatepickerCalendarInnerComponent,\n SkyDatepickerComponent,\n SkyDayPickerButtonComponent,\n SkyDayPickerCellComponent,\n SkyDayPickerComponent,\n SkyMonthPickerComponent,\n SkyYearPickerComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDatepickerModule, decorators: [{\n type: NgModule,\n args: [{\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 }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUF1QjVGLE1BQU0sT0FBTyxtQkFBbUI7K0dBQW5CLG1CQUFtQjtnSEFBbkIsbUJBQW1CLFlBbkI1Qiw4QkFBOEI7WUFDOUIsbUNBQW1DO1lBQ25DLHNCQUFzQjtZQUN0QiwyQkFBMkI7WUFDM0IsMkJBQTJCO1lBQzNCLHlCQUF5QjtZQUN6QixxQkFBcUI7WUFDckIsZ0NBQWdDO1lBQ2hDLHVCQUF1QjtZQUN2QixzQkFBc0IsYUFHdEIsOEJBQThCO1lBQzlCLHNCQUFzQjtZQUN0QiwyQkFBMkI7WUFDM0IsZ0NBQWdDO2dIQUl2QixtQkFBbUIsYUFGbkIsQ0FBQyw0QkFBNEIsQ0FBQyxZQWpCdkMsOEJBQThCO1lBQzlCLG1DQUFtQztZQUNuQyxzQkFBc0I7WUFFdEIsMkJBQTJCO1lBQzNCLHlCQUF5QjtZQUN6QixxQkFBcUI7WUFFckIsdUJBQXVCO1lBQ3ZCLHNCQUFzQjs7NEZBVWIsbUJBQW1CO2tCQXJCL0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsOEJBQThCO3dCQUM5QixtQ0FBbUM7d0JBQ25DLHNCQUFzQjt3QkFDdEIsMkJBQTJCO3dCQUMzQiwyQkFBMkI7d0JBQzNCLHlCQUF5Qjt3QkFDekIscUJBQXFCO3dCQUNyQixnQ0FBZ0M7d0JBQ2hDLHVCQUF1Qjt3QkFDdkIsc0JBQXNCO3FCQUN2QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsOEJBQThCO3dCQUM5QixzQkFBc0I7d0JBQ3RCLDJCQUEyQjt3QkFDM0IsZ0NBQWdDO3FCQUNqQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztpQkFDMUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ2FsZW5kYXJJbm5lckNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXIvZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci9kYXRlcGlja2VyLWNhbGVuZGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnLi9jYWxlbmRhci9kYXRlcGlja2VyLWNhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF5UGlja2VyQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci9kYXlwaWNrZXItYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lEYXlQaWNrZXJDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci9kYXlwaWNrZXItY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5RGF5UGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci9kYXlwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreU1vbnRoUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci9tb250aHBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5WWVhclBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXIveWVhcnBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWlucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lGdXp6eURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4vZnV6enkvZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgU2t5RGF0ZXBpY2tlckNhbGVuZGFyQ29tcG9uZW50LFxuICAgIFNreURhdGVwaWNrZXJDYWxlbmRhcklubmVyQ29tcG9uZW50LFxuICAgIFNreURhdGVwaWNrZXJDb21wb25lbnQsXG4gICAgU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlLFxuICAgIFNreURheVBpY2tlckJ1dHRvbkNvbXBvbmVudCxcbiAgICBTa3lEYXlQaWNrZXJDZWxsQ29tcG9uZW50LFxuICAgIFNreURheVBpY2tlckNvbXBvbmVudCxcbiAgICBTa3lGdXp6eURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSxcbiAgICBTa3lNb250aFBpY2tlckNvbXBvbmVudCxcbiAgICBTa3lZZWFyUGlja2VyQ29tcG9uZW50LFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgU2t5RGF0ZXBpY2tlckNhbGVuZGFyQ29tcG9uZW50LFxuICAgIFNreURhdGVwaWNrZXJDb21wb25lbnQsXG4gICAgU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlLFxuICAgIFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlLFxuICBdLFxuICBwcm92aWRlcnM6IFtTa3lEYXRlcGlja2VyQ2FsZW5kYXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0ZXBpY2tlck1vZHVsZSB7fVxuIl19","/**\n * The types of calculations available for a date range calculator.\n */\nexport var SkyDateRangeCalculatorType;\n(function (SkyDateRangeCalculatorType) {\n /**\n * Includes an input for a date after the current date.\n */\n SkyDateRangeCalculatorType[SkyDateRangeCalculatorType[\"After\"] = 0] = \"After\";\n /**\n * Includes an input for a date before the current date.\n */\n SkyDateRangeCalculatorType[SkyDateRangeCalculatorType[\"Before\"] = 1] = \"Before\";\n /**\n * Includes two inputs for a range of dates.\n */\n SkyDateRangeCalculatorType[SkyDateRangeCalculatorType[\"Range\"] = 2] = \"Range\";\n /**\n * Does not accept any input but calculates a specific range based on the current date.\n */\n SkyDateRangeCalculatorType[SkyDateRangeCalculatorType[\"Relative\"] = 3] = \"Relative\";\n})(SkyDateRangeCalculatorType || (SkyDateRangeCalculatorType = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRvci10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksMEJBb0JYO0FBcEJELFdBQVksMEJBQTBCO0lBQ3BDOztPQUVHO0lBQ0gsNkVBQUssQ0FBQTtJQUVMOztPQUVHO0lBQ0gsK0VBQU0sQ0FBQTtJQUVOOztPQUVHO0lBQ0gsNkVBQUssQ0FBQTtJQUVMOztPQUVHO0lBQ0gsbUZBQVEsQ0FBQTtBQUNWLENBQUMsRUFwQlcsMEJBQTBCLEtBQTFCLDBCQUEwQixRQW9CckMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSB0eXBlcyBvZiBjYWxjdWxhdGlvbnMgYXZhaWxhYmxlIGZvciBhIGRhdGUgcmFuZ2UgY2FsY3VsYXRvci5cbiAqL1xuZXhwb3J0IGVudW0gU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUge1xuICAvKipcbiAgICogSW5jbHVkZXMgYW4gaW5wdXQgZm9yIGEgZGF0ZSBhZnRlciB0aGUgY3VycmVudCBkYXRlLlxuICAgKi9cbiAgQWZ0ZXIsXG5cbiAgLyoqXG4gICAqIEluY2x1ZGVzIGFuIGlucHV0IGZvciBhIGRhdGUgYmVmb3JlIHRoZSBjdXJyZW50IGRhdGUuXG4gICAqL1xuICBCZWZvcmUsXG5cbiAgLyoqXG4gICAqIEluY2x1ZGVzIHR3byBpbnB1dHMgZm9yIGEgcmFuZ2Ugb2YgZGF0ZXMuXG4gICAqL1xuICBSYW5nZSxcblxuICAvKipcbiAgICogRG9lcyBub3QgYWNjZXB0IGFueSBpbnB1dCBidXQgY2FsY3VsYXRlcyBhIHNwZWNpZmljIHJhbmdlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRhdGUuXG4gICAqL1xuICBSZWxhdGl2ZSxcbn1cbiJdfQ==","import { Pipe } from '@angular/core';\nimport { SkyDateRangeCalculatorType } from './types/date-range-calculator-type';\nimport * as i0 from \"@angular/core\";\nexport class SkyDateRangePickerEndDateResourceKeyPipe {\n transform(calculatorType) {\n if (calculatorType === SkyDateRangeCalculatorType.Range) {\n return 'skyux_date_range_picker_end_date_label';\n }\n return 'skyux_date_range_picker_before_date_label';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerEndDateResourceKeyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerEndDateResourceKeyPipe, isStandalone: true, name: \"skyDateRangePickerEndDateResourceKey\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerEndDateResourceKeyPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'skyDateRangePickerEndDateResourceKey',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXItZW5kLWRhdGUtcmVzb3VyY2Uta2V5LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLWVuZC1kYXRlLXJlc291cmNlLWtleS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOztBQUtoRixNQUFNLE9BQU8sd0NBQXdDO0lBQzVDLFNBQVMsQ0FDZCxjQUFzRDtRQUV0RCxJQUFJLGNBQWMsS0FBSywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4RCxPQUFPLHdDQUF3QyxDQUFDO1FBQ2xELENBQUM7UUFFRCxPQUFPLDJDQUEyQyxDQUFDO0lBQ3JELENBQUM7K0dBVFUsd0NBQXdDOzZHQUF4Qyx3Q0FBd0M7OzRGQUF4Qyx3Q0FBd0M7a0JBSHBELElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLHNDQUFzQztpQkFDN0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlIH0gZnJvbSAnLi90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItdHlwZSc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3NreURhdGVSYW5nZVBpY2tlckVuZERhdGVSZXNvdXJjZUtleScsXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGVSYW5nZVBpY2tlckVuZERhdGVSZXNvdXJjZUtleVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgcHVibGljIHRyYW5zZm9ybShcbiAgICBjYWxjdWxhdG9yVHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUgfCB1bmRlZmluZWQsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKGNhbGN1bGF0b3JUeXBlID09PSBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5SYW5nZSkge1xuICAgICAgcmV0dXJuICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9lbmRfZGF0ZV9sYWJlbCc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9iZWZvcmVfZGF0ZV9sYWJlbCc7XG4gIH1cbn1cbiJdfQ==","import { Pipe } from '@angular/core';\nimport { SkyDateRangeCalculatorType } from './types/date-range-calculator-type';\nimport * as i0 from \"@angular/core\";\nexport class SkyDateRangePickerStartDateResourceKeyPipe {\n transform(calculatorType) {\n if (calculatorType === SkyDateRangeCalculatorType.Range) {\n return 'skyux_date_range_picker_start_date_label';\n }\n return 'skyux_date_range_picker_after_date_label';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerStartDateResourceKeyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerStartDateResourceKeyPipe, isStandalone: true, name: \"skyDateRangePickerStartDateResourceKey\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerStartDateResourceKeyPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'skyDateRangePickerStartDateResourceKey',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXItc3RhcnQtZGF0ZS1yZXNvdXJjZS1rZXkucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS9zcmMvbGliL21vZHVsZXMvZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXItc3RhcnQtZGF0ZS1yZXNvdXJjZS1rZXkucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUVwRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFLaEYsTUFBTSxPQUFPLDBDQUEwQztJQUc5QyxTQUFTLENBQ2QsY0FBc0Q7UUFFdEQsSUFBSSxjQUFjLEtBQUssMEJBQTBCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEQsT0FBTywwQ0FBMEMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsT0FBTywwQ0FBMEMsQ0FBQztJQUNwRCxDQUFDOytHQVhVLDBDQUEwQzs2R0FBMUMsMENBQTBDOzs0RkFBMUMsMENBQTBDO2tCQUh0RCxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSx3Q0FBd0M7aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZSB9IGZyb20gJy4vdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLXR5cGUnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdza3lEYXRlUmFuZ2VQaWNrZXJTdGFydERhdGVSZXNvdXJjZUtleScsXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGVSYW5nZVBpY2tlclN0YXJ0RGF0ZVJlc291cmNlS2V5UGlwZVxuICBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm1cbntcbiAgcHVibGljIHRyYW5zZm9ybShcbiAgICBjYWxjdWxhdG9yVHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUgfCB1bmRlZmluZWQsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKGNhbGN1bGF0b3JUeXBlID09PSBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5SYW5nZSkge1xuICAgICAgcmV0dXJuICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9zdGFydF9kYXRlX2xhYmVsJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2FmdGVyX2RhdGVfbGFiZWwnO1xuICB9XG59XG4iXX0=","import { of } from 'rxjs';\n/**\n * Represents the calculator.\n */\nexport class SkyDateRangeCalculator {\n #config;\n #resourcesSvc;\n /**\n * The text to display in the calculator select menu.\n */\n get shortDescription$() {\n if (this.shortDescription) {\n return of(this.shortDescription);\n }\n if (!this.#shortDescriptionResourceKey) {\n throw new Error('Calculator created without short description or resource key.');\n }\n return this.#resourcesSvc.getString(this.#shortDescriptionResourceKey);\n }\n #shortDescriptionResourceKey;\n constructor(\n /**\n * The calculator ID that specifies calculator objects that represent date ranges.\n */\n calculatorId, config, resourcesSvc, _shortDescriptionResourceKey) {\n this.calculatorId = calculatorId;\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 * Gets the current value of the calculator.\n * @param startDateInput The start date.\n * @param endDateInput The end date.\n */\n getValue(startDateInput, endDateInput) {\n const result = this.#config.getValue(startDateInput, endDateInput);\n let startDate = null;\n if (result.startDate instanceof Date) {\n startDate = this.#parseDateWithoutTime(result.startDate);\n }\n let endDate = null;\n if (result.endDate instanceof Date) {\n endDate = this.#parseDateWithoutTime(result.endDate);\n }\n return {\n calculatorId: this.calculatorId,\n startDate,\n endDate,\n };\n }\n /**\n * Performs synchronous validation against the control.\n */\n validate(value) {\n if (!this.#config.validate) {\n return null;\n }\n return this.#config.validate(value);\n }\n /**\n * Get a date object without time information.\n * See: https://stackoverflow.com/a/38050824/6178885\n */\n #parseDateWithoutTime(date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVF0Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsT0FBTyxDQUErQjtJQUN0QyxhQUFhLENBQXlCO0lBRXRDOztPQUVHO0lBQ0gsSUFBVyxpQkFBaUI7UUFDMUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQ2IsK0RBQStELENBQ2hFLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBUUQsNEJBQTRCLENBQXFCO0lBT2pEO0lBQ0U7O09BRUc7SUFDYSxZQUFzQyxFQUN0RCxNQUFvQyxFQUNwQyxZQUFvQyxFQUNwQyw0QkFBcUM7UUFIckIsaUJBQVksR0FBWixZQUFZLENBQTBCO1FBS3RELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2hELElBQUksQ0FBQyw0QkFBNEIsR0FBRyw0QkFBNEIsQ0FBQztRQUNqRSxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FDYixjQUE0QixFQUM1QixZQUEwQjtRQUUxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFbkUsSUFBSSxTQUFTLEdBQWdCLElBQUksQ0FBQztRQUNsQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDckMsU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksT0FBTyxHQUFnQixJQUFJLENBQUM7UUFDaEMsSUFBSSxNQUFNLENBQUMsT0FBTyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxPQUFPO1lBQ0wsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLFNBQVM7WUFDVCxPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxLQUFvQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxJQUFVO1FBQzlCLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlIH0gZnJvbSAnLi9kYXRlLXJhbmdlJztcbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIH0gZnJvbSAnLi9kYXRlLXJhbmdlLWNhbGN1bGF0aW9uJztcbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0b3JDb25maWcgfSBmcm9tICcuL2RhdGUtcmFuZ2UtY2FsY3VsYXRvci1jb25maWcnO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkIH0gZnJvbSAnLi9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItaWQnO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUgfSBmcm9tICcuL2RhdGUtcmFuZ2UtY2FsY3VsYXRvci10eXBlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjYWxjdWxhdG9yLlxuICovXG5leHBvcnQgY2xhc3MgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvciB7XG4gICNjb25maWc6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JDb25maWc7XG4gICNyZXNvdXJjZXNTdmM6IFNreUxpYlJlc291cmNlc1NlcnZpY2U7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIGNhbGN1bGF0b3Igc2VsZWN0IG1lbnUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3J0RGVzY3JpcHRpb24kKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuc2hvcnREZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuc2hvcnREZXNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLiNzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NhbGN1bGF0b3IgY3JlYXRlZCB3aXRob3V0IHNob3J0IGRlc2NyaXB0aW9uIG9yIHJlc291cmNlIGtleS4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jcmVzb3VyY2VzU3ZjLmdldFN0cmluZyh0aGlzLiNzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIGNhbGN1bGF0b3Igc2VsZWN0IG1lbnUuXG4gICAqIEBkZXByZWNhdGVkIFN1YnNjcmliZSB0byB0aGUgYHNob3J0RGVzY3JpcHRpb24kYCBvYnNlcnZhYmxlIGluc3RlYWQuXG4gICAqL1xuICBwdWJsaWMgc2hvcnREZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICNzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgY2FsY3VsYXRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIGRhdGUgcmFuZ2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgICogVGhlIGNhbGN1bGF0b3IgSUQgdGhhdCBzcGVjaWZpZXMgY2FsY3VsYXRvciBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGRhdGUgcmFuZ2VzLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBjYWxjdWxhdG9ySWQ6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZCxcbiAgICBjb25maWc6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JDb25maWcsXG4gICAgcmVzb3VyY2VzU3ZjOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLFxuICAgIF9zaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXk/OiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuI2NvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZTtcbiAgICB0aGlzLnNob3J0RGVzY3JpcHRpb24gPSBjb25maWcuc2hvcnREZXNjcmlwdGlvbjtcbiAgICB0aGlzLiNzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXkgPSBfc2hvcnREZXNjcmlwdGlvblJlc291cmNlS2V5O1xuICAgIHRoaXMuI3Jlc291cmNlc1N2YyA9IHJlc291cmNlc1N2YztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjYWxjdWxhdG9yLlxuICAgKiBAcGFyYW0gc3RhcnREYXRlSW5wdXQgVGhlIHN0YXJ0IGRhdGUuXG4gICAqIEBwYXJhbSBlbmREYXRlSW5wdXQgVGhlIGVuZCBkYXRlLlxuICAgKi9cbiAgcHVibGljIGdldFZhbHVlKFxuICAgIHN0YXJ0RGF0ZUlucHV0PzogRGF0ZSB8IG51bGwsXG4gICAgZW5kRGF0ZUlucHV0PzogRGF0ZSB8IG51bGwsXG4gICk6IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLiNjb25maWcuZ2V0VmFsdWUoc3RhcnREYXRlSW5wdXQsIGVuZERhdGVJbnB1dCk7XG5cbiAgICBsZXQgc3RhcnREYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5zdGFydERhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBzdGFydERhdGUgPSB0aGlzLiNwYXJzZURhdGVXaXRob3V0VGltZShyZXN1bHQuc3RhcnREYXRlKTtcbiAgICB9XG5cbiAgICBsZXQgZW5kRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgIGlmIChyZXN1bHQuZW5kRGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGVuZERhdGUgPSB0aGlzLiNwYXJzZURhdGVXaXRob3V0VGltZShyZXN1bHQuZW5kRGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbGN1bGF0b3JJZDogdGhpcy5jYWxjdWxhdG9ySWQsXG4gICAgICBzdGFydERhdGUsXG4gICAgICBlbmREYXRlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgc3luY2hyb25vdXMgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBjb250cm9sLlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKHZhbHVlPzogU2t5RGF0ZVJhbmdlKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICghdGhpcy4jY29uZmlnLnZhbGlkYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jY29uZmlnLnZhbGlkYXRlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBkYXRlIG9iamVjdCB3aXRob3V0IHRpbWUgaW5mb3JtYXRpb24uXG4gICAqIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM4MDUwODI0LzYxNzg4ODVcbiAgICovXG4gICNwYXJzZURhdGVXaXRob3V0VGltZShkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XG4gIH1cbn1cbiJdfQ==","/**\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 var SkyDateRangeCalculatorId;\n(function (SkyDateRangeCalculatorId) {\n /**\n * Selects no dates and considers all dates within the date range. This is the default selection.\n */\n SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"AnyTime\"] = 0] = \"AnyTime\";\n /**\n * Enables users to select an end date with no starting date.\n */\n SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"Before\"] = 1] = \"Before\";\n /**\n * Enables users to select a start date with no end date.\n */\n SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"After\"] = 2] = \"After\";\n /**\n * Enables users to select specific start and end dates.\n */\n SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"SpecificRange\"] = 3] = \"SpecificRange\";\n /**\n * Sets the start and end dates to the day before the current day.\n */\n SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"Yesterday\"] = 4] = \"Yesterday\";\n /**\n * Sets the start and end dates to the current day.\n */\n SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"Today\"] = 5] = \"Today\";\n /**\n * Sets the start and end dates to the day after the current day.\n */\n SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"Tomorrow\"] = 6] = \"Tomorrow\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"LastWeek\"] = 7] = \"LastWeek\";\n /**\n * Sets the start date to Sunday of the current week and the end date to Saturday.\n */\n SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"ThisWeek\"] = 8] = \"ThisWeek\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"NextWeek\"] = 9] = \"NextWeek\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"LastMonth\"] = 10] = \"LastMonth\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"ThisMonth\"] = 11] = \"ThisMonth\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"NextMonth\"] = 12] = \"NextMonth\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"LastQuarter\"] = 13] = \"LastQuarter\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"ThisQuarter\"] = 14] = \"ThisQuarter\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"NextQuarter\"] = 15] = \"NextQuarter\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"LastCalendarYear\"] = 16] = \"LastCalendarYear\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"ThisCalendarYear\"] = 17] = \"ThisCalendarYear\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"NextCalendarYear\"] = 18] = \"NextCalendarYear\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"LastFiscalYear\"] = 19] = \"LastFiscalYear\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"ThisFiscalYear\"] = 20] = \"ThisFiscalYear\";\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 SkyDateRangeCalculatorId[SkyDateRangeCalculatorId[\"NextFiscalYear\"] = 21] = \"NextFiscalYear\";\n})(SkyDateRangeCalculatorId || (SkyDateRangeCalculatorId = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQU4sSUFBWSx3QkErSFg7QUEvSEQsV0FBWSx3QkFBd0I7SUFDbEM7O09BRUc7SUFDSCw2RUFBTyxDQUFBO0lBRVA7O09BRUc7SUFDSCwyRUFBTSxDQUFBO0lBRU47O09BRUc7SUFDSCx5RUFBSyxDQUFBO0lBRUw7O09BRUc7SUFDSCx5RkFBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxpRkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCx5RUFBSyxDQUFBO0lBRUw7O09BRUc7SUFDSCwrRUFBUSxDQUFBO0lBRVI7OztPQUdHO0lBQ0gsK0VBQVEsQ0FBQTtJQUVSOztPQUVHO0lBQ0gsK0VBQVEsQ0FBQTtJQUVSOzs7T0FHRztJQUNILCtFQUFRLENBQUE7SUFFUjs7O09BR0c7SUFDSCxrRkFBUyxDQUFBO0lBRVQ7OztPQUdHO0lBQ0gsa0ZBQVMsQ0FBQTtJQUVUOzs7T0FHRztJQUNILGtGQUFTLENBQUE7SUFFVDs7OztPQUlHO0lBQ0gsc0ZBQVcsQ0FBQTtJQUVYOzs7O09BSUc7SUFDSCxzRkFBVyxDQUFBO0lBRVg7Ozs7T0FJRztJQUNILHNGQUFXLENBQUE7SUFFWDs7O09BR0c7SUFDSCxnR0FBZ0IsQ0FBQTtJQUVoQjs7O09BR0c7SUFDSCxnR0FBZ0IsQ0FBQTtJQUVoQjs7O09BR0c7SUFDSCxnR0FBZ0IsQ0FBQTtJQUVoQjs7O09BR0c7SUFDSCw0RkFBYyxDQUFBO0lBRWQ7OztPQUdHO0lBQ0gsNEZBQWMsQ0FBQTtJQUVkOzs7T0FHRztJQUNILDRGQUFjLENBQUE7QUFDaEIsQ0FBQyxFQS9IVyx3QkFBd0IsS0FBeEIsd0JBQXdCLFFBK0huQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZGAgdmFsdWVzIHNwZWNpZnkgY2FsY3VsYXRvciBvYmplY3RzIHRoYXQgcmV0dXJuXG4gKiB0d28gYERhdGVgIG9iamVjdHMgdG8gcmVwcmVzZW50IGRhdGUgcmFuZ2VzLiBUaGUgdmFsdWVzIHBvcHVsYXRlIHRoZSBvcHRpb25zXG4gKiBpbiB0aGUgZGF0ZSByYW5nZSBwaWNrZXIncyBkcm9wZG93bi4gU0tZIFVYIHVzZXMgYFNreURhdGVSYW5nZVNlcnZpY2VgIHRvIGNyZWF0ZVxuICogY2FsY3VsYXRvcnMgYW5kIGNvbmZpZ3VyZXMgZWFjaCBvbmUgd2l0aCBhIGB2YWxpZGF0ZWAgZnVuY3Rpb24gdG8gY29uZmlybSB0aGF0IGRhdGVzXG4gKiBhcmUgY29tcGF0aWJsZS4gRm9yIGV4YW1wbGUsIGB2YWxpZGF0ZWAgZnVuY3Rpb25zIGVuc3VyZSB0aGF0IHN0YXJ0IGRhdGVzIGFyZSBiZWZvcmVcbiAqIGVuZCBkYXRlcy4gU0tZIFVYIGFsc28gY29uZmlndXJlcyBjYWxjdWxhdG9ycyB0byBjYWxsIGEgYGdldFZhbHVlYCBmdW5jdGlvbiBhZnRlclxuICogdGhlIGB2YWxpZGF0ZWAgZnVuY3Rpb24gYW5kIHJldHVybiBhIHJhbmdlIG9mIHR3byBgRGF0ZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGVudW0gU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkIHtcbiAgLyoqXG4gICAqIFNlbGVjdHMgbm8gZGF0ZXMgYW5kIGNvbnNpZGVycyBhbGwgZGF0ZXMgd2l0aGluIHRoZSBkYXRlIHJhbmdlLiBUaGlzIGlzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbi5cbiAgICovXG4gIEFueVRpbWUsXG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdXNlcnMgdG8gc2VsZWN0IGFuIGVuZCBkYXRlIHdpdGggbm8gc3RhcnRpbmcgZGF0ZS5cbiAgICovXG4gIEJlZm9yZSxcblxuICAvKipcbiAgICogRW5hYmxlcyB1c2VycyB0byBzZWxlY3QgYSBzdGFydCBkYXRlIHdpdGggbm8gZW5kIGRhdGUuXG4gICAqL1xuICBBZnRlcixcblxuICAvKipcbiAgICogRW5hYmxlcyB1c2VycyB0byBzZWxlY3Qgc3BlY2lmaWMgc3RhcnQgYW5kIGVuZCBkYXRlcy5cbiAgICovXG4gIFNwZWNpZmljUmFuZ2UsXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgdG8gdGhlIGRheSBiZWZvcmUgdGhlIGN1cnJlbnQgZGF5LlxuICAgKi9cbiAgWWVzdGVyZGF5LFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIHRvIHRoZSBjdXJyZW50IGRheS5cbiAgICovXG4gIFRvZGF5LFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIHRvIHRoZSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF5LlxuICAgKi9cbiAgVG9tb3Jyb3csXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXJ0IGRhdGUgdG8gU3VuZGF5IG9mIHRoZSB3ZWVrIGJlZm9yZSB0aGUgY3VycmVudCB3ZWVrIGFuZFxuICAgKiB0aGUgZW5kIGRhdGUgdG8gU2F0dXJkYXkgb2YgdGhhdCB3ZWVrLlxuICAgKi9cbiAgTGFzdFdlZWssXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXJ0IGRhdGUgdG8gU3VuZGF5IG9mIHRoZSBjdXJyZW50IHdlZWsgYW5kIHRoZSBlbmQgZGF0ZSB0byBTYXR1cmRheS5cbiAgICovXG4gIFRoaXNXZWVrLFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzdGFydCBkYXRlIHRvIFN1bmRheSBvZiB0aGUgd2VlayBhZnRlciB0aGUgY3VycmVudCB3ZWVrIGFuZFxuICAgKiB0aGUgZW5kIGRhdGUgdG8gU2F0dXJkYXkgb2YgdGhhdCB3ZWVrLlxuICAgKi9cbiAgTmV4dFdlZWssXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXJ0IGRhdGUgdG8gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGggYmVmb3JlIHRoZSBjdXJyZW50IG1vbnRoIGFuZFxuICAgKiB0aGUgZW5kIGRhdGUgdG8gdGhlIGxhc3QgZGF5IG9mIHRoYXQgbW9udGguXG4gICAqL1xuICBMYXN0TW9udGgsXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXJ0IGRhdGUgdG8gdGhlIGZpcnN0IGRheSBvZiB0aGUgY3VycmVudCBtb250aCBhbmRcbiAgICogdGhlIGVuZCBkYXRlIHRvIHRoZSBsYXN0IGRheSBvZiB0aGUgbW9udGguXG4gICAqL1xuICBUaGlzTW9udGgsXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXJ0IGRhdGUgdG8gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGggYWZ0ZXIgdGhlIGN1cnJlbnQgbW9udGhcbiAgICogYW5kIHRoZSBlbmQgZGF0ZSB0byB0aGUgbGFzdCBkYXkgb2YgdGhhdCBtb250aC5cbiAgICovXG4gIE5leHRNb250aCxcblxuICAvKipcbiAgICogU2V0cyB0aGUgc3RhcnQgZGF0ZSB0byB0aGUgZmlyc3QgZGF5IG9mIHRoZSBxdWFydGVyIGJlZm9yZSB0aGUgY3VycmVudCBxdWFydGVyIGFuZFxuICAgKiB0aGUgZW5kIGRhdGUgdG8gdGhlIGxhc3QgZGF5IG9mIHRoYXQgcXVhcnRlci4gUXVhcnRlcnMgYXJlXG4gICAqIEphbnVhcnkgdG8gTWFyY2gsIEFwcmlsIHRvIEp1bmUsIEp1bHkgdG8gU2VwdGVtYmVyLCBhbmQgT2N0b2JlciB0byBEZWNlbWJlci5cbiAgICovXG4gIExhc3RRdWFydGVyLFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzdGFydCBkYXRlIHRvIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGN1cnJlbnQgcXVhcnRlciBhbmRcbiAgICogdGhlIGVuZCBkYXRlIHRvIHRoZSBsYXN0IGRheSBvZiB0aGUgcXVhcnRlci4gUXVhcnRlcnMgYXJlXG4gICAqIEphbnVhcnkgdG8gTWFyY2gsIEFwcmlsIHRvIEp1bmUsIEp1bHkgdG8gU2VwdGVtYmVyLCBhbmQgT2N0b2JlciB0byBEZWNlbWJlci5cbiAgICovXG4gIFRoaXNRdWFydGVyLFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzdGFydCBkYXRlIHRvIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHF1YXJ0ZXIgYWZ0ZXIgdGhlIGN1cnJlbnQgcXVhcnRlciBhbmRcbiAgICogdGhlIGVuZCBkYXRlIHRvIHRoZSBsYXN0IGRheSBvZiB0aGF0IHF1YXJ0ZXIuIFF1YXJ0ZXJzIGFyZVxuICAgKiBKYW51YXJ5IHRvIE1hcmNoLCBBcHJpbCB0byBKdW5lLCBKdWx5IHRvIFNlcHRlbWJlciwgYW5kIE9jdG9iZXIgdG8gRGVjZW1iZXIuXG4gICAqL1xuICBOZXh0UXVhcnRlcixcblxuICAvKipcbiAgICogU2V0cyB0aGUgc3RhcnQgZGF0ZSB0byB0aGUgZmlyc3QgZGF5IG9mIHRoZSB5ZWFyIGJlZm9yZSB0aGUgY3VycmVudCB5ZWFyXG4gICAqIGFuZCB0aGUgZW5kIGRhdGUgdG8gdGhlIGxhc3QgZGF5IG9mIHRoYXQgeWVhci5cbiAgICovXG4gIExhc3RDYWxlbmRhclllYXIsXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXJ0IGRhdGUgdG8gdGhlIGZpcnN0IGRheSBvZiB0aGUgY3VycmVudCB5ZWFyIGFuZFxuICAgKiB0aGUgZW5kIGRhdGUgdG8gdGhlIGxhc3QgZGF5IG9mIHRoZSB5ZWFyLlxuICAgKi9cbiAgVGhpc0NhbGVuZGFyWWVhcixcblxuICAvKipcbiAgICogU2V0cyB0aGUgc3RhcnQgZGF0ZSB0byB0aGUgZmlyc3QgZGF5IG9mIHRoZSB5ZWFyIGFmdGVyIHRoZSBjdXJyZW50IHllYXIgYW5kXG4gICAqIHRoZSBlbmQgZGF0ZSB0byB0aGUgbGFzdCBkYXkgb2YgdGhhdCB5ZWFyLlxuICAgKi9cbiAgTmV4dENhbGVuZGFyWWVhcixcblxuICAvKipcbiAgICogU2V0cyB0aGUgc3RhcnQgZGF0ZSB0byB0aGUgZmlyc3QgZGF5IG9mIHRoZSBmaXNjYWwgeWVhciBiZWZvcmUgdGhlIGN1cnJlbnQgZmlzY2FsIHllYXIgYW5kXG4gICAqIHRoZSBlbmQgZGF0ZSB0byB0aGUgbGFzdCBkYXkgb2YgdGhhdCBmaXNjYWwgeWVhci4gVGhlIGZpc2NhbCB5ZWFyIGlzIE9jdC4gMSB0byBTZXB0LiAzMC5cbiAgICovXG4gIExhc3RGaXNjYWxZZWFyLFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzdGFydCBkYXRlIHRvIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGN1cnJlbnQgZmlzY2FsIHllYXIgYW5kXG4gICAqIHRoZSBlbmQgZGF0ZSB0byB0aGUgbGFzdCBkYXkgb2YgdGhlIGZpc2NhbCB5ZWFyLiBUaGUgZmlzY2FsIHllYXIgaXMgT2N0LiAxIHRvIFNlcHQuIDMwLlxuICAgKi9cbiAgVGhpc0Zpc2NhbFllYXIsXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXJ0IGRhdGUgdG8gdGhlIGZpcnN0IGRheSBvZiB0aGUgZmlzY2FsIHllYXIgYWZ0ZXIgdGhlIGN1cnJlbnQgZmlzY2FsIHllYXJcbiAgICogYW5kIHRoZSBlbmQgZGF0ZSB0byB0aGUgbGFzdCBkYXkgb2YgdGhhdCBmaXNjYWwgeWVhci4gVGhlIGZpc2NhbCB5ZWFyIGlzIE9jdC4gMSB0byBTZXB0LiAzMC5cbiAgICovXG4gIE5leHRGaXNjYWxZZWFyLFxufVxuIl19","/**\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 class SkyDateRangeRelativeValue {\n static get today() {\n const today = new Date();\n return {\n startDate: today,\n endDate: today,\n };\n }\n static get tomorrow() {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n return {\n startDate: tomorrow,\n endDate: tomorrow,\n };\n }\n static get yesterday() {\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n return {\n startDate: yesterday,\n endDate: yesterday,\n };\n }\n /**\n * A date range starting with the nearest past Sunday and ending with the following Saturday.\n */\n static get thisWeek() {\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - startDate.getDay());\n const endDate = new Date();\n endDate.setDate(endDate.getDate() - endDate.getDay() + 6);\n return {\n startDate,\n endDate,\n };\n }\n /**\n * A date range starting with the nearest upcoming Sunday and ending with the following Saturday.\n */\n static get nextWeek() {\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - startDate.getDay() + 7);\n const endDate = new Date();\n endDate.setDate(endDate.getDate() - endDate.getDay() + 13);\n return {\n startDate,\n endDate,\n };\n }\n static get lastWeek() {\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - startDate.getDay() - 7);\n const endDate = new Date();\n endDate.setDate(endDate.getDate() - endDate.getDay() - 1);\n return {\n startDate,\n endDate,\n };\n }\n static get thisMonth() {\n const startDate = new Date();\n startDate.setDate(1);\n const endDate = new Date();\n endDate.setMonth(endDate.getMonth() + 1);\n endDate.setDate(0);\n return {\n startDate,\n endDate,\n };\n }\n static get nextMonth() {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(startDate.getMonth() + 1);\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(endDate.getMonth() + 2);\n endDate.setDate(0);\n return {\n startDate,\n endDate,\n };\n }\n static get lastMonth() {\n const startDate = new Date();\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 // Finally, set the day of the month to 1.\n startDate.setDate(1);\n const endDate = new Date();\n endDate.setDate(0);\n return {\n startDate,\n endDate,\n };\n }\n static get thisQuarter() {\n const startDate = new Date();\n const endDate = new Date();\n const currentMonth = startDate.getMonth();\n const quarterStartMonth = SkyDateRangeRelativeValue.getQuarterStartMonth(currentMonth);\n startDate.setMonth(quarterStartMonth);\n startDate.setDate(1);\n endDate.setMonth(quarterStartMonth + 3);\n endDate.setDate(0);\n return {\n startDate,\n endDate,\n };\n }\n static get nextQuarter() {\n const startDate = new Date();\n const endDate = new Date();\n const currentMonth = startDate.getMonth();\n const quarterStartMonth = SkyDateRangeRelativeValue.getQuarterStartMonth(currentMonth);\n startDate.setMonth(quarterStartMonth + 3);\n startDate.setDate(1);\n endDate.setMonth(quarterStartMonth + 6);\n endDate.setDate(0);\n return {\n startDate,\n endDate,\n };\n }\n static get lastQuarter() {\n const startDate = new Date();\n startDate.setDate(1);\n const endDate = new Date();\n endDate.setDate(1);\n const currentMonth = startDate.getMonth();\n const quarterStartMonth = SkyDateRangeRelativeValue.getQuarterStartMonth(currentMonth);\n startDate.setMonth(quarterStartMonth - 3);\n startDate.setDate(1);\n endDate.setMonth(quarterStartMonth);\n endDate.setDate(0);\n return {\n startDate,\n endDate,\n };\n }\n static get thisCalendarYear() {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(0);\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(0);\n endDate.setFullYear(endDate.getFullYear() + 1);\n endDate.setDate(0);\n return {\n startDate,\n endDate,\n };\n }\n static get nextCalendarYear() {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(0);\n startDate.setFullYear(startDate.getFullYear() + 1);\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(0);\n endDate.setFullYear(startDate.getFullYear() + 1);\n endDate.setDate(0);\n return {\n startDate,\n endDate,\n };\n }\n static get lastCalendarYear() {\n const startDate = new Date();\n startDate.setDate(1);\n startDate.setMonth(0);\n startDate.setFullYear(startDate.getFullYear() - 1);\n const endDate = new Date();\n endDate.setDate(1);\n endDate.setMonth(0);\n endDate.setDate(0);\n return {\n startDate,\n endDate,\n };\n }\n static get thisFiscalYear() {\n const start = new Date();\n start.setDate(1);\n return SkyDateRangeRelativeValue.getClosestFiscalYearRange(start);\n }\n static get nextFiscalYear() {\n const start = new Date();\n start.setDate(1);\n start.setFullYear(start.getFullYear() + 1);\n return SkyDateRangeRelativeValue.getClosestFiscalYearRange(start);\n }\n static get lastFiscalYear() {\n const start = new Date();\n start.setDate(1);\n start.setFullYear(start.getFullYear() - 1);\n return SkyDateRangeRelativeValue.getClosestFiscalYearRange(start);\n }\n static getQuarterStartMonth(currentMonth) {\n let month;\n if (currentMonth < 3) {\n month = 0;\n }\n else if (currentMonth < 6) {\n month = 3;\n }\n else if (currentMonth < 9) {\n month = 6;\n }\n else {\n month = 9;\n }\n return month;\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 static getClosestFiscalYearRange(startDate) {\n const endDate = new Date(startDate);\n if (startDate.getMonth() >= 9) {\n startDate.setMonth(9);\n endDate.setFullYear(startDate.getFullYear() + 1);\n endDate.setMonth(9);\n endDate.setDate(0);\n }\n else {\n startDate.setFullYear(startDate.getFullYear() - 1);\n startDate.setMonth(9);\n endDate.setMonth(9);\n endDate.setDate(0);\n }\n return {\n startDate,\n endDate,\n };\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1yZWxhdGl2ZS12YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS9zcmMvbGliL21vZHVsZXMvZGF0ZS1yYW5nZS1waWNrZXIvdHlwZXMvZGF0ZS1yYW5nZS1yZWxhdGl2ZS12YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFnQix5QkFBeUI7SUFDdEMsTUFBTSxLQUFLLEtBQUs7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUV6QixPQUFPO1lBQ0wsU0FBUyxFQUFFLEtBQUs7WUFDaEIsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVNLE1BQU0sS0FBSyxRQUFRO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFNUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFekMsT0FBTztZQUNMLFNBQVMsRUFBRSxRQUFRO1lBQ25CLE9BQU8sRUFBRSxRQUFRO1NBQ2xCLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxLQUFLLFNBQVM7UUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUU3QixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUzQyxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsT0FBTyxFQUFFLFNBQVM7U0FDbkIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sS0FBSyxRQUFRO1FBQ3hCLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDN0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENB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dGVSYW5nZSB9IGZyb20gJy4vZGF0ZS1yYW5nZSc7XG5cbi8qKlxuICogTmVlZCB0byBhZGQgdGhlIGZvbGxvd2luZyB0byBjbGFzc2VzIHdoaWNoIGNvbnRhaW4gc3RhdGljIG1ldGhvZHMuXG4gKiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wYWNrYWdyL25nLXBhY2thZ3IvaXNzdWVzLzY0MVxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTa3lEYXRlUmFuZ2VSZWxhdGl2ZVZhbHVlIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgdG9kYXkoKTogU2t5RGF0ZVJhbmdlIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnREYXRlOiB0b2RheSxcbiAgICAgIGVuZERhdGU6IHRvZGF5LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCB0b21vcnJvdygpOiBTa3lEYXRlUmFuZ2Uge1xuICAgIGNvbnN0IHRvbW9ycm93ID0gbmV3IERhdGUoKTtcblxuICAgIHRvbW9ycm93LnNldERhdGUodG9tb3Jyb3cuZ2V0RGF0ZSgpICsgMSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnREYXRlOiB0b21vcnJvdyxcbiAgICAgIGVuZERhdGU6IHRvbW9ycm93LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCB5ZXN0ZXJkYXkoKTogU2t5RGF0ZVJhbmdlIHtcbiAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSgpO1xuXG4gICAgeWVzdGVyZGF5LnNldERhdGUoeWVzdGVyZGF5LmdldERhdGUoKSAtIDEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0RGF0ZTogeWVzdGVyZGF5LFxuICAgICAgZW5kRGF0ZTogeWVzdGVyZGF5LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQSBkYXRlIHJhbmdlIHN0YXJ0aW5nIHdpdGggdGhlIG5lYXJlc3QgcGFzdCBTdW5kYXkgYW5kIGVuZGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgU2F0dXJkYXkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCB0aGlzV2VlaygpOiBTa3lEYXRlUmFuZ2Uge1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgc3RhcnREYXRlLnNldERhdGUoc3RhcnREYXRlLmdldERhdGUoKSAtIHN0YXJ0RGF0ZS5nZXREYXkoKSk7XG5cbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoKTtcbiAgICBlbmREYXRlLnNldERhdGUoZW5kRGF0ZS5nZXREYXRlKCkgLSBlbmREYXRlLmdldERheSgpICsgNik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnREYXRlLFxuICAgICAgZW5kRGF0ZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZGF0ZSByYW5nZSBzdGFydGluZyB3aXRoIHRoZSBuZWFyZXN0IHVwY29taW5nIFN1bmRheSBhbmQgZW5kaW5nIHdpdGggdGhlIGZvbGxvd2luZyBTYXR1cmRheS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IG5leHRXZWVrKCk6IFNreURhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBzdGFydERhdGUuc2V0RGF0ZShzdGFydERhdGUuZ2V0RGF0ZSgpIC0gc3RhcnREYXRlLmdldERheSgpICsgNyk7XG5cbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoKTtcbiAgICBlbmREYXRlLnNldERhdGUoZW5kRGF0ZS5nZXREYXRlKCkgLSBlbmREYXRlLmdldERheSgpICsgMTMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgIGVuZERhdGUsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGxhc3RXZWVrKCk6IFNreURhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBzdGFydERhdGUuc2V0RGF0ZShzdGFydERhdGUuZ2V0RGF0ZSgpIC0gc3RhcnREYXRlLmdldERheSgpIC0gNyk7XG5cbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoKTtcbiAgICBlbmREYXRlLnNldERhdGUoZW5kRGF0ZS5nZXREYXRlKCkgLSBlbmREYXRlLmdldERheSgpIC0gMSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnREYXRlLFxuICAgICAgZW5kRGF0ZSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXQgdGhpc01vbnRoKCk6IFNreURhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBzdGFydERhdGUuc2V0RGF0ZSgxKTtcblxuICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGVuZERhdGUuc2V0TW9udGgoZW5kRGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgZW5kRGF0ZS5zZXREYXRlKDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgIGVuZERhdGUsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IG5leHRNb250aCgpOiBTa3lEYXRlUmFuZ2Uge1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgc3RhcnREYXRlLnNldERhdGUoMSk7XG4gICAgc3RhcnREYXRlLnNldE1vbnRoKHN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSk7XG5cbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoKTtcbiAgICBlbmREYXRlLnNldERhdGUoMSk7XG4gICAgZW5kRGF0ZS5zZXRNb250aChlbmREYXRlLmdldE1vbnRoKCkgKyAyKTtcbiAgICBlbmREYXRlLnNldERhdGUoMCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnREYXRlLFxuICAgICAgZW5kRGF0ZSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXQgbGFzdE1vbnRoKCk6IFNreURhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8vIEZpcnN0LCBzZXQgdGhlIGRheSBvZiB0aGUgbW9udGggdG8gemVybyxcbiAgICAvLyB3aGljaCBwb2ludHMgdG8gdGhlIGxhc3QgZGF5IG9mIHRoZSBwcmV2aW91cyBtb250aC5cbiAgICBzdGFydERhdGUuc2V0RGF0ZSgwKTtcblxuICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGF5IG9mIHRoZSBtb250aCB0byAxLlxuICAgIHN0YXJ0RGF0ZS5zZXREYXRlKDEpO1xuXG4gICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgZW5kRGF0ZS5zZXREYXRlKDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgIGVuZERhdGUsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IHRoaXNRdWFydGVyKCk6IFNreURhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoKTtcblxuICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IHN0YXJ0RGF0ZS5nZXRNb250aCgpO1xuICAgIGNvbnN0IHF1YXJ0ZXJTdGFydE1vbnRoID1cbiAgICAgIFNreURhdGVSYW5nZVJlbGF0aXZlVmFsdWUuZ2V0UXVhcnRlclN0YXJ0TW9udGgoY3VycmVudE1vbnRoKTtcblxuICAgIHN0YXJ0RGF0ZS5zZXRNb250aChxdWFydGVyU3RhcnRNb250aCk7XG4gICAgc3RhcnREYXRlLnNldERhdGUoMSk7XG5cbiAgICBlbmREYXRlLnNldE1vbnRoKHF1YXJ0ZXJTdGFydE1vbnRoICsgMyk7XG4gICAgZW5kRGF0ZS5zZXREYXRlKDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgIGVuZERhdGUsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IG5leHRRdWFydGVyKCk6IFNreURhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoKTtcblxuICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IHN0YXJ0RGF0ZS5nZXRNb250aCgpO1xuICAgIGNvbnN0IHF1YXJ0ZXJTdGFydE1vbnRoID1cbiAgICAgIFNreURhdGVSYW5nZVJlbGF0aXZlVmFsdWUuZ2V0UXVhcnRlclN0YXJ0TW9udGgoY3VycmVudE1vbnRoKTtcblxuICAgIHN0YXJ0RGF0ZS5zZXRNb250aChxdWFydGVyU3RhcnRNb250aCArIDMpO1xuICAgIHN0YXJ0RGF0ZS5zZXREYXRlKDEpO1xuXG4gICAgZW5kRGF0ZS5zZXRNb250aChxdWFydGVyU3RhcnRNb250aCArIDYpO1xuICAgIGVuZERhdGUuc2V0RGF0ZSgwKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydERhdGUsXG4gICAgICBlbmREYXRlLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCBsYXN0UXVhcnRlcigpOiBTa3lEYXRlUmFuZ2Uge1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgc3RhcnREYXRlLnNldERhdGUoMSk7XG5cbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoKTtcbiAgICBlbmREYXRlLnNldERhdGUoMSk7XG5cbiAgICBjb25zdCBjdXJyZW50TW9udGggPSBzdGFydERhdGUuZ2V0TW9udGgoKTtcbiAgICBjb25zdCBxdWFydGVyU3RhcnRNb250aCA9XG4gICAgICBTa3lEYXRlUmFuZ2VSZWxhdGl2ZVZhbHVlLmdldFF1YXJ0ZXJTdGFydE1vbnRoKGN1cnJlbnRNb250aCk7XG5cbiAgICBzdGFydERhdGUuc2V0TW9udGgocXVhcnRlclN0YXJ0TW9udGggLSAzKTtcbiAgICBzdGFydERhdGUuc2V0RGF0ZSgxKTtcblxuICAgIGVuZERhdGUuc2V0TW9udGgocXVhcnRlclN0YXJ0TW9udGgpO1xuICAgIGVuZERhdGUuc2V0RGF0ZSgwKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydERhdGUsXG4gICAgICBlbmREYXRlLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCB0aGlzQ2FsZW5kYXJZZWFyKCk6IFNreURhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBzdGFydERhdGUuc2V0RGF0ZSgxKTtcbiAgICBzdGFydERhdGUuc2V0TW9udGgoMCk7XG5cbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoKTtcbiAgICBlbmREYXRlLnNldERhdGUoMSk7XG4gICAgZW5kRGF0ZS5zZXRNb250aCgwKTtcbiAgICBlbmREYXRlLnNldEZ1bGxZZWFyKGVuZERhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICAgIGVuZERhdGUuc2V0RGF0ZSgwKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydERhdGUsXG4gICAgICBlbmREYXRlLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCBuZXh0Q2FsZW5kYXJZZWFyKCk6IFNreURhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBzdGFydERhdGUuc2V0RGF0ZSgxKTtcbiAgICBzdGFydERhdGUuc2V0TW9udGgoMCk7XG4gICAgc3RhcnREYXRlLnNldEZ1bGxZZWFyKHN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpICsgMSk7XG5cbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoKTtcbiAgICBlbmREYXRlLnNldERhdGUoMSk7XG4gICAgZW5kRGF0ZS5zZXRNb250aCgwKTtcbiAgICBlbmREYXRlLnNldEZ1bGxZZWFyKHN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpICsgMSk7XG4gICAgZW5kRGF0ZS5zZXREYXRlKDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgIGVuZERhdGUsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGxhc3RDYWxlbmRhclllYXIoKTogU2t5RGF0ZVJhbmdlIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIHN0YXJ0RGF0ZS5zZXREYXRlKDEpO1xuICAgIHN0YXJ0RGF0ZS5zZXRNb250aCgwKTtcbiAgICBzdGFydERhdGUuc2V0RnVsbFllYXIoc3RhcnREYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcblxuICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGVuZERhdGUuc2V0RGF0ZSgxKTtcbiAgICBlbmREYXRlLnNldE1vbnRoKDApO1xuICAgIGVuZERhdGUuc2V0RGF0ZSgwKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydERhdGUsXG4gICAgICBlbmREYXRlLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCB0aGlzRmlzY2FsWWVhcigpOiBTa3lEYXRlUmFuZ2Uge1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTtcbiAgICBzdGFydC5zZXREYXRlKDEpO1xuXG4gICAgcmV0dXJuIFNreURhdGVSYW5nZVJlbGF0aXZlVmFsdWUuZ2V0Q2xvc2VzdEZpc2NhbFllYXJSYW5nZShzdGFydCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCBuZXh0RmlzY2FsWWVhcigpOiBTa3lEYXRlUmFuZ2Uge1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTtcbiAgICBzdGFydC5zZXREYXRlKDEpO1xuICAgIHN0YXJ0LnNldEZ1bGxZZWFyKHN0YXJ0LmdldEZ1bGxZZWFyKCkgKyAxKTtcblxuICAgIHJldHVybiBTa3lEYXRlUmFuZ2VSZWxhdGl2ZVZhbHVlLmdldENsb3Nlc3RGaXNjYWxZZWFyUmFuZ2Uoc3RhcnQpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXQgbGFzdEZpc2NhbFllYXIoKTogU2t5RGF0ZVJhbmdlIHtcbiAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XG4gICAgc3RhcnQuc2V0RGF0ZSgxKTtcbiAgICBzdGFydC5zZXRGdWxsWWVhcihzdGFydC5nZXRGdWxsWWVhcigpIC0gMSk7XG5cbiAgICByZXR1cm4gU2t5RGF0ZVJhbmdlUmVsYXRpdmVWYWx1ZS5nZXRDbG9zZXN0RmlzY2FsWWVhclJhbmdlKHN0YXJ0KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFF1YXJ0ZXJTdGFydE1vbnRoKGN1cnJlbnRNb250aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgbW9udGg6IG51bWJlcjtcbiAgICBpZiAoY3VycmVudE1vbnRoIDwgMykge1xuICAgICAgbW9udGggPSAwO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE1vbnRoIDwgNikge1xuICAgICAgbW9udGggPSAzO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE1vbnRoIDwgOSkge1xuICAgICAgbW9udGggPSA2O1xuICAgIH0gZWxzZSB7XG4gICAgICBtb250aCA9IDk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vbnRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGZpc2NhbCB5ZWFyIGJhc2VkIG9uIGEgc3RhcnQgZGF0ZS5cbiAgICogKFRoZSBmaXNjYWwgeWVhciBzdGFydHMgaW4gT2N0b2JlciBhbmQgY29udGludWVzIHRocm91Z2ggdG8gbmV4dCBTZXB0ZW1iZXIuKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Q2xvc2VzdEZpc2NhbFllYXJSYW5nZShzdGFydERhdGU6IERhdGUpOiBTa3lEYXRlUmFuZ2Uge1xuICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZShzdGFydERhdGUpO1xuXG4gICAgaWYgKHN0YXJ0RGF0ZS5nZXRNb250aCgpID49IDkpIHtcbiAgICAgIHN0YXJ0RGF0ZS5zZXRNb250aCg5KTtcbiAgICAgIGVuZERhdGUuc2V0RnVsbFllYXIoc3RhcnREYXRlLmdldEZ1bGxZZWFyKCkgKyAxKTtcbiAgICAgIGVuZERhdGUuc2V0TW9udGgoOSk7XG4gICAgICBlbmREYXRlLnNldERhdGUoMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0RGF0ZS5zZXRGdWxsWWVhcihzdGFydERhdGUuZ2V0RnVsbFllYXIoKSAtIDEpO1xuICAgICAgc3RhcnREYXRlLnNldE1vbnRoKDkpO1xuICAgICAgZW5kRGF0ZS5zZXRNb250aCg5KTtcbiAgICAgIGVuZERhdGUuc2V0RGF0ZSgwKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnREYXRlLFxuICAgICAgZW5kRGF0ZSxcbiAgICB9O1xuICB9XG59XG4iXX0=","import { SkyDateRangeCalculatorId } from './date-range-calculator-id';\nimport { SkyDateRangeCalculatorType } from './date-range-calculator-type';\nimport { SkyDateRangeRelativeValue } from './date-range-relative-value';\nexport const SKY_DEFAULT_CALCULATOR_IDS = [\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];\nexport const SKY_DEFAULT_CALCULATOR_CONFIGS = [\n {\n calculatorId: SkyDateRangeCalculatorId.AnyTime,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_any_time',\n getValue: (startDate, endDate) => ({ startDate, endDate }),\n },\n {\n calculatorId: SkyDateRangeCalculatorId.Before,\n type: SkyDateRangeCalculatorType.Before,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_before',\n getValue: (startDate, endDate) => ({ startDate, endDate }),\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 calculatorId: SkyDateRangeCalculatorId.SpecificRange,\n type: SkyDateRangeCalculatorType.Range,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_specific_range',\n getValue: (startDate, endDate) => ({ startDate, endDate }),\n validate: (value) => {\n if (value &&\n value.startDate &&\n value.endDate &&\n value.startDate > value.endDate) {\n return {\n endDateBeforeStartDate: true,\n };\n }\n return null;\n },\n },\n {\n calculatorId: SkyDateRangeCalculatorId.LastFiscalYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_last_fiscal_year',\n getValue: () => SkyDateRangeRelativeValue.lastFiscalYear,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.LastMonth,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_last_month',\n getValue: () => SkyDateRangeRelativeValue.lastMonth,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.LastQuarter,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_last_quarter',\n getValue: () => SkyDateRangeRelativeValue.lastQuarter,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.LastWeek,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_last_week',\n getValue: () => SkyDateRangeRelativeValue.lastWeek,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.LastCalendarYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_last_calendar_year',\n getValue: () => SkyDateRangeRelativeValue.lastCalendarYear,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.NextFiscalYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_next_fiscal_year',\n getValue: () => SkyDateRangeRelativeValue.nextFiscalYear,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.NextMonth,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_next_month',\n getValue: () => SkyDateRangeRelativeValue.nextMonth,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.NextQuarter,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_next_quarter',\n getValue: () => SkyDateRangeRelativeValue.nextQuarter,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.NextWeek,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_next_week',\n getValue: () => SkyDateRangeRelativeValue.nextWeek,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.NextCalendarYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_next_calendar_year',\n getValue: () => SkyDateRangeRelativeValue.nextCalendarYear,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.ThisFiscalYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_this_fiscal_year',\n getValue: () => SkyDateRangeRelativeValue.thisFiscalYear,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.ThisMonth,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_this_month',\n getValue: () => SkyDateRangeRelativeValue.thisMonth,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.ThisQuarter,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_this_quarter',\n getValue: () => SkyDateRangeRelativeValue.thisQuarter,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.ThisWeek,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_this_week',\n getValue: () => SkyDateRangeRelativeValue.thisWeek,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.ThisCalendarYear,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_this_calendar_year',\n getValue: () => SkyDateRangeRelativeValue.thisCalendarYear,\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 calculatorId: SkyDateRangeCalculatorId.Tomorrow,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_tomorrow',\n getValue: () => SkyDateRangeRelativeValue.tomorrow,\n },\n {\n calculatorId: SkyDateRangeCalculatorId.Yesterday,\n type: SkyDateRangeCalculatorType.Relative,\n shortDescriptionResourceKey: 'skyux_date_range_picker_format_label_yesterday',\n getValue: () => SkyDateRangeRelativeValue.yesterday,\n },\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1kZWZhdWx0LWNhbGN1bGF0b3ItY29uZmlncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS9zcmMvbGliL21vZHVsZXMvZGF0ZS1yYW5nZS1waWNrZXIvdHlwZXMvZGF0ZS1yYW5nZS1kZWZhdWx0LWNhbGN1bGF0b3ItY29uZmlncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV4RSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBK0I7SUFDcEUsd0JBQXdCLENBQUMsT0FBTztJQUNoQyx3QkFBd0IsQ0FBQyxNQUFNO0lBQy9CLHdCQUF3QixDQUFDLEtBQUs7SUFDOUIsd0JBQXdCLENBQUMsYUFBYTtJQUN0Qyx3QkFBd0IsQ0FBQyxTQUFTO0lBQ2xDLHdCQUF3QixDQUFDLEtBQUs7SUFDOUIsd0JBQXdCLENBQUMsUUFBUTtJQUNqQyx3QkFBd0IsQ0FBQyxRQUFRO0lBQ2pDLHdCQUF3QixDQUFDLFFBQVE7SUFDakMsd0JBQXdCLENBQUMsUUFBUTtJQUNqQyx3QkFBd0IsQ0FBQyxTQUFTO0lBQ2xDLHdCQUF3QixDQUFDLFNBQVM7SUFDbEMsd0JBQXdCLENBQUMsU0FBUztJQUNsQyx3QkFBd0IsQ0FBQyxXQUFXO0lBQ3BDLHdCQUF3QixDQUFDLFdBQVc7SUFDcEMsd0JBQXdCLENBQUMsV0FBVztJQUNwQyx3QkFBd0IsQ0FBQyxnQkFBZ0I7SUFDekMsd0JBQXdCLENBQUMsZ0JBQWdCO0lBQ3pDLHdCQUF3QixDQUFDLGdCQUFnQjtJQUN6Qyx3QkFBd0IsQ0FBQyxjQUFjO0lBQ3ZDLHdCQUF3QixDQUFD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LENBQUMsUUFBUTtLQUNuRDtJQUVEO1FBQ0UsWUFBWSxFQUFFLHdCQUF3QixDQUFDLFNBQVM7UUFDaEQsSUFBSSxFQUFFLDBCQUEwQixDQUFDLFFBQVE7UUFDekMsMkJBQTJCLEVBQ3pCLGdEQUFnRDtRQUNsRCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUMsU0FBUztLQUNwRDtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQgfSBmcm9tICcuL2RhdGUtcmFuZ2UtY2FsY3VsYXRvci1pZCc7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZSB9IGZyb20gJy4vZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLXR5cGUnO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlRGVmYXVsdENhbGN1bGF0b3JDb25maWcgfSBmcm9tICcuL2RhdGUtcmFuZ2UtZGVmYXVsdC1jYWxjdWxhdG9yLWNvbmZpZyc7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VSZWxhdGl2ZVZhbHVlIH0gZnJvbSAnLi9kYXRlLXJhbmdlLXJlbGF0aXZlLXZhbHVlJztcblxuZXhwb3J0IGNvbnN0IFNLWV9ERUZBVUxUX0NBTENVTEFUT1JfSURTOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWRbXSA9IFtcbiAgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLkFueVRpbWUsXG4gIFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5CZWZvcmUsXG4gIFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5BZnRlcixcbiAgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLlNwZWNpZmljUmFuZ2UsXG4gIFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5ZZXN0ZXJkYXksXG4gIFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5Ub2RheSxcbiAgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLlRvbW9ycm93LFxuICBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuTGFzdFdlZWssXG4gIFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5UaGlzV2VlayxcbiAgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLk5leHRXZWVrLFxuICBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuTGFzdE1vbnRoLFxuICBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuVGhpc01vbnRoLFxuICBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuTmV4dE1vbnRoLFxuICBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuTGFzdFF1YXJ0ZXIsXG4gIFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5UaGlzUXVhcnRlcixcbiAgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLk5leHRRdWFydGVyLFxuICBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuTGFzdENhbGVuZGFyWWVhcixcbiAgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLlRoaXNDYWxlbmRhclllYXIsXG4gIFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5OZXh0Q2FsZW5kYXJZZWFyLFxuICBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuTGFzdEZpc2NhbFllYXIsXG4gIFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5UaGlzRmlzY2FsWWVhcixcbiAgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLk5leHRGaXNjYWxZZWFyLFxuXTtcblxuZXhwb3J0IGNvbnN0IFNLWV9ERUZBVUxUX0NBTENVTEFUT1JfQ09ORklHUzogU2t5RGF0ZVJhbmdlRGVmYXVsdENhbGN1bGF0b3JDb25maWdbXSA9XG4gIFtcbiAgICB7XG4gICAgICBjYWxjdWxhdG9ySWQ6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5BbnlUaW1lLFxuICAgICAgdHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuUmVsYXRpdmUsXG4gICAgICBzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXk6XG4gICAgICAgICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfYW55X3RpbWUnLFxuICAgICAgZ2V0VmFsdWU6IChzdGFydERhdGUsIGVuZERhdGUpID0+ICh7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSB9KSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgY2FsY3VsYXRvcklkOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuQmVmb3JlLFxuICAgICAgdHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuQmVmb3JlLFxuICAgICAgc2hvcnREZXNjcmlwdGlvblJlc291cmNlS2V5OlxuICAgICAgICAnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX2JlZm9yZScsXG4gICAgICBnZXRWYWx1ZTogKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkgPT4gKHsgc3RhcnREYXRlLCBlbmREYXRlIH0pLFxuICAgIH0sXG5cbiAgICB7XG4gICAgICBjYWxjdWxhdG9ySWQ6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5BZnRlcixcbiAgICAgIHR5cGU6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLkFmdGVyLFxuICAgICAgc2hvcnREZXNjcmlwdGlvblJlc291cmNlS2V5OiAnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX2FmdGVyJyxcbiAgICAgIGdldFZhbHVlOiAoc3RhcnREYXRlLCBlbmREYXRlKSA9PiAoeyBzdGFydERhdGUsIGVuZERhdGUgfSksXG4gICAgfSxcblxuICAgIHtcbiAgICAgIGNhbGN1bGF0b3JJZDogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLlNwZWNpZmljUmFuZ2UsXG4gICAgICB0eXBlOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5SYW5nZSxcbiAgICAgIHNob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleTpcbiAgICAgICAgJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9zcGVjaWZpY19yYW5nZScsXG4gICAgICBnZXRWYWx1ZTogKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkgPT4gKHsgc3RhcnREYXRlLCBlbmREYXRlIH0pLFxuICAgICAgdmFsaWRhdGU6ICh2YWx1ZSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgdmFsdWUuc3RhcnREYXRlICYmXG4gICAgICAgICAgdmFsdWUuZW5kRGF0ZSAmJlxuICAgICAgICAgIHZhbHVlLnN0YXJ0RGF0ZSA+IHZhbHVlLmVuZERhdGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVuZERhdGVCZWZvcmVTdGFydERhdGU6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHtcbiAgICAgIGNhbGN1bGF0b3JJZDogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLkxhc3RGaXNjYWxZZWFyLFxuICAgICAgdHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuUmVsYXRpdmUsXG4gICAgICBzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXk6XG4gICAgICAgICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9maXNjYWxfeWVhcicsXG4gICAgICBnZXRWYWx1ZTogKCkgPT4gU2t5RGF0ZVJhbmdlUmVsYXRpdmVWYWx1ZS5sYXN0RmlzY2FsWWVhcixcbiAgICB9LFxuXG4gICAge1xuICAgICAgY2FsY3VsYXRvcklkOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuTGFzdE1vbnRoLFxuICAgICAgdHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuUmVsYXRpdmUsXG4gICAgICBzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXk6XG4gICAgICAgICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9tb250aCcsXG4gICAgICBnZXRWYWx1ZTogKCkgPT4gU2t5RGF0ZVJhbmdlUmVsYXRpdmVWYWx1ZS5sYXN0TW9udGgsXG4gICAgfSxcblxuICAgIHtcbiAgICAgIGNhbGN1bGF0b3JJZDogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLkxhc3RRdWFydGVyLFxuICAgICAgdHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuUmVsYXRpdmUsXG4gICAgICBzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXk6XG4gICAgICAgICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9xdWFydGVyJyxcbiAgICAgIGdldFZhbHVlOiAoKSA9PiBTa3lEYXRlUmFuZ2VSZWxhdGl2ZVZhbHVlLmxhc3RRdWFydGVyLFxuICAgIH0sXG5cbiAgICB7XG4gICAgICBjYWxjdWxhdG9ySWQ6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5MYXN0V2VlayxcbiAgICAgIHR5cGU6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLlJlbGF0aXZlLFxuICAgICAgc2hvcnREZXNjcmlwdGlvblJlc291cmNlS2V5OlxuICAgICAgICAnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX2xhc3Rfd2VlaycsXG4gICAgICBnZXRWYWx1ZTogKCkgPT4gU2t5RGF0ZVJhbmdlUmVsYXRpdmVWYWx1ZS5sYXN0V2VlayxcbiAgICB9LFxuXG4gICAge1xuICAgICAgY2FsY3VsYXRvcklkOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuTGFzdENhbGVuZGFyWWVhcixcbiAgICAgIHR5cGU6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLlJlbGF0aXZlLFxuICAgICAgc2hvcnREZXNjcmlwdGlvblJlc291cmNlS2V5OlxuICAgICAgICAnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX2xhc3RfY2FsZW5kYXJfeWVhcicsXG4gICAgICBnZXRWYWx1ZTogKCkgPT4gU2t5RGF0ZVJhbmdlUmVsYXRpdmVWYWx1ZS5sYXN0Q2FsZW5kYXJZZWFyLFxuICAgIH0sXG5cbiAgICB7XG4gICAgICBjYWxjdWxhdG9ySWQ6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5OZXh0RmlzY2FsWWVhcixcbiAgICAgIHR5cGU6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLlJlbGF0aXZlLFxuICAgICAgc2hvcnREZXNjcmlwdGlvblJlc291cmNlS2V5OlxuICAgICAgICAnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX25leHRfZmlzY2FsX3llYXInLFxuICAgICAgZ2V0VmFsdWU6ICgpID0+IFNreURhdGVSYW5nZVJlbGF0aXZlVmFsdWUubmV4dEZpc2NhbFllYXIsXG4gICAgfSxcblxuICAgIHtcbiAgICAgIGNhbGN1bGF0b3JJZDogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLk5leHRNb250aCxcbiAgICAgIHR5cGU6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLlJlbGF0aXZlLFxuICAgICAgc2hvcnREZXNjcmlwdGlvblJlc291cmNlS2V5OlxuICAgICAgICAnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX25leHRfbW9udGgnLFxuICAgICAgZ2V0VmFsdWU6ICgpID0+IFNreURhdGVSYW5nZVJlbGF0aXZlVmFsdWUubmV4dE1vbnRoLFxuICAgIH0sXG5cbiAgICB7XG4gICAgICBjYWxjdWxhdG9ySWQ6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5OZXh0UXVhcnRlcixcbiAgICAgIHR5cGU6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLlJlbGF0aXZlLFxuICAgICAgc2hvcnREZXNjcmlwdGlvblJlc291cmNlS2V5OlxuICAgICAgICAnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX25leHRfcXVhcnRlcicsXG4gICAgICBnZXRWYWx1ZTogKCkgPT4gU2t5RGF0ZVJhbmdlUmVsYXRpdmVWYWx1ZS5uZXh0UXVhcnRlcixcbiAgICB9LFxuXG4gICAge1xuICAgICAgY2FsY3VsYXRvcklkOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuTmV4dFdlZWssXG4gICAgICB0eXBlOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5SZWxhdGl2ZSxcbiAgICAgIHNob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleTpcbiAgICAgICAgJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9uZXh0X3dlZWsnLFxuICAgICAgZ2V0VmFsdWU6ICgpID0+IFNreURhdGVSYW5nZVJlbGF0aXZlVmFsdWUubmV4dFdlZWssXG4gICAgfSxcblxuICAgIHtcbiAgICAgIGNhbGN1bGF0b3JJZDogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLk5leHRDYWxlbmRhclllYXIsXG4gICAgICB0eXBlOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5SZWxhdGl2ZSxcbiAgICAgIHNob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleTpcbiAgICAgICAgJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9uZXh0X2NhbGVuZGFyX3llYXInLFxuICAgICAgZ2V0VmFsdWU6ICgpID0+IFNreURhdGVSYW5nZVJlbGF0aXZlVmFsdWUubmV4dENhbGVuZGFyWWVhcixcbiAgICB9LFxuXG4gICAge1xuICAgICAgY2FsY3VsYXRvcklkOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuVGhpc0Zpc2NhbFllYXIsXG4gICAgICB0eXBlOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5SZWxhdGl2ZSxcbiAgICAgIHNob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleTpcbiAgICAgICAgJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90aGlzX2Zpc2NhbF95ZWFyJyxcbiAgICAgIGdldFZhbHVlOiAoKSA9PiBTa3lEYXRlUmFuZ2VSZWxhdGl2ZVZhbHVlLnRoaXNGaXNjYWxZZWFyLFxuICAgIH0sXG5cbiAgICB7XG4gICAgICBjYWxjdWxhdG9ySWQ6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5UaGlzTW9udGgsXG4gICAgICB0eXBlOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5SZWxhdGl2ZSxcbiAgICAgIHNob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleTpcbiAgICAgICAgJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90aGlzX21vbnRoJyxcbiAgICAgIGdldFZhbHVlOiAoKSA9PiBTa3lEYXRlUmFuZ2VSZWxhdGl2ZVZhbHVlLnRoaXNNb250aCxcbiAgICB9LFxuXG4gICAge1xuICAgICAgY2FsY3VsYXRvcklkOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQuVGhpc1F1YXJ0ZXIsXG4gICAgICB0eXBlOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5SZWxhdGl2ZSxcbiAgICAgIHNob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleTpcbiAgICAgICAgJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90aGlzX3F1YXJ0ZXInLFxuICAgICAgZ2V0VmFsdWU6ICgpID0+IFNreURhdGVSYW5nZVJlbGF0aXZlVmFsdWUudGhpc1F1YXJ0ZXIsXG4gICAgfSxcblxuICAgIHtcbiAgICAgIGNhbGN1bGF0b3JJZDogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLlRoaXNXZWVrLFxuICAgICAgdHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuUmVsYXRpdmUsXG4gICAgICBzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXk6XG4gICAgICAgICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfdGhpc193ZWVrJyxcbiAgICAgIGdldFZhbHVlOiAoKSA9PiBTa3lEYXRlUmFuZ2VSZWxhdGl2ZVZhbHVlLnRoaXNXZWVrLFxuICAgIH0sXG5cbiAgICB7XG4gICAgICBjYWxjdWxhdG9ySWQ6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZC5UaGlzQ2FsZW5kYXJZZWFyLFxuICAgICAgdHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuUmVsYXRpdmUsXG4gICAgICBzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXk6XG4gICAgICAgICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfdGhpc19jYWxlbmRhcl95ZWFyJyxcbiAgICAgIGdldFZhbHVlOiAoKSA9PiBTa3lEYXRlUmFuZ2VSZWxhdGl2ZVZhbHVlLnRoaXNDYWxlbmRhclllYXIsXG4gICAgfSxcblxuICAgIHtcbiAgICAgIGNhbGN1bGF0b3JJZDogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLlRvZGF5LFxuICAgICAgdHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuUmVsYXRpdmUsXG4gICAgICBzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXk6ICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfdG9kYXknLFxuICAgICAgZ2V0VmFsdWU6ICgpID0+IFNreURhdGVSYW5nZVJlbGF0aXZlVmFsdWUudG9kYXksXG4gICAgfSxcblxuICAgIHtcbiAgICAgIGNhbGN1bGF0b3JJZDogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLlRvbW9ycm93LFxuICAgICAgdHlwZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuUmVsYXRpdmUsXG4gICAgICBzaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXk6XG4gICAgICAgICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfdG9tb3Jyb3cnLFxuICAgICAgZ2V0VmFsdWU6ICgpID0+IFNreURhdGVSYW5nZVJlbGF0aXZlVmFsdWUudG9tb3Jyb3csXG4gICAgfSxcblxuICAgIHtcbiAgICAgIGNhbGN1bGF0b3JJZDogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkLlllc3RlcmRheSxcbiAgICAgIHR5cGU6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLlJlbGF0aXZlLFxuICAgICAgc2hvcnREZXNjcmlwdGlvblJlc291cmNlS2V5OlxuICAgICAgICAnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3llc3RlcmRheScsXG4gICAgICBnZXRWYWx1ZTogKCkgPT4gU2t5RGF0ZVJhbmdlUmVsYXRpdmVWYWx1ZS55ZXN0ZXJkYXksXG4gICAgfSxcbiAgXTtcbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyDateRangeCalculator } from './types/date-range-calculator';\nimport { SKY_DEFAULT_CALCULATOR_CONFIGS } from './types/date-range-default-calculator-configs';\nimport * as i0 from \"@angular/core\";\n// Start the count higher than the number of available values\n// provided in the SkyDateRangeCalculatorId enum.\nlet lastId = 1000;\n/**\n * Creates and manages `SkyDateRangeCalculator` instances.\n */\nexport class SkyDateRangeService {\n #libResourcesSvc = inject(SkyLibResourcesService);\n get calculators() {\n return this.#calculators;\n }\n #calculators = this.#createDefaultCalculators();\n /**\n * Creates a custom date range calculator.\n * @param config The calculator config.\n */\n createCalculator(config) {\n const newId = lastId++;\n const calculator = new SkyDateRangeCalculator(newId, config, this.#libResourcesSvc);\n this.#calculators.push(calculator);\n return calculator;\n }\n /**\n * Returns calculators from an array of calculator IDs.\n * @param calculatorIds The array of calculator IDs.\n */\n filterCalculators(calculatorIds) {\n const filtered = [];\n for (const calculatorId of calculatorIds) {\n const found = this.#calculators.find((c) => c.calculatorId === calculatorId);\n if (found) {\n filtered.push(found);\n }\n }\n return filtered;\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 getCalculators(ids) {\n const promises = ids.map((id) => {\n return this.getCalculatorById(id);\n });\n return Promise.all(promises);\n }\n /**\n * Returns a calculator from a calculator ID.\n * @param id The calculator ID.\n * @deprecated Call `filterCalculators()` instead.\n */\n getCalculatorById(id) {\n const calculatorId = +id;\n const found = this.#calculators.find((calculator) => {\n return calculator.calculatorId === calculatorId;\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 resolve(found);\n });\n }\n /**\n * Returns default date range calculators with unresolved resources strings.\n */\n #createDefaultCalculators() {\n const calculators = [];\n for (const defaultConfig of SKY_DEFAULT_CALCULATOR_CONFIGS) {\n calculators.push(new SkyDateRangeCalculator(defaultConfig.calculatorId, {\n getValue: defaultConfig.getValue,\n validate: defaultConfig.validate,\n shortDescription: '',\n type: defaultConfig.type,\n }, this.#libResourcesSvc, defaultConfig.shortDescriptionResourceKey));\n }\n return calculators;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangeService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangeService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR3ZFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDOztBQUUvRiw2REFBNkQ7QUFDN0QsaURBQWlEO0FBQ2pELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUVsQjs7R0FFRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFDckIsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFM0QsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBRWhEOzs7T0FHRztJQUNJLGdCQUFnQixDQUNyQixNQUFvQztRQUVwQyxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUN2QixNQUFNLFVBQVUsR0FBRyxJQUFJLHNCQUFzQixDQUMzQyxLQUFLLEVBQ0wsTUFBTSxFQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdEIsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRW5DLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxpQkFBaUIsQ0FDdEIsYUFBeUM7UUFFekMsTUFBTSxRQUFRLEdBQTZCLEVBQUUsQ0FBQztRQUU5QyxLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNsQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxZQUFZLENBQ3ZDLENBQUM7WUFFRixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWMsQ0FDbkIsR0FBK0I7UUFFL0IsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQ3RCLEVBQTRCO1FBRTVCLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBRXpCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDbEQsT0FBTyxVQUFVLENBQUMsWUFBWSxLQUFLLFlBQVksQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLE9BQU87WUFDVCxDQUFDO1lBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gseUJBQXlCO1FBQ3ZCLE1BQU0sV0FBVyxHQUE2QixFQUFFLENBQUM7UUFFakQsS0FBSyxNQUFNLGFBQWEsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO1lBQzNELFdBQVcsQ0FBQyxJQUFJLENBQ2QsSUFBSSxzQkFBc0IsQ0FDeEIsYUFBYSxDQUFDLFlBQVksRUFDMUI7Z0JBQ0UsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRO2dCQUNoQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVE7Z0JBQ2hDLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ3BCLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSTthQUN6QixFQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsYUFBYSxDQUFDLDJCQUEyQixDQUMxQyxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQzsrR0FoSFUsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvciB9IGZyb20gJy4vdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdG9yJztcbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0b3JDb25maWcgfSBmcm9tICcuL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRvci1jb25maWcnO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkIH0gZnJvbSAnLi90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItaWQnO1xuaW1wb3J0IHsgU0tZX0RFRkFVTFRfQ0FMQ1VMQVRPUl9DT05GSUdTIH0gZnJvbSAnLi90eXBlcy9kYXRlLXJhbmdlLWRlZmF1bHQtY2FsY3VsYXRvci1jb25maWdzJztcblxuLy8gU3RhcnQgdGhlIGNvdW50IGhpZ2hlciB0aGFuIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHZhbHVlc1xuLy8gcHJvdmlkZWQgaW4gdGhlIFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZCBlbnVtLlxubGV0IGxhc3RJZCA9IDEwMDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgbWFuYWdlcyBgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcmAgaW5zdGFuY2VzLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0ZVJhbmdlU2VydmljZSB7XG4gIHJlYWRvbmx5ICNsaWJSZXNvdXJjZXNTdmMgPSBpbmplY3QoU2t5TGliUmVzb3VyY2VzU2VydmljZSk7XG5cbiAgcHVibGljIGdldCBjYWxjdWxhdG9ycygpOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yW10ge1xuICAgIHJldHVybiB0aGlzLiNjYWxjdWxhdG9ycztcbiAgfVxuXG4gICNjYWxjdWxhdG9ycyA9IHRoaXMuI2NyZWF0ZURlZmF1bHRDYWxjdWxhdG9ycygpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIGRhdGUgcmFuZ2UgY2FsY3VsYXRvci5cbiAgICogQHBhcmFtIGNvbmZpZyBUaGUgY2FsY3VsYXRvciBjb25maWcuXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlQ2FsY3VsYXRvcihcbiAgICBjb25maWc6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JDb25maWcsXG4gICk6IFNreURhdGVSYW5nZUNhbGN1bGF0b3Ige1xuICAgIGNvbnN0IG5ld0lkID0gbGFzdElkKys7XG4gICAgY29uc3QgY2FsY3VsYXRvciA9IG5ldyBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yKFxuICAgICAgbmV3SWQsXG4gICAgICBjb25maWcsXG4gICAgICB0aGlzLiNsaWJSZXNvdXJjZXNTdmMsXG4gICAgKTtcblxuICAgIHRoaXMuI2NhbGN1bGF0b3JzLnB1c2goY2FsY3VsYXRvcik7XG5cbiAgICByZXR1cm4gY2FsY3VsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGNhbGN1bGF0b3JzIGZyb20gYW4gYXJyYXkgb2YgY2FsY3VsYXRvciBJRHMuXG4gICAqIEBwYXJhbSBjYWxjdWxhdG9ySWRzIFRoZSBhcnJheSBvZiBjYWxjdWxhdG9yIElEcy5cbiAgICovXG4gIHB1YmxpYyBmaWx0ZXJDYWxjdWxhdG9ycyhcbiAgICBjYWxjdWxhdG9ySWRzOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWRbXSxcbiAgKTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcltdIHtcbiAgICBjb25zdCBmaWx0ZXJlZDogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNhbGN1bGF0b3JJZCBvZiBjYWxjdWxhdG9ySWRzKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuI2NhbGN1bGF0b3JzLmZpbmQoXG4gICAgICAgIChjKSA9PiBjLmNhbGN1bGF0b3JJZCA9PT0gY2FsY3VsYXRvcklkLFxuICAgICAgKTtcblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGZpbHRlcmVkLnB1c2goZm91bmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGNhbGN1bGF0b3JzIGZyb20gYW4gYXJyYXkgb2YgY2FsY3VsYXRvciBJRHMuXG4gICAqIEBwYXJhbSBpZHMgVGhlIGFycmF5IG9mIGNhbGN1bGF0b3IgSURzLlxuICAgKiBAZGVwcmVjYXRlZCBDYWxsIGBmaWx0ZXJDYWxjdWxhdG9ycygpYCBpbnN0ZWFkLlxuICAgKi9cbiAgcHVibGljIGdldENhbGN1bGF0b3JzKFxuICAgIGlkczogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkW10sXG4gICk6IFByb21pc2U8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcltdPiB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBpZHMubWFwKChpZCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2FsY3VsYXRvckJ5SWQoaWQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY2FsY3VsYXRvciBmcm9tIGEgY2FsY3VsYXRvciBJRC5cbiAgICogQHBhcmFtIGlkIFRoZSBjYWxjdWxhdG9yIElELlxuICAgKiBAZGVwcmVjYXRlZCBDYWxsIGBmaWx0ZXJDYWxjdWxhdG9ycygpYCBpbnN0ZWFkLlxuICAgKi9cbiAgcHVibGljIGdldENhbGN1bGF0b3JCeUlkKFxuICAgIGlkOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQsXG4gICk6IFByb21pc2U8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcj4ge1xuICAgIGNvbnN0IGNhbGN1bGF0b3JJZCA9ICtpZDtcblxuICAgIGNvbnN0IGZvdW5kID0gdGhpcy4jY2FsY3VsYXRvcnMuZmluZCgoY2FsY3VsYXRvcikgPT4ge1xuICAgICAgcmV0dXJuIGNhbGN1bGF0b3IuY2FsY3VsYXRvcklkID09PSBjYWxjdWxhdG9ySWQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBBIGNhbGN1bGF0b3Igd2l0aCB0aGUgSUQgJHtpZH0gd2FzIG5vdCBmb3VuZC5gKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShmb3VuZCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBkZWZhdWx0IGRhdGUgcmFuZ2UgY2FsY3VsYXRvcnMgd2l0aCB1bnJlc29sdmVkIHJlc291cmNlcyBzdHJpbmdzLlxuICAgKi9cbiAgI2NyZWF0ZURlZmF1bHRDYWxjdWxhdG9ycygpOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yW10ge1xuICAgIGNvbnN0IGNhbGN1bGF0b3JzOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZGVmYXVsdENvbmZpZyBvZiBTS1lfREVGQVVMVF9DQUxDVUxBVE9SX0NPTkZJR1MpIHtcbiAgICAgIGNhbGN1bGF0b3JzLnB1c2goXG4gICAgICAgIG5ldyBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yKFxuICAgICAgICAgIGRlZmF1bHRDb25maWcuY2FsY3VsYXRvcklkLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldFZhbHVlOiBkZWZhdWx0Q29uZmlnLmdldFZhbHVlLFxuICAgICAgICAgICAgdmFsaWRhdGU6IGRlZmF1bHRDb25maWcudmFsaWRhdGUsXG4gICAgICAgICAgICBzaG9ydERlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IGRlZmF1bHRDb25maWcudHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuI2xpYlJlc291cmNlc1N2YyxcbiAgICAgICAgICBkZWZhdWx0Q29uZmlnLnNob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGN1bGF0b3JzO1xuICB9XG59XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, HostBinding, Injector, Input, booleanAttribute, computed, inject, runInInjectionContext, signal, viewChildren, } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { FormBuilder, FormControl, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, ReactiveFormsModule, StatusChangeEvent, TouchedChangeEvent, } from '@angular/forms';\nimport { SkyLogService } from '@skyux/core';\nimport { SKY_FORM_ERRORS_ENABLED, SkyFormErrorsModule, SkyInputBoxModule, } from '@skyux/forms';\nimport { distinctUntilChanged, filter, map } from 'rxjs';\nimport { SkyDatepickerComponent } from '../datepicker/datepicker.component';\nimport { SkyDatepickerModule } from '../datepicker/datepicker.module';\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\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 { SkyDateRangeCalculatorType } from './types/date-range-calculator-type';\nimport { SKY_DEFAULT_CALCULATOR_IDS } from './types/date-range-default-calculator-configs';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"../datepicker/datepicker.component\";\nimport * as i4 from \"../datepicker/datepicker-input.directive\";\nimport * as i5 from \"@skyux/forms\";\nimport * as i6 from \"@skyux/i18n\";\nfunction areDateRangesEqual(rangeA, rangeB) {\n return (!!rangeA &&\n !!rangeB &&\n rangeA.calculatorId === rangeB.calculatorId &&\n areDatesEqual(rangeA.startDate, rangeB.startDate) &&\n areDatesEqual(rangeA.endDate, rangeB.endDate));\n}\nfunction areDatesEqual(a, b) {\n if (typeof a !== typeof b) {\n return false;\n }\n if (!a && !b) {\n return true;\n }\n if (typeof a === 'string' && a === b) {\n return true;\n }\n return a instanceof Date && b instanceof Date && a.getTime() === b.getTime();\n}\nfunction isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\nfunction isPartialValue(value) {\n return (isNullOrUndefined(value) ||\n isNullOrUndefined(value.calculatorId) ||\n !('endDate' in value) ||\n !('startDate' in value));\n}\nexport class SkyDateRangePickerComponent {\n constructor() {\n this.#dateRangeSvc = inject(SkyDateRangeService);\n this.#destroyRef = inject(DestroyRef);\n this.#elementRef = inject(ElementRef);\n this.#injector = inject(Injector);\n this.#logger = inject(SkyLogService);\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 this.stacked = false;\n this.calculators = this.#dateRangeSvc.calculators;\n this.datepickers = viewChildren(SkyDatepickerComponent, ...(ngDevMode ? [{ debugName: \"datepickers\" }] : []));\n this.selectedCalculator = this.calculators[0];\n this.showEndDatePicker = signal(false, ...(ngDevMode ? [{ debugName: \"showEndDatePicker\" }] : []));\n this.showStartDatePicker = signal(false, ...(ngDevMode ? [{ debugName: \"showStartDatePicker\" }] : []));\n this.#_calculatorIds = SKY_DEFAULT_CALCULATOR_IDS;\n this.#_value = this.selectedCalculator.getValue();\n this.#calculatorIdControl = new FormControl(this.#getValue().calculatorId, { nonNullable: true });\n this.#calculatorIdInvalid = this.#createStatusChangeSignal(this.#calculatorIdControl);\n this.#calculatorIdTouched = this.#createTouchedChangeSignal(this.#calculatorIdControl);\n this.#endDateControl = new FormControl(this.#getValue().endDate);\n this.#endDateInvalid = this.#createStatusChangeSignal(this.#endDateControl);\n this.#endDateTouched = this.#createTouchedChangeSignal(this.#endDateControl);\n this.#startDateControl = new FormControl(this.#getValue().startDate);\n this.#startDateInvalid = this.#createStatusChangeSignal(this.#startDateControl);\n this.#startDateTouched = this.#createTouchedChangeSignal(this.#startDateControl);\n this.formGroup = inject(FormBuilder).group({\n calculatorId: this.#calculatorIdControl,\n startDate: this.#startDateControl,\n endDate: this.#endDateControl,\n });\n this.calculatorIdHasErrors = computed(() => {\n const touched = this.#calculatorIdTouched();\n const invalid = this.#calculatorIdInvalid() || this.#hostHasCustomError?.();\n return touched && invalid;\n }, ...(ngDevMode ? [{ debugName: \"calculatorIdHasErrors\" }] : []));\n this.endDateHasErrors = computed(() => {\n const calculatorIdHasErrors = this.calculatorIdHasErrors();\n const touched = this.#endDateTouched();\n const invalid = this.#endDateInvalid();\n return calculatorIdHasErrors || (touched && invalid);\n }, ...(ngDevMode ? [{ debugName: \"endDateHasErrors\" }] : []));\n this.startDateHasErrors = computed(() => {\n const calculatorIdHasErrors = this.calculatorIdHasErrors();\n const touched = this.#startDateTouched();\n const invalid = this.#startDateInvalid();\n return calculatorIdHasErrors || (touched && invalid);\n }, ...(ngDevMode ? [{ debugName: \"startDateHasErrors\" }] : []));\n }\n #dateRangeSvc;\n #destroyRef;\n #elementRef;\n #injector;\n #logger;\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 set calculatorIds(calculatorIds) {\n const currentCalculatorId = this.#getValue().calculatorId;\n this.#_calculatorIds = calculatorIds ?? SKY_DEFAULT_CALCULATOR_IDS;\n this.calculators = this.#dateRangeSvc.filterCalculators(this.#_calculatorIds);\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 get calculatorIds() {\n return this.#_calculatorIds;\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 set disabled(value) {\n if (value) {\n this.formGroup.disable();\n }\n else {\n this.formGroup.enable();\n }\n }\n /**\n * The label for the date range picker.\n * @deprecated Use the `labelText` input instead.\n */\n set label(value) {\n this.#_label = value;\n if (value) {\n this.#logger.deprecated('SkyDateRangePickerComponent.label', {\n deprecationMajorVersion: 10,\n replacementRecommendation: 'Use the `labelText` input instead.',\n });\n }\n }\n get label() {\n return this.#_label;\n }\n #_calculatorIds;\n #_label;\n #_value;\n #hostHasCustomError;\n #notifyChange;\n #notifyTouched;\n #calculatorIdControl;\n #calculatorIdInvalid;\n #calculatorIdTouched;\n #endDateControl;\n #endDateInvalid;\n #endDateTouched;\n #startDateControl;\n #startDateInvalid;\n #startDateTouched;\n ngAfterViewInit() {\n this.hostControl = this.#injector.get(NgControl, null, {\n optional: true,\n self: true,\n })?.control;\n runInInjectionContext(this.#injector, () => {\n if (this.hostControl) {\n this.#hostHasCustomError = this.#createHostCustomErrorChangeSignal(this.hostControl);\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 // 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(filter((evt) => evt instanceof StatusChangeEvent), map((evt) => evt.status), distinctUntilChanged(), takeUntilDestroyed(this.#destroyRef))\n .subscribe(() => {\n this.hostControl?.updateValueAndValidity({\n emitEvent: false,\n onlySelf: true,\n });\n });\n // Mark all fields as touched if the host control is touched.\n this.hostControl?.events\n .pipe(filter((evt) => evt instanceof TouchedChangeEvent), map((evt) => evt.touched), distinctUntilChanged(), takeUntilDestroyed(this.#destroyRef))\n .subscribe(() => {\n this.formGroup.markAllAsTouched();\n });\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this.#notifyChange = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this.#notifyTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n // Implemented as part of Validator.\n validate(control) {\n let errors = null;\n const calculatorErrors = this.selectedCalculator.validate(control.value);\n const startDateErrors = this.#startDateControl.errors;\n const endDateErrors = this.#endDateControl.errors;\n if (calculatorErrors) {\n errors = {\n skyDateRange: {\n calculatorId: this.#getValue().calculatorId,\n errors: calculatorErrors,\n },\n };\n }\n // Set calculator errors on the select so that they appear beneath it.\n this.#calculatorIdControl.setErrors(errors);\n if (this.showStartDatePicker() && startDateErrors) {\n errors ||= {};\n errors = { ...errors, ...startDateErrors };\n }\n if (this.showEndDatePicker() && endDateErrors) {\n errors ||= {};\n errors = { ...errors, ...endDateErrors };\n }\n return errors;\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 writeValue(value) {\n this.#patchValue(value);\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 * Fires when a user changes the selected calculator ID.\n */\n onCalculatorIdChange() {\n // Reset the value when the calculator ID changes.\n this.#setValue({ calculatorId: +this.#calculatorIdControl.value });\n this.onDateChange();\n }\n /**\n * Fires when a user interacts with a date range picker.\n */\n onDateChange() {\n // Wait until the form control is updated before retrieving its value.\n setTimeout(() => {\n this.#notifyChange?.(this.formGroup.getRawValue());\n });\n }\n /**\n * Fires when the date range picker loses focus.\n */\n onFocusout({ relatedTarget }) {\n if (relatedTarget &&\n !this.#elementRef.nativeElement.contains(relatedTarget) &&\n !this.datepickers().some((picker) => picker.containsTarget(relatedTarget))) {\n this.#notifyTouched?.();\n }\n }\n #getCalculator(calculatorId) {\n const found = this.calculators.find((c) => c.calculatorId === calculatorId);\n /*istanbul ignore if: safety check*/\n if (!found) {\n throw new Error(`A date range calculator with ID (${calculatorId}) could not be found.`);\n }\n return found;\n }\n #getValue() {\n // Important! Return a clone to avoid changing the properties by reference.\n return { ...this.#_value };\n }\n #patchValue(partialValue) {\n if (isNullOrUndefined(partialValue)) {\n this.#setValue(null);\n return;\n }\n const oldValue = this.#getValue();\n // If the new ID is distinct, erase the old start and end dates because\n // they're no longer applicable.\n if (!isNullOrUndefined(partialValue.calculatorId) &&\n oldValue.calculatorId !== partialValue.calculatorId) {\n delete oldValue.endDate;\n delete oldValue.startDate;\n }\n const value = {\n ...oldValue,\n ...partialValue,\n };\n this.#setValue(value);\n }\n /**\n * Sets the value to be used by the date range picker form control.\n */\n #setValue(value) {\n const oldValue = this.#getValue();\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 // Ensure falsy values are set to null.\n valueOrDefault.endDate = valueOrDefault.endDate || null;\n valueOrDefault.startDate = valueOrDefault.startDate || null;\n if (!areDateRangesEqual(oldValue, valueOrDefault)) {\n this.#_value = valueOrDefault;\n if (oldValue.calculatorId !== valueOrDefault.calculatorId) {\n this.selectedCalculator = this.#getCalculator(valueOrDefault.calculatorId);\n this.#updatePickerVisibility(this.selectedCalculator);\n }\n this.formGroup.patchValue(valueOrDefault);\n }\n }\n #updatePickerVisibility(calculator) {\n let showEndDatePicker = false;\n let showStartDatePicker = false;\n switch (calculator.type) {\n case SkyDateRangeCalculatorType.Before:\n showEndDatePicker = true;\n break;\n case SkyDateRangeCalculatorType.After:\n showStartDatePicker = true;\n break;\n case SkyDateRangeCalculatorType.Range:\n showEndDatePicker = true;\n showStartDatePicker = true;\n break;\n default:\n break;\n }\n this.showEndDatePicker.set(showEndDatePicker);\n this.showStartDatePicker.set(showStartDatePicker);\n }\n #createHostCustomErrorChangeSignal(control) {\n return toSignal(control.events.pipe(filter((evt) => evt instanceof StatusChangeEvent), map((evt) => {\n const errors = evt.source.errors ?? [];\n const knownErrors = ['required', 'skyDate'];\n return Object.keys(errors).some((error) => {\n return !knownErrors.includes(error);\n });\n })));\n }\n #createStatusChangeSignal(control) {\n return toSignal(control.events.pipe(filter((evt) => evt instanceof StatusChangeEvent), map((evt) => evt.status === 'INVALID'), takeUntilDestroyed(this.#destroyRef)));\n }\n #createTouchedChangeSignal(control) {\n return toSignal(control.events.pipe(filter((evt) => evt instanceof TouchedChangeEvent), map((evt) => evt.touched), takeUntilDestroyed(this.#destroyRef)));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", type: SkyDateRangePickerComponent, isStandalone: true, selector: \"sky-date-range-picker\", inputs: { calculatorIds: \"calculatorIds\", dateFormat: \"dateFormat\", disabled: [\"disabled\", \"disabled\", booleanAttribute], helpPopoverContent: \"helpPopoverContent\", helpPopoverTitle: \"helpPopoverTitle\", hintText: \"hintText\", label: \"label\", labelText: \"labelText\", stacked: [\"stacked\", \"stacked\", booleanAttribute], helpKey: \"helpKey\" }, host: { listeners: { \"focusout\": \"onFocusout($event)\" }, properties: { \"class.sky-form-field-stacked\": \"this.stacked\" } }, 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 ], viewQueries: [{ propertyName: \"datepickers\", predicate: SkyDatepickerComponent, descendants: true, isSignal: true }], ngImport: i0, template: \"<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\", styles: [\".sky-date-range-picker:not(.sky-theme-modern *){--sky-override-date-range-picker-margin-right: 0;--sky-override-date-range-picker-padding-left: 5px;--sky-override-date-range-picker-padding-right: 5px;--sky-override-date-range-picker-responsive-bottom-margin: var( --sky-margin-stacked-lg )}:host{display:block}.sky-date-range-picker{display:flex}:host .sky-date-range-picker{flex-direction:column}:host .sky-date-range-picker-form-group{flex-basis:100%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-override-date-range-picker-responsive-bottom-margin, var(--sky-space-gap-form-l));margin-right:0}:host-context(.sky-responsive-container-xs) .sky-date-range-picker,:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:column}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-override-date-range-picker-responsive-bottom-margin, var(--sky-space-gap-form-l));margin-right:0}@media (min-width: 768px){:host .sky-date-range-picker{flex-direction:initial}:host .sky-date-range-picker-form-group{flex-basis:33.3333333333%;padding:0}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:var(--sky-override-date-range-picker-padding-left, 0)}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:var(--sky-override-date-range-picker-padding-right, 0)}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0;margin-right:var(--sky-override-date-range-picker-margin-right, var(--sky-space-gap-form-l))}}:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:initial}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:33.3333333333%;padding:0}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:var(--sky-override-date-range-picker-padding-left, 0)}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:var(--sky-override-date-range-picker-padding-right, 0)}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0;margin-right:var(--sky-override-date-range-picker-margin-right, var(--sky-space-gap-form-l))}@media (min-width: 768px){:host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}}.sky-responsive-container-sm :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-md :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-lg :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgSelectOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i2.ɵNgSelectMultipleOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i2.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i2.SelectControlValueAccessor, selector: \"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]\", inputs: [\"compareWith\"] }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i2.RequiredValidator, selector: \":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]\", inputs: [\"required\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i2.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"directive\", type: i2.FormControlName, selector: \"[formControlName]\", inputs: [\"formControlName\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"] }, { kind: \"ngmodule\", type: SkyDatepickerModule }, { kind: \"component\", type: i3.SkyDatepickerComponent, selector: \"sky-datepicker\", inputs: [\"pickerClass\"], outputs: [\"calendarDateRangeChange\", \"dateFormatChange\", \"openChange\", \"calendarDateChange\"] }, { kind: \"directive\", type: i4.SkyDatepickerInputDirective, selector: \"[skyDatepickerInput]\", inputs: [\"dateFormat\", \"disabled\", \"maxDate\", \"minDate\", \"startAtDate\", \"skyDatepickerInput\", \"skyDatepickerNoValidate\", \"startingDay\", \"strict\"] }, { kind: \"ngmodule\", type: SkyDatetimeResourcesModule }, { kind: \"ngmodule\", type: SkyInputBoxModule }, { kind: \"component\", type: i5.λ10, selector: \"sky-input-box\", inputs: [\"hasErrors\", \"disabled\", \"labelText\", \"characterLimit\", \"stacked\", \"helpPopoverTitle\", \"helpPopoverContent\", \"helpKey\", \"hintText\"] }, { kind: \"directive\", type: i5.λ20, selector: \"input:not([skyId]):not(.sky-form-control),select:not([skyId]):not(.sky-form-control),textarea:not([skyId]):not(.sky-form-control)\", inputs: [\"autocomplete\"] }, { kind: \"component\", type: i5.λ22, selector: \"sky-form-error\", inputs: [\"errorName\", \"errorText\"] }, { kind: \"ngmodule\", type: SkyFormErrorsModule }, { kind: \"pipe\", type: i1.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: SkyDateRangePickerEndDateResourceKeyPipe, name: \"skyDateRangePickerEndDateResourceKey\" }, { kind: \"pipe\", type: SkyDateRangePickerStartDateResourceKeyPipe, name: \"skyDateRangePickerStartDateResourceKey\" }, { kind: \"pipe\", type: i6.SkyLibResourcesPipe, name: \"skyLibResources\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, host: {\n '(focusout)': 'onFocusout($event)',\n }, imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SkyDatepickerModule,\n SkyDateRangePickerEndDateResourceKeyPipe,\n SkyDateRangePickerStartDateResourceKeyPipe,\n SkyDatetimeResourcesModule,\n SkyInputBoxModule,\n SkyFormErrorsModule,\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 ], selector: 'sky-date-range-picker', template: \"<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\", styles: [\".sky-date-range-picker:not(.sky-theme-modern *){--sky-override-date-range-picker-margin-right: 0;--sky-override-date-range-picker-padding-left: 5px;--sky-override-date-range-picker-padding-right: 5px;--sky-override-date-range-picker-responsive-bottom-margin: var( --sky-margin-stacked-lg )}:host{display:block}.sky-date-range-picker{display:flex}:host .sky-date-range-picker{flex-direction:column}:host .sky-date-range-picker-form-group{flex-basis:100%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-override-date-range-picker-responsive-bottom-margin, var(--sky-space-gap-form-l));margin-right:0}:host-context(.sky-responsive-container-xs) .sky-date-range-picker,:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:column}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-override-date-range-picker-responsive-bottom-margin, var(--sky-space-gap-form-l));margin-right:0}@media (min-width: 768px){:host .sky-date-range-picker{flex-direction:initial}:host .sky-date-range-picker-form-group{flex-basis:33.3333333333%;padding:0}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:var(--sky-override-date-range-picker-padding-left, 0)}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:var(--sky-override-date-range-picker-padding-right, 0)}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0;margin-right:var(--sky-override-date-range-picker-margin-right, var(--sky-space-gap-form-l))}}:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:initial}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:33.3333333333%;padding:0}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:var(--sky-override-date-range-picker-padding-left, 0)}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:var(--sky-override-date-range-picker-padding-right, 0)}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0;margin-right:var(--sky-override-date-range-picker-margin-right, var(--sky-space-gap-form-l))}@media (min-width: 768px){:host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}}.sky-responsive-container-sm :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-md :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-lg :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}\\n\"] }]\n }], propDecorators: { calculatorIds: [{\n type: Input\n }], dateFormat: [{\n type: Input\n }], disabled: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], helpPopoverContent: [{\n type: Input\n }], helpPopoverTitle: [{\n type: Input\n }], hintText: [{\n type: Input\n }], label: [{\n type: Input\n }], labelText: [{\n type: Input\n }], stacked: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }, {\n type: HostBinding,\n args: ['class.sky-form-field-stacked']\n }], helpKey: [{\n type: Input\n }], datepickers: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => SkyDatepickerComponent), { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxRQUFRLEVBQ1IsS0FBSyxFQUdMLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsTUFBTSxFQUNOLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRSxPQUFPLEVBR0wsV0FBVyxFQUNYLFdBQVcsRUFDWCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixrQkFBa0IsR0FHbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLGlCQUFpQixHQUNsQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxN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a0JBakN2QyxTQUFTO3NDQUNTLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0osWUFBWSxFQUFFLG9CQUFvQjtxQkFDbkMsV0FDUTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixtQkFBbUI7d0JBQ25CLHdDQUF3Qzt3QkFDeEMsMENBQTBDO3dCQUMxQywwQkFBMEI7d0JBQzFCLGlCQUFpQjt3QkFDakIsbUJBQW1CO3FCQUNwQixhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLDZCQUE2Qjs0QkFDeEMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyw2QkFBNkI7NEJBQ3hDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNELEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7cUJBQ3JELFlBQ1MsdUJBQXVCOztzQkFrQmhDLEtBQUs7O3NCQTZCTCxLQUFLOztzQkFVTCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFOztzQkFjckMsS0FBSzs7c0JBT0wsS0FBSzs7c0JBT0wsS0FBSzs7c0JBT0wsS0FBSzs7c0JBbUJMLEtBQUs7O3NCQU9MLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7O3NCQUNyQyxXQUFXO3VCQUFDLDhCQUE4Qjs7c0JBUTFDLEtBQUs7a0ZBSStCLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBTaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1zTW9kdWxlLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgTmdDb250cm9sLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBTdGF0dXNDaGFuZ2VFdmVudCxcbiAgVG91Y2hlZENoYW5nZUV2ZW50LFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUxvZ1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCxcbiAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgU2t5SW5wdXRCb3hNb2R1bGUsXG59IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5cbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnLi4vZGF0ZXBpY2tlci9kYXRlcGlja2VyLm1vZHVsZSc7XG5pbXBvcnQgeyBTa3lEYXRldGltZVJlc291cmNlc01vZHVsZSB9IGZyb20gJy4uL3NoYXJlZC9za3ktZGF0ZXRpbWUtcmVzb3VyY2VzLm1vZHVsZSc7XG5cbmltcG9ydCB7IFNreURhdGVSYW5nZVBpY2tlckVuZERhdGVSZXNvdXJjZUtleVBpcGUgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyLWVuZC1kYXRlLXJlc291cmNlLWtleS5waXBlJztcbmltcG9ydCB7IFNreURhdGVSYW5nZVBpY2tlclN0YXJ0RGF0ZVJlc291cmNlS2V5UGlwZSB9IGZyb20gJy4vZGF0ZS1yYW5nZS1waWNrZXItc3RhcnQtZGF0ZS1yZXNvdXJjZS1rZXkucGlwZSc7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlLXJhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24gfSBmcm9tICcuL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRpb24nO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvciB9IGZyb20gJy4vdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdG9yJztcbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZCB9IGZyb20gJy4vdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLWlkJztcbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlIH0gZnJvbSAnLi90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItdHlwZSc7XG5pbXBvcnQgeyBTS1lfREVGQVVMVF9DQUxDVUxBVE9SX0lEUyB9IGZyb20gJy4vdHlwZXMvZGF0ZS1yYW5nZS1kZWZhdWx0LWNhbGN1bGF0b3ItY29uZmlncyc7XG5cbnR5cGUgRGF0ZVZhbHVlID0gRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGFyZURhdGVSYW5nZXNFcXVhbChcbiAgcmFuZ2VBOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbiB8IHVuZGVmaW5lZCxcbiAgcmFuZ2VCOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbiB8IHVuZGVmaW5lZCxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgICEhcmFuZ2VBICYmXG4gICAgISFyYW5nZUIgJiZcbiAgICByYW5nZUEuY2FsY3VsYXRvcklkID09PSByYW5nZUIuY2FsY3VsYXRvcklkICYmXG4gICAgYXJlRGF0ZXNFcXVhbChyYW5nZUEuc3RhcnREYXRlLCByYW5nZUIuc3RhcnREYXRlKSAmJlxuICAgIGFyZURhdGVzRXF1YWwocmFuZ2VBLmVuZERhdGUsIHJhbmdlQi5lbmREYXRlKVxuICApO1xufVxuXG5mdW5jdGlvbiBhcmVEYXRlc0VxdWFsKGE6IERhdGVWYWx1ZSwgYjogRGF0ZVZhbHVlKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWEgJiYgIWIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlICYmIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbn1cblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbFZhbHVlKFxuICB2YWx1ZTogUGFydGlhbDxTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogdmFsdWUgaXMgUGFydGlhbDxTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbj4gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIChcbiAgICBpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkgfHxcbiAgICBpc051bGxPclVuZGVmaW5lZCh2YWx1ZS5jYWxjdWxhdG9ySWQpIHx8XG4gICAgISgnZW5kRGF0ZScgaW4gdmFsdWUpIHx8XG4gICAgISgnc3RhcnREYXRlJyBpbiB2YWx1ZSlcbiAgKTtcbn1cblxuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJyhmb2N1c291dCknOiAnb25Gb2N1c291dCgkZXZlbnQpJyxcbiAgfSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNreURhdGVwaWNrZXJNb2R1bGUsXG4gICAgU2t5RGF0ZVJhbmdlUGlja2VyRW5kRGF0ZVJlc291cmNlS2V5UGlwZSxcbiAgICBTa3lEYXRlUmFuZ2VQaWNrZXJTdGFydERhdGVSZXNvdXJjZUtleVBpcGUsXG4gICAgU2t5RGF0ZXRpbWVSZXNvdXJjZXNNb2R1bGUsXG4gICAgU2t5SW5wdXRCb3hNb2R1bGUsXG4gICAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IFNreURhdGVSYW5nZVBpY2tlckNvbXBvbmVudCxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAgeyBwcm92aWRlOiBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCwgdXNlVmFsdWU6IHRydWUgfSxcbiAgXSxcbiAgc2VsZWN0b3I6ICdza3ktZGF0ZS1yYW5nZS1waWNrZXInLFxuICBzdHlsZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yXG57XG4gIHJlYWRvbmx5ICNkYXRlUmFuZ2VTdmMgPSBpbmplY3QoU2t5RGF0ZVJhbmdlU2VydmljZSk7XG4gIHJlYWRvbmx5ICNkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICByZWFkb25seSAjZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcmVhZG9ubHkgI2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcmVhZG9ubHkgI2xvZ2dlciA9IGluamVjdChTa3lMb2dTZXJ2aWNlKTtcblxuICAvKipcbiAgICogSURzIGZvciB0aGUgZGF0ZSByYW5nZSBvcHRpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHBpY2tlcidzIGRyb3Bkb3duLlxuICAgKiBUaGUgb3B0aW9ucyBzcGVjaWZ5IGNhbGN1bGF0b3Igb2JqZWN0cyB0aGF0IHJldHVybiB0d28gYERhdGVgIG9iamVjdHMgdG8gcmVwcmVzZW50IGRhdGUgcmFuZ2VzLlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIHByb3BlcnR5IGluY2x1ZGVzIGFsbCBgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkYCB2YWx1ZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNhbGN1bGF0b3JJZHMoXG4gICAgY2FsY3VsYXRvcklkczogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkW10gfCB1bmRlZmluZWQsXG4gICkge1xuICAgIGNvbnN0IGN1cnJlbnRDYWxjdWxhdG9ySWQgPSB0aGlzLiNnZXRWYWx1ZSgpLmNhbGN1bGF0b3JJZDtcblxuICAgIHRoaXMuI19jYWxjdWxhdG9ySWRzID0gY2FsY3VsYXRvcklkcyA/PyBTS1lfREVGQVVMVF9DQUxDVUxBVE9SX0lEUztcbiAgICB0aGlzLmNhbGN1bGF0b3JzID0gdGhpcy4jZGF0ZVJhbmdlU3ZjLmZpbHRlckNhbGN1bGF0b3JzKFxuICAgICAgdGhpcy4jX2NhbGN1bGF0b3JJZHMsXG4gICAgKTtcblxuICAgIC8vIElmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY2FsY3VsYXRvciBpc24ndCBhdmFpbGFibGUgYW55bW9yZSxcbiAgICAvLyBzZWxlY3QgdGhlIGZpcnN0IGNhbGN1bGF0b3IgaW4gdGhlIG5ldyBhcnJheS5cbiAgICBpZiAoIXRoaXMuI19jYWxjdWxhdG9ySWRzLmluY2x1ZGVzKGN1cnJlbnRDYWxjdWxhdG9ySWQpKSB7XG4gICAgICB0aGlzLiNzZXRWYWx1ZSh7IGNhbGN1bGF0b3JJZDogdGhpcy5jYWxjdWxhdG9ySWRzWzBdIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FsY3VsYXRvcklkcygpOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWRbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19jYWxjdWxhdG9ySWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIGZvcm1hdCBmb3JcbiAgICogW3RoZSBgc2t5LWRhdGVwaWNrZXJgIGNvbXBvbmVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9kYXRlcGlja2VyKVxuICAgKiB0aGF0IG1ha2UgdXAgdGhlIGRhdGUgcmFuZ2UgcGlja2VyLiBUaGUgdGV4dCBpbnB1dCBpcyBhIGNvbXBvc2l0ZSBjb21wb25lbnQgb2ZcbiAgICogdXAgdG8gdHdvIGBza3ktZGF0ZXBpY2tlcmAgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgXCJNTS9ERC9ZWVlZXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgb24gdGVtcGxhdGUtZHJpdmVuIGZvcm1zLiBEb24ndCB1c2VcbiAgICogdGhpcyBpbnB1dCBvbiByZWFjdGl2ZSBmb3JtcyBiZWNhdXNlIHRoZXkgbWF5IG92ZXJ3cml0ZSB0aGUgaW5wdXQgb3IgbGVhdmVcbiAgICogdGhlIGNvbnRyb2wgb3V0IG9mIHN5bmMuIFRvIHNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb24gcmVhY3RpdmUgZm9ybXMsXG4gICAqIHVzZSB0aGUgYEZvcm1Db250cm9sYCBpbnN0ZWFkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBoZWxwIHBvcG92ZXIuIFdoZW4gc3BlY2lmaWVkIGFsb25nIHdpdGggYGxhYmVsVGV4dGAsIGEgW2hlbHAgaW5saW5lXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaGVscC1pbmxpbmUpXG4gICAqIGJ1dHRvbiBpcyBhZGRlZCB0byBkYXRlIHJhbmdlIHBpY2tlci4gVGhlIGhlbHAgaW5saW5lIGJ1dHRvbiBkaXNwbGF5cyBhIFtwb3BvdmVyXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcG9wb3ZlcilcbiAgICogd2hlbiBjbGlja2VkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9uYWwgdGl0bGUuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGxhYmVsVGV4dGAgaXMgYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBoZWxwIHBvcG92ZXIuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGhlbHBQb3BvdmVyQ29udGVudGAgaXNcbiAgICogYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBbUGVyc2lzdGVudCBpbmxpbmUgaGVscCB0ZXh0XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2Rlc2lnbi9ndWlkZWxpbmVzL3VzZXItYXNzaXN0YW5jZSNpbmxpbmUtaGVscCkgdGhhdCBwcm92aWRlc1xuICAgKiBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGludFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGxhYmVsIGZvciB0aGUgZGF0ZSByYW5nZSBwaWNrZXIuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYGxhYmVsVGV4dGAgaW5wdXQgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGFiZWwodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19sYWJlbCA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLiNsb2dnZXIuZGVwcmVjYXRlZCgnU2t5RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LmxhYmVsJywge1xuICAgICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogMTAsXG4gICAgICAgIHJlcGxhY2VtZW50UmVjb21tZW5kYXRpb246ICdVc2UgdGhlIGBsYWJlbFRleHRgIGlucHV0IGluc3RlYWQuJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2xhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgYXMgdGhlIGRhdGUgcmFuZ2UgcGlja2VyJ3MgbGFiZWwuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbGFiZWxUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGRhdGUgcmFuZ2UgcGlja2VyIGlzIHN0YWNrZWQgb24gYW5vdGhlciBmb3JtIGNvbXBvbmVudC4gV2hlbiBzcGVjaWZpZWQsIHRoZSBhcHByb3ByaWF0ZVxuICAgKiB2ZXJ0aWNhbCBzcGFjaW5nIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIGRhdGUgcmFuZ2UgcGlja2VyLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2t5LWZvcm0tZmllbGQtc3RhY2tlZCcpXG4gIHB1YmxpYyBzdGFja2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgaGVscCBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSBnbG9iYWwgaGVscCBjb250ZW50IHRvIGRpc3BsYXkuIFdoZW4gc3BlY2lmaWVkIGFsb25nIHdpdGggYGxhYmVsVGV4dGAsIGEgW2hlbHAgaW5saW5lXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaGVscC1pbmxpbmUpXG4gICAqIGJ1dHRvbiBpcyBwbGFjZWQgYmVzaWRlIHRoZSBkYXRlIHJhbmdlIHBpY2tlciBsYWJlbC4gQ2xpY2tpbmcgdGhlIGJ1dHRvbiBpbnZva2VzIFtnbG9iYWwgaGVscF0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9kZXZlbG9wL2dsb2JhbC1oZWxwKVxuICAgKiBhcyBjb25maWd1cmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgd2hlbiBgbGFiZWxUZXh0YCBpcyBhbHNvIHNwZWNpZmllZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWxwS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0b3JzID0gdGhpcy4jZGF0ZVJhbmdlU3ZjLmNhbGN1bGF0b3JzO1xuICBwcm90ZWN0ZWQgZGF0ZXBpY2tlcnMgPSB2aWV3Q2hpbGRyZW4oU2t5RGF0ZXBpY2tlckNvbXBvbmVudCk7XG4gIHByb3RlY3RlZCBob3N0Q29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkQ2FsY3VsYXRvciA9IHRoaXMuY2FsY3VsYXRvcnNbMF07XG4gIHByb3RlY3RlZCBzaG93RW5kRGF0ZVBpY2tlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBzaG93U3RhcnREYXRlUGlja2VyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAjX2NhbGN1bGF0b3JJZHMgPSBTS1lfREVGQVVMVF9DQUxDVUxBVE9SX0lEUztcbiAgI19sYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjX3ZhbHVlID0gdGhpcy5zZWxlY3RlZENhbGN1bGF0b3IuZ2V0VmFsdWUoKTtcblxuICAjaG9zdEhhc0N1c3RvbUVycm9yOiBTaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQ7XG4gICNub3RpZnlDaGFuZ2U6ICgoXzogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAjbm90aWZ5VG91Y2hlZDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICNjYWxjdWxhdG9ySWRDb250cm9sID0gbmV3IEZvcm1Db250cm9sPG51bWJlcj4oXG4gICAgdGhpcy4jZ2V0VmFsdWUoKS5jYWxjdWxhdG9ySWQsXG4gICAgeyBub25OdWxsYWJsZTogdHJ1ZSB9LFxuICApO1xuICAjY2FsY3VsYXRvcklkSW52YWxpZCA9IHRoaXMuI2NyZWF0ZVN0YXR1c0NoYW5nZVNpZ25hbChcbiAgICB0aGlzLiNjYWxjdWxhdG9ySWRDb250cm9sLFxuICApO1xuICAjY2FsY3VsYXRvcklkVG91Y2hlZCA9IHRoaXMuI2NyZWF0ZVRvdWNoZWRDaGFuZ2VTaWduYWwoXG4gICAgdGhpcy4jY2FsY3VsYXRvcklkQ29udHJvbCxcbiAgKTtcblxuICAjZW5kRGF0ZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8RGF0ZVZhbHVlPih0aGlzLiNnZXRWYWx1ZSgpLmVuZERhdGUpO1xuICAjZW5kRGF0ZUludmFsaWQgPSB0aGlzLiNjcmVhdGVTdGF0dXNDaGFuZ2VTaWduYWwodGhpcy4jZW5kRGF0ZUNvbnRyb2wpO1xuICAjZW5kRGF0ZVRvdWNoZWQgPSB0aGlzLiNjcmVhdGVUb3VjaGVkQ2hhbmdlU2lnbmFsKHRoaXMuI2VuZERhdGVDb250cm9sKTtcblxuICAjc3RhcnREYXRlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxEYXRlVmFsdWU+KHRoaXMuI2dldFZhbHVlKCkuc3RhcnREYXRlKTtcbiAgI3N0YXJ0RGF0ZUludmFsaWQgPSB0aGlzLiNjcmVhdGVTdGF0dXNDaGFuZ2VTaWduYWwodGhpcy4jc3RhcnREYXRlQ29udHJvbCk7XG4gICNzdGFydERhdGVUb3VjaGVkID0gdGhpcy4jY3JlYXRlVG91Y2hlZENoYW5nZVNpZ25hbCh0aGlzLiNzdGFydERhdGVDb250cm9sKTtcblxuICBwcm90ZWN0ZWQgZm9ybUdyb3VwID0gaW5qZWN0KEZvcm1CdWlsZGVyKS5ncm91cCh7XG4gICAgY2FsY3VsYXRvcklkOiB0aGlzLiNjYWxjdWxhdG9ySWRDb250cm9sLFxuICAgIHN0YXJ0RGF0ZTogdGhpcy4jc3RhcnREYXRlQ29udHJvbCxcbiAgICBlbmREYXRlOiB0aGlzLiNlbmREYXRlQ29udHJvbCxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbGN1bGF0b3JJZEhhc0Vycm9ycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0b3VjaGVkID0gdGhpcy4jY2FsY3VsYXRvcklkVG91Y2hlZCgpO1xuICAgIGNvbnN0IGludmFsaWQgPSB0aGlzLiNjYWxjdWxhdG9ySWRJbnZhbGlkKCkgfHwgdGhpcy4jaG9zdEhhc0N1c3RvbUVycm9yPy4oKTtcbiAgICByZXR1cm4gdG91Y2hlZCAmJiBpbnZhbGlkO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW5kRGF0ZUhhc0Vycm9ycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjYWxjdWxhdG9ySWRIYXNFcnJvcnMgPSB0aGlzLmNhbGN1bGF0b3JJZEhhc0Vycm9ycygpO1xuICAgIGNvbnN0IHRvdWNoZWQgPSB0aGlzLiNlbmREYXRlVG91Y2hlZCgpO1xuICAgIGNvbnN0IGludmFsaWQgPSB0aGlzLiNlbmREYXRlSW52YWxpZCgpO1xuXG4gICAgcmV0dXJuIGNhbGN1bGF0b3JJZEhhc0Vycm9ycyB8fCAodG91Y2hlZCAmJiBpbnZhbGlkKTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0YXJ0RGF0ZUhhc0Vycm9ycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjYWxjdWxhdG9ySWRIYXNFcnJvcnMgPSB0aGlzLmNhbGN1bGF0b3JJZEhhc0Vycm9ycygpO1xuICAgIGNvbnN0IHRvdWNoZWQgPSB0aGlzLiNzdGFydERhdGVUb3VjaGVkKCk7XG4gICAgY29uc3QgaW52YWxpZCA9IHRoaXMuI3N0YXJ0RGF0ZUludmFsaWQoKTtcblxuICAgIHJldHVybiBjYWxjdWxhdG9ySWRIYXNFcnJvcnMgfHwgKHRvdWNoZWQgJiYgaW52YWxpZCk7XG4gIH0pO1xuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ob3N0Q29udHJvbCA9IHRoaXMuI2luamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwsIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgc2VsZjogdHJ1ZSxcbiAgICB9KT8uY29udHJvbDtcblxuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLiNpbmplY3RvciwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaG9zdENvbnRyb2wpIHtcbiAgICAgICAgdGhpcy4jaG9zdEhhc0N1c3RvbUVycm9yID0gdGhpcy4jY3JlYXRlSG9zdEN1c3RvbUVycm9yQ2hhbmdlU2lnbmFsKFxuICAgICAgICAgIHRoaXMuaG9zdENvbnRyb2wsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTZXQgYSBkZWZhdWx0IHZhbHVlIG9uIHRoZSBjb250cm9sIGlmIGl0J3MgdW5kZWZpbmVkIG9uIGluaXQuXG4gICAgLy8gV2UgbmVlZCB0byB1c2Ugc2V0VGltZW91dCB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIHRoZSBmaXJzdFxuICAgIC8vIHZhbGlkYXRpb24gY3ljbGUuXG4gICAgaWYgKGlzUGFydGlhbFZhbHVlKHRoaXMuaG9zdENvbnRyb2w/LnZhbHVlKSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaG9zdENvbnRyb2w/LnNldFZhbHVlKHRoaXMuI2dldFZhbHVlKCksIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBkYXRlcGlja2Vycycgc3RhdHVzZXMgY2hhbmdlLCB3ZSB3YW50IHRvIHJldHJpZ2dlciB0aGUgaG9zdFxuICAgIC8vIGNvbnRyb2wncyB2YWxpZGF0aW9uIHNvIHRoYXQgdGhlaXIgZXJyb3JzIGFyZSByZWZsZWN0ZWQgYmFjayB0byB0aGUgaG9zdC5cbiAgICB0aGlzLmZvcm1Hcm91cC5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2dCkgPT4gZXZ0IGluc3RhbmNlb2YgU3RhdHVzQ2hhbmdlRXZlbnQpLFxuICAgICAgICBtYXAoKGV2dDogU3RhdHVzQ2hhbmdlRXZlbnQpID0+IGV2dC5zdGF0dXMpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5ob3N0Q29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIC8vIE1hcmsgYWxsIGZpZWxkcyBhcyB0b3VjaGVkIGlmIHRoZSBob3N0IGNvbnRyb2wgaXMgdG91Y2hlZC5cbiAgICB0aGlzLmhvc3RDb250cm9sPy5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2dCkgPT4gZXZ0IGluc3RhbmNlb2YgVG91Y2hlZENoYW5nZUV2ZW50KSxcbiAgICAgICAgbWFwKChldnQ6IFRvdWNoZWRDaGFuZ2VFdmVudCkgPT4gZXZ0LnRvdWNoZWQpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IHVua25vd24pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNub3RpZnlDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI25vdGlmeVRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgVmFsaWRhdG9yLlxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGxldCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0IGNhbGN1bGF0b3JFcnJvcnMgPSB0aGlzLnNlbGVjdGVkQ2FsY3VsYXRvci52YWxpZGF0ZShjb250cm9sLnZhbHVlKTtcbiAgICBjb25zdCBzdGFydERhdGVFcnJvcnMgPSB0aGlzLiNzdGFydERhdGVDb250cm9sLmVycm9ycztcbiAgICBjb25zdCBlbmREYXRlRXJyb3JzID0gdGhpcy4jZW5kRGF0ZUNvbnRyb2wuZXJyb3JzO1xuXG4gICAgaWYgKGNhbGN1bGF0b3JFcnJvcnMpIHtcbiAgICAgIGVycm9ycyA9IHtcbiAgICAgICAgc2t5RGF0ZVJhbmdlOiB7XG4gICAgICAgICAgY2FsY3VsYXRvcklkOiB0aGlzLiNnZXRWYWx1ZSgpLmNhbGN1bGF0b3JJZCxcbiAgICAgICAgICBlcnJvcnM6IGNhbGN1bGF0b3JFcnJvcnMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNldCBjYWxjdWxhdG9yIGVycm9ycyBvbiB0aGUgc2VsZWN0IHNvIHRoYXQgdGhleSBhcHBlYXIgYmVuZWF0aCBpdC5cbiAgICB0aGlzLiNjYWxjdWxhdG9ySWRDb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuXG4gICAgaWYgKHRoaXMuc2hvd1N0YXJ0RGF0ZVBpY2tlcigpICYmIHN0YXJ0RGF0ZUVycm9ycykge1xuICAgICAgZXJyb3JzIHx8PSB7fTtcbiAgICAgIGVycm9ycyA9IHsgLi4uZXJyb3JzLCAuLi5zdGFydERhdGVFcnJvcnMgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93RW5kRGF0ZVBpY2tlcigpICYmIGVuZERhdGVFcnJvcnMpIHtcbiAgICAgIGVycm9ycyB8fD0ge307XG4gICAgICBlcnJvcnMgPSB7IC4uLmVycm9ycywgLi4uZW5kRGF0ZUVycm9ycyB9O1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAvLyBUaGUgZGF0ZSByYW5nZSBwaWNrZXIgYWx3YXlzIGhhcyBhIHZhbHVlLCBzbyBpZiB0aGUgY29uc3VtZXIgcGFzc2VzIGluIGFcbiAgLy8gcGFydGlhbCB2YWx1ZSAodmlhIGBwYXRjaFZhbHVlYCkgb3IgbnVsbCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGhvc3QgY29udHJvbCdzXG4gIC8vIHZhbHVlIHdpdGggdGhlIGNvbXBsZXRlIHZhbHVlIGFmdGVyIGl0J3MgYmVlbiBtb2RpZmllZC5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IFBhcnRpYWw8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy4jcGF0Y2hWYWx1ZSh2YWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGhvc3QgY29udHJvbCBpZiBpdCBpcyBzZXQgdG8gYSBwYXJ0aWFsIG9yIG51bGwgdmFsdWUuXG4gICAgaWYgKGlzUGFydGlhbFZhbHVlKHZhbHVlKSkge1xuICAgICAgdGhpcy5ob3N0Q29udHJvbD8uc2V0VmFsdWUodGhpcy4jZ2V0VmFsdWUoKSwge1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIGEgdXNlciBjaGFuZ2VzIHRoZSBzZWxlY3RlZCBjYWxjdWxhdG9yIElELlxuICAgKi9cbiAgcHJvdGVjdGVkIG9uQ2FsY3VsYXRvcklkQ2hhbmdlKCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSB3aGVuIHRoZSBjYWxjdWxhdG9yIElEIGNoYW5nZXMuXG4gICAgdGhpcy4jc2V0VmFsdWUoeyBjYWxjdWxhdG9ySWQ6ICt0aGlzLiNjYWxjdWxhdG9ySWRDb250cm9sLnZhbHVlIH0pO1xuICAgIHRoaXMub25EYXRlQ2hhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiBhIHVzZXIgaW50ZXJhY3RzIHdpdGggYSBkYXRlIHJhbmdlIHBpY2tlci5cbiAgICovXG4gIHByb3RlY3RlZCBvbkRhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgLy8gV2FpdCB1bnRpbCB0aGUgZm9ybSBjb250cm9sIGlzIHVwZGF0ZWQgYmVmb3JlIHJldHJpZXZpbmcgaXRzIHZhbHVlLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy4jbm90aWZ5Q2hhbmdlPy4oXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkgYXMgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24sXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGRhdGUgcmFuZ2UgcGlja2VyIGxvc2VzIGZvY3VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIG9uRm9jdXNvdXQoeyByZWxhdGVkVGFyZ2V0IH06IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICByZWxhdGVkVGFyZ2V0ICYmXG4gICAgICAhdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpICYmXG4gICAgICAhdGhpcy5kYXRlcGlja2VycygpLnNvbWUoKHBpY2tlcikgPT4gcGlja2VyLmNvbnRhaW5zVGFyZ2V0KHJlbGF0ZWRUYXJnZXQpKVxuICAgICkge1xuICAgICAgdGhpcy4jbm90aWZ5VG91Y2hlZD8uKCk7XG4gICAgfVxuICB9XG5cbiAgI2dldENhbGN1bGF0b3IoY2FsY3VsYXRvcklkOiBudW1iZXIpOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yIHtcbiAgICBjb25zdCBmb3VuZCA9IHRoaXMuY2FsY3VsYXRvcnMuZmluZCgoYykgPT4gYy5jYWxjdWxhdG9ySWQgPT09IGNhbGN1bGF0b3JJZCk7XG5cbiAgICAvKmlzdGFuYnVsIGlnbm9yZSBpZjogc2FmZXR5IGNoZWNrKi9cbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBIGRhdGUgcmFuZ2UgY2FsY3VsYXRvciB3aXRoIElEICgke2NhbGN1bGF0b3JJZH0pIGNvdWxkIG5vdCBiZSBmb3VuZC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuICAjZ2V0VmFsdWUoKTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24ge1xuICAgIC8vIEltcG9ydGFudCEgUmV0dXJuIGEgY2xvbmUgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIHByb3BlcnRpZXMgYnkgcmVmZXJlbmNlLlxuICAgIHJldHVybiB7IC4uLnRoaXMuI192YWx1ZSB9O1xuICB9XG5cbiAgI3BhdGNoVmFsdWUoXG4gICAgcGFydGlhbFZhbHVlOiBQYXJ0aWFsPFNreURhdGVSYW5nZUNhbGN1bGF0aW9uPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gICk6IHZvaWQge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChwYXJ0aWFsVmFsdWUpKSB7XG4gICAgICB0aGlzLiNzZXRWYWx1ZShudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuI2dldFZhbHVlKCk7XG5cbiAgICAvLyBJZiB0aGUgbmV3IElEIGlzIGRpc3RpbmN0LCBlcmFzZSB0aGUgb2xkIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgYmVjYXVzZVxuICAgIC8vIHRoZXkncmUgbm8gbG9uZ2VyIGFwcGxpY2FibGUuXG4gICAgaWYgKFxuICAgICAgIWlzTnVsbE9yVW5kZWZpbmVkKHBhcnRpYWxWYWx1ZS5jYWxjdWxhdG9ySWQpICYmXG4gICAgICBvbGRWYWx1ZS5jYWxjdWxhdG9ySWQgIT09IHBhcnRpYWxWYWx1ZS5jYWxjdWxhdG9ySWRcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBvbGRWYWx1ZS5lbmREYXRlO1xuICAgICAgZGVsZXRlIG9sZFZhbHVlLnN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHtcbiAgICAgIC4uLm9sZFZhbHVlLFxuICAgICAgLi4ucGFydGlhbFZhbHVlLFxuICAgIH07XG5cbiAgICB0aGlzLiNzZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgdG8gYmUgdXNlZCBieSB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgZm9ybSBjb250cm9sLlxuICAgKi9cbiAgI3NldFZhbHVlKHZhbHVlOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbiB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuI2dldFZhbHVlKCk7XG5cbiAgICBjb25zdCBpc1ZhbHVlRW1wdHkgPSAhdmFsdWUgfHwgaXNOdWxsT3JVbmRlZmluZWQodmFsdWUuY2FsY3VsYXRvcklkKTtcbiAgICBjb25zdCB2YWx1ZU9yRGVmYXVsdCA9IGlzVmFsdWVFbXB0eVxuICAgICAgPyB0aGlzLmNhbGN1bGF0b3JzWzBdLmdldFZhbHVlKClcbiAgICAgIDoge1xuICAgICAgICAgIC4uLnRoaXMuI2dldENhbGN1bGF0b3IodmFsdWUuY2FsY3VsYXRvcklkKS5nZXRWYWx1ZSgpLFxuICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgLy8gRW5zdXJlIGZhbHN5IHZhbHVlcyBhcmUgc2V0IHRvIG51bGwuXG4gICAgdmFsdWVPckRlZmF1bHQuZW5kRGF0ZSA9IHZhbHVlT3JEZWZhdWx0LmVuZERhdGUgfHwgbnVsbDtcbiAgICB2YWx1ZU9yRGVmYXVsdC5zdGFydERhdGUgPSB2YWx1ZU9yRGVmYXVsdC5zdGFydERhdGUgfHwgbnVsbDtcblxuICAgIGlmICghYXJlRGF0ZVJhbmdlc0VxdWFsKG9sZFZhbHVlLCB2YWx1ZU9yRGVmYXVsdCkpIHtcbiAgICAgIHRoaXMuI192YWx1ZSA9IHZhbHVlT3JEZWZhdWx0O1xuXG4gICAgICBpZiAob2xkVmFsdWUuY2FsY3VsYXRvcklkICE9PSB2YWx1ZU9yRGVmYXVsdC5jYWxjdWxhdG9ySWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhbGN1bGF0b3IgPSB0aGlzLiNnZXRDYWxjdWxhdG9yKFxuICAgICAgICAgIHZhbHVlT3JEZWZhdWx0LmNhbGN1bGF0b3JJZCxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLiN1cGRhdGVQaWNrZXJWaXNpYmlsaXR5KHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZU9yRGVmYXVsdCk7XG4gICAgfVxuICB9XG5cbiAgI3VwZGF0ZVBpY2tlclZpc2liaWxpdHkoY2FsY3VsYXRvcjogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcik6IHZvaWQge1xuICAgIGxldCBzaG93RW5kRGF0ZVBpY2tlciA9IGZhbHNlO1xuICAgIGxldCBzaG93U3RhcnREYXRlUGlja2VyID0gZmFsc2U7XG5cbiAgICBzd2l0Y2ggKGNhbGN1bGF0b3IudHlwZSkge1xuICAgICAgY2FzZSBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5CZWZvcmU6XG4gICAgICAgIHNob3dFbmREYXRlUGlja2VyID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUuQWZ0ZXI6XG4gICAgICAgIHNob3dTdGFydERhdGVQaWNrZXIgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5SYW5nZTpcbiAgICAgICAgc2hvd0VuZERhdGVQaWNrZXIgPSB0cnVlO1xuICAgICAgICBzaG93U3RhcnREYXRlUGlja2VyID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0VuZERhdGVQaWNrZXIuc2V0KHNob3dFbmREYXRlUGlja2VyKTtcbiAgICB0aGlzLnNob3dTdGFydERhdGVQaWNrZXIuc2V0KHNob3dTdGFydERhdGVQaWNrZXIpO1xuICB9XG5cbiAgI2NyZWF0ZUhvc3RDdXN0b21FcnJvckNoYW5nZVNpZ25hbChcbiAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gICk6IFNpZ25hbDxib29sZWFuIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRvU2lnbmFsKFxuICAgICAgY29udHJvbC5ldmVudHMucGlwZShcbiAgICAgICAgZmlsdGVyKChldnQpID0+IGV2dCBpbnN0YW5jZW9mIFN0YXR1c0NoYW5nZUV2ZW50KSxcbiAgICAgICAgbWFwKChldnQ6IFN0YXR1c0NoYW5nZUV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3JzID0gZXZ0LnNvdXJjZS5lcnJvcnMgPz8gW107XG4gICAgICAgICAgY29uc3Qga25vd25FcnJvcnMgPSBbJ3JlcXVpcmVkJywgJ3NreURhdGUnXTtcblxuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLnNvbWUoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWtub3duRXJyb3JzLmluY2x1ZGVzKGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAjY3JlYXRlU3RhdHVzQ2hhbmdlU2lnbmFsKGNvbnRyb2w6IEZvcm1Db250cm9sKTogU2lnbmFsPGJvb2xlYW4gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdG9TaWduYWwoXG4gICAgICBjb250cm9sLmV2ZW50cy5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2dCkgPT4gZXZ0IGluc3RhbmNlb2YgU3RhdHVzQ2hhbmdlRXZlbnQpLFxuICAgICAgICBtYXAoKGV2dDogU3RhdHVzQ2hhbmdlRXZlbnQpID0+IGV2dC5zdGF0dXMgPT09ICdJTlZBTElEJyksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gICNjcmVhdGVUb3VjaGVkQ2hhbmdlU2lnbmFsKFxuICAgIGNvbnRyb2w6IEZvcm1Db250cm9sLFxuICApOiBTaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0b1NpZ25hbChcbiAgICAgIGNvbnRyb2wuZXZlbnRzLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZ0KSA9PiBldnQgaW5zdGFuY2VvZiBUb3VjaGVkQ2hhbmdlRXZlbnQpLFxuICAgICAgICBtYXAoKGV2dDogVG91Y2hlZENoYW5nZUV2ZW50KSA9PiBldnQudG91Y2hlZCksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNreS1kYXRlLXJhbmdlLXBpY2tlclwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1kYXRlLXJhbmdlLXBpY2tlci1mb3JtLWdyb3VwIHNreS1kYXRlLXJhbmdlLXBpY2tlci1zZWxlY3QtY2FsY3VsYXRvclwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS1kYXRlLXJhbmdlLXBpY2tlci1sYXN0LWlucHV0JzpcbiAgICAgICAgIXNob3dTdGFydERhdGVQaWNrZXIoKSAmJiAhc2hvd0VuZERhdGVQaWNrZXIoKVxuICAgIH1cIlxuICA+XG4gICAgPHNreS1pbnB1dC1ib3hcbiAgICAgIFtoYXNFcnJvcnNdPVwiY2FsY3VsYXRvcklkSGFzRXJyb3JzKClcIlxuICAgICAgW2hlbHBLZXldPVwiaGVscEtleVwiXG4gICAgICBbaGVscFBvcG92ZXJDb250ZW50XT1cImhlbHBQb3BvdmVyQ29udGVudFwiXG4gICAgICBbaGVscFBvcG92ZXJUaXRsZV09XCJoZWxwUG9wb3ZlclRpdGxlXCJcbiAgICAgIFtoaW50VGV4dF09XCJoaW50VGV4dFwiXG4gICAgICBbbGFiZWxUZXh0XT1cIlxuICAgICAgICBsYWJlbFRleHQgfHxcbiAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgKCdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9kZWZhdWx0X2xhYmVsJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPHNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjYWxjdWxhdG9ySWRcIiAoY2hhbmdlKT1cIm9uQ2FsY3VsYXRvcklkQ2hhbmdlKClcIj5cbiAgICAgICAgQGZvciAoY2FsY3VsYXRvciBvZiBjYWxjdWxhdG9yczsgdHJhY2sgY2FsY3VsYXRvci5jYWxjdWxhdG9ySWQpIHtcbiAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJjYWxjdWxhdG9yLmNhbGN1bGF0b3JJZFwiPlxuICAgICAgICAgICAge3sgY2FsY3VsYXRvci5zaG9ydERlc2NyaXB0aW9uJCB8IGFzeW5jIH19XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIH1cbiAgICAgIDwvc2VsZWN0PlxuICAgICAgQGlmIChcbiAgICAgICAgaG9zdENvbnRyb2w/LmVycm9ycz8uWydza3lEYXRlUmFuZ2UnXT8uZXJyb3JzPy5bXG4gICAgICAgICAgJ2VuZERhdGVCZWZvcmVTdGFydERhdGUnXG4gICAgICAgIF0gJiYgbGFiZWxUZXh0XG4gICAgICApIHtcbiAgICAgICAgPHNreS1mb3JtLWVycm9yXG4gICAgICAgICAgZXJyb3JOYW1lPVwiZW5kRGF0ZUJlZm9yZVN0YXJ0RGF0ZVwiXG4gICAgICAgICAgW2Vycm9yVGV4dF09XCJcbiAgICAgICAgICAgICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9lbmRfZGF0ZV9iZWZvcmVfc3RhcnRfZGF0ZV9lcnJvcl9sYWJlbF90ZXh0J1xuICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgIFwiXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgICA8c3BhbiBjbGFzcz1cInNreS1pbnB1dC1ib3gtZGVzY2VuZGVudC1mb3JtLWVycm9yXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1mb3JtLWVycm9yXCIgLz5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L3NreS1pbnB1dC1ib3g+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZGF0ZS1yYW5nZS1waWNrZXItZm9ybS1ncm91cCBza3ktZGF0ZS1yYW5nZS1kYXRlcGlja2VyLXdyYXBwZXIgc2t5LWRhdGUtcmFuZ2UtcGlja2VyLXN0YXJ0LWRhdGVcIlxuICAgIFtoaWRkZW5dPVwiIXNob3dTdGFydERhdGVQaWNrZXIoKVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS1kYXRlLXJhbmdlLXBpY2tlci1sYXN0LWlucHV0JzpcbiAgICAgICAgc2hvd1N0YXJ0RGF0ZVBpY2tlcigpICYmICFzaG93RW5kRGF0ZVBpY2tlcigpXG4gICAgfVwiXG4gID5cbiAgICA8c2t5LWlucHV0LWJveFxuICAgICAgW2hhc0Vycm9yc109XCJzdGFydERhdGVIYXNFcnJvcnMoKVwiXG4gICAgICBbbGFiZWxUZXh0XT1cIlxuICAgICAgICBzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyU3RhcnREYXRlUmVzb3VyY2VLZXlcbiAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgXCJcbiAgICA+XG4gICAgICA8c2t5LWRhdGVwaWNrZXIgKGNhbGVuZGFyRGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoKVwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdGFydERhdGVcIlxuICAgICAgICAgIG5hbWU9XCJzdGFydERhdGVcIlxuICAgICAgICAgIHNreURhdGVwaWNrZXJJbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgbGFiZWxUZXh0IHx8IGxhYmVsXG4gICAgICAgICAgICAgID8gKCdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9kZWZhdWx0X2FyaWFfbGFiZWwnXG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgICAgICAgIDogKHNlbGVjdGVkQ2FsY3VsYXRvci50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgfCBza3lEYXRlUmFuZ2VQaWNrZXJTdGFydERhdGVSZXNvdXJjZUtleVxuICAgICAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICAgICAgOiAobGFiZWxUZXh0ID8gbGFiZWxUZXh0IDogbGFiZWwpKVxuICAgICAgICAgICAgICA6IChzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyU3RhcnREYXRlUmVzb3VyY2VLZXlcbiAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtkYXRlRm9ybWF0XT1cImRhdGVGb3JtYXRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJzaG93U3RhcnREYXRlUGlja2VyKClcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25EYXRlQ2hhbmdlKClcIlxuICAgICAgICAvPlxuICAgICAgPC9za3ktZGF0ZXBpY2tlcj5cbiAgICA8L3NreS1pbnB1dC1ib3g+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZGF0ZS1yYW5nZS1waWNrZXItZm9ybS1ncm91cCBza3ktZGF0ZS1yYW5nZS1kYXRlcGlja2VyLXdyYXBwZXIgc2t5LWRhdGUtcmFuZ2UtcGlja2VyLWVuZC1kYXRlXCJcbiAgICBbaGlkZGVuXT1cIiFzaG93RW5kRGF0ZVBpY2tlcigpXCJcbiAgICBbbmdDbGFzc109XCJ7ICdza3ktZGF0ZS1yYW5nZS1waWNrZXItbGFzdC1pbnB1dCc6IHNob3dFbmREYXRlUGlja2VyKCkgfVwiXG4gID5cbiAgICA8c2t5LWlucHV0LWJveFxuICAgICAgW2hhc0Vycm9yc109XCJlbmREYXRlSGFzRXJyb3JzKClcIlxuICAgICAgW2xhYmVsVGV4dF09XCJcbiAgICAgICAgc2VsZWN0ZWRDYWxjdWxhdG9yLnR5cGVcbiAgICAgICAgICB8IHNreURhdGVSYW5nZVBpY2tlckVuZERhdGVSZXNvdXJjZUtleVxuICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxza3ktZGF0ZXBpY2tlciAoY2FsZW5kYXJEYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZSgpXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuZERhdGVcIlxuICAgICAgICAgIG5hbWU9XCJlbmREYXRlXCJcbiAgICAgICAgICBza3lEYXRlcGlja2VySW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgIGxhYmVsVGV4dCB8fCBsYWJlbFxuICAgICAgICAgICAgICA/ICgnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZGVmYXVsdF9hcmlhX2xhYmVsJ1xuICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgICAgICA6IChzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgICAgICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyRW5kRGF0ZVJlc291cmNlS2V5XG4gICAgICAgICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgICAgICAgICA6IChsYWJlbFRleHQgPyBsYWJlbFRleHQgOiBsYWJlbCkpXG4gICAgICAgICAgICAgIDogKHNlbGVjdGVkQ2FsY3VsYXRvci50eXBlXG4gICAgICAgICAgICAgICAgfCBza3lEYXRlUmFuZ2VQaWNrZXJFbmREYXRlUmVzb3VyY2VLZXlcbiAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtkYXRlRm9ybWF0XT1cImRhdGVGb3JtYXRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJzaG93RW5kRGF0ZVBpY2tlcigpXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uRGF0ZUNoYW5nZSgpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc2t5LWRhdGVwaWNrZXI+XG4gICAgPC9za3ktaW5wdXQtYm94PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { NgModule } from '@angular/core';\nimport { SkyFormErrorModule } from '@skyux/forms';\nimport { SkyDateRangePickerComponent } from './date-range-picker.component';\nimport * as i0 from \"@angular/core\";\nexport class SkyDateRangePickerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerModule, imports: [SkyDateRangePickerComponent], exports: [SkyDateRangePickerComponent, SkyFormErrorModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerModule, imports: [SkyDateRangePickerComponent, SkyFormErrorModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyDateRangePickerModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [SkyDateRangePickerComponent, SkyFormErrorModule],\n imports: [SkyDateRangePickerComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBTTVFLE1BQU0sT0FBTyx3QkFBd0I7K0dBQXhCLHdCQUF3QjtnSEFBeEIsd0JBQXdCLFlBRnpCLDJCQUEyQixhQUQzQiwyQkFBMkIsRUFBRSxrQkFBa0I7Z0hBRzlDLHdCQUF3QixZQUZ6QiwyQkFBMkIsRUFERSxrQkFBa0I7OzRGQUc5Qyx3QkFBd0I7a0JBSnBDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsa0JBQWtCLENBQUM7b0JBQzFELE9BQU8sRUFBRSxDQUFDLDJCQUEyQixDQUFDO2lCQUN2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lGb3JtRXJyb3JNb2R1bGUgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuXG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGV4cG9ydHM6IFtTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQsIFNreUZvcm1FcnJvck1vZHVsZV0sXG4gIGltcG9ydHM6IFtTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRlUmFuZ2VQaWNrZXJNb2R1bGUge31cbiJdfQ==","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, EnvironmentInjector, EventEmitter, Inject, Optional, Output, TemplateRef, ViewChild, ViewEncapsulation, inject, } from '@angular/core';\nimport { SKY_STACKING_CONTEXT, SkyAffixAutoFitContext, } from '@skyux/core';\nimport { SkyLibResourcesPipe } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\nimport moment from 'moment';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@skyux/core\";\nimport * as i2 from \"@skyux/forms\";\nimport * as i3 from \"@skyux/theme\";\nimport * as i4 from \"@skyux/icon\";\nlet nextId = 0;\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 */\nexport class SkyTimepickerComponent {\n set disabled(value) {\n this.#_disabled = value;\n this.#changeDetector.markForCheck();\n }\n get disabled() {\n return this.#_disabled;\n }\n set selectedHour(setHour) {\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 this.activeTime = moment({\n hour: hour,\n minute: moment(this.activeTime).get('minute') + 0,\n }).toDate();\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n get selectedHour() {\n if (!this.is8601) {\n /* istanbul ignore next */\n return parseInt(moment(this.activeTime).format('h'), 0) || 1;\n }\n else {\n return moment(this.activeTime).hour() + 0;\n }\n }\n set selectedMeridies(meridies) {\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 case 'PM':\n this.activeTime = moment(this.activeTime).add(12, 'hours').toDate();\n break;\n }\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n }\n get selectedMeridies() {\n if (this.activeTime) {\n return moment(this.activeTime).format('A');\n }\n return '';\n }\n set selectedMinute(minute) {\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 get selectedMinute() {\n return moment(this.activeTime).minute() + 0;\n }\n set selectedTime(newTime) {\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 get selectedTime() {\n const time = {\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: typeof this.returnFormat !== 'undefined'\n ? this.returnFormat\n : this.localeFormat,\n };\n return time;\n }\n set timepickerRef(value) {\n if (value) {\n this.#_timepickerRef = value;\n this.#addKeyupListener();\n // Wait for the timepicker component to render before gauging dimensions.\n setTimeout(() => {\n this.#destroyAffixer();\n this.#createAffixer();\n setTimeout(() => {\n if (this.timepickerRef) {\n this.#coreAdapter.getFocusableChildrenAndApplyFocus(this.timepickerRef, '.sky-timepicker-content', false);\n }\n this.isVisible = true;\n this.#changeDetector.markForCheck();\n });\n });\n }\n }\n get timepickerRef() {\n return this.#_timepickerRef;\n }\n #affixer;\n #timepickerUnsubscribe;\n #ngUnsubscribe;\n #overlay;\n #overlayKeyupListener;\n #_disabled;\n #_timepickerRef;\n #affixService;\n #changeDetector;\n #coreAdapter;\n #environmentInjector;\n #overlayService;\n #zIndex;\n constructor(affixService, changeDetector, coreAdapter, overlayService, inputBoxHostService, themeSvc, stackingContext) {\n this.inputBoxHostService = inputBoxHostService;\n /**\n * Fires when the value in the timepicker input changes.\n */\n this.selectedTimeChanged = new EventEmitter();\n this.activeTime = new Date();\n this.hours = [];\n this.is8601 = false;\n this.isOpen = false;\n this.isVisible = false;\n this.localeFormat = 'h:mm A';\n this.minutes = [];\n this.timeFormat = 'hh';\n this.#timepickerUnsubscribe = new Subject();\n this.#ngUnsubscribe = new Subject();\n this.#_disabled = false;\n this.#environmentInjector = inject(EnvironmentInjector);\n this.#affixService = affixService;\n this.#changeDetector = changeDetector;\n this.#coreAdapter = coreAdapter;\n this.#overlayService = overlayService;\n this.#zIndex = stackingContext?.zIndex;\n const uniqueId = nextId++;\n this.timepickerId = `sky-timepicker-${uniqueId}`;\n this.triggerButtonId = `sky-timepicker-button-${uniqueId}`;\n // Update icons when theme changes.\n themeSvc?.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n ngOnInit() {\n this.setFormat(this.timeFormat);\n this.#addKeyupListener();\n if (this.inputBoxHostService && this.inputTemplateRef) {\n this.inputBoxHostService.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.triggerButtonTemplateRef,\n });\n }\n }\n ngOnDestroy() {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#removePickerEventListeners();\n this.#destroyAffixer();\n this.#destroyOverlay();\n }\n setFormat(format) {\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 const data = {\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 this.hours = data.hours;\n this.minutes = data.minutes;\n this.localeFormat = data.localeFormat;\n this.minuteMultiplier = data.minuteMultiplier;\n }\n onCloseButtonClick() {\n this.#closePicker();\n }\n setTime(event) {\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 onTriggerButtonClick() {\n this.#openPicker();\n }\n highlightMinute(selectedMinute, minute) {\n const radix = this.is8601 ? 15 : 5;\n return Math.floor(selectedMinute / radix) === minute / radix;\n }\n #closePicker() {\n this.#destroyAffixer();\n this.#destroyOverlay();\n this.#removePickerEventListeners();\n this.triggerButtonRef?.nativeElement.focus();\n this.isOpen = false;\n }\n #openPicker() {\n this.isVisible = false;\n this.#changeDetector.markForCheck();\n this.#removePickerEventListeners();\n this.#destroyOverlay();\n this.#createOverlay();\n this.isOpen = true;\n this.#changeDetector.markForCheck();\n }\n #createAffixer() {\n if (this.timepickerRef && this.triggerButtonRef) {\n const affixer = this.#affixService.createAffixer(this.timepickerRef);\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 affixer.affixTo(this.triggerButtonRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n horizontalAlignment: 'right',\n isSticky: true,\n placement: 'below',\n });\n this.#affixer = affixer;\n }\n }\n #destroyAffixer() {\n /*istanbul ignore else*/\n if (this.#affixer) {\n this.#affixer.destroy();\n this.#affixer = undefined;\n }\n }\n #createOverlay() {\n if (this.timepickerTemplateRef) {\n const overlay = this.#overlayService.create({\n enableClose: false,\n enablePointerEvents: false,\n environmentInjector: this.#environmentInjector,\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 overlay.backdropClick\n .pipe(takeUntil(this.#timepickerUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.#closePicker();\n }\n });\n overlay.attachTemplate(this.timepickerTemplateRef);\n this.#overlay = overlay;\n }\n }\n #destroyOverlay() {\n /*istanbul ignore else*/\n if (this.#overlay) {\n this.#overlayService.close(this.#overlay);\n this.#overlay = undefined;\n }\n }\n #addKeyupListener() {\n const timepickerMenuElement = this.timepickerRef?.nativeElement;\n if (timepickerMenuElement) {\n this.#overlayKeyupListener = fromEvent(timepickerMenuElement, 'keyup')\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 #removePickerEventListeners() {\n /* istanbul ignore else */\n if (this.#timepickerUnsubscribe) {\n this.#timepickerUnsubscribe.next();\n this.#timepickerUnsubscribe.complete();\n this.#timepickerUnsubscribe = new Subject();\n }\n /* istanbul ignore next */\n this.#overlayKeyupListener?.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTimepickerComponent, deps: [{ token: i1.SkyAffixService }, { token: i0.ChangeDetectorRef }, { token: i1.SkyCoreAdapterService }, { token: i1.SkyOverlayService }, { token: i2.SkyInputBoxHostService, optional: true }, { token: i3.SkyThemeService, optional: true }, { token: SKY_STACKING_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", type: SkyTimepickerComponent, isStandalone: true, selector: \"sky-timepicker\", outputs: { selectedTimeChanged: \"selectedTimeChanged\" }, viewQueries: [{ propertyName: \"timepickerRef\", first: true, predicate: [\"timepickerRef\"], descendants: true, read: ElementRef }, { propertyName: \"timepickerTemplateRef\", first: true, predicate: [\"timepickerTemplateRef\"], descendants: true, read: TemplateRef }, { propertyName: \"triggerButtonRef\", first: true, predicate: [\"triggerButtonRef\"], descendants: true, read: ElementRef }, { propertyName: \"inputTemplateRef\", first: true, predicate: [\"inputTemplateRef\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"triggerButtonTemplateRef\", first: true, predicate: [\"triggerButtonTemplateRef\"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: \"<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 [class.sky-timepicker-24hour-hours]=\\\"is8601\\\"\\n >\\n <ol>\\n @for (hour of hours; track hour) {\\n <li>\\n <button\\n name=\\\"hour\\\"\\n type=\\\"button\\\"\\n [class.sky-btn-active]=\\\"selectedHour === hour\\\"\\n (click)=\\\"setTime($event)\\\"\\n >\\n {{ hour }}\\n </button>\\n </li>\\n }\\n </ol>\\n </section>\\n <section\\n class=\\\"sky-timepicker-column sky-timepicker-column-minutes\\\"\\n [class.sky-timepicker-24hour-minutes]=\\\"is8601\\\"\\n >\\n <ol>\\n @for (minute of minutes; track minute) {\\n <li>\\n <button\\n name=\\\"minute\\\"\\n type=\\\"button\\\"\\n [class.sky-btn-active]=\\\"highlightMinute(selectedMinute, minute)\\\"\\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 [class.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 [class.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\", styles: [\".sky-timepicker-container:not(.sky-theme-modern *){--sky-override-timepicker-background-color: #eeeeef;--sky-override-timepicker-border-radius: 5px;--sky-override-timepicker-button-active-background-color: #e2e3e4;--sky-override-timepicker-button-background-color: #ffffff;--sky-override-timepicker-button-border-radius: 3px;--sky-override-timepicker-button-focus-box-shadow: none;--sky-override-timepicker-button-focus-outline-offset: -2px;--sky-override-timepicker-button-focus-outline: -webkit-focus-ring-color auto 5px;--sky-override-timepicker-button-height: 100%;--sky-override-timepicker-button-hover-active-focus-border-radius: 0;--sky-override-timepicker-button-hover-active-box-shadow: none;--sky-override-timepicker-button-hover-background-color: #eeeeef;--sky-override-timepicker-button-padding-horizontal: 15px;--sky-override-timepicker-button-padding-vertical: 5px;--sky-override-timepicker-button-selected-background-color: #c1e8fb;--sky-override-timepicker-button-selected-box-shadow: inset 0 0 0 2px #00b4f1;--sky-override-timepicker-button-width: 100%;--sky-override-timepicker-column-border: 1px solid #e2e3e4;--sky-override-timepicker-column-gap: 10px;--sky-override-timepicker-column-meride-divider: 1px solid #e2e3e4;--sky-override-timepicker-content-space: 10px 10px 0 10px;--sky-override-timepicker-font-size: 15px;--sky-override-timepicker-footer-padding-horizontal: 10px;--sky-override-timepicker-footer-padding-vertical: 10px;--sky-override-timepicker-text-color: #000}.sky-timepicker-container{position:fixed;font-size:var(--sky-override-timepicker-font-size);background-color:var(--sky-override-timepicker-background-color, var(--sky-color-background-container-menu));border-radius:var(--sky-override-timepicker-border-radius, var(--sky-border-radius-s))}.sky-timepicker-container :last-child ol{display:flex;flex-direction:column;height:100%}.sky-timepicker-container :last-child ol li{border-bottom:var(--sky-override-timepicker-column-meride-divider);flex:1}.sky-timepicker-column ol{border:var(--sky-override-timepicker-column-border, var(--sky-border-width-container-base) solid var(--sky-color-border-container-base));column-gap:1px;columns:2;list-style-type:none;margin:0;padding:0}.sky-timepicker-column ol li{text-align:center;cursor:pointer;margin:0}.sky-timepicker-column ol li button{background-color:var(--sky-override-timepicker-button-background-color, var(--sky-color-background-action-tertiary-base));border-width:0;border-color:var(--sky-color-border-action-tertiary-base);color:var(--sky-override-timepicker-text-color, var(--sky-color-text-default));cursor:pointer;padding:var(--sky-override-timepicker-button-padding-vertical, auto) var(--sky-override-timepicker-button-padding-horizontal, auto);width:var(--sky-override-timepicker-button-width, var(--sky-size-picker_btn));height:var(--sky-override-timepicker-button-height, var(--sky-size-picker_btn))}.sky-timepicker-column ol li button:focus-visible:not(:active){outline:var(--sky-override-timepicker-button-focus-outline);outline-offset:var(--sky-override-timepicker-button-focus-outline-offset);border-radius:var(--sky-override-timepicker-button-hover-active-focus-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-timepicker-button-focus-box-shadow, inset 0 0 0 var(--sky-border-width-action-focus) var(--sky-color-border-action-tertiary-focus))}.sky-timepicker-column ol li button:hover:not(.sky-btn-active):not(:active){border-radius:var(--sky-override-timepicker-button-hover-active-focus-border-radius, var(--sky-border-radius-s));background-color:var(--sky-override-timepicker-button-hover-background-color, var(--sky-color-background-action-tertiary-hover));box-shadow:var(--sky-override-timepicker-button-hover-active-box-shadow, inset 0 0 0 var(--sky-border-width-action-hover) var(--sky-color-border-action-tertiary-hover))}.sky-timepicker-column ol li button:active{background-color:var(--sky-override-timepicker-button-active-background-color, var(--sky-color-background-action-tertiary-active));border-radius:var(--sky-override-timepicker-button-hover-active-focus-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-timepicker-button-hover-active-box-shadow, inset 0 0 0 var(--sky-border-width-action-active) var(--sky-color-border-action-tertiary-active))}.sky-timepicker-column ol li button.sky-btn-active{background-color:var(--sky-override-timepicker-button-selected-background-color, var(--sky-color-background-selected-soft));box-shadow:var(--sky-override-timepicker-button-selected-box-shadow, inset 0 0 0 var(--sky-border-width-selected-s) var(--sky-color-border-selected));border-radius:var(--sky-override-timepicker-button-border-radius, var(--sky-border-radius-s))}.sky-timepicker-column.sky-timepicker-column-meridies ol li button,.sky-timepicker-column.sky-timepicker-24hour-minutes ol li button{height:100%}.sky-timepicker-column.sky-timepicker-24hour-hours ol{columns:4}.sky-timepicker-column.sky-timepicker-24hour-hours ol li{border-bottom-width:0}.sky-timepicker-content{display:flex;padding:var(--sky-override-timepicker-content-space, var(--sky-comp-timepicker-content-space-inset-top) var(--sky-comp-timepicker-content-space-inset-right) var(--sky-comp-timepicker-content-space-inset-bottom) var(--sky-comp-timepicker-content-space-inset-left));gap:var(--sky-override-timepicker-column-gap, var(--sky-space-gap-action_group-m))}.sky-timepicker-footer{margin:0;padding:var(--sky-override-timepicker-footer-padding-vertical, var(--sky-comp-timepicker-footer-space-inset-top)) var(--sky-override-timepicker-footer-padding-horizontal, var(--sky-comp-timepicker-footer-space-inset-right)) var(--sky-override-timepicker-footer-padding-vertical, var(--sky-comp-timepicker-footer-space-inset-bottom)) var(--sky-override-timepicker-footer-padding-horizontal, var(--sky-comp-timepicker-footer-space-inset-left))}.sky-timepicker-footer .sky-timepicker-column{width:100%}.sky-timepicker-hidden{visibility:hidden}.sky-timepicker-clock-icon-modern,.sky-theme-modern .sky-timepicker-clock-icon-default{display:none}.sky-theme-modern .sky-timepicker-clock-icon-modern{display:inline}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: SkyIconModule }, { kind: \"component\", type: i4.λ1, selector: \"sky-icon\", inputs: [\"iconName\", \"variant\", \"iconSize\"] }, { kind: \"ngmodule\", type: SkyThemeModule }, { kind: \"ngmodule\", type: SkyDatetimeResourcesModule }, { kind: \"pipe\", type: SkyLibResourcesPipe, name: \"skyLibResources\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTimepickerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-timepicker', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n NgTemplateOutlet,\n SkyLibResourcesPipe,\n SkyIconModule,\n SkyThemeModule,\n SkyDatetimeResourcesModule,\n ], template: \"<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 [class.sky-timepicker-24hour-hours]=\\\"is8601\\\"\\n >\\n <ol>\\n @for (hour of hours; track hour) {\\n <li>\\n <button\\n name=\\\"hour\\\"\\n type=\\\"button\\\"\\n [class.sky-btn-active]=\\\"selectedHour === hour\\\"\\n (click)=\\\"setTime($event)\\\"\\n >\\n {{ hour }}\\n </button>\\n </li>\\n }\\n </ol>\\n </section>\\n <section\\n class=\\\"sky-timepicker-column sky-timepicker-column-minutes\\\"\\n [class.sky-timepicker-24hour-minutes]=\\\"is8601\\\"\\n >\\n <ol>\\n @for (minute of minutes; track minute) {\\n <li>\\n <button\\n name=\\\"minute\\\"\\n type=\\\"button\\\"\\n [class.sky-btn-active]=\\\"highlightMinute(selectedMinute, minute)\\\"\\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 [class.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 [class.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\", styles: [\".sky-timepicker-container:not(.sky-theme-modern *){--sky-override-timepicker-background-color: #eeeeef;--sky-override-timepicker-border-radius: 5px;--sky-override-timepicker-button-active-background-color: #e2e3e4;--sky-override-timepicker-button-background-color: #ffffff;--sky-override-timepicker-button-border-radius: 3px;--sky-override-timepicker-button-focus-box-shadow: none;--sky-override-timepicker-button-focus-outline-offset: -2px;--sky-override-timepicker-button-focus-outline: -webkit-focus-ring-color auto 5px;--sky-override-timepicker-button-height: 100%;--sky-override-timepicker-button-hover-active-focus-border-radius: 0;--sky-override-timepicker-button-hover-active-box-shadow: none;--sky-override-timepicker-button-hover-background-color: #eeeeef;--sky-override-timepicker-button-padding-horizontal: 15px;--sky-override-timepicker-button-padding-vertical: 5px;--sky-override-timepicker-button-selected-background-color: #c1e8fb;--sky-override-timepicker-button-selected-box-shadow: inset 0 0 0 2px #00b4f1;--sky-override-timepicker-button-width: 100%;--sky-override-timepicker-column-border: 1px solid #e2e3e4;--sky-override-timepicker-column-gap: 10px;--sky-override-timepicker-column-meride-divider: 1px solid #e2e3e4;--sky-override-timepicker-content-space: 10px 10px 0 10px;--sky-override-timepicker-font-size: 15px;--sky-override-timepicker-footer-padding-horizontal: 10px;--sky-override-timepicker-footer-padding-vertical: 10px;--sky-override-timepicker-text-color: #000}.sky-timepicker-container{position:fixed;font-size:var(--sky-override-timepicker-font-size);background-color:var(--sky-override-timepicker-background-color, var(--sky-color-background-container-menu));border-radius:var(--sky-override-timepicker-border-radius, var(--sky-border-radius-s))}.sky-timepicker-container :last-child ol{display:flex;flex-direction:column;height:100%}.sky-timepicker-container :last-child ol li{border-bottom:var(--sky-override-timepicker-column-meride-divider);flex:1}.sky-timepicker-column ol{border:var(--sky-override-timepicker-column-border, var(--sky-border-width-container-base) solid var(--sky-color-border-container-base));column-gap:1px;columns:2;list-style-type:none;margin:0;padding:0}.sky-timepicker-column ol li{text-align:center;cursor:pointer;margin:0}.sky-timepicker-column ol li button{background-color:var(--sky-override-timepicker-button-background-color, var(--sky-color-background-action-tertiary-base));border-width:0;border-color:var(--sky-color-border-action-tertiary-base);color:var(--sky-override-timepicker-text-color, var(--sky-color-text-default));cursor:pointer;padding:var(--sky-override-timepicker-button-padding-vertical, auto) var(--sky-override-timepicker-button-padding-horizontal, auto);width:var(--sky-override-timepicker-button-width, var(--sky-size-picker_btn));height:var(--sky-override-timepicker-button-height, var(--sky-size-picker_btn))}.sky-timepicker-column ol li button:focus-visible:not(:active){outline:var(--sky-override-timepicker-button-focus-outline);outline-offset:var(--sky-override-timepicker-button-focus-outline-offset);border-radius:var(--sky-override-timepicker-button-hover-active-focus-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-timepicker-button-focus-box-shadow, inset 0 0 0 var(--sky-border-width-action-focus) var(--sky-color-border-action-tertiary-focus))}.sky-timepicker-column ol li button:hover:not(.sky-btn-active):not(:active){border-radius:var(--sky-override-timepicker-button-hover-active-focus-border-radius, var(--sky-border-radius-s));background-color:var(--sky-override-timepicker-button-hover-background-color, var(--sky-color-background-action-tertiary-hover));box-shadow:var(--sky-override-timepicker-button-hover-active-box-shadow, inset 0 0 0 var(--sky-border-width-action-hover) var(--sky-color-border-action-tertiary-hover))}.sky-timepicker-column ol li button:active{background-color:var(--sky-override-timepicker-button-active-background-color, var(--sky-color-background-action-tertiary-active));border-radius:var(--sky-override-timepicker-button-hover-active-focus-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-timepicker-button-hover-active-box-shadow, inset 0 0 0 var(--sky-border-width-action-active) var(--sky-color-border-action-tertiary-active))}.sky-timepicker-column ol li button.sky-btn-active{background-color:var(--sky-override-timepicker-button-selected-background-color, var(--sky-color-background-selected-soft));box-shadow:var(--sky-override-timepicker-button-selected-box-shadow, inset 0 0 0 var(--sky-border-width-selected-s) var(--sky-color-border-selected));border-radius:var(--sky-override-timepicker-button-border-radius, var(--sky-border-radius-s))}.sky-timepicker-column.sky-timepicker-column-meridies ol li button,.sky-timepicker-column.sky-timepicker-24hour-minutes ol li button{height:100%}.sky-timepicker-column.sky-timepicker-24hour-hours ol{columns:4}.sky-timepicker-column.sky-timepicker-24hour-hours ol li{border-bottom-width:0}.sky-timepicker-content{display:flex;padding:var(--sky-override-timepicker-content-space, var(--sky-comp-timepicker-content-space-inset-top) var(--sky-comp-timepicker-content-space-inset-right) var(--sky-comp-timepicker-content-space-inset-bottom) var(--sky-comp-timepicker-content-space-inset-left));gap:var(--sky-override-timepicker-column-gap, var(--sky-space-gap-action_group-m))}.sky-timepicker-footer{margin:0;padding:var(--sky-override-timepicker-footer-padding-vertical, var(--sky-comp-timepicker-footer-space-inset-top)) var(--sky-override-timepicker-footer-padding-horizontal, var(--sky-comp-timepicker-footer-space-inset-right)) var(--sky-override-timepicker-footer-padding-vertical, var(--sky-comp-timepicker-footer-space-inset-bottom)) var(--sky-override-timepicker-footer-padding-horizontal, var(--sky-comp-timepicker-footer-space-inset-left))}.sky-timepicker-footer .sky-timepicker-column{width:100%}.sky-timepicker-hidden{visibility:hidden}.sky-timepicker-clock-icon-modern,.sky-theme-modern .sky-timepicker-clock-icon-default{display:none}.sky-theme-modern .sky-timepicker-clock-icon-modern{display:inline}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.SkyAffixService }, { type: i0.ChangeDetectorRef }, { type: i1.SkyCoreAdapterService }, { type: i1.SkyOverlayService }, { type: i2.SkyInputBoxHostService, decorators: [{\n type: Optional\n }] }, { type: i3.SkyThemeService, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [SKY_STACKING_CONTEXT]\n }] }], propDecorators: { selectedTimeChanged: [{\n type: Output\n }], timepickerRef: [{\n type: ViewChild,\n args: ['timepickerRef', { read: ElementRef }]\n }], timepickerTemplateRef: [{\n type: ViewChild,\n args: ['timepickerTemplateRef', { read: TemplateRef }]\n }], triggerButtonRef: [{\n type: ViewChild,\n args: ['triggerButtonRef', { read: ElementRef }]\n }], inputTemplateRef: [{\n type: ViewChild,\n args: ['inputTemplateRef', { read: TemplateRef, static: true }]\n }], triggerButtonTemplateRef: [{\n type: ViewChild,\n args: ['triggerButtonTemplateRef', { read: TemplateRef, static: true }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL3RpbWVwaWNrZXIvdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL3RpbWVwaWNrZXIvdGltZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixNQUFNLEVBR04sUUFBUSxFQUNSLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixzQkFBc0IsR0FPdkIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxjQUFjLENBQUM7QUFFL0QsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7OztBQUtyRixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFF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bUpBRWhCLGFBQWEscUlBQ2IsY0FBYyw4QkFDZCwwQkFBMEIsMEJBSDFCLG1CQUFtQjs7NEZBTVYsc0JBQXNCO2tCQWRsQyxTQUFTOytCQUNFLGdCQUFnQixpQkFHWCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsMEJBQTBCO3FCQUMzQjs7MEJBZ05FLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsb0JBQW9COztzQkE3TTdCLE1BQU07O3NCQW9JTixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7O3NCQWdDL0MsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7O3NCQUd4RCxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTs7c0JBR2xELFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O3NCQUdqRSxTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNLWV9TVEFDS0lOR19DT05URVhULFxuICBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LFxuICBTa3lBZmZpeFNlcnZpY2UsXG4gIFNreUFmZml4ZXIsXG4gIFNreUNvcmVBZGFwdGVyU2VydmljZSxcbiAgU2t5T3ZlcmxheUluc3RhbmNlLFxuICBTa3lPdmVybGF5U2VydmljZSxcbiAgU2t5U3RhY2tpbmdDb250ZXh0LFxufSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQgeyBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2Zvcm1zJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1BpcGUgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5pbXBvcnQgeyBTa3lJY29uTW9kdWxlIH0gZnJvbSAnQHNreXV4L2ljb24nO1xuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUsIFNreVRoZW1lU2VydmljZSB9IGZyb20gJ0Bza3l1eC90aGVtZSc7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGV0aW1lUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vc2hhcmVkL3NreS1kYXRldGltZS1yZXNvdXJjZXMubW9kdWxlJztcblxuaW1wb3J0IHsgU2t5VGltZXBpY2tlclRpbWVGb3JtYXRUeXBlIH0gZnJvbSAnLi90aW1lcGlja2VyLXRpbWUtZm9ybWF0LXR5cGUnO1xuaW1wb3J0IHsgU2t5VGltZXBpY2tlclRpbWVPdXRwdXQgfSBmcm9tICcuL3RpbWVwaWNrZXItdGltZS1vdXRwdXQnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgU0tZIFVYLXRoZW1lZCByZXBsYWNlbWVudCBmb3IgdGhlIEhUTUwgYGlucHV0YCBlbGVtZW50IHdpdGggYHR5cGU9XCJ0aW1lXCJgLlxuICogVGhlIHZhbHVlIHRoYXQgdXNlcnMgc2VsZWN0IGlzIGRyaXZlbiB0aHJvdWdoIHRoZSBgbmdNb2RlbGAgYXR0cmlidXRlXG4gKiBzcGVjaWZpZWQgb24gdGhlIGBpbnB1dGAgZWxlbWVudC4gWW91IG11c3Qgd3JhcCB0aGlzIGNvbXBvbmVudCBhcm91bmQgYW4gYGlucHV0YFxuICogd2l0aCB0aGUgYHNreVRpbWVwaWNrZXJJbnB1dGAgZGlyZWN0aXZlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdGltZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90aW1lcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgU2t5TGliUmVzb3VyY2VzUGlwZSxcbiAgICBTa3lJY29uTW9kdWxlLFxuICAgIFNreVRoZW1lTW9kdWxlLFxuICAgIFNreURhdGV0aW1lUmVzb3VyY2VzTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUaW1lcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgdmFsdWUgaW4gdGhlIHRpbWVwaWNrZXIgaW5wdXQgY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRUaW1lQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFNreVRpbWVwaWNrZXJUaW1lT3V0cHV0PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxTa3lUaW1lcGlja2VyVGltZU91dHB1dD4oKTtcblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfZGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IHNlbGVjdGVkSG91cihzZXRIb3VyOiBudW1iZXIpIHtcbiAgICBsZXQgaG91ck9mZnNldCA9IDA7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXJpZGllcyA9PT0gJ0FNJyAmJiBzZXRIb3VyID09PSAxMikge1xuICAgICAgaG91ck9mZnNldCA9IC0xMjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXJpZGllcyA9PT0gJ1BNJyAmJiBzZXRIb3VyICE9PSAxMikge1xuICAgICAgaG91ck9mZnNldCA9IDEyO1xuICAgIH1cbiAgICBpZiAodGhpcy5pczg2MDEpIHtcbiAgICAgIGhvdXJPZmZzZXQgPSAwO1xuICAgIH1cbiAgICBjb25zdCBob3VyID0gbW9tZW50KHsgaG91cjogc2V0SG91ciB9KS5hZGQoaG91ck9mZnNldCwgJ2hvdXJzJykuaG91cigpO1xuXG4gICAgdGhpcy5hY3RpdmVUaW1lID0gbW9tZW50KHtcbiAgICAgIGhvdXI6IGhvdXIsXG4gICAgICBtaW51dGU6IG1vbWVudCh0aGlzLmFjdGl2ZVRpbWUpLmdldCgnbWludXRlJykgKyAwLFxuICAgIH0pLnRvRGF0ZSgpO1xuICAgIHRoaXMuc2VsZWN0ZWRUaW1lQ2hhbmdlZC5lbWl0KHRoaXMuc2VsZWN0ZWRUaW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRIb3VyKCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzODYwMSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiBwYXJzZUludChtb21lbnQodGhpcy5hY3RpdmVUaW1lKS5mb3JtYXQoJ2gnKSwgMCkgfHwgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vbWVudCh0aGlzLmFjdGl2ZVRpbWUpLmhvdXIoKSArIDA7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldCBzZWxlY3RlZE1lcmlkaWVzKG1lcmlkaWVzOiBzdHJpbmcpIHtcbiAgICBtZXJpZGllcyA9IG1lcmlkaWVzLnRyaW0oKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChtZXJpZGllcyAhPT0gdGhpcy5zZWxlY3RlZE1lcmlkaWVzKSB7XG4gICAgICBzd2l0Y2ggKG1lcmlkaWVzKSB7XG4gICAgICAgIGNhc2UgJ0FNJzpcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRpbWUgPSBtb21lbnQodGhpcy5hY3RpdmVUaW1lKVxuICAgICAgICAgICAgLnN1YnRyYWN0KDEyLCAnaG91cnMnKVxuICAgICAgICAgICAgLnRvRGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1BNJzpcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRpbWUgPSBtb21lbnQodGhpcy5hY3RpdmVUaW1lKS5hZGQoMTIsICdob3VycycpLnRvRGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZFRpbWVDaGFuZ2VkLmVtaXQodGhpcy5zZWxlY3RlZFRpbWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRNZXJpZGllcygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmFjdGl2ZVRpbWUpIHtcbiAgICAgIHJldHVybiBtb21lbnQodGhpcy5hY3RpdmVUaW1lKS5mb3JtYXQoJ0EnKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHVibGljIHNldCBzZWxlY3RlZE1pbnV0ZShtaW51dGU6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZlVGltZSA9IG1vbWVudCh7XG4gICAgICBob3VyOiBtb21lbnQodGhpcy5hY3RpdmVUaW1lKS5nZXQoJ2hvdXInKSArIDAsXG4gICAgICBtaW51dGU6IG1pbnV0ZSxcbiAgICB9KS50b0RhdGUoKTtcbiAgICB0aGlzLnNlbGVjdGVkVGltZUNoYW5nZWQuZW1pdCh0aGlzLnNlbGVjdGVkVGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkTWludXRlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG1vbWVudCh0aGlzLmFjdGl2ZVRpbWUpLm1pbnV0ZSgpICsgMDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRUaW1lKG5ld1RpbWU6IFNreVRpbWVwaWNrZXJUaW1lT3V0cHV0IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdUaW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG5ld1RpbWUubG9jYWwgIT09ICdJbnZhbGlkIGRhdGUnKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlVGltZSA9IG5ld1RpbWUuaXNvODYwMTtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZFRpbWUoKTogU2t5VGltZXBpY2tlclRpbWVPdXRwdXQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHRpbWU6IFNreVRpbWVwaWNrZXJUaW1lT3V0cHV0ID0ge1xuICAgICAgaG91cjogbW9tZW50KHRoaXMuYWN0aXZlVGltZSkuaG91cigpLFxuICAgICAgbWludXRlOiBtb21lbnQodGhpcy5hY3RpdmVUaW1lKS5taW51dGUoKSxcbiAgICAgIG1lcmlkaWU6IG1vbWVudCh0aGlzLmFjdGl2ZVRpbWUpLmZvcm1hdCgnQScpLFxuICAgICAgdGltZXpvbmU6IHBhcnNlSW50KG1vbWVudCh0aGlzLmFjdGl2ZVRpbWUpLmZvcm1hdCgnWicpLCAxMCksXG4gICAgICBpc284NjAxOiB0aGlzLmFjdGl2ZVRpbWUsXG4gICAgICBsb2NhbDogbW9tZW50KHRoaXMuYWN0aXZlVGltZSkuZm9ybWF0KHRoaXMubG9jYWxlRm9ybWF0KSxcbiAgICAgIGN1c3RvbUZvcm1hdDpcbiAgICAgICAgdHlwZW9mIHRoaXMucmV0dXJuRm9ybWF0ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgID8gdGhpcy5yZXR1cm5Gb3JtYXRcbiAgICAgICAgICA6IHRoaXMubG9jYWxlRm9ybWF0LFxuICAgIH07XG5cbiAgICByZXR1cm4gdGltZTtcbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmVUaW1lOiBEYXRlID0gbmV3IERhdGUoKTtcblxuICBwdWJsaWMgaG91cnM6IG51bWJlcltdID0gW107XG5cbiAgcHVibGljIGlzODYwMSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpc09wZW4gPSBmYWxzZTtcblxuICBwdWJsaWMgaXNWaXNpYmxlID0gZmFsc2U7XG5cbiAgcHVibGljIGxvY2FsZUZvcm1hdCA9ICdoOm1tIEEnO1xuXG4gIHB1YmxpYyBtaW51dGVzOiBudW1iZXJbXSA9IFtdO1xuXG4gIHB1YmxpYyBtaW51dGVNdWx0aXBsaWVyOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHJldHVybkZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyB0aW1lRm9ybWF0OiBTa3lUaW1lcGlja2VyVGltZUZvcm1hdFR5cGUgPSAnaGgnO1xuXG4gIHB1YmxpYyB0aW1lcGlja2VySWQ6IHN0cmluZztcblxuICBwdWJsaWMgdHJpZ2dlckJ1dHRvbklkOiBzdHJpbmc7XG5cbiAgQFZpZXdDaGlsZCgndGltZXBpY2tlclJlZicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgc2V0IHRpbWVwaWNrZXJSZWYodmFsdWU6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI190aW1lcGlja2VyUmVmID0gdmFsdWU7XG5cbiAgICAgIHRoaXMuI2FkZEtleXVwTGlzdGVuZXIoKTtcblxuICAgICAgLy8gV2FpdCBmb3IgdGhlIHRpbWVwaWNrZXIgY29tcG9uZW50IHRvIHJlbmRlciBiZWZvcmUgZ2F1Z2luZyBkaW1lbnNpb25zLlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2Rlc3Ryb3lBZmZpeGVyKCk7XG4gICAgICAgIHRoaXMuI2NyZWF0ZUFmZml4ZXIoKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy50aW1lcGlja2VyUmVmKSB7XG4gICAgICAgICAgICB0aGlzLiNjb3JlQWRhcHRlci5nZXRGb2N1c2FibGVDaGlsZHJlbkFuZEFwcGx5Rm9jdXMoXG4gICAgICAgICAgICAgIHRoaXMudGltZXBpY2tlclJlZixcbiAgICAgICAgICAgICAgJy5za3ktdGltZXBpY2tlci1jb250ZW50JyxcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRpbWVwaWNrZXJSZWYoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI190aW1lcGlja2VyUmVmO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgndGltZXBpY2tlclRlbXBsYXRlUmVmJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwdWJsaWMgdGltZXBpY2tlclRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyQnV0dG9uUmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyB0cmlnZ2VyQnV0dG9uUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0VGVtcGxhdGVSZWYnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIGlucHV0VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ3RyaWdnZXJCdXR0b25UZW1wbGF0ZVJlZicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgdHJpZ2dlckJ1dHRvblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAjYWZmaXhlcjogU2t5QWZmaXhlciB8IHVuZGVmaW5lZDtcblxuICAjdGltZXBpY2tlclVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI292ZXJsYXk6IFNreU92ZXJsYXlJbnN0YW5jZSB8IHVuZGVmaW5lZDtcblxuICAjb3ZlcmxheUtleXVwTGlzdGVuZXI6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAjX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgI190aW1lcGlja2VyUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gICNhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZTtcbiAgI2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgI2NvcmVBZGFwdGVyOiBTa3lDb3JlQWRhcHRlclNlcnZpY2U7XG4gIHJlYWRvbmx5ICNlbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuICAjb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlO1xuICAjekluZGV4OiBPYnNlcnZhYmxlPG51bWJlcj4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYWZmaXhTZXJ2aWNlOiBTa3lBZmZpeFNlcnZpY2UsXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGNvcmVBZGFwdGVyOiBTa3lDb3JlQWRhcHRlclNlcnZpY2UsXG4gICAgb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBpbnB1dEJveEhvc3RTZXJ2aWNlPzogU2t5SW5wdXRCb3hIb3N0U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSB0aGVtZVN2Yz86IFNreVRoZW1lU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoU0tZX1NUQUNLSU5HX0NPTlRFWFQpXG4gICAgc3RhY2tpbmdDb250ZXh0PzogU2t5U3RhY2tpbmdDb250ZXh0LFxuICApIHtcbiAgICB0aGlzLiNhZmZpeFNlcnZpY2UgPSBhZmZpeFNlcnZpY2U7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNjb3JlQWRhcHRlciA9IGNvcmVBZGFwdGVyO1xuICAgIHRoaXMuI292ZXJsYXlTZXJ2aWNlID0gb3ZlcmxheVNlcnZpY2U7XG4gICAgdGhpcy4jekluZGV4ID0gc3RhY2tpbmdDb250ZXh0Py56SW5kZXg7XG5cbiAgICBjb25zdCB1bmlxdWVJZCA9IG5leHRJZCsrO1xuICAgIHRoaXMudGltZXBpY2tlcklkID0gYHNreS10aW1lcGlja2VyLSR7dW5pcXVlSWR9YDtcbiAgICB0aGlzLnRyaWdnZXJCdXR0b25JZCA9IGBza3ktdGltZXBpY2tlci1idXR0b24tJHt1bmlxdWVJZH1gO1xuXG4gICAgLy8gVXBkYXRlIGljb25zIHdoZW4gdGhlbWUgY2hhbmdlcy5cbiAgICB0aGVtZVN2Yz8uc2V0dGluZ3NDaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0Rm9ybWF0KHRoaXMudGltZUZvcm1hdCk7XG4gICAgdGhpcy4jYWRkS2V5dXBMaXN0ZW5lcigpO1xuXG4gICAgaWYgKHRoaXMuaW5wdXRCb3hIb3N0U2VydmljZSAmJiB0aGlzLmlucHV0VGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMuaW5wdXRCb3hIb3N0U2VydmljZS5wb3B1bGF0ZSh7XG4gICAgICAgIGlucHV0VGVtcGxhdGU6IHRoaXMuaW5wdXRUZW1wbGF0ZVJlZixcbiAgICAgICAgYnV0dG9uc1RlbXBsYXRlOiB0aGlzLnRyaWdnZXJCdXR0b25UZW1wbGF0ZVJlZixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jcmVtb3ZlUGlja2VyRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLiNkZXN0cm95QWZmaXhlcigpO1xuICAgIHRoaXMuI2Rlc3Ryb3lPdmVybGF5KCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Rm9ybWF0KGZvcm1hdDogU2t5VGltZXBpY2tlclRpbWVGb3JtYXRUeXBlKTogdm9pZCB7XG4gICAgbGV0IGggPSAxMjtcbiAgICBsZXQgbSA9IDEyO1xuICAgIGxldCBtaW51dGVNdWx0aXBsaWVyID0gNTtcbiAgICBsZXQgbG9jYWxlRm9ybWF0ID0gJ2g6bW0gQSc7XG4gICAgaWYgKGZvcm1hdCA9PT0gJ2hoJykge1xuICAgICAgaCA9IDEyO1xuICAgICAgbSA9IDEyO1xuICAgICAgbWludXRlTXVsdGlwbGllciA9IDU7XG4gICAgICBsb2NhbGVGb3JtYXQgPSAnaDptbSBBJztcbiAgICAgIHRoaXMuaXM4NjAxID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09ICdISCcpIHtcbiAgICAgIGggPSAyNDtcbiAgICAgIG0gPSA0O1xuICAgICAgbWludXRlTXVsdGlwbGllciA9IDE1O1xuICAgICAgbG9jYWxlRm9ybWF0ID0gJ0hIOm1tJztcbiAgICAgIHRoaXMuaXM4NjAxID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhOiB7XG4gICAgICBob3VyczogbnVtYmVyW107XG4gICAgICBtaW51dGVzOiBudW1iZXJbXTtcbiAgICAgIGxvY2FsZUZvcm1hdDogc3RyaW5nO1xuICAgICAgbWludXRlTXVsdGlwbGllcjogbnVtYmVyO1xuICAgIH0gPSB7XG4gICAgICAvLyBDcmVhdGUgYSBzcGFyc2UgYXJyYXkgd2l0aCBhIGxlbmd0aCBlcXVhbCB0byB0aGUgaG91ci5cbiAgICAgIGhvdXJzOiBBcnJheSguLi5BcnJheShoKSkubWFwKChfLCBpKSA9PiB7XG4gICAgICAgIGlmIChmb3JtYXQgPT09ICdoaCcpIHtcbiAgICAgICAgICByZXR1cm4gKytpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChmb3JtYXQgPT09ICdISCcpIHtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KSxcbiAgICAgIC8vIENyZWF0ZSBhIHNwYXJzZSBhcnJheSB3aXRoIGEgbGVuZ3RoIGVxdWFsIHRvIHRoZSBtaW51dGUuXG4gICAgICBtaW51dGVzOiBBcnJheSguLi5BcnJheShtKSkubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICAgIHJldHVybiBpICogbWludXRlTXVsdGlwbGllcjtcbiAgICAgIH0pLFxuICAgICAgbG9jYWxlRm9ybWF0OiBsb2NhbGVGb3JtYXQsXG4gICAgICBtaW51dGVNdWx0aXBsaWVyOiBtaW51dGVNdWx0aXBsaWVyLFxuICAgIH07XG5cbiAgICB0aGlzLmhvdXJzID0gZGF0YS5ob3VycztcbiAgICB0aGlzLm1pbnV0ZXMgPSBkYXRhLm1pbnV0ZXM7XG4gICAgdGhpcy5sb2NhbGVGb3JtYXQgPSBkYXRhLmxvY2FsZUZvcm1hdDtcbiAgICB0aGlzLm1pbnV0ZU11bHRpcGxpZXIgPSBkYXRhLm1pbnV0ZU11bHRpcGxpZXI7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZUJ1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuI2Nsb3NlUGlja2VyKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0VGltZShldmVudDogYW55KTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodHlwZW9mIGV2ZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChldmVudC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm5hbWUgPT09ICdob3VyJykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gcGFyc2VJbnQoZXZlbnQudGFyZ2V0LmlubmVySFRNTCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5uYW1lID09PSAnbWludXRlJykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBwYXJzZUludChldmVudC50YXJnZXQuaW5uZXJIVE1MLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm5hbWUgPT09ICdtZXJpZGllJykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXJpZGllcyA9IGV2ZW50LnRhcmdldC5pbm5lckhUTUw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25UcmlnZ2VyQnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy4jb3BlblBpY2tlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhpZ2hsaWdodE1pbnV0ZShzZWxlY3RlZE1pbnV0ZTogbnVtYmVyLCBtaW51dGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJhZGl4ID0gdGhpcy5pczg2MDEgPyAxNSA6IDU7XG4gICAgcmV0dXJuIE1hdGguZmxvb3Ioc2VsZWN0ZWRNaW51dGUgLyByYWRpeCkgPT09IG1pbnV0ZSAvIHJhZGl4O1xuICB9XG5cbiAgI2Nsb3NlUGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMuI2Rlc3Ryb3lBZmZpeGVyKCk7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgICB0aGlzLiNyZW1vdmVQaWNrZXJFdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMudHJpZ2dlckJ1dHRvblJlZj8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gIH1cblxuICAjb3BlblBpY2tlcigpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy4jcmVtb3ZlUGlja2VyRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLiNkZXN0cm95T3ZlcmxheSgpO1xuICAgIHRoaXMuI2NyZWF0ZU92ZXJsYXkoKTtcblxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gICNjcmVhdGVBZmZpeGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRpbWVwaWNrZXJSZWYgJiYgdGhpcy50cmlnZ2VyQnV0dG9uUmVmKSB7XG4gICAgICBjb25zdCBhZmZpeGVyID0gdGhpcy4jYWZmaXhTZXJ2aWNlLmNyZWF0ZUFmZml4ZXIodGhpcy50aW1lcGlja2VyUmVmKTtcblxuICAgICAgLy8gSGlkZSB0aW1lcGlja2VyIHdoZW4gdHJpZ2dlciBidXR0b24gaXMgc2Nyb2xsZWQgb2ZmIHNjcmVlbi5cbiAgICAgIGFmZml4ZXIucGxhY2VtZW50Q2hhbmdlXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiN0aW1lcGlja2VyVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGNoYW5nZS5wbGFjZW1lbnQgIT09IG51bGw7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICBhZmZpeGVyLmFmZml4VG8odGhpcy50cmlnZ2VyQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgIGVuYWJsZUF1dG9GaXQ6IHRydWUsXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6ICdyaWdodCcsXG4gICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICBwbGFjZW1lbnQ6ICdiZWxvdycsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy4jYWZmaXhlciA9IGFmZml4ZXI7XG4gICAgfVxuICB9XG5cbiAgI2Rlc3Ryb3lBZmZpeGVyKCk6IHZvaWQge1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgIGlmICh0aGlzLiNhZmZpeGVyKSB7XG4gICAgICB0aGlzLiNhZmZpeGVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuI2FmZml4ZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgI2NyZWF0ZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZXBpY2tlclRlbXBsYXRlUmVmKSB7XG4gICAgICBjb25zdCBvdmVybGF5ID0gdGhpcy4jb3ZlcmxheVNlcnZpY2UuY3JlYXRlKHtcbiAgICAgICAgZW5hYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICBlbmFibGVQb2ludGVyRXZlbnRzOiBmYWxzZSxcbiAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy4jZW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy4jekluZGV4KSB7XG4gICAgICAgIHRoaXMuI3pJbmRleFxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiN0aW1lcGlja2VyVW5zdWJzY3JpYmUpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHpJbmRleCkgPT4ge1xuICAgICAgICAgICAgb3ZlcmxheS5jb21wb25lbnRSZWYuaW5zdGFuY2UuekluZGV4ID0gekluZGV4LnRvU3RyaW5nKDEwKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgb3ZlcmxheS5iYWNrZHJvcENsaWNrXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiN0aW1lcGlja2VyVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy4jY2xvc2VQaWNrZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICBvdmVybGF5LmF0dGFjaFRlbXBsYXRlKHRoaXMudGltZXBpY2tlclRlbXBsYXRlUmVmKTtcblxuICAgICAgdGhpcy4jb3ZlcmxheSA9IG92ZXJsYXk7XG4gICAgfVxuICB9XG5cbiAgI2Rlc3Ryb3lPdmVybGF5KCk6IHZvaWQge1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgIGlmICh0aGlzLiNvdmVybGF5KSB7XG4gICAgICB0aGlzLiNvdmVybGF5U2VydmljZS5jbG9zZSh0aGlzLiNvdmVybGF5KTtcbiAgICAgIHRoaXMuI292ZXJsYXkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgI2FkZEtleXVwTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgY29uc3QgdGltZXBpY2tlck1lbnVFbGVtZW50ID0gdGhpcy50aW1lcGlja2VyUmVmPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKHRpbWVwaWNrZXJNZW51RWxlbWVudCkge1xuICAgICAgdGhpcy4jb3ZlcmxheUtleXVwTGlzdGVuZXIgPSBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oXG4gICAgICAgIHRpbWVwaWNrZXJNZW51RWxlbWVudCxcbiAgICAgICAgJ2tleXVwJyxcbiAgICAgIClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChrZXkgPT09ICdlc2NhcGUnICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLiNjbG9zZVBpY2tlcigpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgI3JlbW92ZVBpY2tlckV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI3RpbWVwaWNrZXJVbnN1YnNjcmliZSkge1xuICAgICAgdGhpcy4jdGltZXBpY2tlclVuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgIHRoaXMuI3RpbWVwaWNrZXJVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgICAgdGhpcy4jdGltZXBpY2tlclVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aGlzLiNvdmVybGF5S2V5dXBMaXN0ZW5lcj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNreS10aW1lcGlja2VyXCI+XG4gIEBpZiAoIWlucHV0Qm94SG9zdFNlcnZpY2UpIHtcbiAgICA8ZGl2IGNsYXNzPVwic2t5LWlucHV0LWdyb3VwXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRUZW1wbGF0ZVJlZlwiIC8+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJpZ2dlckJ1dHRvblRlbXBsYXRlUmVmXCIgLz5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRUZW1wbGF0ZVJlZj5cbiAgPG5nLWNvbnRlbnQgLz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdHJpZ2dlckJ1dHRvblRlbXBsYXRlUmVmPlxuICA8ZGl2IGNsYXNzPVwic2t5LWlucHV0LWdyb3VwLWJ0blwiPlxuICAgIDxidXR0b25cbiAgICAgICN0cmlnZ2VyQnV0dG9uUmVmXG4gICAgICBhcmlhLWhhc3BvcHVwPVwiZGlhbG9nXCJcbiAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWRlZmF1bHQgc2t5LWlucHV0LWdyb3VwLXRpbWVwaWNrZXItYnRuXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJpc09wZW4gPyB0aW1lcGlja2VySWQgOiBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgIGlucHV0Qm94SG9zdFNlcnZpY2U/LmxhYmVsVGV4dFxuICAgICAgICAgID8gKCdza3l1eF90aW1lcGlja2VyX2J1dHRvbl9sYWJlbF9jb250ZXh0J1xuICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXM6IGlucHV0Qm94SG9zdFNlcnZpY2U/LmxhYmVsVGV4dClcbiAgICAgICAgICA6ICgnc2t5dXhfdGltZXBpY2tlcl9idXR0b25fbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgXCJcbiAgICAgIFthdHRyLmlkXT1cInRyaWdnZXJCdXR0b25JZFwiXG4gICAgICBbYXR0ci50aXRsZV09XCJcbiAgICAgICAgaW5wdXRCb3hIb3N0U2VydmljZT8ubGFiZWxUZXh0XG4gICAgICAgICAgPyAoJ3NreXV4X3RpbWVwaWNrZXJfYnV0dG9uX2xhYmVsX2NvbnRleHQnXG4gICAgICAgICAgICB8IHNreUxpYlJlc291cmNlczogaW5wdXRCb3hIb3N0U2VydmljZT8ubGFiZWxUZXh0KVxuICAgICAgICAgIDogKCdza3l1eF90aW1lcGlja2VyX2J1dHRvbl9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICBcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJvblRyaWdnZXJCdXR0b25DbGljaygpXCJcbiAgICA+XG4gICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJjbG9ja1wiIGljb25TaXplPVwibFwiIC8+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0aW1lcGlja2VyVGVtcGxhdGVSZWY+XG4gIDxkaXZcbiAgICAjdGltZXBpY2tlclJlZlxuICAgIGNsYXNzPVwic2t5LXRpbWVwaWNrZXItY29udGFpbmVyIHNreS1zaGFkb3cgc2t5LWJveCBza3ktZWxldmF0aW9uLTRcIlxuICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0cmlnZ2VyQnV0dG9uSWRcIlxuICAgIFthdHRyLmlkXT1cInRpbWVwaWNrZXJJZFwiXG4gICAgW2NsYXNzLnNreS10aW1lcGlja2VyLWhpZGRlbl09XCIhaXNWaXNpYmxlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJza3ktdGltZXBpY2tlci1jb250ZW50XCI+XG4gICAgICA8c2VjdGlvblxuICAgICAgICBjbGFzcz1cInNreS10aW1lcGlja2VyLWNvbHVtbiBza3ktdGltZXBpY2tlci1jb2x1bW4taG91cnNcIlxuICAgICAgICBbY2xhc3Muc2t5LXRpbWVwaWNrZXItMjRob3VyLWhvdXJzXT1cImlzODYwMVwiXG4gICAgICA+XG4gICAgICAgIDxvbD5cbiAgICAgICAgICBAZm9yIChob3VyIG9mIGhvdXJzOyB0cmFjayBob3VyKSB7XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBuYW1lPVwiaG91clwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNreS1idG4tYWN0aXZlXT1cInNlbGVjdGVkSG91ciA9PT0gaG91clwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldFRpbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBob3VyIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvb2w+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8c2VjdGlvblxuICAgICAgICBjbGFzcz1cInNreS10aW1lcGlja2VyLWNvbHVtbiBza3ktdGltZXBpY2tlci1jb2x1bW4tbWludXRlc1wiXG4gICAgICAgIFtjbGFzcy5za3ktdGltZXBpY2tlci0yNGhvdXItbWludXRlc109XCJpczg2MDFcIlxuICAgICAgPlxuICAgICAgICA8b2w+XG4gICAgICAgICAgQGZvciAobWludXRlIG9mIG1pbnV0ZXM7IHRyYWNrIG1pbnV0ZSkge1xuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbmFtZT1cIm1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNreS1idG4tYWN0aXZlXT1cImhpZ2hsaWdodE1pbnV0ZShzZWxlY3RlZE1pbnV0ZSwgbWludXRlKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldFRpbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAnMDAnLnN1YnN0cmluZygwLCAyIC0gbWludXRlLnRvU3RyaW5nKCkubGVuZ3RoKSArIG1pbnV0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgfVxuICAgICAgICA8L29sPlxuICAgICAgPC9zZWN0aW9uPlxuICAgICAgQGlmICghaXM4NjAxKSB7XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2t5LXRpbWVwaWNrZXItY29sdW1uIHNreS10aW1lcGlja2VyLWNvbHVtbi1tZXJpZGllc1wiPlxuICAgICAgICAgIDxvbD5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG5hbWU9XCJtZXJpZGllXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2t5LWJ0bi1hY3RpdmVdPVwic2VsZWN0ZWRNZXJpZGllcyA9PT0gJ0FNJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldFRpbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBBTVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBuYW1lPVwibWVyaWRpZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNreS1idG4tYWN0aXZlXT1cInNlbGVjdGVkTWVyaWRpZXMgPT09ICdQTSdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRUaW1lKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgUE1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvb2w+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2t5LXRpbWVwaWNrZXItZm9vdGVyXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cInNreS10aW1lcGlja2VyLWNvbHVtblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tcHJpbWFyeVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2VCdXR0b25DbGljaygpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdza3l1eF90aW1lcGlja2VyX2Nsb3NlJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19","import { Directive, HostBinding, HostListener, Input, forwardRef, } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';\nimport moment from 'moment';\nimport * as i0 from \"@angular/core\";\nconst SKY_TIMEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyTimepickerInputDirective),\n multi: true,\n};\nconst SKY_TIMEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyTimepickerInputDirective),\n multi: true,\n};\nexport class SkyTimepickerInputDirective {\n #_timeFormat = 'hh';\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 get skyTimepickerInput() {\n return this.#_skyTimepickerInput;\n }\n set skyTimepickerInput(value) {\n this.#_skyTimepickerInput = value;\n this.#updateTimepickerInput();\n }\n get hostTimepickerInput() {\n return this.skyTimepickerInput;\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 set timeFormat(value) {\n this.#_timeFormat = value || 'hh';\n }\n get timeFormat() {\n return this.#_timeFormat;\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 get disabled() {\n return this.#_disabled;\n }\n set disabled(value) {\n this.#_disabled = value || false;\n this.#updateTimepickerInput();\n this.#renderer.setProperty(this.#elRef.nativeElement, 'disabled', value);\n }\n get #modelValue() {\n return this.#_modelValue;\n }\n set #modelValue(value) {\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 #control;\n #_disabled = false;\n #_modelValue;\n #_skyTimepickerInput;\n #renderer;\n #elRef;\n #changeDetector;\n constructor(renderer, elRef, changeDetector) {\n this.#renderer = renderer;\n this.#elRef = elRef;\n this.#changeDetector = changeDetector;\n }\n ngOnInit() {\n this.#renderer.addClass(this.#elRef.nativeElement, 'sky-form-control');\n this.pickerChangedSubscription =\n this.skyTimepickerInput?.selectedTimeChanged.subscribe((newTime) => {\n this.writeValue(newTime);\n this.#_onTouched();\n });\n }\n ngAfterContentInit() {\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 ngOnDestroy() {\n /* istanbul ignore else */\n if (this.pickerChangedSubscription) {\n this.pickerChangedSubscription.unsubscribe();\n }\n }\n ngOnChanges() {\n if (this.skyTimepickerInput) {\n this.skyTimepickerInput.setFormat(this.timeFormat);\n this.skyTimepickerInput.returnFormat = this.returnFormat;\n }\n }\n onChange(event) {\n this.writeValue(event.target.value);\n }\n /* istanbul ignore next */\n onBlur() {\n this.#_onTouched();\n }\n registerOnChange(fn) {\n this.#_onChange = fn;\n }\n registerOnTouched(fn) {\n this.#_onTouched = fn;\n }\n registerOnValidatorChange(fn) {\n this.#_validatorChange = fn;\n }\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n writeValue(value) {\n this.#modelValue = this.#formatter(value);\n }\n validate(control) {\n if (!this.#control) {\n this.#control = control;\n }\n const value = control.value;\n if (!value) {\n return null;\n }\n /* istanbul ignore next */\n if (value.local === 'Invalid date') {\n return { skyTime: { invalid: control.value } };\n }\n return null;\n }\n #setInputValue(value) {\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 this.#renderer.setProperty(this.#elRef.nativeElement, 'value', formattedValue);\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) {\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 if (typeof this.returnFormat === 'undefined') {\n this.returnFormat = currentFormat;\n }\n const formatTime = {\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 #updateTimepickerInput() {\n if (this.skyTimepickerInput) {\n this.skyTimepickerInput.disabled = this.disabled;\n /* istanbul ignore else */\n if (this.skyTimepickerInput.selectedTime !== this.#modelValue) {\n this.skyTimepickerInput.selectedTime = this.#modelValue;\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 = (_) => { };\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #_onTouched = () => { };\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #_validatorChange = () => { };\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTimepickerInputDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.15\", type: SkyTimepickerInputDirective, isStandalone: true, selector: \"[skyTimepickerInput]\", inputs: { skyTimepickerInput: \"skyTimepickerInput\", timeFormat: \"timeFormat\", returnFormat: \"returnFormat\", disabled: \"disabled\" }, host: { listeners: { \"change\": \"onChange($event)\", \"blur\": \"onBlur()\" }, properties: { \"attr.skyTimepickerInput\": \"this.hostTimepickerInput\" } }, providers: [SKY_TIMEPICKER_VALUE_ACCESSOR, SKY_TIMEPICKER_VALIDATOR], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTimepickerInputDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[skyTimepickerInput]',\n providers: [SKY_TIMEPICKER_VALUE_ACCESSOR, SKY_TIMEPICKER_VALIDATOR],\n }]\n }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { skyTimepickerInput: [{\n type: Input\n }], hostTimepickerInput: [{\n type: HostBinding,\n args: ['attr.skyTimepickerInput']\n }], timeFormat: [{\n type: Input\n }], returnFormat: [{\n type: Input\n }], disabled: [{\n type: Input\n }], onChange: [{\n type: HostListener,\n args: ['change', ['$event']]\n }], onBlur: [{\n type: HostListener,\n args: ['blur']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL3RpbWVwaWNrZXIvdGltZXBpY2tlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFLTCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7O0FBTzVCLE1BQU0sNkJBQTZCLEdBQUc7SUFDcEMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0lBQzFELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQUc7SUFDL0IsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztJQUMxRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFNRixNQUFNLE9BQU8sMkJBQTJCO0lBVXRDLFlBQVksR0FBZ0MsSUFBSSxDQUFDO0lBRWpELHFIQUFxSDtJQUNySCxrREFBa0Q7SUFDbEQ7Ozs7O09BS0c7SUFDSCxJQUNXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBVyxrQkFBa0IsQ0FBQyxLQUF5QztRQUNyRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUNXLG1CQUFt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O0lBQzFCLHVJQUF1STtJQUN2SSxVQUFVLEdBQUcsQ0FBQyxDQUFNLEVBQVEsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUNsQywwQkFBMEI7SUFDMUIsZ0VBQWdFO0lBQ2hFLFdBQVcsR0FBRyxHQUFTLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDN0IsMEJBQTBCO0lBQzFCLGdFQUFnRTtJQUNoRSxpQkFBaUIsR0FBRyxHQUFTLEVBQUUsR0FBRSxDQUFDLENBQUM7K0dBN1B4QiwyQkFBMkI7bUdBQTNCLDJCQUEyQix5VkFGM0IsQ0FBQyw2QkFBNkIsRUFBRSx3QkFBd0IsQ0FBQzs7NEZBRXpELDJCQUEyQjtrQkFKdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxTQUFTLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSx3QkFBd0IsQ0FBQztpQkFDckU7O3NCQXFCRSxLQUFLOztzQkFVTCxXQUFXO3VCQUFDLHlCQUF5Qjs7c0JBVXJDLEtBQUs7O3NCQWFMLEtBQUs7O3NCQVFMLEtBQUs7O3NCQWlGTCxZQUFZO3VCQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBTWpDLFlBQVk7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBSZW5kZXJlcjIsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5VGltZXBpY2tlclRpbWVGb3JtYXRUeXBlIH0gZnJvbSAnLi90aW1lcGlja2VyLXRpbWUtZm9ybWF0LXR5cGUnO1xuaW1wb3J0IHsgU2t5VGltZXBpY2tlclRpbWVPdXRwdXQgfSBmcm9tICcuL3RpbWVwaWNrZXItdGltZS1vdXRwdXQnO1xuaW1wb3J0IHsgU2t5VGltZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vdGltZXBpY2tlci5jb21wb25lbnQnO1xuXG5jb25zdCBTS1lfVElNRVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreVRpbWVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuY29uc3QgU0tZX1RJTUVQSUNLRVJfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lUaW1lcGlja2VySW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tza3lUaW1lcGlja2VySW5wdXRdJyxcbiAgcHJvdmlkZXJzOiBbU0tZX1RJTUVQSUNLRVJfVkFMVUVfQUNDRVNTT1IsIFNLWV9USU1FUElDS0VSX1ZBTElEQVRPUl0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRpbWVwaWNrZXJJbnB1dERpcmVjdGl2ZVxuICBpbXBsZW1lbnRzXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBWYWxpZGF0b3IsXG4gICAgT25DaGFuZ2VzLFxuICAgIEFmdGVyQ29udGVudEluaXRcbntcbiAgcHVibGljIHBpY2tlckNoYW5nZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgI190aW1lRm9ybWF0OiBTa3lUaW1lcGlja2VyVGltZUZvcm1hdFR5cGUgPSAnaGgnO1xuXG4gIC8vIFRPRE86IEluIGEgZnV0dXJlIGJyZWFraW5nIGNoYW5nZSAtIGdyYWIgdGhlIHBhcmVudCBjb21wb25lbnQgdGhyb3VnaCBkZXBlbmRlbmN5IGluamVjdGlvbiBhbmQgcmVtb3ZlIHRoaXMgc2V0dGVyLlxuICAvLyBBbHNvIHJlbW92ZSB0aGUgSG9zdEJpbmRpbmcgdGhhdCByZWZlcmVuY2VzIGl0LlxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgdGltZXBpY2tlciBpbnB1dCBmaWVsZCBhbmQgcGlja2VyLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiBhbiBgaW5wdXRgIGVsZW1lbnQsXG4gICAqIGFuZCB3cmFwIHRoZSBpbnB1dCBpbiBhIGBza3ktdGltZXBpY2tlcmAgY29tcG9uZW50LlxuICAgKiBUaGlzIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIGBza3ktdGltZXBpY2tlcmAuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBza3lUaW1lcGlja2VySW5wdXQoKTogU2t5VGltZXBpY2tlckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19za3lUaW1lcGlja2VySW5wdXQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IHNreVRpbWVwaWNrZXJJbnB1dCh2YWx1ZTogU2t5VGltZXBpY2tlckNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19za3lUaW1lcGlja2VySW5wdXQgPSB2YWx1ZTtcbiAgICB0aGlzLiN1cGRhdGVUaW1lcGlja2VySW5wdXQoKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5za3lUaW1lcGlja2VySW5wdXQnKVxuICBwdWJsaWMgZ2V0IGhvc3RUaW1lcGlja2VySW5wdXQoKTogU2t5VGltZXBpY2tlckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2t5VGltZXBpY2tlcklucHV0O1xuICB9XG5cbiAgLy8gVE9ETzogSW4gYSBmdXR1cmUgYnJlYWtpbmcgY2hhbmdlIC0gbWFrZSB0aGlzIG1vcmUgc3BlY2lmaWMgdGhhbiBcInN0cmluZ1wiXG4gIC8qKlxuICAgKiBUaGUgMTItaG91ciBgaGhgIG9yIDI0LWhvdXIgYEhIYCB0aW1lIGZvcm1hdCBmb3IgdGhlIGlucHV0LlxuICAgKiBAZGVmYXVsdCBcImhoXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGltZUZvcm1hdCh2YWx1ZTogU2t5VGltZXBpY2tlclRpbWVGb3JtYXRUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3RpbWVGb3JtYXQgPSB2YWx1ZSB8fCAnaGgnO1xuICB9XG5cbiAgcHVibGljIGdldCB0aW1lRm9ybWF0KCk6IFNreVRpbWVwaWNrZXJUaW1lRm9ybWF0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuI190aW1lRm9ybWF0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gdGltZSBmb3JtYXQuIEZvciBleGFtcGxlcyxcbiAgICogc2VlIHRoZSBbbW9tZW50LmpzXShodHRwczovL21vbWVudGpzLmNvbS9kb2NzLyMvZGlzcGxheWluZy9mb3JtYXQvKSBkb2NzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJldHVybkZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIHRpbWVwaWNrZXIgb24gdGVtcGxhdGUtZHJpdmVuIGZvcm1zLiBEb24ndCB1c2UgdGhpcyBpbnB1dCBvbiByZWFjdGl2ZSBmb3JtcyBiZWNhdXNlIHRoZXkgbWF5IG92ZXJ3cml0ZSB0aGUgaW5wdXQgb3IgbGVhdmUgdGhlIGNvbnRyb2wgb3V0IG9mIHN5bmMuXG4gICAqIFRvIHNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb24gcmVhY3RpdmUgZm9ybXMsIHVzZSB0aGUgYEZvcm1Db250cm9sYCBpbnN0ZWFkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNhYmxlZCA9IHZhbHVlIHx8IGZhbHNlO1xuXG4gICAgdGhpcy4jdXBkYXRlVGltZXBpY2tlcklucHV0KCk7XG5cbiAgICB0aGlzLiNyZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLiNlbFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQgI21vZGVsVmFsdWUoKTogU2t5VGltZXBpY2tlclRpbWVPdXRwdXQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbW9kZWxWYWx1ZTtcbiAgfVxuXG4gIHNldCAjbW9kZWxWYWx1ZSh2YWx1ZTogU2t5VGltZXBpY2tlclRpbWVPdXRwdXQgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuI19tb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLiNfbW9kZWxWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy4jdXBkYXRlVGltZXBpY2tlcklucHV0KCk7XG4gICAgICB0aGlzLiNzZXRJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICAgIHRoaXMuI192YWxpZGF0b3JDaGFuZ2UoKTtcbiAgICAgIHRoaXMuI19vbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgI2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZDtcblxuICAjX2Rpc2FibGVkID0gZmFsc2U7XG4gICNfbW9kZWxWYWx1ZTogU2t5VGltZXBpY2tlclRpbWVPdXRwdXQgfCB1bmRlZmluZWQ7XG4gICNfc2t5VGltZXBpY2tlcklucHV0OiBTa3lUaW1lcGlja2VyQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXG4gICNyZW5kZXJlcjogUmVuZGVyZXIyO1xuICAjZWxSZWY6IEVsZW1lbnRSZWY7XG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jZWxSZWYgPSBlbFJlZjtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQsICdza3ktZm9ybS1jb250cm9sJyk7XG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkU3Vic2NyaXB0aW9uID1cbiAgICAgIHRoaXMuc2t5VGltZXBpY2tlcklucHV0Py5zZWxlY3RlZFRpbWVDaGFuZ2VkLnN1YnNjcmliZShcbiAgICAgICAgKG5ld1RpbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShuZXdUaW1lKTtcbiAgICAgICAgICB0aGlzLiNfb25Ub3VjaGVkKCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBXYXRjaCBmb3IgdGhlIGNvbnRyb2wgdG8gYmUgYWRkZWQgYW5kIGluaXRpYWxpemUgdGhlIHZhbHVlIGltbWVkaWF0ZWx5LlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI2NvbnRyb2wgJiYgdGhpcy4jY29udHJvbC5wYXJlbnQpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2wuc2V0VmFsdWUodGhpcy4jbW9kZWxWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMucGlja2VyQ2hhbmdlZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNreVRpbWVwaWNrZXJJbnB1dCkge1xuICAgICAgdGhpcy5za3lUaW1lcGlja2VySW5wdXQuc2V0Rm9ybWF0KHRoaXMudGltZUZvcm1hdCk7XG4gICAgICB0aGlzLnNreVRpbWVwaWNrZXJJbnB1dC5yZXR1cm5Gb3JtYXQgPSB0aGlzLnJldHVybkZvcm1hdDtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25DaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMud3JpdGVWYWx1ZShldmVudC50YXJnZXQudmFsdWUpO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy4jX29uVG91Y2hlZCgpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiNfb25DaGFuZ2UgPSBmbjtcbiAgfVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IGFueSk6IHZvaWQge1xuICAgIHRoaXMuI19vblRvdWNoZWQgPSBmbjtcbiAgfVxuICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI192YWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiNtb2RlbFZhbHVlID0gdGhpcy4jZm9ybWF0dGVyKHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLiNjb250cm9sKSB7XG4gICAgICB0aGlzLiNjb250cm9sID0gY29udHJvbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodmFsdWUubG9jYWwgPT09ICdJbnZhbGlkIGRhdGUnKSB7XG4gICAgICByZXR1cm4geyBza3lUaW1lOiB7IGludmFsaWQ6IGNvbnRyb2wudmFsdWUgfSB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgI3NldElucHV0VmFsdWUodmFsdWU6IFNreVRpbWVwaWNrZXJUaW1lT3V0cHV0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgbGV0IGZvcm1hdHRlZFZhbHVlID0gJyc7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBtb21lbnQodmFsdWUpLmZvcm1hdCh2YWx1ZS5jdXN0b21Gb3JtYXQpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChvdXRwdXQgIT09ICdJbnZhbGlkIGRhdGUnKSB7XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gb3V0cHV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy4jZWxSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICd2YWx1ZScsXG4gICAgICBmb3JtYXR0ZWRWYWx1ZSxcbiAgICApO1xuICB9XG5cbiAgLy8gVE9ETzogVGhpcyBtZXRob2QgdGVjaG5pY2FsbHkgcmV0dXJucyBgU2t5VGltZXBpY2tlclRpbWVPdXRwdXQgfCBzdHJpbmcgfCB1bmRlZmluZWRgLiBIb3dldmVyLCB0aGUgdmFsdWUgaXQgaXMgc2V0IHRvIGlzIHNldCB0byBgU2t5VGltZXBpY2tlclRpbWVPdXRwdXQgfCB1bmRlZmluZWRgLiBXZSBuZWVkIHRvIGNsZWFuIHRoaXMgdXAuXG4gICNmb3JtYXR0ZXIodGltZTogYW55KTogYW55IHtcbiAgICBpZiAodGltZSAmJiB0eXBlb2YgdGltZSAhPT0gJ3N0cmluZycgJiYgJ2xvY2FsJyBpbiB0aW1lKSB7XG4gICAgICByZXR1cm4gdGltZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aW1lID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHRpbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRGb3JtYXQgPSB0aGlzLnRpbWVGb3JtYXQgPT09ICdISCcgPyAnSDptbScgOiAnaDptbSBBJztcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnJldHVybkZvcm1hdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5yZXR1cm5Gb3JtYXQgPSBjdXJyZW50Rm9ybWF0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRUaW1lOiBTa3lUaW1lcGlja2VyVGltZU91dHB1dCA9IHtcbiAgICAgICAgaG91cjogbW9tZW50KHRpbWUsIGN1cnJlbnRGb3JtYXQpLmhvdXIoKSxcbiAgICAgICAgbWludXRlOiBtb21lbnQodGltZSwgY3VycmVudEZvcm1hdCkubWludXRlKCksXG4gICAgICAgIG1lcmlkaWU6IG1vbWVudCh0aW1lLCBjdXJyZW50Rm9ybWF0KS5mb3JtYXQoJ0EnKSxcbiAgICAgICAgdGltZXpvbmU6IHBhcnNlSW50KG1vbWVudCh0aW1lLCBjdXJyZW50Rm9ybWF0KS5mb3JtYXQoJ1onKSwgMTApLFxuICAgICAgICBpc284NjAxOiBtb21lbnQodGltZSwgY3VycmVudEZvcm1hdCkudG9EYXRlKCksXG4gICAgICAgIGxvY2FsOiBtb21lbnQodGltZSwgY3VycmVudEZvcm1hdCkuZm9ybWF0KGN1cnJlbnRGb3JtYXQpLFxuICAgICAgICBjdXN0b21Gb3JtYXQ6IHRoaXMucmV0dXJuRm9ybWF0LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBmb3JtYXRUaW1lO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVUaW1lcGlja2VySW5wdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2t5VGltZXBpY2tlcklucHV0KSB7XG4gICAgICB0aGlzLnNreVRpbWVwaWNrZXJJbnB1dC5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5za3lUaW1lcGlja2VySW5wdXQuc2VsZWN0ZWRUaW1lICE9PSB0aGlzLiNtb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2t5VGltZXBpY2tlcklucHV0LnNlbGVjdGVkVGltZSA9IHRoaXMuI21vZGVsVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICNfb25DaGFuZ2UgPSAoXzogYW55KTogdm9pZCA9PiB7fTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAjX29uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICNfdmFsaWRhdG9yQ2hhbmdlID0gKCk6IHZvaWQgPT4ge307XG59XG4iXX0=","import { NgModule } from '@angular/core';\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\nimport { SkyTimepickerComponent } from './timepicker.component';\nimport { SkyTimepickerInputDirective } from './timepicker.directive';\nimport * as i0 from \"@angular/core\";\nexport class SkyTimepickerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTimepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTimepickerModule, imports: [SkyDatetimeResourcesModule,\n SkyTimepickerInputDirective,\n SkyTimepickerComponent], exports: [SkyTimepickerInputDirective, SkyTimepickerComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTimepickerModule, imports: [SkyDatetimeResourcesModule,\n SkyTimepickerComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTimepickerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n SkyDatetimeResourcesModule,\n SkyTimepickerInputDirective,\n SkyTimepickerComponent,\n ],\n exports: [SkyTimepickerInputDirective, SkyTimepickerComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL3RpbWVwaWNrZXIvdGltZXBpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUVyRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFVckUsTUFBTSxPQUFPLG1CQUFtQjsrR0FBbkIsbUJBQW1CO2dIQUFuQixtQkFBbUIsWUFONUIsMEJBQTBCO1lBQzFCLDJCQUEyQjtZQUMzQixzQkFBc0IsYUFFZCwyQkFBMkIsRUFBRSxzQkFBc0I7Z0hBRWxELG1CQUFtQixZQU41QiwwQkFBMEI7WUFFMUIsc0JBQXNCOzs0RkFJYixtQkFBbUI7a0JBUi9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLDBCQUEwQjt3QkFDMUIsMkJBQTJCO3dCQUMzQixzQkFBc0I7cUJBQ3ZCO29CQUNELE9BQU8sRUFBRSxDQUFDLDJCQUEyQixFQUFFLHNCQUFzQixDQUFDO2lCQUMvRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreURhdGV0aW1lUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vc2hhcmVkL3NreS1kYXRldGltZS1yZXNvdXJjZXMubW9kdWxlJztcblxuaW1wb3J0IHsgU2t5VGltZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vdGltZXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGltZXBpY2tlcklucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi90aW1lcGlja2VyLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBTa3lEYXRldGltZVJlc291cmNlc01vZHVsZSxcbiAgICBTa3lUaW1lcGlja2VySW5wdXREaXJlY3RpdmUsXG4gICAgU2t5VGltZXBpY2tlckNvbXBvbmVudCxcbiAgXSxcbiAgZXhwb3J0czogW1NreVRpbWVwaWNrZXJJbnB1dERpcmVjdGl2ZSwgU2t5VGltZXBpY2tlckNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRpbWVwaWNrZXJNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5dXgtZGF0ZXRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL3NreXV4LWRhdGV0aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1.SkyFuzzyDateService","takeUntil","i1","i1.SkyDatepickerCalendarInnerComponent","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})\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.dev/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})\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 imports: [SkyDatetimeResourcesModule, SkyDatePipe, SkyFuzzyDatePipe],\n providers: [SkyDatePipe, SkyFuzzyDatePipe],\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';\nimport { SkyThemeModule } from '@skyux/theme';\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, SkyThemeModule],\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-datepicker-btn-previous\"\n [attr.aria-label]=\"previousLabel\"\n [skyThemeClass]=\"{\n 'sky-btn-default sky-btn-sm': 'default',\n 'sky-btn-icon-borderless': 'modern'\n }\"\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-datepicker-calendar-title\"\n [id]=\"datepickerId + '-title'\"\n [disabled]=\"datepickerMode === maxMode\"\n [ngClass]=\"{\n 'sky-btn-disabled': datepickerMode === maxMode\n }\"\n [skyThemeClass]=\"{\n 'sky-btn-default sky-btn-sm': 'default',\n 'sky-btn-link': 'modern'\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-datepicker-btn-next\"\n [attr.aria-label]=\"nextLabel\"\n [skyThemeClass]=\"{\n 'sky-btn-default sky-btn-sm': 'default',\n 'sky-btn-icon-borderless': 'modern'\n }\"\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})\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`\n * or `skyFuzzyDatepickerInput` 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/**\n * Provides date input functionality for inputs and handles date parsing, formatting and\n * validation. It emits valid dates as `Date` objects and invalid dates as raw string values.\n */\n@Directive({\n host: {\n '(focusout)': 'onFocusout($event)',\n },\n providers: [SKY_DATEPICKER_VALUE_ACCESSOR, SKY_DATEPICKER_VALIDATOR],\n selector: '[skyDatepickerInput]',\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 is 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. `0` sets the starting day to Sunday.\n * 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})\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})\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})\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 { NgTemplateOutlet } from '@angular/common';\nimport {\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 { SkyLibResourcesPipe } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule, SkyThemeService } from '@skyux/theme';\n\nimport moment from 'moment';\nimport { Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\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 imports: [\n NgTemplateOutlet,\n SkyLibResourcesPipe,\n SkyIconModule,\n SkyThemeModule,\n SkyDatetimeResourcesModule,\n ],\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 [class.sky-timepicker-24hour-hours]=\"is8601\"\n >\n <ol>\n @for (hour of hours; track hour) {\n <li>\n <button\n name=\"hour\"\n type=\"button\"\n [class.sky-btn-active]=\"selectedHour === hour\"\n (click)=\"setTime($event)\"\n >\n {{ hour }}\n </button>\n </li>\n }\n </ol>\n </section>\n <section\n class=\"sky-timepicker-column sky-timepicker-column-minutes\"\n [class.sky-timepicker-24hour-minutes]=\"is8601\"\n >\n <ol>\n @for (minute of minutes; track minute) {\n <li>\n <button\n name=\"minute\"\n type=\"button\"\n [class.sky-btn-active]=\"highlightMinute(selectedMinute, minute)\"\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 [class.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 [class.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})\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 { NgModule } from '@angular/core';\n\nimport { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';\n\nimport { SkyTimepickerComponent } from './timepicker.component';\nimport { SkyTimepickerInputDirective } from './timepicker.directive';\n\n@NgModule({\n imports: [\n SkyDatetimeResourcesModule,\n SkyTimepickerInputDirective,\n SkyTimepickerComponent,\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","i1.SkyDatepickerCalendarInnerComponent","i2","i1.SkyDatepickerConfigService","nextId","i4","i5","i6","i3.SkyDatepickerComponent","i2.SkyFuzzyDateService","i3","i4.SkyDatepickerComponent","distinctUntilChanged","i4.SkyDatepickerInputDirective"],"mappings":"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"}