@ardium-ui/ui 3.4.3 → 3.5.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.
Files changed (56) hide show
  1. package/esm2022/lib/_internal/disablable-component.mjs +1 -1
  2. package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +8 -3
  3. package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +2 -2
  4. package/esm2022/lib/calendar/calendar.component.mjs +437 -0
  5. package/esm2022/lib/calendar/calendar.defaults.mjs +26 -0
  6. package/esm2022/lib/calendar/calendar.internal-types.mjs +2 -0
  7. package/esm2022/lib/calendar/calendar.module.mjs +24 -0
  8. package/esm2022/lib/calendar/calendar.types.mjs +6 -0
  9. package/esm2022/lib/calendar/index.mjs +5 -0
  10. package/esm2022/lib/calendar/views/days-view/days-view.component.mjs +282 -0
  11. package/esm2022/lib/calendar/views/days-view/days-view.helpers.mjs +65 -0
  12. package/esm2022/lib/calendar/views/months-view/months-view.component.mjs +245 -0
  13. package/esm2022/lib/calendar/views/months-view/months-view.helpers.mjs +22 -0
  14. package/esm2022/lib/calendar/views/years-view/years-view.component.mjs +244 -0
  15. package/esm2022/lib/calendar/views/years-view/years-view.helpers.mjs +14 -0
  16. package/esm2022/lib/inputs/date-input/date-input.component.mjs +357 -0
  17. package/esm2022/lib/inputs/date-input/date-input.defaults.mjs +38 -0
  18. package/esm2022/lib/inputs/date-input/date-input.directive.mjs +59 -0
  19. package/esm2022/lib/inputs/date-input/date-input.module.mjs +50 -0
  20. package/esm2022/lib/inputs/date-input/date-input.serializers.mjs +49 -0
  21. package/esm2022/lib/inputs/date-input/date-input.types.mjs +5 -0
  22. package/esm2022/lib/inputs/date-input/index.mjs +6 -0
  23. package/esm2022/public-api.mjs +3 -2
  24. package/fesm2022/ardium-ui-ui.mjs +1885 -54
  25. package/fesm2022/ardium-ui-ui.mjs.map +1 -1
  26. package/lib/_internal/disablable-component.d.ts +1 -1
  27. package/lib/calendar/calendar.component.d.ts +94 -0
  28. package/lib/calendar/calendar.defaults.d.ts +18 -0
  29. package/lib/calendar/calendar.internal-types.d.ts +4 -0
  30. package/lib/calendar/calendar.module.d.ts +14 -0
  31. package/lib/calendar/calendar.types.d.ts +83 -0
  32. package/lib/calendar/index.d.ts +4 -0
  33. package/lib/calendar/views/days-view/days-view.component.d.ts +68 -0
  34. package/lib/calendar/views/days-view/days-view.helpers.d.ts +20 -0
  35. package/lib/calendar/views/months-view/months-view.component.d.ts +61 -0
  36. package/lib/calendar/views/months-view/months-view.helpers.d.ts +3 -0
  37. package/lib/calendar/views/years-view/years-view.component.d.ts +59 -0
  38. package/lib/calendar/views/years-view/years-view.helpers.d.ts +3 -0
  39. package/lib/inputs/date-input/date-input.component.d.ts +95 -0
  40. package/lib/inputs/date-input/date-input.defaults.d.ts +30 -0
  41. package/lib/inputs/date-input/date-input.directive.d.ts +33 -0
  42. package/lib/inputs/date-input/date-input.module.d.ts +14 -0
  43. package/lib/inputs/date-input/date-input.serializers.d.ts +3 -0
  44. package/lib/inputs/date-input/date-input.types.d.ts +16 -0
  45. package/lib/inputs/date-input/index.d.ts +5 -0
  46. package/package.json +1 -1
  47. package/prebuilt-themes/default/calendar-OLD.css +294 -0
  48. package/prebuilt-themes/default/calendar-OLD.css.map +1 -0
  49. package/prebuilt-themes/default/calendar.css +100 -80
  50. package/prebuilt-themes/default/calendar.css.map +1 -1
  51. package/prebuilt-themes/default/inputs/date-input.css +68 -0
  52. package/prebuilt-themes/default/inputs/date-input.css.map +1 -0
  53. package/public-api.d.ts +2 -0
  54. package/themes/default/calendar-OLD.scss +183 -0
  55. package/themes/default/calendar.scss +120 -98
  56. package/themes/default/inputs/date-input.scss +32 -0
