@ardium-ui/ui 3.4.4 → 3.5.1

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.
Files changed (55) hide show
  1. package/esm2022/lib/_internal/disablable-component.mjs +1 -1
  2. package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +2 -2
  3. package/esm2022/lib/calendar/calendar.component.mjs +437 -0
  4. package/esm2022/lib/calendar/calendar.defaults.mjs +26 -0
  5. package/esm2022/lib/calendar/calendar.internal-types.mjs +2 -0
  6. package/esm2022/lib/calendar/calendar.module.mjs +24 -0
  7. package/esm2022/lib/calendar/calendar.types.mjs +6 -0
  8. package/esm2022/lib/calendar/index.mjs +5 -0
  9. package/esm2022/lib/calendar/views/days-view/days-view.component.mjs +282 -0
  10. package/esm2022/lib/calendar/views/days-view/days-view.helpers.mjs +65 -0
  11. package/esm2022/lib/calendar/views/months-view/months-view.component.mjs +245 -0
  12. package/esm2022/lib/calendar/views/months-view/months-view.helpers.mjs +22 -0
  13. package/esm2022/lib/calendar/views/years-view/years-view.component.mjs +244 -0
  14. package/esm2022/lib/calendar/views/years-view/years-view.helpers.mjs +14 -0
  15. package/esm2022/lib/inputs/date-input/date-input.component.mjs +361 -0
  16. package/esm2022/lib/inputs/date-input/date-input.defaults.mjs +38 -0
  17. package/esm2022/lib/inputs/date-input/date-input.directive.mjs +59 -0
  18. package/esm2022/lib/inputs/date-input/date-input.module.mjs +50 -0
  19. package/esm2022/lib/inputs/date-input/date-input.serializers.mjs +49 -0
  20. package/esm2022/lib/inputs/date-input/date-input.types.mjs +5 -0
  21. package/esm2022/lib/inputs/date-input/index.mjs +6 -0
  22. package/esm2022/public-api.mjs +3 -2
  23. package/fesm2022/ardium-ui-ui.mjs +1882 -52
  24. package/fesm2022/ardium-ui-ui.mjs.map +1 -1
  25. package/lib/_internal/disablable-component.d.ts +1 -1
  26. package/lib/calendar/calendar.component.d.ts +94 -0
  27. package/lib/calendar/calendar.defaults.d.ts +18 -0
  28. package/lib/calendar/calendar.internal-types.d.ts +4 -0
  29. package/lib/calendar/calendar.module.d.ts +14 -0
  30. package/lib/calendar/calendar.types.d.ts +83 -0
  31. package/lib/calendar/index.d.ts +4 -0
  32. package/lib/calendar/views/days-view/days-view.component.d.ts +68 -0
  33. package/lib/calendar/views/days-view/days-view.helpers.d.ts +20 -0
  34. package/lib/calendar/views/months-view/months-view.component.d.ts +61 -0
  35. package/lib/calendar/views/months-view/months-view.helpers.d.ts +3 -0
  36. package/lib/calendar/views/years-view/years-view.component.d.ts +59 -0
  37. package/lib/calendar/views/years-view/years-view.helpers.d.ts +3 -0
  38. package/lib/inputs/date-input/date-input.component.d.ts +95 -0
  39. package/lib/inputs/date-input/date-input.defaults.d.ts +30 -0
  40. package/lib/inputs/date-input/date-input.directive.d.ts +33 -0
  41. package/lib/inputs/date-input/date-input.module.d.ts +14 -0
  42. package/lib/inputs/date-input/date-input.serializers.d.ts +3 -0
  43. package/lib/inputs/date-input/date-input.types.d.ts +16 -0
  44. package/lib/inputs/date-input/index.d.ts +5 -0
  45. package/package.json +1 -1
  46. package/prebuilt-themes/default/calendar-OLD.css +294 -0
  47. package/prebuilt-themes/default/calendar-OLD.css.map +1 -0
  48. package/prebuilt-themes/default/calendar.css +100 -80
  49. package/prebuilt-themes/default/calendar.css.map +1 -1
  50. package/prebuilt-themes/default/inputs/date-input.css +68 -0
  51. package/prebuilt-themes/default/inputs/date-input.css.map +1 -0
  52. package/public-api.d.ts +2 -0
  53. package/themes/default/calendar-OLD.scss +183 -0
  54. package/themes/default/calendar.scss +120 -98
  55. package/themes/default/inputs/date-input.scss +32 -0
@@ -0,0 +1,245 @@
1
+ import { ChangeDetectionStrategy, Component, computed, HostListener, input, output, viewChild, } from '@angular/core';
2
+ import { isNull } from 'simple-bool';
3
+ import { isYearOutOfRange } from '../years-view/years-view.helpers';
4
+ import { getCalendarMonthsArray } from './months-view.helpers';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "../../../buttons/icon-button/icon-button.component";
8
+ import * as i3 from "../../../icon/icon.component";
9
+ import * as i4 from "../../../buttons/button/button.component";
10
+ const TODAY = new Date();
11
+ export class MonthsViewComponent {
12
+ constructor() {
13
+ this.tabIndex = input.required();
14
+ this.readOnly = input.required();
15
+ this.disabled = input.required();
16
+ this.autoFocus = input.required();
17
+ this._isUsingKeyboard = input.required();
18
+ this.color = input.required();
19
+ this.activeYear = input.required();
20
+ this.activeMonth = input.required();
21
+ this.selectedDate = input.required();
22
+ this.min = input.required();
23
+ this.max = input.required();
24
+ this.monthsArray = computed(() => getCalendarMonthsArray(this.activeYear(), this.min(), this.max()));
25
+ this.currentAriaLabel = computed(() => {
26
+ const month = this.highlightedMonth();
27
+ if (month === null) {
28
+ return '';
29
+ }
30
+ return new Date(this.activeYear(), month, 1).toLocaleDateString(undefined, {
31
+ year: 'numeric',
32
+ month: 'long',
33
+ });
34
+ });
35
+ //! outputs
36
+ this.triggerOpenYearsView = output();
37
+ this.triggerOpenDaysView = output();
38
+ this.focusEvent = output({ alias: 'focus' });
39
+ this.blurEvent = output({ alias: 'blur' });
40
+ this.triggerSelectMonth = output();
41
+ this.triggeChangeYear = output();
42
+ this.triggerHighlightMonth = output();
43
+ this.triggerHighlightNextMonth = output();
44
+ this.triggerHighlightPreviousMonth = output();
45
+ this.triggerHighlightFirstMonth = output();
46
+ this.triggerHighlightLastMonth = output();
47
+ this.triggerHighlightSameMonthPreviousPage = output();
48
+ this.triggerHighlightSameMonthNextPage = output();
49
+ //! calendar entry hover & click
50
+ this.highlightedMonth = input.required();
51
+ //! focusing
52
+ this.focusableElement = viewChild.required('focusableElement');
53
+ //! templates
54
+ this.monthsViewHeaderTemplate = input.required();
55
+ this.monthTemplate = input.required();
56
+ //! template contexts
57
+ this.monthsViewHeaderContext = computed(() => ({
58
+ nextPage: () => {
59
+ this.triggeChangeYear.emit(this.activeYear() + 1);
60
+ },
61
+ prevPage: () => {
62
+ this.triggeChangeYear.emit(this.activeYear() - 1);
63
+ },
64
+ openYearsView: () => {
65
+ this.triggerOpenYearsView.emit();
66
+ },
67
+ openDaysView: () => {
68
+ this.triggerOpenDaysView.emit();
69
+ },
70
+ canGoToNextPage: !this.isYearOutOfRange(this.activeYear() + 1),
71
+ canGoToPreviousPage: !this.isYearOutOfRange(this.activeYear() - 1),
72
+ year: this.activeYear(),
73
+ date: new Date(this.activeYear(), 0, 1),
74
+ $implicit: this.activeYear(),
75
+ }));
76
+ this.monthContext = computed(() => (month) => {
77
+ const date = new Date(this.activeYear(), month, 1);
78
+ return {
79
+ month,
80
+ date,
81
+ $implicit: date,
82
+ select: (month) => {
83
+ if (month instanceof Date)
84
+ month = month.getMonth();
85
+ this.triggerSelectMonth.emit(month);
86
+ },
87
+ };
88
+ });
89
+ }
90
+ onMouseMove() {
91
+ if (this._isUsingKeyboard())
92
+ return;
93
+ if (this.highlightedMonth())
94
+ this.triggerHighlightMonth.emit(null);
95
+ }
96
+ ngAfterViewInit() {
97
+ if (!this.autoFocus())
98
+ return;
99
+ this.focus();
100
+ this.triggerHighlightMonth.emit(0);
101
+ }
102
+ onCalendarMonthMouseover(month) {
103
+ if (this._isUsingKeyboard())
104
+ return;
105
+ if (this.disabled() || this.readOnly())
106
+ return;
107
+ this.triggerHighlightMonth.emit(month);
108
+ }
109
+ onCalendarMonthClick(month) {
110
+ if (this.disabled() || this.readOnly())
111
+ return;
112
+ this.triggerSelectMonth.emit(month);
113
+ }
114
+ onMonthGridFocus() {
115
+ if (this.disabled() || this.readOnly())
116
+ return;
117
+ this.triggerHighlightMonth.emit(0);
118
+ }
119
+ onMonthGridBlur() {
120
+ if (this.disabled() || this.readOnly())
121
+ return;
122
+ this.triggerHighlightMonth.emit(null);
123
+ }
124
+ onMonthGridClick() {
125
+ if (this.disabled() || this.readOnly())
126
+ return;
127
+ if (this.highlightedMonth() !== null)
128
+ return;
129
+ this.triggerHighlightMonth.emit(0);
130
+ }
131
+ focus() {
132
+ this.focusableElement().nativeElement.focus();
133
+ }
134
+ //! keyboard controls
135
+ onMainGridKeydown(event) {
136
+ if (this.disabled() || this.readOnly())
137
+ return;
138
+ switch (event.code) {
139
+ case 'Space':
140
+ case 'Enter':
141
+ this._onEnterPress(event);
142
+ break;
143
+ case 'ArrowUp':
144
+ this._onArrowUpPress(event);
145
+ break;
146
+ case 'ArrowDown':
147
+ this._onArrowDownPress(event);
148
+ break;
149
+ case 'ArrowLeft':
150
+ this._onArrowLeftPress(event);
151
+ break;
152
+ case 'ArrowRight':
153
+ this._onArrowRightPress(event);
154
+ break;
155
+ case 'Home':
156
+ this._onHomePress(event);
157
+ break;
158
+ case 'End':
159
+ this._onEndPress(event);
160
+ break;
161
+ case 'PageUp':
162
+ this._onPageUpPress(event);
163
+ break;
164
+ case 'PageDown':
165
+ this._onPageDownPress(event);
166
+ break;
167
+ default:
168
+ return;
169
+ }
170
+ }
171
+ //select currently selected entry
172
+ _onEnterPress(event) {
173
+ event.preventDefault();
174
+ const month = this.highlightedMonth();
175
+ if (isNull(month))
176
+ return;
177
+ this.triggerSelectMonth.emit(month);
178
+ }
179
+ //highlight the entry one line below
180
+ _onArrowDownPress(event) {
181
+ event.preventDefault();
182
+ this.triggerHighlightNextMonth.emit(4); //4 months per line
183
+ }
184
+ //highlight the entry one line above
185
+ _onArrowUpPress(event) {
186
+ event.preventDefault();
187
+ this.triggerHighlightPreviousMonth.emit(4); //4 months per line
188
+ }
189
+ //highlight next entry
190
+ _onArrowRightPress(event) {
191
+ event.preventDefault();
192
+ this.triggerHighlightNextMonth.emit(1);
193
+ }
194
+ //highlight previous entry
195
+ _onArrowLeftPress(event) {
196
+ event.preventDefault();
197
+ this.triggerHighlightPreviousMonth.emit(1);
198
+ }
199
+ //highlight first entry on the page
200
+ _onHomePress(event) {
201
+ event.preventDefault();
202
+ this.triggerHighlightFirstMonth.emit();
203
+ }
204
+ //highlight last entry on the page
205
+ _onEndPress(event) {
206
+ event.preventDefault();
207
+ this.triggerHighlightLastMonth.emit();
208
+ }
209
+ //alone: highlight same entry on the next page
210
+ //with alt: highlight same entry multiple pages after (10 pages)
211
+ _onPageDownPress(event) {
212
+ event.preventDefault();
213
+ this.triggerHighlightSameMonthNextPage.emit(event.altKey);
214
+ }
215
+ //alone: highlight same entry on the previous page
216
+ //with alt: highlight same entry multiple pages before (10 pages)
217
+ _onPageUpPress(event) {
218
+ event.preventDefault();
219
+ this.triggerHighlightSameMonthPreviousPage.emit(event.altKey);
220
+ }
221
+ //! helpers
222
+ isMonthToday(month) {
223
+ return this.activeYear() === TODAY.getFullYear() && month === TODAY.getMonth();
224
+ }
225
+ isMonthSelected(month) {
226
+ if (month instanceof Date)
227
+ month = month.getMonth();
228
+ return (this.selectedDate() !== null &&
229
+ this.activeYear() === this.selectedDate()?.getFullYear() &&
230
+ month === this.selectedDate()?.getMonth());
231
+ }
232
+ isYearOutOfRange(year) {
233
+ return isYearOutOfRange(year, this.min(), this.max());
234
+ }
235
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonthsViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
236
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MonthsViewComponent, selector: "ard-months-view", inputs: { tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: true, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: true, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: true, transformFunction: null }, _isUsingKeyboard: { classPropertyName: "_isUsingKeyboard", publicName: "_isUsingKeyboard", isSignal: true, isRequired: true, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: true, transformFunction: null }, activeYear: { classPropertyName: "activeYear", publicName: "activeYear", isSignal: true, isRequired: true, transformFunction: null }, activeMonth: { classPropertyName: "activeMonth", publicName: "activeMonth", isSignal: true, isRequired: true, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selectedDate", isSignal: true, isRequired: true, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: true, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: true, transformFunction: null }, highlightedMonth: { classPropertyName: "highlightedMonth", publicName: "highlightedMonth", isSignal: true, isRequired: true, transformFunction: null }, monthsViewHeaderTemplate: { classPropertyName: "monthsViewHeaderTemplate", publicName: "monthsViewHeaderTemplate", isSignal: true, isRequired: true, transformFunction: null }, monthTemplate: { classPropertyName: "monthTemplate", publicName: "monthTemplate", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { triggerOpenYearsView: "triggerOpenYearsView", triggerOpenDaysView: "triggerOpenDaysView", focusEvent: "focus", blurEvent: "blur", triggerSelectMonth: "triggerSelectMonth", triggeChangeYear: "triggeChangeYear", triggerHighlightMonth: "triggerHighlightMonth", triggerHighlightNextMonth: "triggerHighlightNextMonth", triggerHighlightPreviousMonth: "triggerHighlightPreviousMonth", triggerHighlightFirstMonth: "triggerHighlightFirstMonth", triggerHighlightLastMonth: "triggerHighlightLastMonth", triggerHighlightSameMonthPreviousPage: "triggerHighlightSameMonthPreviousPage", triggerHighlightSameMonthNextPage: "triggerHighlightSameMonthNextPage" }, host: { listeners: { "mousemove": "onMouseMove()" } }, viewQueries: [{ propertyName: "focusableElement", first: true, predicate: ["focusableElement"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ard-months-view\">\r\n @if (!readOnly()) {\r\n <div class=\"ard-calendar__top-toolbar\">\r\n <ng-template\r\n #defaultMonthsViewHeaderTemplate\r\n let-year\r\n let-nextPage=\"nextPage\"\r\n let-prevPage=\"prevPage\"\r\n let-canGoToNextPage=\"canGoToNextPage\"\r\n let-canGoToPreviousPage=\"canGoToPreviousPage\"\r\n let-openDaysView=\"openDaysView\"\r\n >\r\n <div class=\"ard-calendar__calendar-header\">\r\n <ard-button\r\n class=\"ard-calendar__header-button\"\r\n appearance=\"transparent\"\r\n [color]=\"color()\"\r\n [tabIndex]=\"tabIndex()\"\r\n (click)=\"openDaysView()\"\r\n >\r\n {{ year }}\r\n <div class=\"ard-dropdown-arrow\"></div>\r\n </ard-button>\r\n <div class=\"ard-calendar-arrows\">\r\n <ard-icon-button\r\n size=\"small\"\r\n appearance=\"transparent\"\r\n color=\"none\"\r\n (click)=\"prevPage()\"\r\n [tabIndex]=\"tabIndex()\"\r\n [disabled]=\"!canGoToPreviousPage\"\r\n >\r\n <ard-icon>chevron_left</ard-icon>\r\n </ard-icon-button>\r\n <ard-icon-button\r\n size=\"small\"\r\n appearance=\"transparent\"\r\n color=\"none\"\r\n (click)=\"nextPage()\"\r\n [tabIndex]=\"tabIndex()\"\r\n [disabled]=\"!canGoToNextPage\"\r\n >\r\n <ard-icon>chevron_right</ard-icon>\r\n </ard-icon-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"monthsViewHeaderTemplate() || defaultMonthsViewHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"monthsViewHeaderContext()\"\r\n />\r\n </div>\r\n }\r\n <div\r\n #focusableElement\r\n class=\"ard-calendar__simple-grid\"\r\n [tabindex]=\"tabIndex()\"\r\n [ariaLabel]=\"currentAriaLabel()\"\r\n (focus)=\"focusEvent.emit($event)\"\r\n (focus)=\"onMonthGridFocus()\"\r\n (blur)=\"blurEvent.emit($event)\"\r\n (blur)=\"onMonthGridBlur()\"\r\n (click)=\"onMonthGridClick()\"\r\n (keydown)=\"onMainGridKeydown($event)\"\r\n role=\"grid\"\r\n >\r\n @for (month of monthsArray(); track $index) {\r\n <div\r\n class=\"ard-calendar__entry\"\r\n [class.ard-calendar__entry-highlighted]=\"highlightedMonth() === month.value\"\r\n [class.ard-calendar__entry-disabled]=\"month.disabled\"\r\n [class.ard-calendar__entry-selected]=\"isMonthSelected(month.value)\"\r\n [class.ard-calendar-today]=\"isMonthToday(month.value)\"\r\n (click)=\"onCalendarMonthClick(month.value)\"\r\n (mousemove)=\"$event.stopPropagation()\"\r\n (mouseover)=\"onCalendarMonthMouseover(month.value)\"\r\n role=\"gridcell\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"ard-calendar__entry-button\"\r\n tabindex=\"-1\"\r\n >\r\n <div class=\"ard-focus-overlay\"></div>\r\n <div class=\"ard-button-content\">\r\n <ng-template\r\n #defaultMonthTemplate\r\n let-month\r\n >\r\n {{ month | date : 'MMM' | uppercase }}\r\n </ng-template>\r\n <ng-template\r\n [ngTemplateOutlet]=\"monthTemplate() || defaultMonthTemplate\"\r\n [ngTemplateOutletContext]=\"monthContext()(month.value)\"\r\n />\r\n </div>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ArdiumIconButtonComponent, selector: "ard-icon-button", inputs: ["wrapperClasses", "type", "color", "lightColoring", "compact"] }, { kind: "component", type: i3.ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }, { kind: "component", type: i4.ArdiumButtonComponent, selector: "ard-button", inputs: ["icon", "variant", "alignIcon", "vertical"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
237
+ }
238
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonthsViewComponent, decorators: [{
239
+ type: Component,
240
+ args: [{ selector: 'ard-months-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ard-months-view\">\r\n @if (!readOnly()) {\r\n <div class=\"ard-calendar__top-toolbar\">\r\n <ng-template\r\n #defaultMonthsViewHeaderTemplate\r\n let-year\r\n let-nextPage=\"nextPage\"\r\n let-prevPage=\"prevPage\"\r\n let-canGoToNextPage=\"canGoToNextPage\"\r\n let-canGoToPreviousPage=\"canGoToPreviousPage\"\r\n let-openDaysView=\"openDaysView\"\r\n >\r\n <div class=\"ard-calendar__calendar-header\">\r\n <ard-button\r\n class=\"ard-calendar__header-button\"\r\n appearance=\"transparent\"\r\n [color]=\"color()\"\r\n [tabIndex]=\"tabIndex()\"\r\n (click)=\"openDaysView()\"\r\n >\r\n {{ year }}\r\n <div class=\"ard-dropdown-arrow\"></div>\r\n </ard-button>\r\n <div class=\"ard-calendar-arrows\">\r\n <ard-icon-button\r\n size=\"small\"\r\n appearance=\"transparent\"\r\n color=\"none\"\r\n (click)=\"prevPage()\"\r\n [tabIndex]=\"tabIndex()\"\r\n [disabled]=\"!canGoToPreviousPage\"\r\n >\r\n <ard-icon>chevron_left</ard-icon>\r\n </ard-icon-button>\r\n <ard-icon-button\r\n size=\"small\"\r\n appearance=\"transparent\"\r\n color=\"none\"\r\n (click)=\"nextPage()\"\r\n [tabIndex]=\"tabIndex()\"\r\n [disabled]=\"!canGoToNextPage\"\r\n >\r\n <ard-icon>chevron_right</ard-icon>\r\n </ard-icon-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"monthsViewHeaderTemplate() || defaultMonthsViewHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"monthsViewHeaderContext()\"\r\n />\r\n </div>\r\n }\r\n <div\r\n #focusableElement\r\n class=\"ard-calendar__simple-grid\"\r\n [tabindex]=\"tabIndex()\"\r\n [ariaLabel]=\"currentAriaLabel()\"\r\n (focus)=\"focusEvent.emit($event)\"\r\n (focus)=\"onMonthGridFocus()\"\r\n (blur)=\"blurEvent.emit($event)\"\r\n (blur)=\"onMonthGridBlur()\"\r\n (click)=\"onMonthGridClick()\"\r\n (keydown)=\"onMainGridKeydown($event)\"\r\n role=\"grid\"\r\n >\r\n @for (month of monthsArray(); track $index) {\r\n <div\r\n class=\"ard-calendar__entry\"\r\n [class.ard-calendar__entry-highlighted]=\"highlightedMonth() === month.value\"\r\n [class.ard-calendar__entry-disabled]=\"month.disabled\"\r\n [class.ard-calendar__entry-selected]=\"isMonthSelected(month.value)\"\r\n [class.ard-calendar-today]=\"isMonthToday(month.value)\"\r\n (click)=\"onCalendarMonthClick(month.value)\"\r\n (mousemove)=\"$event.stopPropagation()\"\r\n (mouseover)=\"onCalendarMonthMouseover(month.value)\"\r\n role=\"gridcell\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"ard-calendar__entry-button\"\r\n tabindex=\"-1\"\r\n >\r\n <div class=\"ard-focus-overlay\"></div>\r\n <div class=\"ard-button-content\">\r\n <ng-template\r\n #defaultMonthTemplate\r\n let-month\r\n >\r\n {{ month | date : 'MMM' | uppercase }}\r\n </ng-template>\r\n <ng-template\r\n [ngTemplateOutlet]=\"monthTemplate() || defaultMonthTemplate\"\r\n [ngTemplateOutletContext]=\"monthContext()(month.value)\"\r\n />\r\n </div>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n" }]
241
+ }], propDecorators: { onMouseMove: [{
242
+ type: HostListener,
243
+ args: ['mousemove']
244
+ }] } });
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGhzLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jYWxlbmRhci92aWV3cy9tb250aHMtdmlldy9tb250aHMtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NhbGVuZGFyL3ZpZXdzL21vbnRocy12aWV3L21vbnRocy12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFFUixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7O0FBRS9ELE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFRekIsTUFBTSxPQUFPLG1CQUFtQjtJQU5oQztRQU9XLGFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDcEMsYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUNyQyxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO1FBRXJDLGNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFXLENBQUM7UUFFdEMscUJBQWdCLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO1FBYzdDLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFrQixDQUFDO1FBRXpDLGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDdEMsZ0JBQVcs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SSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDOytHQXhNVSxtQkFBbUI7bUdBQW5CLG1CQUFtQix1dkZDMUJoQyx1K0dBc0dBOzs0RkQ1RWEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzhCQVkvQyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgaW5wdXQsXHJcbiAgb3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIHZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNOdWxsIH0gZnJvbSAnc2ltcGxlLWJvb2wnO1xyXG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoQ29udGV4dCwgQ2FsZW5kYXJNb250aHNWaWV3SGVhZGVyQ29udGV4dCB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLnR5cGVzJztcclxuaW1wb3J0IHsgaXNZZWFyT3V0T2ZSYW5nZSB9IGZyb20gJy4uL3llYXJzLXZpZXcveWVhcnMtdmlldy5oZWxwZXJzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29sb3IgfSBmcm9tICcuLy4uLy4uLy4uL3R5cGVzL2NvbG9ycy50eXBlcyc7XHJcbmltcG9ydCB7IGdldENhbGVuZGFyTW9udGhzQXJyYXkgfSBmcm9tICcuL21vbnRocy12aWV3LmhlbHBlcnMnO1xyXG5cclxuY29uc3QgVE9EQVkgPSBuZXcgRGF0ZSgpO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcmQtbW9udGhzLXZpZXcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tb250aHMtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL21vbnRocy12aWV3LmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1vbnRoc1ZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICByZWFkb25seSB0YWJJbmRleCA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcclxuICByZWFkb25seSByZWFkT25seSA9IGlucHV0LnJlcXVpcmVkPGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xyXG5cclxuICByZWFkb25seSBhdXRvRm9jdXMgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xyXG5cclxuICByZWFkb25seSBfaXNVc2luZ0tleWJvYXJkID0gaW5wdXQucmVxdWlyZWQ8Ym9vbGVhbj4oKTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vtb3ZlJylcclxuICBvbk1vdXNlTW92ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pc1VzaW5nS2V5Ym9hcmQoKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRNb250aCgpKSB0aGlzLnRyaWdnZXJIaWdobGlnaHRNb250aC5lbWl0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9Gb2N1cygpKSByZXR1cm47XHJcbiAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRNb250aC5lbWl0KDApO1xyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgY29sb3IgPSBpbnB1dC5yZXF1aXJlZDxDb21wb25lbnRDb2xvcj4oKTtcclxuXHJcbiAgcmVhZG9ubHkgYWN0aXZlWWVhciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcclxuICByZWFkb25seSBhY3RpdmVNb250aCA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcclxuXHJcbiAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlID0gaW5wdXQucmVxdWlyZWQ8RGF0ZSB8IG51bGw+KCk7XHJcblxyXG4gIHJlYWRvbmx5IG1pbiA9IGlucHV0LnJlcXVpcmVkPERhdGUgfCBudWxsPigpO1xyXG4gIHJlYWRvbmx5IG1heCA9IGlucHV0LnJlcXVpcmVkPERhdGUgfCBudWxsPigpO1xyXG5cclxuICByZWFkb25seSBtb250aHNBcnJheSA9IGNvbXB1dGVkKCgpID0+IGdldENhbGVuZGFyTW9udGhzQXJyYXkodGhpcy5hY3RpdmVZZWFyKCksIHRoaXMubWluKCksIHRoaXMubWF4KCkpKTtcclxuXHJcbiAgcmVhZG9ubHkgY3VycmVudEFyaWFMYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IG1vbnRoID0gdGhpcy5oaWdobGlnaHRlZE1vbnRoKCk7XHJcbiAgICBpZiAobW9udGggPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuYWN0aXZlWWVhcigpLCBtb250aCwgMSkudG9Mb2NhbGVEYXRlU3RyaW5nKHVuZGVmaW5lZCwge1xyXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXHJcbiAgICAgIG1vbnRoOiAnbG9uZycsXHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgLy8hIG91dHB1dHNcclxuICByZWFkb25seSB0cmlnZ2VyT3BlblllYXJzVmlldyA9IG91dHB1dDx2b2lkPigpO1xyXG4gIHJlYWRvbmx5IHRyaWdnZXJPcGVuRGF5c1ZpZXcgPSBvdXRwdXQ8dm9pZD4oKTtcclxuXHJcbiAgcmVhZG9ubHkgZm9jdXNFdmVudCA9IG91dHB1dDxGb2N1c0V2ZW50Pih7IGFsaWFzOiAnZm9jdXMnIH0pO1xyXG4gIHJlYWRvbmx5IGJsdXJFdmVudCA9IG91dHB1dDxGb2N1c0V2ZW50Pih7IGFsaWFzOiAnYmx1cicgfSk7XHJcblxyXG4gIHJlYWRvbmx5IHRyaWdnZXJTZWxlY3RNb250aCA9IG91dHB1dDxudW1iZXI+KCk7XHJcbiAgcmVhZG9ubHkgdHJpZ2dlQ2hhbmdlWWVhciA9IG91dHB1dDxudW1iZXI+KCk7XHJcblxyXG4gIHJlYWRvbmx5IHRyaWdnZXJIaWdobGlnaHRNb250aCA9IG91dHB1dDxudW1iZXIgfCBudWxsPigpO1xyXG4gIHJlYWRvbmx5IHRyaWdnZXJIaWdobGlnaHROZXh0TW9udGggPSBvdXRwdXQ8bnVtYmVyPigpO1xyXG4gIHJlYWRvbmx5IHRyaWdnZXJIaWdobGlnaHRQcmV2aW91c01vbnRoID0gb3V0cHV0PG51bWJlcj4oKTtcclxuICByZWFkb25seSB0cmlnZ2VySGlnaGxpZ2h0Rmlyc3RNb250aCA9IG91dHB1dDx2b2lkPigpO1xyXG4gIHJlYWRvbmx5IHRyaWdnZXJIaWdobGlnaHRMYXN0TW9udGggPSBvdXRwdXQ8dm9pZD4oKTtcclxuICByZWFkb25seSB0cmlnZ2VySGlnaGxpZ2h0U2FtZU1vbnRoUHJldmlvdXNQYWdlID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgdHJpZ2dlckhpZ2hsaWdodFNhbWVNb250aE5leHRQYWdlID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcblxyXG4gIC8vISBjYWxlbmRhciBlbnRyeSBob3ZlciAmIGNsaWNrXHJcbiAgcmVhZG9ubHkgaGlnaGxpZ2h0ZWRNb250aCA9IGlucHV0LnJlcXVpcmVkPG51bWJlciB8IG51bGw+KCk7XHJcblxyXG4gIG9uQ2FsZW5kYXJNb250aE1vdXNlb3Zlcihtb250aDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNVc2luZ0tleWJvYXJkKCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5yZWFkT25seSgpKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy50cmlnZ2VySGlnaGxpZ2h0TW9udGguZW1pdChtb250aCk7XHJcbiAgfVxyXG5cclxuICBvbkNhbGVuZGFyTW9udGhDbGljayhtb250aDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpIHx8IHRoaXMucmVhZE9ubHkoKSkgcmV0dXJuO1xyXG4gICAgdGhpcy50cmlnZ2VyU2VsZWN0TW9udGguZW1pdChtb250aCk7XHJcbiAgfVxyXG5cclxuICBvbk1vbnRoR3JpZEZvY3VzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSB8fCB0aGlzLnJlYWRPbmx5KCkpIHJldHVybjtcclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodE1vbnRoLmVtaXQoMCk7XHJcbiAgfVxyXG4gIG9uTW9udGhHcmlkQmx1cigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5yZWFkT25seSgpKSByZXR1cm47XHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRNb250aC5lbWl0KG51bGwpO1xyXG4gIH1cclxuICBvbk1vbnRoR3JpZENsaWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSB8fCB0aGlzLnJlYWRPbmx5KCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmhpZ2hsaWdodGVkTW9udGgoKSAhPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgdGhpcy50cmlnZ2VySGlnaGxpZ2h0TW9udGguZW1pdCgwKTtcclxuICB9XHJcblxyXG4gIC8vISBmb2N1c2luZ1xyXG4gIHJlYWRvbmx5IGZvY3VzYWJsZUVsZW1lbnQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdmb2N1c2FibGVFbGVtZW50Jyk7XHJcblxyXG4gIGZvY3VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb2N1c2FibGVFbGVtZW50KCkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgLy8hIGtleWJvYXJkIGNvbnRyb2xzXHJcbiAgb25NYWluR3JpZEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5yZWFkT25seSgpKSByZXR1cm47XHJcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcclxuICAgICAgY2FzZSAnU3BhY2UnOlxyXG4gICAgICBjYXNlICdFbnRlcic6XHJcbiAgICAgICAgdGhpcy5fb25FbnRlclByZXNzKGV2ZW50KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgICAgdGhpcy5fb25BcnJvd1VwUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxyXG4gICAgICAgIHRoaXMuX29uQXJyb3dEb3duUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxyXG4gICAgICAgIHRoaXMuX29uQXJyb3dMZWZ0UHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcclxuICAgICAgICB0aGlzLl9vbkFycm93UmlnaHRQcmVzcyhldmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0hvbWUnOlxyXG4gICAgICAgIHRoaXMuX29uSG9tZVByZXNzKGV2ZW50KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnRW5kJzpcclxuICAgICAgICB0aGlzLl9vbkVuZFByZXNzKGV2ZW50KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnUGFnZVVwJzpcclxuICAgICAgICB0aGlzLl9vblBhZ2VVcFByZXNzKGV2ZW50KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnUGFnZURvd24nOlxyXG4gICAgICAgIHRoaXMuX29uUGFnZURvd25QcmVzcyhldmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbiAgLy9zZWxlY3QgY3VycmVudGx5IHNlbGVjdGVkIGVudHJ5XHJcbiAgcHJpdmF0ZSBfb25FbnRlclByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGNvbnN0IG1vbnRoID0gdGhpcy5oaWdobGlnaHRlZE1vbnRoKCk7XHJcbiAgICBpZiAoaXNOdWxsKG1vbnRoKSkgcmV0dXJuO1xyXG4gICAgdGhpcy50cmlnZ2VyU2VsZWN0TW9udGguZW1pdChtb250aCk7XHJcbiAgfVxyXG4gIC8vaGlnaGxpZ2h0IHRoZSBlbnRyeSBvbmUgbGluZSBiZWxvd1xyXG4gIHByaXZhdGUgX29uQXJyb3dEb3duUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHROZXh0TW9udGguZW1pdCg0KTsgLy80IG1vbnRocyBwZXIgbGluZVxyXG4gIH1cclxuICAvL2hpZ2hsaWdodCB0aGUgZW50cnkgb25lIGxpbmUgYWJvdmVcclxuICBwcml2YXRlIF9vbkFycm93VXBQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodFByZXZpb3VzTW9udGguZW1pdCg0KTsgLy80IG1vbnRocyBwZXIgbGluZVxyXG4gIH1cclxuICAvL2hpZ2hsaWdodCBuZXh0IGVudHJ5XHJcbiAgcHJpdmF0ZSBfb25BcnJvd1JpZ2h0UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHROZXh0TW9udGguZW1pdCgxKTtcclxuICB9XHJcbiAgLy9oaWdobGlnaHQgcHJldmlvdXMgZW50cnlcclxuICBwcml2YXRlIF9vbkFycm93TGVmdFByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy50cmlnZ2VySGlnaGxpZ2h0UHJldmlvdXNNb250aC5lbWl0KDEpO1xyXG4gIH1cclxuICAvL2hpZ2hsaWdodCBmaXJzdCBlbnRyeSBvbiB0aGUgcGFnZVxyXG4gIHByaXZhdGUgX29uSG9tZVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy50cmlnZ2VySGlnaGxpZ2h0Rmlyc3RNb250aC5lbWl0KCk7XHJcbiAgfVxyXG4gIC8vaGlnaGxpZ2h0IGxhc3QgZW50cnkgb24gdGhlIHBhZ2VcclxuICBwcml2YXRlIF9vbkVuZFByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy50cmlnZ2VySGlnaGxpZ2h0TGFzdE1vbnRoLmVtaXQoKTtcclxuICB9XHJcbiAgLy9hbG9uZTogaGlnaGxpZ2h0IHNhbWUgZW50cnkgb24gdGhlIG5leHQgcGFnZVxyXG4gIC8vd2l0aCBhbHQ6IGhpZ2hsaWdodCBzYW1lIGVudHJ5IG11bHRpcGxlIHBhZ2VzIGFmdGVyICgxMCBwYWdlcylcclxuICBwcml2YXRlIF9vblBhZ2VEb3duUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRTYW1lTW9udGhOZXh0UGFnZS5lbWl0KGV2ZW50LmFsdEtleSk7XHJcbiAgfVxyXG4gIC8vYWxvbmU6IGhpZ2hsaWdodCBzYW1lIGVudHJ5IG9uIHRoZSBwcmV2aW91cyBwYWdlXHJcbiAgLy93aXRoIGFsdDogaGlnaGxpZ2h0IHNhbWUgZW50cnkgbXVsdGlwbGUgcGFnZXMgYmVmb3JlICgxMCBwYWdlcylcclxuICBwcml2YXRlIF9vblBhZ2VVcFByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy50cmlnZ2VySGlnaGxpZ2h0U2FtZU1vbnRoUHJldmlvdXNQYWdlLmVtaXQoZXZlbnQuYWx0S2V5KTtcclxuICB9XHJcblxyXG4gIC8vISBoZWxwZXJzXHJcbiAgaXNNb250aFRvZGF5KG1vbnRoOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZVllYXIoKSA9PT0gVE9EQVkuZ2V0RnVsbFllYXIoKSAmJiBtb250aCA9PT0gVE9EQVkuZ2V0TW9udGgoKTtcclxuICB9XHJcbiAgaXNNb250aFNlbGVjdGVkKG1vbnRoOiBudW1iZXIgfCBEYXRlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAobW9udGggaW5zdGFuY2VvZiBEYXRlKSBtb250aCA9IG1vbnRoLmdldE1vbnRoKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSgpICE9PSBudWxsICYmXHJcbiAgICAgIHRoaXMuYWN0aXZlWWVhcigpID09PSB0aGlzLnNlbGVjdGVkRGF0ZSgpPy5nZXRGdWxsWWVhcigpICYmXHJcbiAgICAgIG1vbnRoID09PSB0aGlzLnNlbGVjdGVkRGF0ZSgpPy5nZXRNb250aCgpXHJcbiAgICApO1xyXG4gIH1cclxuICBpc1llYXJPdXRPZlJhbmdlKHllYXI6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaXNZZWFyT3V0T2ZSYW5nZSh5ZWFyLCB0aGlzLm1pbigpLCB0aGlzLm1heCgpKTtcclxuICB9XHJcblxyXG4gIC8vISB0ZW1wbGF0ZXNcclxuICByZWFkb25seSBtb250aHNWaWV3SGVhZGVyVGVtcGxhdGUgPSBpbnB1dC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjxDYWxlbmRhck1vbnRoc1ZpZXdIZWFkZXJDb250ZXh0PiB8IHVuZGVmaW5lZD4oKTtcclxuICByZWFkb25seSBtb250aFRlbXBsYXRlID0gaW5wdXQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8Q2FsZW5kYXJNb250aENvbnRleHQ+IHwgdW5kZWZpbmVkPigpO1xyXG5cclxuICAvLyEgdGVtcGxhdGUgY29udGV4dHNcclxuICByZWFkb25seSBtb250aHNWaWV3SGVhZGVyQ29udGV4dCA9IGNvbXB1dGVkKFxyXG4gICAgKCk6IENhbGVuZGFyTW9udGhzVmlld0hlYWRlckNvbnRleHQgPT4gKHtcclxuICAgICAgbmV4dFBhZ2U6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnRyaWdnZUNoYW5nZVllYXIuZW1pdCh0aGlzLmFjdGl2ZVllYXIoKSArIDEpO1xyXG4gICAgICB9LFxyXG4gICAgICBwcmV2UGFnZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJpZ2dlQ2hhbmdlWWVhci5lbWl0KHRoaXMuYWN0aXZlWWVhcigpIC0gMSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIG9wZW5ZZWFyc1ZpZXc6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnRyaWdnZXJPcGVuWWVhcnNWaWV3LmVtaXQoKTtcclxuICAgICAgfSxcclxuICAgICAgb3BlbkRheXNWaWV3OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyT3BlbkRheXNWaWV3LmVtaXQoKTtcclxuICAgICAgfSxcclxuICAgICAgY2FuR29Ub05leHRQYWdlOiAhdGhpcy5pc1llYXJPdXRPZlJhbmdlKHRoaXMuYWN0aXZlWWVhcigpICsgMSksXHJcbiAgICAgIGNhbkdvVG9QcmV2aW91c1BhZ2U6ICF0aGlzLmlzWWVhck91dE9mUmFuZ2UodGhpcy5hY3RpdmVZZWFyKCkgLSAxKSxcclxuICAgICAgeWVhcjogdGhpcy5hY3RpdmVZZWFyKCksXHJcbiAgICAgIGRhdGU6IG5ldyBEYXRlKHRoaXMuYWN0aXZlWWVhcigpLCAwLCAxKSxcclxuICAgICAgJGltcGxpY2l0OiB0aGlzLmFjdGl2ZVllYXIoKSxcclxuICAgIH0pXHJcbiAgKTtcclxuXHJcbiAgcmVhZG9ubHkgbW9udGhDb250ZXh0ID0gY29tcHV0ZWQoKCkgPT4gKG1vbnRoOiBudW1iZXIpOiBDYWxlbmRhck1vbnRoQ29udGV4dCA9PiB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVZZWFyKCksIG1vbnRoLCAxKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG1vbnRoLFxyXG4gICAgICBkYXRlLFxyXG4gICAgICAkaW1wbGljaXQ6IGRhdGUsXHJcbiAgICAgIHNlbGVjdDogKG1vbnRoOiBudW1iZXIgfCBEYXRlKSA9PiB7XHJcbiAgICAgICAgaWYgKG1vbnRoIGluc3RhbmNlb2YgRGF0ZSkgbW9udGggPSBtb250aC5nZXRNb250aCgpO1xyXG4gICAgICAgIHRoaXMudHJpZ2dlclNlbGVjdE1vbnRoLmVtaXQobW9udGgpO1xyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICB9KTtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiYXJkLW1vbnRocy12aWV3XCI+XHJcbiAgQGlmICghcmVhZE9ubHkoKSkge1xyXG4gIDxkaXYgY2xhc3M9XCJhcmQtY2FsZW5kYXJfX3RvcC10b29sYmFyXCI+XHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgI2RlZmF1bHRNb250aHNWaWV3SGVhZGVyVGVtcGxhdGVcclxuICAgICAgbGV0LXllYXJcclxuICAgICAgbGV0LW5leHRQYWdlPVwibmV4dFBhZ2VcIlxyXG4gICAgICBsZXQtcHJldlBhZ2U9XCJwcmV2UGFnZVwiXHJcbiAgICAgIGxldC1jYW5Hb1RvTmV4dFBhZ2U9XCJjYW5Hb1RvTmV4dFBhZ2VcIlxyXG4gICAgICBsZXQtY2FuR29Ub1ByZXZpb3VzUGFnZT1cImNhbkdvVG9QcmV2aW91c1BhZ2VcIlxyXG4gICAgICBsZXQtb3BlbkRheXNWaWV3PVwib3BlbkRheXNWaWV3XCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImFyZC1jYWxlbmRhcl9fY2FsZW5kYXItaGVhZGVyXCI+XHJcbiAgICAgICAgPGFyZC1idXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYXJkLWNhbGVuZGFyX19oZWFkZXItYnV0dG9uXCJcclxuICAgICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICBbY29sb3JdPVwiY29sb3IoKVwiXHJcbiAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkRheXNWaWV3KClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IHllYXIgfX1cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtZHJvcGRvd24tYXJyb3dcIj48L2Rpdj5cclxuICAgICAgICA8L2FyZC1idXR0b24+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1jYWxlbmRhci1hcnJvd3NcIj5cclxuICAgICAgICAgIDxhcmQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgY29sb3I9XCJub25lXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInByZXZQYWdlKClcIlxyXG4gICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuR29Ub1ByZXZpb3VzUGFnZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxhcmQtaWNvbj5jaGV2cm9uX2xlZnQ8L2FyZC1pY29uPlxyXG4gICAgICAgICAgPC9hcmQtaWNvbi1idXR0b24+XHJcbiAgICAgICAgICA8YXJkLWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwibm9uZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJuZXh0UGFnZSgpXCJcclxuICAgICAgICAgICAgW3RhYkluZGV4XT1cInRhYkluZGV4KClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkdvVG9OZXh0UGFnZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxhcmQtaWNvbj5jaGV2cm9uX3JpZ2h0PC9hcmQtaWNvbj5cclxuICAgICAgICAgIDwvYXJkLWljb24tYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1vbnRoc1ZpZXdIZWFkZXJUZW1wbGF0ZSgpIHx8IGRlZmF1bHRNb250aHNWaWV3SGVhZGVyVGVtcGxhdGVcIlxyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwibW9udGhzVmlld0hlYWRlckNvbnRleHQoKVwiXHJcbiAgICAvPlxyXG4gIDwvZGl2PlxyXG4gIH1cclxuICA8ZGl2XHJcbiAgICAjZm9jdXNhYmxlRWxlbWVudFxyXG4gICAgY2xhc3M9XCJhcmQtY2FsZW5kYXJfX3NpbXBsZS1ncmlkXCJcclxuICAgIFt0YWJpbmRleF09XCJ0YWJJbmRleCgpXCJcclxuICAgIFthcmlhTGFiZWxdPVwiY3VycmVudEFyaWFMYWJlbCgpXCJcclxuICAgIChmb2N1cyk9XCJmb2N1c0V2ZW50LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAoZm9jdXMpPVwib25Nb250aEdyaWRGb2N1cygpXCJcclxuICAgIChibHVyKT1cImJsdXJFdmVudC5lbWl0KCRldmVudClcIlxyXG4gICAgKGJsdXIpPVwib25Nb250aEdyaWRCbHVyKClcIlxyXG4gICAgKGNsaWNrKT1cIm9uTW9udGhHcmlkQ2xpY2soKVwiXHJcbiAgICAoa2V5ZG93bik9XCJvbk1haW5HcmlkS2V5ZG93bigkZXZlbnQpXCJcclxuICAgIHJvbGU9XCJncmlkXCJcclxuICA+XHJcbiAgICBAZm9yIChtb250aCBvZiBtb250aHNBcnJheSgpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJhcmQtY2FsZW5kYXJfX2VudHJ5XCJcclxuICAgICAgW2NsYXNzLmFyZC1jYWxlbmRhcl9fZW50cnktaGlnaGxpZ2h0ZWRdPVwiaGlnaGxpZ2h0ZWRNb250aCgpID09PSBtb250aC52YWx1ZVwiXHJcbiAgICAgIFtjbGFzcy5hcmQtY2FsZW5kYXJfX2VudHJ5LWRpc2FibGVkXT1cIm1vbnRoLmRpc2FibGVkXCJcclxuICAgICAgW2NsYXNzLmFyZC1jYWxlbmRhcl9fZW50cnktc2VsZWN0ZWRdPVwiaXNNb250aFNlbGVjdGVkKG1vbnRoLnZhbHVlKVwiXHJcbiAgICAgIFtjbGFzcy5hcmQtY2FsZW5kYXItdG9kYXldPVwiaXNNb250aFRvZGF5KG1vbnRoLnZhbHVlKVwiXHJcbiAgICAgIChjbGljayk9XCJvbkNhbGVuZGFyTW9udGhDbGljayhtb250aC52YWx1ZSlcIlxyXG4gICAgICAobW91c2Vtb3ZlKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgIChtb3VzZW92ZXIpPVwib25DYWxlbmRhck1vbnRoTW91c2VvdmVyKG1vbnRoLnZhbHVlKVwiXHJcbiAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICA+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImFyZC1jYWxlbmRhcl9fZW50cnktYnV0dG9uXCJcclxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtZm9jdXMtb3ZlcmxheVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtYnV0dG9uLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAjZGVmYXVsdE1vbnRoVGVtcGxhdGVcclxuICAgICAgICAgICAgbGV0LW1vbnRoXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IG1vbnRoIHwgZGF0ZSA6ICdNTU0nIHwgdXBwZXJjYXNlIH19XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1vbnRoVGVtcGxhdGUoKSB8fCBkZWZhdWx0TW9udGhUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJtb250aENvbnRleHQoKShtb250aC52YWx1ZSlcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,22 @@
1
+ import { isDefined } from 'simple-bool';
2
+ export function isMonthOutOfRange(month, year, min, max) {
3
+ const dateForMinComparison = new Date(year, month + 1, 0); // last day of month
4
+ if (isDefined(min) && dateForMinComparison < min)
5
+ return -1;
6
+ const dateForMaxComparison = new Date(year, month, 1); // first day of month
7
+ if (isDefined(max) && dateForMaxComparison > max)
8
+ return 1;
9
+ return 0;
10
+ }
11
+ export function getCalendarMonthsArray(year, min, max) {
12
+ const months = [];
13
+ for (let month = 0; month < 12; month++) {
14
+ const monthData = {
15
+ value: month,
16
+ disabled: !!isMonthOutOfRange(month, year, min, max),
17
+ };
18
+ months.push(monthData);
19
+ }
20
+ return months;
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGhzLXZpZXcuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY2FsZW5kYXIvdmlld3MvbW9udGhzLXZpZXcvbW9udGhzLXZpZXcuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3hDLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFFLEdBQWdCLEVBQUUsR0FBZ0I7SUFDL0YsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtJQUMvRSxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxvQkFBb0IsR0FBRyxHQUFHO1FBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUU1RCxNQUFNLG9CQUFvQixHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7SUFDNUUsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksb0JBQW9CLEdBQUcsR0FBRztRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxJQUFZLEVBQUUsR0FBZ0IsRUFBRSxHQUFnQjtJQUNyRixNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO0lBQ3ZDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFNBQVMsR0FBc0I7WUFDbkMsS0FBSyxFQUFFLEtBQUs7WUFDWixRQUFRLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztTQUNyRCxDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGVmaW5lZCB9IGZyb20gJ3NpbXBsZS1ib29sJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJBcnJheUl0ZW0gfSBmcm9tICcuLi8uLi9jYWxlbmRhci5pbnRlcm5hbC10eXBlcyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNNb250aE91dE9mUmFuZ2UobW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyLCBtaW46IERhdGUgfCBudWxsLCBtYXg6IERhdGUgfCBudWxsKTogbnVtYmVyIHtcclxuICBjb25zdCBkYXRlRm9yTWluQ29tcGFyaXNvbiA9IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCk7IC8vIGxhc3QgZGF5IG9mIG1vbnRoXHJcbiAgaWYgKGlzRGVmaW5lZChtaW4pICYmIGRhdGVGb3JNaW5Db21wYXJpc29uIDwgbWluKSByZXR1cm4gLTE7XHJcblxyXG4gIGNvbnN0IGRhdGVGb3JNYXhDb21wYXJpc29uID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpOyAvLyBmaXJzdCBkYXkgb2YgbW9udGhcclxuICBpZiAoaXNEZWZpbmVkKG1heCkgJiYgZGF0ZUZvck1heENvbXBhcmlzb24gPiBtYXgpIHJldHVybiAxO1xyXG5cclxuICByZXR1cm4gMDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENhbGVuZGFyTW9udGhzQXJyYXkoeWVhcjogbnVtYmVyLCBtaW46IERhdGUgfCBudWxsLCBtYXg6IERhdGUgfCBudWxsKTogQ2FsZW5kYXJBcnJheUl0ZW1bXSB7XHJcbiAgY29uc3QgbW9udGhzOiBDYWxlbmRhckFycmF5SXRlbVtdID0gW107XHJcbiAgZm9yIChsZXQgbW9udGggPSAwOyBtb250aCA8IDEyOyBtb250aCsrKSB7XHJcbiAgICBjb25zdCBtb250aERhdGE6IENhbGVuZGFyQXJyYXlJdGVtID0ge1xyXG4gICAgICB2YWx1ZTogbW9udGgsXHJcbiAgICAgIGRpc2FibGVkOiAhIWlzTW9udGhPdXRPZlJhbmdlKG1vbnRoLCB5ZWFyLCBtaW4sIG1heCksXHJcbiAgICB9O1xyXG4gICAgbW9udGhzLnB1c2gobW9udGhEYXRhKTtcclxuICB9XHJcbiAgcmV0dXJuIG1vbnRocztcclxufVxyXG4iXX0=