@@ -0,0 +1,244 @@
1
+ import { ChangeDetectionStrategy, Component, computed, HostListener, input, output, viewChild, } from '@angular/core';
2
+ import { isNull } from 'simple-bool';
3
+ import { getCalendarYearsArray, isYearOutOfRange } from './years-view.helpers';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "../../../buttons/icon-button/icon-button.component";
7
+ import * as i3 from "../../../icon/icon.component";
8
+ import * as i4 from "../../../buttons/button/button.component";
9
+ const TODAY = new Date();
10
+ export class YearsViewComponent {
11
+ constructor() {
12
+ this.tabIndex = input.required();
13
+ this.readOnly = input.required();
14
+ this.disabled = input.required();
15
+ this.autoFocus = input.required();
16
+ this._isUsingKeyboard = input.required();
17
+ this.activeYear = input.required();
18
+ this.selectedDate = input.required();
19
+ this.min = input.required();
20
+ this.max = input.required();
21
+ this.currentYearRangeStart = input.required();
22
+ this.yearsArray = computed(() => getCalendarYearsArray(this.currentYearRangeStart(), 24, this.min(), this.max()));
23
+ this.currentAriaLabel = computed(() => {
24
+ return this.highlightedYear()?.toString() ?? '';
25
+ });
26
+ //! outputs
27
+ this.triggerOpenMonthsView = output();
28
+ this.triggerOpenDaysView = output();
29
+ this.focusEvent = output({ alias: 'focus' });
30
+ this.blurEvent = output({ alias: 'blur' });
31
+ this.triggerSelectYear = output();
32
+ this.triggerChangeYearsViewPage = output();
33
+ this.triggerHighlightYear = output();
34
+ this.triggerHighlightNextYear = output();
35
+ this.triggerHighlightPreviousYear = output();
36
+ this.triggerHighlightFirstYear = output();
37
+ this.triggerHighlightLastYear = output();
38
+ this.triggerHighlightSameYearPreviousPage = output();
39
+ this.triggerHighlightSameYearNextPage = output();
40
+ //! calendar entry hover & click
41
+ this.highlightedYear = input.required();
42
+ //! focusing
43
+ this.focusableElement = viewChild.required('focusableElement');
44
+ //! templates
45
+ this.yearsViewHeaderTemplate = input.required();
46
+ this.yearTemplate = input.required();
47
+ //! template contexts
48
+ this.yearsViewHeaderContext = computed(() => {
49
+ const yearRangeStart = this.currentYearRangeStart();
50
+ const yearRangeEnd = yearRangeStart + 23;
51
+ const dateRange = {
52
+ low: new Date(yearRangeStart, 0, 1),
53
+ high: new Date(yearRangeEnd, 0, 1),
54
+ };
55
+ const yearRange = {
56
+ low: yearRangeStart,
57
+ high: yearRangeEnd,
58
+ };
59
+ return {
60
+ nextPage: () => {
61
+ this.triggerChangeYearsViewPage.emit(1);
62
+ },
63
+ prevPage: () => {
64
+ this.triggerChangeYearsViewPage.emit(-1);
65
+ },
66
+ openMonthsView: () => {
67
+ this.triggerOpenMonthsView.emit();
68
+ },
69
+ openDaysView: () => {
70
+ this.triggerOpenDaysView.emit();
71
+ },
72
+ canGoToNextPage: !this.isYearOutOfRange(yearRangeEnd + 1),
73
+ canGoToPreviousPage: !this.isYearOutOfRange(yearRangeStart - 1),
74
+ yearRange: yearRange,
75
+ dateRange,
76
+ $implicit: dateRange,
77
+ };
78
+ });
79
+ this.yearContext = computed(() => {
80
+ return (year) => {
81
+ const date = new Date(year, 1, 1);
82
+ return {
83
+ value: year,
84
+ date,
85
+ $implicit: date,
86
+ select: (year) => {
87
+ this.triggerSelectYear.emit(year);
88
+ },
89
+ };
90
+ };
91
+ });
92
+ }
93
+ onMouseMove() {
94
+ if (this._isUsingKeyboard())
95
+ return;
96
+ if (this.highlightedYear())
97
+ this.triggerHighlightYear.emit(null);
98
+ }
99
+ ngAfterViewInit() {
100
+ if (!this.autoFocus())
101
+ return;
102
+ this.focus();
103
+ this.triggerHighlightYear.emit(this.currentYearRangeStart());
104
+ }
105
+ onCalendarYearMouseover(year) {
106
+ if (this._isUsingKeyboard() || this.disabled() || this.readOnly())
107
+ return;
108
+ this.triggerHighlightYear.emit(year);
109
+ }
110
+ onCalendarYearClick(year) {
111
+ if (this.disabled() || this.readOnly())
112
+ return;
113
+ this.triggerSelectYear.emit(year);
114
+ }
115
+ onYearGridFocus() {
116
+ if (this.disabled() || this.readOnly())
117
+ return;
118
+ this.triggerHighlightFirstYear.emit();
119
+ }
120
+ onYearGridBlur() {
121
+ if (this.disabled() || this.readOnly())
122
+ return;
123
+ this.triggerHighlightYear.emit(null);
124
+ }
125
+ onYearGridClick() {
126
+ if (this.disabled() || this.readOnly())
127
+ return;
128
+ if (this.highlightedYear() !== null)
129
+ return;
130
+ this.triggerHighlightFirstYear.emit();
131
+ }
132
+ //! helpers
133
+ isYearToday(year) {
134
+ return year === TODAY.getFullYear();
135
+ }
136
+ isYearSelected(year) {
137
+ if (year instanceof Date)
138
+ year = year.getFullYear();
139
+ return this.selectedDate() !== null && year === this.selectedDate()?.getFullYear();
140
+ }
141
+ isYearOutOfRange(year) {
142
+ return isYearOutOfRange(year, this.min(), this.max());
143
+ }
144
+ focus() {
145
+ this.focusableElement().nativeElement.focus();
146
+ }
147
+ //! keyboard controls
148
+ onMainGridKeydown(event) {
149
+ if (this.disabled() || this.readOnly())
150
+ return;
151
+ switch (event.code) {
152
+ case 'Space':
153
+ case 'Enter':
154
+ this._onEnterPress(event);
155
+ break;
156
+ case 'ArrowUp':
157
+ this._onArrowUpPress(event);
158
+ break;
159
+ case 'ArrowDown':
160
+ this._onArrowDownPress(event);
161
+ break;
162
+ case 'ArrowLeft':
163
+ this._onArrowLeftPress(event);
164
+ break;
165
+ case 'ArrowRight':
166
+ this._onArrowRightPress(event);
167
+ break;
168
+ case 'Home':
169
+ this._onHomePress(event);
170
+ break;
171
+ case 'End':
172
+ this._onEndPress(event);
173
+ break;
174
+ case 'PageUp':
175
+ this._onPageUpPress(event);
176
+ break;
177
+ case 'PageDown':
178
+ this._onPageDownPress(event);
179
+ break;
180
+ default:
181
+ return;
182
+ }
183
+ }
184
+ //select currently selected entry
185
+ _onEnterPress(event) {
186
+ event.preventDefault();
187
+ const year = this.highlightedYear();
188
+ if (isNull(year))
189
+ return;
190
+ this.triggerSelectYear.emit(year);
191
+ }
192
+ //highlight the entry one line below
193
+ _onArrowDownPress(event) {
194
+ event.preventDefault();
195
+ this.triggerHighlightNextYear.emit(4); //4 years per line
196
+ }
197
+ //highlight the entry one line above
198
+ _onArrowUpPress(event) {
199
+ event.preventDefault();
200
+ this.triggerHighlightPreviousYear.emit(4); //4 years per line
201
+ }
202
+ //highlight next entry
203
+ _onArrowRightPress(event) {
204
+ event.preventDefault();
205
+ this.triggerHighlightNextYear.emit(1);
206
+ }
207
+ //highlight previous entry
208
+ _onArrowLeftPress(event) {
209
+ event.preventDefault();
210
+ this.triggerHighlightPreviousYear.emit(1);
211
+ }
212
+ //highlight first entry on the page
213
+ _onHomePress(event) {
214
+ event.preventDefault();
215
+ this.triggerHighlightFirstYear.emit();
216
+ }
217
+ //highlight last entry on the page
218
+ _onEndPress(event) {
219
+ event.preventDefault();
220
+ this.triggerHighlightLastYear.emit();
221
+ }
222
+ //alone: highlight same entry on the previous page
223
+ //with alt: highlight same entry multiple pages before
224
+ _onPageUpPress(event) {
225
+ event.preventDefault();
226
+ this.triggerHighlightSameYearPreviousPage.emit(event.altKey);
227
+ }
228
+ //alone: highlight same entry on the next page
229
+ //with alt: highlight same entry multiple pages after
230
+ _onPageDownPress(event) {
231
+ event.preventDefault();
232
+ this.triggerHighlightSameYearNextPage.emit(event.altKey);
233
+ }
234
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: YearsViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
235
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: YearsViewComponent, selector: "ard-years-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 }, activeYear: { classPropertyName: "activeYear", publicName: "activeYear", 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 }, currentYearRangeStart: { classPropertyName: "currentYearRangeStart", publicName: "currentYearRangeStart", isSignal: true, isRequired: true, transformFunction: null }, highlightedYear: { classPropertyName: "highlightedYear", publicName: "highlightedYear", isSignal: true, isRequired: true, transformFunction: null }, yearsViewHeaderTemplate: { classPropertyName: "yearsViewHeaderTemplate", publicName: "yearsViewHeaderTemplate", isSignal: true, isRequired: true, transformFunction: null }, yearTemplate: { classPropertyName: "yearTemplate", publicName: "yearTemplate", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { triggerOpenMonthsView: "triggerOpenMonthsView", triggerOpenDaysView: "triggerOpenDaysView", focusEvent: "focus", blurEvent: "blur", triggerSelectYear: "triggerSelectYear", triggerChangeYearsViewPage: "triggerChangeYearsViewPage", triggerHighlightYear: "triggerHighlightYear", triggerHighlightNextYear: "triggerHighlightNextYear", triggerHighlightPreviousYear: "triggerHighlightPreviousYear", triggerHighlightFirstYear: "triggerHighlightFirstYear", triggerHighlightLastYear: "triggerHighlightLastYear", triggerHighlightSameYearPreviousPage: "triggerHighlightSameYearPreviousPage", triggerHighlightSameYearNextPage: "triggerHighlightSameYearNextPage" }, host: { listeners: { "mousemove": "onMouseMove()" } }, viewQueries: [{ propertyName: "focusableElement", first: true, predicate: ["focusableElement"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ard-years-view\">\r\n @if (!readOnly()) {\r\n <div class=\"ard-calendar__top-toolbar\">\r\n <ng-template\r\n #defaultYearsViewHeaderTemplate\r\n let-dateRange=\"dateRange\"\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=\"none\"\r\n [tabIndex]=\"tabIndex()\"\r\n (click)=\"openDaysView()\"\r\n variant=\"pill\"\r\n >\r\n {{ dateRange.low | date : 'YYYY' }}\r\n &mdash;\r\n {{ dateRange.high | date : 'YYYY' }}\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]=\"yearsViewHeaderTemplate() || defaultYearsViewHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"yearsViewHeaderContext()\"\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)=\"onYearGridFocus()\"\r\n (blur)=\"blurEvent.emit($event)\"\r\n (blur)=\"onYearGridBlur()\"\r\n (click)=\"onYearGridClick()\"\r\n (keydown)=\"onMainGridKeydown($event)\"\r\n role=\"grid\"\r\n >\r\n @for (year of yearsArray(); track year) {\r\n <div\r\n class=\"ard-calendar__entry\"\r\n [class.ard-calendar__entry-highlighted]=\"highlightedYear() === year.value\"\r\n [class.ard-calendar__entry-disabled]=\"year.disabled\"\r\n [class.ard-calendar__entry-selected]=\"isYearSelected(year.value)\"\r\n [class.ard-calendar-today]=\"isYearToday(year.value)\"\r\n (click)=\"onCalendarYearClick(year.value)\"\r\n (mousemove)=\"$event.stopPropagation()\"\r\n (mouseover)=\"onCalendarYearMouseover(year.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 aria-hidden=\"true\"\r\n >\r\n <div class=\"ard-focus-overlay\"></div>\r\n <div class=\"ard-button-content\">\r\n <ng-template\r\n #defaultYearTemplate\r\n let-year\r\n >\r\n {{ year | date : 'YYYY' }}\r\n </ng-template>\r\n <ng-template\r\n [ngTemplateOutlet]=\"yearTemplate() || defaultYearTemplate\"\r\n [ngTemplateOutletContext]=\"yearContext()(year.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.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
236
+ }
237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: YearsViewComponent, decorators: [{
238
+ type: Component,
239
+ args: [{ selector: 'ard-years-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ard-years-view\">\r\n @if (!readOnly()) {\r\n <div class=\"ard-calendar__top-toolbar\">\r\n <ng-template\r\n #defaultYearsViewHeaderTemplate\r\n let-dateRange=\"dateRange\"\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=\"none\"\r\n [tabIndex]=\"tabIndex()\"\r\n (click)=\"openDaysView()\"\r\n variant=\"pill\"\r\n >\r\n {{ dateRange.low | date : 'YYYY' }}\r\n &mdash;\r\n {{ dateRange.high | date : 'YYYY' }}\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]=\"yearsViewHeaderTemplate() || defaultYearsViewHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"yearsViewHeaderContext()\"\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)=\"onYearGridFocus()\"\r\n (blur)=\"blurEvent.emit($event)\"\r\n (blur)=\"onYearGridBlur()\"\r\n (click)=\"onYearGridClick()\"\r\n (keydown)=\"onMainGridKeydown($event)\"\r\n role=\"grid\"\r\n >\r\n @for (year of yearsArray(); track year) {\r\n <div\r\n class=\"ard-calendar__entry\"\r\n [class.ard-calendar__entry-highlighted]=\"highlightedYear() === year.value\"\r\n [class.ard-calendar__entry-disabled]=\"year.disabled\"\r\n [class.ard-calendar__entry-selected]=\"isYearSelected(year.value)\"\r\n [class.ard-calendar-today]=\"isYearToday(year.value)\"\r\n (click)=\"onCalendarYearClick(year.value)\"\r\n (mousemove)=\"$event.stopPropagation()\"\r\n (mouseover)=\"onCalendarYearMouseover(year.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 aria-hidden=\"true\"\r\n >\r\n <div class=\"ard-focus-overlay\"></div>\r\n <div class=\"ard-button-content\">\r\n <ng-template\r\n #defaultYearTemplate\r\n let-year\r\n >\r\n {{ year | date : 'YYYY' }}\r\n </ng-template>\r\n <ng-template\r\n [ngTemplateOutlet]=\"yearTemplate() || defaultYearTemplate\"\r\n [ngTemplateOutletContext]=\"yearContext()(year.value)\"\r\n />\r\n </div>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n" }]
240
+ }], propDecorators: { onMouseMove: [{
241
+ type: HostListener,
242
+ args: ['mousemove']
243
+ }] } });
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWVhcnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NhbGVuZGFyL3ZpZXdzL3llYXJzLXZpZXcveWVhcnMtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NhbGVuZGFyL3ZpZXdzL3llYXJzLXZpZXcveWVhcnMtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBRVIsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQUUvRSxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBUXpCLE1BQU0sT0FBTyxrQkFBa0I7SUFOL0I7UUFPVyxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ3BDLGFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFXLENBQUM7UUFDckMsYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUVyQyxjQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO1FBRXRDLHFCQUFnQixHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQWM3QyxlQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBRXRDLGlCQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBZSxDQUFDO1FBRTdDLFFBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFlLENBQUM7UUFDcEMsUUFB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QixpQkFBaUIsQ0FBQyxLQUFvQjtRQUM1QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsbUNBQW1DO0lBQzNCLFlBQVksQ0FBQyxLQUFvQjtRQUN2QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFDRCxrQ0FBa0M7SUFDMUIsV0FBVyxDQUFDLEtBQW9CO1FBQ3RDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUNELGtEQUFrRDtJQUNsRCxzREFBc0Q7SUFDOUMsY0FBYyxDQUFDLEtBQW9CO1FBQ3pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsb0NBQW9DLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsOENBQThDO0lBQzlDLHFEQUFxRDtJQUM3QyxnQkFBZ0IsQ0FBQyxLQUFvQjtRQUMzQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0QsQ0FBQzsrR0FqTVUsa0JBQWtCO21HQUFsQixrQkFBa0IsMHBGQ3hCL0IsMG1IQTBHQTs7NEZEbEZhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTTs4QkFZL0MsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIGlucHV0LFxyXG4gIG91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICB2aWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGlzTnVsbCB9IGZyb20gJ3NpbXBsZS1ib29sJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJZZWFyQ29udGV4dCwgQ2FsZW5kYXJZZWFyc1ZpZXdIZWFkZXJDb250ZXh0LCBEYXRlUmFuZ2UsIFllYXJSYW5nZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLnR5cGVzJztcclxuaW1wb3J0IHsgZ2V0Q2FsZW5kYXJZZWFyc0FycmF5LCBpc1llYXJPdXRPZlJhbmdlIH0gZnJvbSAnLi95ZWFycy12aWV3LmhlbHBlcnMnO1xyXG5cclxuY29uc3QgVE9EQVkgPSBuZXcgRGF0ZSgpO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcmQteWVhcnMtdmlldycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3llYXJzLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi95ZWFycy12aWV3LmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFllYXJzVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIHJlYWRvbmx5IHRhYkluZGV4ID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xyXG4gIHJlYWRvbmx5IHJlYWRPbmx5ID0gaW5wdXQucmVxdWlyZWQ8Ym9vbGVhbj4oKTtcclxuICByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0LnJlcXVpcmVkPGJvb2xlYW4+KCk7XHJcblxyXG4gIHJlYWRvbmx5IGF1dG9Gb2N1cyA9IGlucHV0LnJlcXVpcmVkPGJvb2xlYW4+KCk7XHJcblxyXG4gIHJlYWRvbmx5IF9pc1VzaW5nS2V5Ym9hcmQgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZW1vdmUnKVxyXG4gIG9uTW91c2VNb3ZlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2lzVXNpbmdLZXlib2FyZCgpKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5oaWdobGlnaHRlZFllYXIoKSkgdGhpcy50cmlnZ2VySGlnaGxpZ2h0WWVhci5lbWl0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9Gb2N1cygpKSByZXR1cm47XHJcbiAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRZZWFyLmVtaXQodGhpcy5jdXJyZW50WWVhclJhbmdlU3RhcnQoKSk7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSBhY3RpdmVZZWFyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xyXG5cclxuICByZWFkb25seSBzZWxlY3RlZERhdGUgPSBpbnB1dC5yZXF1aXJlZDxEYXRlIHwgbnVsbD4oKTtcclxuXHJcbiAgcmVhZG9ubHkgbWluID0gaW5wdXQucmVxdWlyZWQ8RGF0ZSB8IG51bGw+KCk7XHJcbiAgcmVhZG9ubHkgbWF4ID0gaW5wdXQucmVxdWlyZWQ8RGF0ZSB8IG51bGw+KCk7XHJcblxyXG4gIHJlYWRvbmx5IGN1cnJlbnRZZWFyUmFuZ2VTdGFydCA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcclxuICByZWFkb25seSB5ZWFyc0FycmF5ID0gY29tcHV0ZWQoKCkgPT4gZ2V0Q2FsZW5kYXJZZWFyc0FycmF5KHRoaXMuY3VycmVudFllYXJSYW5nZVN0YXJ0KCksIDI0LCB0aGlzLm1pbigpLCB0aGlzLm1heCgpKSk7XHJcblxyXG4gIHJlYWRvbmx5IGN1cnJlbnRBcmlhTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRlZFllYXIoKT8udG9TdHJpbmcoKSA/PyAnJztcclxuICB9KTtcclxuXHJcbiAgLy8hIG91dHB1dHNcclxuICByZWFkb25seSB0cmlnZ2VyT3Blbk1vbnRoc1ZpZXcgPSBvdXRwdXQ8dm9pZD4oKTtcclxuICByZWFkb25seSB0cmlnZ2VyT3BlbkRheXNWaWV3ID0gb3V0cHV0PHZvaWQ+KCk7XHJcblxyXG4gIHJlYWRvbmx5IGZvY3VzRXZlbnQgPSBvdXRwdXQ8Rm9jdXNFdmVudD4oeyBhbGlhczogJ2ZvY3VzJyB9KTtcclxuICByZWFkb25seSBibHVyRXZlbnQgPSBvdXRwdXQ8Rm9jdXNFdmVudD4oeyBhbGlhczogJ2JsdXInIH0pO1xyXG5cclxuICByZWFkb25seSB0cmlnZ2VyU2VsZWN0WWVhciA9IG91dHB1dDxudW1iZXI+KCk7XHJcbiAgcmVhZG9ubHkgdHJpZ2dlckNoYW5nZVllYXJzVmlld1BhZ2UgPSBvdXRwdXQ8bnVtYmVyPigpO1xyXG5cclxuICByZWFkb25seSB0cmlnZ2VySGlnaGxpZ2h0WWVhciA9IG91dHB1dDxudW1iZXIgfCBudWxsPigpO1xyXG4gIHJlYWRvbmx5IHRyaWdnZXJIaWdobGlnaHROZXh0WWVhciA9IG91dHB1dDxudW1iZXI+KCk7XHJcbiAgcmVhZG9ubHkgdHJpZ2dlckhpZ2hsaWdodFByZXZpb3VzWWVhciA9IG91dHB1dDxudW1iZXI+KCk7XHJcbiAgcmVhZG9ubHkgdHJpZ2dlckhpZ2hsaWdodEZpcnN0WWVhciA9IG91dHB1dDx2b2lkPigpO1xyXG4gIHJlYWRvbmx5IHRyaWdnZXJIaWdobGlnaHRMYXN0WWVhciA9IG91dHB1dDx2b2lkPigpO1xyXG4gIHJlYWRvbmx5IHRyaWdnZXJIaWdobGlnaHRTYW1lWWVhclByZXZpb3VzUGFnZSA9IG91dHB1dDxib29sZWFuPigpO1xyXG4gIHJlYWRvbmx5IHRyaWdnZXJIaWdobGlnaHRTYW1lWWVhck5leHRQYWdlID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcblxyXG4gIC8vISBjYWxlbmRhciBlbnRyeSBob3ZlciAmIGNsaWNrXHJcbiAgcmVhZG9ubHkgaGlnaGxpZ2h0ZWRZZWFyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyIHwgbnVsbD4oKTtcclxuXHJcbiAgb25DYWxlbmRhclllYXJNb3VzZW92ZXIoeWVhcjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNVc2luZ0tleWJvYXJkKCkgfHwgdGhpcy5kaXNhYmxlZCgpIHx8IHRoaXMucmVhZE9ubHkoKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodFllYXIuZW1pdCh5ZWFyKTtcclxuICB9XHJcbiAgb25DYWxlbmRhclllYXJDbGljayh5ZWFyOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5yZWFkT25seSgpKSByZXR1cm47XHJcbiAgICB0aGlzLnRyaWdnZXJTZWxlY3RZZWFyLmVtaXQoeWVhcik7XHJcbiAgfVxyXG4gIG9uWWVhckdyaWRGb2N1cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5yZWFkT25seSgpKSByZXR1cm47XHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRGaXJzdFllYXIuZW1pdCgpO1xyXG4gIH1cclxuICBvblllYXJHcmlkQmx1cigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5yZWFkT25seSgpKSByZXR1cm47XHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRZZWFyLmVtaXQobnVsbCk7XHJcbiAgfVxyXG4gIG9uWWVhckdyaWRDbGljaygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5yZWFkT25seSgpKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5oaWdobGlnaHRlZFllYXIoKSAhPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgdGhpcy50cmlnZ2VySGlnaGxpZ2h0Rmlyc3RZZWFyLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8vISBoZWxwZXJzXHJcbiAgaXNZZWFyVG9kYXkoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4geWVhciA9PT0gVE9EQVkuZ2V0RnVsbFllYXIoKTtcclxuICB9XHJcbiAgaXNZZWFyU2VsZWN0ZWQoeWVhcjogbnVtYmVyIHwgRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHllYXIgaW5zdGFuY2VvZiBEYXRlKSB5ZWFyID0geWVhci5nZXRGdWxsWWVhcigpO1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlKCkgIT09IG51bGwgJiYgeWVhciA9PT0gdGhpcy5zZWxlY3RlZERhdGUoKT8uZ2V0RnVsbFllYXIoKTtcclxuICB9XHJcbiAgaXNZZWFyT3V0T2ZSYW5nZSh5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGlzWWVhck91dE9mUmFuZ2UoeWVhciwgdGhpcy5taW4oKSwgdGhpcy5tYXgoKSk7XHJcbiAgfVxyXG5cclxuICAvLyEgZm9jdXNpbmdcclxuICByZWFkb25seSBmb2N1c2FibGVFbGVtZW50ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignZm9jdXNhYmxlRWxlbWVudCcpO1xyXG5cclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIC8vISBrZXlib2FyZCBjb250cm9sc1xyXG4gIG9uTWFpbkdyaWRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpIHx8IHRoaXMucmVhZE9ubHkoKSkgcmV0dXJuO1xyXG4gICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgIGNhc2UgJ1NwYWNlJzpcclxuICAgICAgY2FzZSAnRW50ZXInOlxyXG4gICAgICAgIHRoaXMuX29uRW50ZXJQcmVzcyhldmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxyXG4gICAgICAgIHRoaXMuX29uQXJyb3dVcFByZXNzKGV2ZW50KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICB0aGlzLl9vbkFycm93RG93blByZXNzKGV2ZW50KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcclxuICAgICAgICB0aGlzLl9vbkFycm93TGVmdFByZXNzKGV2ZW50KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XHJcbiAgICAgICAgdGhpcy5fb25BcnJvd1JpZ2h0UHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdIb21lJzpcclxuICAgICAgICB0aGlzLl9vbkhvbWVQcmVzcyhldmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0VuZCc6XHJcbiAgICAgICAgdGhpcy5fb25FbmRQcmVzcyhldmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XHJcbiAgICAgICAgdGhpcy5fb25QYWdlVXBQcmVzcyhldmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcclxuICAgICAgICB0aGlzLl9vblBhZ2VEb3duUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vc2VsZWN0IGN1cnJlbnRseSBzZWxlY3RlZCBlbnRyeVxyXG4gIHByaXZhdGUgX29uRW50ZXJQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICBjb25zdCB5ZWFyID0gdGhpcy5oaWdobGlnaHRlZFllYXIoKTtcclxuICAgIGlmIChpc051bGwoeWVhcikpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnRyaWdnZXJTZWxlY3RZZWFyLmVtaXQoeWVhcik7XHJcbiAgfVxyXG4gIC8vaGlnaGxpZ2h0IHRoZSBlbnRyeSBvbmUgbGluZSBiZWxvd1xyXG4gIHByaXZhdGUgX29uQXJyb3dEb3duUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdGhpcy50cmlnZ2VySGlnaGxpZ2h0TmV4dFllYXIuZW1pdCg0KTsgLy80IHllYXJzIHBlciBsaW5lXHJcbiAgfVxyXG4gIC8vaGlnaGxpZ2h0IHRoZSBlbnRyeSBvbmUgbGluZSBhYm92ZVxyXG4gIHByaXZhdGUgX29uQXJyb3dVcFByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodFByZXZpb3VzWWVhci5lbWl0KDQpOyAvLzQgeWVhcnMgcGVyIGxpbmVcclxuICB9XHJcbiAgLy9oaWdobGlnaHQgbmV4dCBlbnRyeVxyXG4gIHByaXZhdGUgX29uQXJyb3dSaWdodFByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlckhpZ2hsaWdodE5leHRZZWFyLmVtaXQoMSk7XHJcbiAgfVxyXG4gIC8vaGlnaGxpZ2h0IHByZXZpb3VzIGVudHJ5XHJcbiAgcHJpdmF0ZSBfb25BcnJvd0xlZnRQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRQcmV2aW91c1llYXIuZW1pdCgxKTtcclxuICB9XHJcbiAgLy9oaWdobGlnaHQgZmlyc3QgZW50cnkgb24gdGhlIHBhZ2VcclxuICBwcml2YXRlIF9vbkhvbWVQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRGaXJzdFllYXIuZW1pdCgpO1xyXG4gIH1cclxuICAvL2hpZ2hsaWdodCBsYXN0IGVudHJ5IG9uIHRoZSBwYWdlXHJcbiAgcHJpdmF0ZSBfb25FbmRQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRMYXN0WWVhci5lbWl0KCk7XHJcbiAgfVxyXG4gIC8vYWxvbmU6IGhpZ2hsaWdodCBzYW1lIGVudHJ5IG9uIHRoZSBwcmV2aW91cyBwYWdlXHJcbiAgLy93aXRoIGFsdDogaGlnaGxpZ2h0IHNhbWUgZW50cnkgbXVsdGlwbGUgcGFnZXMgYmVmb3JlXHJcbiAgcHJpdmF0ZSBfb25QYWdlVXBQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRTYW1lWWVhclByZXZpb3VzUGFnZS5lbWl0KGV2ZW50LmFsdEtleSk7XHJcbiAgfVxyXG4gIC8vYWxvbmU6IGhpZ2hsaWdodCBzYW1lIGVudHJ5IG9uIHRoZSBuZXh0IHBhZ2VcclxuICAvL3dpdGggYWx0OiBoaWdobGlnaHQgc2FtZSBlbnRyeSBtdWx0aXBsZSBwYWdlcyBhZnRlclxyXG4gIHByaXZhdGUgX29uUGFnZURvd25QcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLnRyaWdnZXJIaWdobGlnaHRTYW1lWWVhck5leHRQYWdlLmVtaXQoZXZlbnQuYWx0S2V5KTtcclxuICB9XHJcblxyXG4gIC8vISB0ZW1wbGF0ZXNcclxuICByZWFkb25seSB5ZWFyc1ZpZXdIZWFkZXJUZW1wbGF0ZSA9IGlucHV0LnJlcXVpcmVkPFRlbXBsYXRlUmVmPENhbGVuZGFyWWVhcnNWaWV3SGVhZGVyQ29udGV4dD4gfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgeWVhclRlbXBsYXRlID0gaW5wdXQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8Q2FsZW5kYXJZZWFyQ29udGV4dD4gfCB1bmRlZmluZWQ+KCk7XHJcblxyXG4gIC8vISB0ZW1wbGF0ZSBjb250ZXh0c1xyXG4gIHJlYWRvbmx5IHllYXJzVmlld0hlYWRlckNvbnRleHQgPSBjb21wdXRlZDxDYWxlbmRhclllYXJzVmlld0hlYWRlckNvbnRleHQ+KCgpID0+IHtcclxuICAgIGNvbnN0IHllYXJSYW5nZVN0YXJ0ID0gdGhpcy5jdXJyZW50WWVhclJhbmdlU3RhcnQoKTtcclxuICAgIGNvbnN0IHllYXJSYW5nZUVuZCA9IHllYXJSYW5nZVN0YXJ0ICsgMjM7XHJcbiAgICBjb25zdCBkYXRlUmFuZ2U6IERhdGVSYW5nZSA9IHtcclxuICAgICAgbG93OiBuZXcgRGF0ZSh5ZWFyUmFuZ2VTdGFydCwgMCwgMSksXHJcbiAgICAgIGhpZ2g6IG5ldyBEYXRlKHllYXJSYW5nZUVuZCwgMCwgMSksXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeWVhclJhbmdlOiBZZWFyUmFuZ2UgPSB7XHJcbiAgICAgIGxvdzogeWVhclJhbmdlU3RhcnQsXHJcbiAgICAgIGhpZ2g6IHllYXJSYW5nZUVuZCxcclxuICAgIH07XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZXh0UGFnZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJpZ2dlckNoYW5nZVllYXJzVmlld1BhZ2UuZW1pdCgxKTtcclxuICAgICAgfSxcclxuICAgICAgcHJldlBhZ2U6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2VZZWFyc1ZpZXdQYWdlLmVtaXQoLTEpO1xyXG4gICAgICB9LFxyXG4gICAgICBvcGVuTW9udGhzVmlldzogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJpZ2dlck9wZW5Nb250aHNWaWV3LmVtaXQoKTtcclxuICAgICAgfSxcclxuICAgICAgb3BlbkRheXNWaWV3OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyT3BlbkRheXNWaWV3LmVtaXQoKTtcclxuICAgICAgfSxcclxuICAgICAgY2FuR29Ub05leHRQYWdlOiAhdGhpcy5pc1llYXJPdXRPZlJhbmdlKHllYXJSYW5nZUVuZCArIDEpLFxyXG4gICAgICBjYW5Hb1RvUHJldmlvdXNQYWdlOiAhdGhpcy5pc1llYXJPdXRPZlJhbmdlKHllYXJSYW5nZVN0YXJ0IC0gMSksXHJcbiAgICAgIHllYXJSYW5nZTogeWVhclJhbmdlLFxyXG4gICAgICBkYXRlUmFuZ2UsXHJcbiAgICAgICRpbXBsaWNpdDogZGF0ZVJhbmdlLFxyXG4gICAgfTtcclxuICB9KTtcclxuICByZWFkb25seSB5ZWFyQ29udGV4dCA9IGNvbXB1dGVkPCh5ZWFyOiBudW1iZXIpID0+IENhbGVuZGFyWWVhckNvbnRleHQ+KCgpID0+IHtcclxuICAgIHJldHVybiAoeWVhcjogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCAxLCAxKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB2YWx1ZTogeWVhcixcclxuICAgICAgICBkYXRlLFxyXG4gICAgICAgICRpbXBsaWNpdDogZGF0ZSxcclxuICAgICAgICBzZWxlY3Q6ICh5ZWFyOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHRoaXMudHJpZ2dlclNlbGVjdFllYXIuZW1pdCh5ZWFyKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICB9KTtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiYXJkLXllYXJzLXZpZXdcIj5cclxuICBAaWYgKCFyZWFkT25seSgpKSB7XHJcbiAgPGRpdiBjbGFzcz1cImFyZC1jYWxlbmRhcl9fdG9wLXRvb2xiYXJcIj5cclxuICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAjZGVmYXVsdFllYXJzVmlld0hlYWRlclRlbXBsYXRlXHJcbiAgICAgIGxldC1kYXRlUmFuZ2U9XCJkYXRlUmFuZ2VcIlxyXG4gICAgICBsZXQtbmV4dFBhZ2U9XCJuZXh0UGFnZVwiXHJcbiAgICAgIGxldC1wcmV2UGFnZT1cInByZXZQYWdlXCJcclxuICAgICAgbGV0LWNhbkdvVG9OZXh0UGFnZT1cImNhbkdvVG9OZXh0UGFnZVwiXHJcbiAgICAgIGxldC1jYW5Hb1RvUHJldmlvdXNQYWdlPVwiY2FuR29Ub1ByZXZpb3VzUGFnZVwiXHJcbiAgICAgIGxldC1vcGVuRGF5c1ZpZXc9XCJvcGVuRGF5c1ZpZXdcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXJkLWNhbGVuZGFyX19jYWxlbmRhci1oZWFkZXJcIj5cclxuICAgICAgICA8YXJkLWJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJhcmQtY2FsZW5kYXJfX2hlYWRlci1idXR0b25cIlxyXG4gICAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgIGNvbG9yPVwibm9uZVwiXHJcbiAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkRheXNWaWV3KClcIlxyXG4gICAgICAgICAgdmFyaWFudD1cInBpbGxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGRhdGVSYW5nZS5sb3cgfCBkYXRlIDogJ1lZWVknIH19XHJcbiAgICAgICAgICAmbWRhc2g7XHJcbiAgICAgICAgICB7eyBkYXRlUmFuZ2UuaGlnaCB8IGRhdGUgOiAnWVlZWScgfX1cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtZHJvcGRvd24tYXJyb3dcIj48L2Rpdj5cclxuICAgICAgICA8L2FyZC1idXR0b24+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1jYWxlbmRhci1hcnJvd3NcIj5cclxuICAgICAgICAgIDxhcmQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgY29sb3I9XCJub25lXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInByZXZQYWdlKClcIlxyXG4gICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuR29Ub1ByZXZpb3VzUGFnZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxhcmQtaWNvbj5jaGV2cm9uX2xlZnQ8L2FyZC1pY29uPlxyXG4gICAgICAgICAgPC9hcmQtaWNvbi1idXR0b24+XHJcbiAgICAgICAgICA8YXJkLWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwibm9uZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJuZXh0UGFnZSgpXCJcclxuICAgICAgICAgICAgW3RhYkluZGV4XT1cInRhYkluZGV4KClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkdvVG9OZXh0UGFnZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxhcmQtaWNvbj5jaGV2cm9uX3JpZ2h0PC9hcmQtaWNvbj5cclxuICAgICAgICAgIDwvYXJkLWljb24tYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInllYXJzVmlld0hlYWRlclRlbXBsYXRlKCkgfHwgZGVmYXVsdFllYXJzVmlld0hlYWRlclRlbXBsYXRlXCJcclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInllYXJzVmlld0hlYWRlckNvbnRleHQoKVwiXHJcbiAgICAvPlxyXG4gIDwvZGl2PlxyXG4gIH1cclxuICA8ZGl2XHJcbiAgICAjZm9jdXNhYmxlRWxlbWVudFxyXG4gICAgY2xhc3M9XCJhcmQtY2FsZW5kYXJfX3NpbXBsZS1ncmlkXCJcclxuICAgIFt0YWJpbmRleF09XCJ0YWJJbmRleCgpXCJcclxuICAgIFthcmlhTGFiZWxdPVwiY3VycmVudEFyaWFMYWJlbCgpXCJcclxuICAgIChmb2N1cyk9XCJmb2N1c0V2ZW50LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAoZm9jdXMpPVwib25ZZWFyR3JpZEZvY3VzKClcIlxyXG4gICAgKGJsdXIpPVwiYmx1ckV2ZW50LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAoYmx1cik9XCJvblllYXJHcmlkQmx1cigpXCJcclxuICAgIChjbGljayk9XCJvblllYXJHcmlkQ2xpY2soKVwiXHJcbiAgICAoa2V5ZG93bik9XCJvbk1haW5HcmlkS2V5ZG93bigkZXZlbnQpXCJcclxuICAgIHJvbGU9XCJncmlkXCJcclxuICA+XHJcbiAgICBAZm9yICh5ZWFyIG9mIHllYXJzQXJyYXkoKTsgdHJhY2sgeWVhcikge1xyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImFyZC1jYWxlbmRhcl9fZW50cnlcIlxyXG4gICAgICBbY2xhc3MuYXJkLWNhbGVuZGFyX19lbnRyeS1oaWdobGlnaHRlZF09XCJoaWdobGlnaHRlZFllYXIoKSA9PT0geWVhci52YWx1ZVwiXHJcbiAgICAgIFtjbGFzcy5hcmQtY2FsZW5kYXJfX2VudHJ5LWRpc2FibGVkXT1cInllYXIuZGlzYWJsZWRcIlxyXG4gICAgICBbY2xhc3MuYXJkLWNhbGVuZGFyX19lbnRyeS1zZWxlY3RlZF09XCJpc1llYXJTZWxlY3RlZCh5ZWFyLnZhbHVlKVwiXHJcbiAgICAgIFtjbGFzcy5hcmQtY2FsZW5kYXItdG9kYXldPVwiaXNZZWFyVG9kYXkoeWVhci52YWx1ZSlcIlxyXG4gICAgICAoY2xpY2spPVwib25DYWxlbmRhclllYXJDbGljayh5ZWFyLnZhbHVlKVwiXHJcbiAgICAgIChtb3VzZW1vdmUpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgKG1vdXNlb3Zlcik9XCJvbkNhbGVuZGFyWWVhck1vdXNlb3Zlcih5ZWFyLnZhbHVlKVwiXHJcbiAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICA+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImFyZC1jYWxlbmRhcl9fZW50cnktYnV0dG9uXCJcclxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1mb2N1cy1vdmVybGF5XCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1idXR0b24tY29udGVudFwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICNkZWZhdWx0WWVhclRlbXBsYXRlXHJcbiAgICAgICAgICAgIGxldC15ZWFyXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHllYXIgfCBkYXRlIDogJ1lZWVknIH19XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInllYXJUZW1wbGF0ZSgpIHx8IGRlZmF1bHRZZWFyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieWVhckNvbnRleHQoKSh5ZWFyLnZhbHVlKVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,14 @@
1
+ import { isDefined } from 'simple-bool';
2
+ export function getCalendarYearsArray(startYear, yearCount, min, max) {
3
+ return new Array(yearCount).fill(startYear).map((v, i) => ({ value: v + i, disabled: !!isYearOutOfRange(v + i, min, max) }));
4
+ }
5
+ export function isYearOutOfRange(year, min, max) {
6
+ const dateForMinComparison = new Date(year, 11, 31);
7
+ if (isDefined(min) && dateForMinComparison < min)
8
+ return -1;
9
+ const dateForMaxComparison = new Date(year, 0, 1);
10
+ if (isDefined(max) && dateForMaxComparison > max)
11
+ return 1;
12
+ return 0;
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWVhcnMtdmlldy5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jYWxlbmRhci92aWV3cy95ZWFycy12aWV3L3llYXJzLXZpZXcuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3hDLE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsU0FBaUIsRUFDakIsU0FBaUIsRUFDakIsR0FBZ0IsRUFDaEIsR0FBZ0I7SUFFaEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0gsQ0FBQztBQUNELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsR0FBZ0IsRUFBRSxHQUFnQjtJQUMvRSxNQUFNLG9CQUFvQixHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksb0JBQW9CLEdBQUcsR0FBRztRQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFNUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLG9CQUFvQixHQUFHLEdBQUc7UUFBRSxPQUFPLENBQUMsQ0FBQztJQUUzRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICdzaW1wbGUtYm9vbCc7XHJcbmltcG9ydCB7IENhbGVuZGFyQXJyYXlJdGVtIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIuaW50ZXJuYWwtdHlwZXMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENhbGVuZGFyWWVhcnNBcnJheShcclxuICBzdGFydFllYXI6IG51bWJlcixcclxuICB5ZWFyQ291bnQ6IG51bWJlcixcclxuICBtaW46IERhdGUgfCBudWxsLFxyXG4gIG1heDogRGF0ZSB8IG51bGxcclxuKTogQ2FsZW5kYXJBcnJheUl0ZW1bXSB7XHJcbiAgcmV0dXJuIG5ldyBBcnJheSh5ZWFyQ291bnQpLmZpbGwoc3RhcnRZZWFyKS5tYXAoKHYsIGkpID0+ICh7IHZhbHVlOiB2ICsgaSwgZGlzYWJsZWQ6ICEhaXNZZWFyT3V0T2ZSYW5nZSh2ICsgaSwgbWluLCBtYXgpIH0pKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNZZWFyT3V0T2ZSYW5nZSh5ZWFyOiBudW1iZXIsIG1pbjogRGF0ZSB8IG51bGwsIG1heDogRGF0ZSB8IG51bGwpOiBudW1iZXIge1xyXG4gIGNvbnN0IGRhdGVGb3JNaW5Db21wYXJpc29uID0gbmV3IERhdGUoeWVhciwgMTEsIDMxKTtcclxuICBpZiAoaXNEZWZpbmVkKG1pbikgJiYgZGF0ZUZvck1pbkNvbXBhcmlzb24gPCBtaW4pIHJldHVybiAtMTtcclxuXHJcbiAgY29uc3QgZGF0ZUZvck1heENvbXBhcmlzb24gPSBuZXcgRGF0ZSh5ZWFyLCAwLCAxKTtcclxuICBpZiAoaXNEZWZpbmVkKG1heCkgJiYgZGF0ZUZvck1heENvbXBhcmlzb24gPiBtYXgpIHJldHVybiAxO1xyXG5cclxuICByZXR1cm4gMDtcclxufVxyXG4iXX0=