@gipisistemas/ng-core 1.1.11 → 1.1.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. package/assets/styles/colors.scss +228 -211
  2. package/assets/styles/styles.scss +54 -5
  3. package/bundles/gipisistemas-ng-core.umd.js +3516 -146
  4. package/bundles/gipisistemas-ng-core.umd.js.map +1 -1
  5. package/bundles/gipisistemas-ng-core.umd.min.js +9 -9
  6. package/bundles/gipisistemas-ng-core.umd.min.js.map +1 -1
  7. package/core/gipi-components/components/abstract-find.component.d.ts +1 -0
  8. package/core/gipi-components/components/abstract.component.d.ts +1 -0
  9. package/esm2015/core/gipi-components/components/abstract-find.component.js +22 -1
  10. package/esm2015/core/gipi-components/components/abstract.component.js +5 -2
  11. package/esm2015/gipi-components.js +19 -6
  12. package/esm2015/gipisistemas-ng-core.js +3 -1
  13. package/esm2015/shared/components/button/button.component.js +2 -2
  14. package/esm2015/shared/components/icon/icon.component.js +2 -4
  15. package/esm2015/shared/gipi-components/button/button.component.js +2 -2
  16. package/esm2015/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +1 -1
  17. package/esm2015/shared/gipi-components/datepicker/datepicker/datepicker.component.js +3 -3
  18. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/calendar-body.js +1 -1
  19. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-input.js +1 -1
  20. package/esm2015/shared/gipi-components/datetime-picker/datetime-picker/datetime-picker.component.js +158 -0
  21. package/esm2015/shared/gipi-components/datetime-picker/datetime-picker.module.js +82 -0
  22. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar-body.js +116 -0
  23. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar.js +676 -0
  24. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/clock.js +306 -0
  25. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-animations.js +30 -0
  26. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-errors.js +7 -0
  27. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-filtertype.js +7 -0
  28. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-input.js +346 -0
  29. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-toggle.js +83 -0
  30. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-type.js +1 -0
  31. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker.js +451 -0
  32. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/month-view.js +151 -0
  33. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/multi-year-view.js +230 -0
  34. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/adapter.module.js +43 -0
  35. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-adapter.js +139 -0
  36. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-formats.js +3 -0
  37. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-adapter.js +138 -0
  38. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-formats.js +20 -0
  39. package/esm2015/shared/gipi-components/datetime-picker/mat-datetime-picker/year-view.js +141 -0
  40. package/esm2015/shared/gipi-components/dropdown-menu/dropdown-menu.component.js +1 -1
  41. package/esm2015/shared/gipi-components/form-field/form-field.component.js +8 -3
  42. package/esm2015/shared/gipi-components/input-currency/input-currency.component.js +1 -1
  43. package/esm2015/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +1 -1
  44. package/esm2015/shared/gipi-components/input-select/input-select.component.js +1 -1
  45. package/esm2015/shared/gipi-components/input-select-enum/input-select-enum.component.js +20 -6
  46. package/esm2015/shared/gipi-components/month-year-picker/month-year-picker.component.js +1 -1
  47. package/esm2015/shared/gipi-components/radio-group/radio-group.component.js +1 -1
  48. package/esm2015/shared/gipi-components/range-page/range-page.component.js +1 -1
  49. package/esm2015/shared/gipi-components/range-slider/range-slider.component.js +1 -1
  50. package/esm2015/shared/gipi-components/select-button/select-button.component.js +1 -1
  51. package/esm2015/shared/gipi-components/split-button/split-button.component.js +2 -2
  52. package/esm2015/shared/gipi-components/tabs/tab-group/tab-group.component.js +5 -2
  53. package/esm2015/shared/gipi-components/textarea/textarea.component.js +1 -1
  54. package/esm2015/shared/shared.module.js +51 -3
  55. package/esm5/core/gipi-components/components/abstract-find.component.js +22 -1
  56. package/esm5/core/gipi-components/components/abstract.component.js +5 -2
  57. package/esm5/gipi-components.js +19 -6
  58. package/esm5/gipisistemas-ng-core.js +3 -1
  59. package/esm5/shared/components/button/button.component.js +2 -2
  60. package/esm5/shared/components/icon/icon.component.js +2 -4
  61. package/esm5/shared/gipi-components/button/button.component.js +2 -2
  62. package/esm5/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +1 -1
  63. package/esm5/shared/gipi-components/datepicker/datepicker/datepicker.component.js +3 -3
  64. package/esm5/shared/gipi-components/datepicker/mat-datepicker/calendar-body.js +1 -1
  65. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-input.js +1 -1
  66. package/esm5/shared/gipi-components/datetime-picker/datetime-picker/datetime-picker.component.js +176 -0
  67. package/esm5/shared/gipi-components/datetime-picker/datetime-picker.module.js +85 -0
  68. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar-body.js +119 -0
  69. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar.js +747 -0
  70. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/clock.js +332 -0
  71. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-animations.js +30 -0
  72. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-errors.js +7 -0
  73. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-filtertype.js +7 -0
  74. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-input.js +377 -0
  75. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-toggle.js +89 -0
  76. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-type.js +1 -0
  77. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker.js +495 -0
  78. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/month-view.js +160 -0
  79. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/multi-year-view.js +248 -0
  80. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/adapter.module.js +49 -0
  81. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-adapter.js +145 -0
  82. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-formats.js +3 -0
  83. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-adapter.js +141 -0
  84. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-formats.js +20 -0
  85. package/esm5/shared/gipi-components/datetime-picker/mat-datetime-picker/year-view.js +151 -0
  86. package/esm5/shared/gipi-components/dropdown-menu/dropdown-menu.component.js +1 -1
  87. package/esm5/shared/gipi-components/form-field/form-field.component.js +8 -3
  88. package/esm5/shared/gipi-components/input-currency/input-currency.component.js +1 -1
  89. package/esm5/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +1 -1
  90. package/esm5/shared/gipi-components/input-select/input-select.component.js +1 -1
  91. package/esm5/shared/gipi-components/input-select-enum/input-select-enum.component.js +25 -6
  92. package/esm5/shared/gipi-components/month-year-picker/month-year-picker.component.js +1 -1
  93. package/esm5/shared/gipi-components/radio-group/radio-group.component.js +1 -1
  94. package/esm5/shared/gipi-components/range-page/range-page.component.js +1 -1
  95. package/esm5/shared/gipi-components/range-slider/range-slider.component.js +1 -1
  96. package/esm5/shared/gipi-components/select-button/select-button.component.js +1 -1
  97. package/esm5/shared/gipi-components/split-button/split-button.component.js +2 -2
  98. package/esm5/shared/gipi-components/tabs/tab-group/tab-group.component.js +5 -2
  99. package/esm5/shared/gipi-components/textarea/textarea.component.js +1 -1
  100. package/esm5/shared/shared.module.js +51 -3
  101. package/fesm2015/gipisistemas-ng-core.js +3244 -157
  102. package/fesm2015/gipisistemas-ng-core.js.map +1 -1
  103. package/fesm5/gipisistemas-ng-core.js +3494 -152
  104. package/fesm5/gipisistemas-ng-core.js.map +1 -1
  105. package/gipi-components.d.ts +16 -0
  106. package/gipisistemas-ng-core.d.ts +2 -0
  107. package/gipisistemas-ng-core.metadata.json +1 -1
  108. package/package.json +4 -4
  109. package/shared/components/icon/icon.component.d.ts +1 -3
  110. package/shared/gipi-components/datetime-picker/datetime-picker/datetime-picker.component.d.ts +40 -0
  111. package/shared/gipi-components/datetime-picker/datetime-picker.module.d.ts +2 -0
  112. package/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar-body.d.ts +50 -0
  113. package/shared/gipi-components/datetime-picker/mat-datetime-picker/calendar.d.ts +140 -0
  114. package/shared/gipi-components/datetime-picker/mat-datetime-picker/clock.d.ts +66 -0
  115. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-animations.d.ts +8 -0
  116. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-errors.d.ts +2 -0
  117. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-filtertype.d.ts +5 -0
  118. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-input.d.ts +98 -0
  119. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-toggle.d.ts +20 -0
  120. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker-type.d.ts +1 -0
  121. package/shared/gipi-components/datetime-picker/mat-datetime-picker/datetimepicker.d.ts +133 -0
  122. package/shared/gipi-components/datetime-picker/mat-datetime-picker/month-view.d.ts +53 -0
  123. package/shared/gipi-components/datetime-picker/mat-datetime-picker/multi-year-view.d.ts +80 -0
  124. package/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/adapter.module.d.ts +4 -0
  125. package/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-adapter.d.ts +46 -0
  126. package/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/datetime-formats.d.ts +20 -0
  127. package/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-adapter.d.ts +36 -0
  128. package/shared/gipi-components/datetime-picker/mat-datetime-picker/shared/adapter/native-datetime-formats.d.ts +2 -0
  129. package/shared/gipi-components/datetime-picker/mat-datetime-picker/year-view.d.ts +52 -0
  130. package/shared/gipi-components/form-field/form-field.component.d.ts +1 -0
  131. package/shared/gipi-components/input-select-enum/input-select-enum.component.d.ts +4 -2
@@ -0,0 +1,160 @@
1
+ import { __decorate, __metadata, __param } from "tslib";
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional, Output, ViewEncapsulation, } from '@angular/core';
3
+ import { GIPIDatetimepickerCalendarCell } from './calendar-body';
4
+ import { slideCalendar } from './datetimepicker-animations';
5
+ import { createMissingDateImplError } from './datetimepicker-errors';
6
+ import { GIPIDatetimeAdapter } from './shared/adapter/datetime-adapter';
7
+ import { GIPI_DATETIME_FORMATS, } from './shared/adapter/datetime-formats';
8
+ var DAYS_PER_WEEK = 7;
9
+ /**
10
+ * An internal component used to display a single month in the datepicker.
11
+ * @docs-private
12
+ */
13
+ var GIPIDatetimepickerMonthViewComponent = /** @class */ (function () {
14
+ function GIPIDatetimepickerMonthViewComponent(_adapter, _dateFormats) {
15
+ this._adapter = _adapter;
16
+ this._dateFormats = _dateFormats;
17
+ this.type = 'date';
18
+ /** Emits when a new date is selected. */
19
+ this.selectedChange = new EventEmitter();
20
+ this._userSelection = new EventEmitter();
21
+ if (!this._adapter) {
22
+ throw createMissingDateImplError('GIPIDatetimeAdapter');
23
+ }
24
+ if (!this._dateFormats) {
25
+ throw createMissingDateImplError('GIPI_DATETIME_FORMATS');
26
+ }
27
+ var firstDayOfWeek = this._adapter.getFirstDayOfWeek();
28
+ var narrowWeekdays = this._adapter.getDayOfWeekNames('narrow');
29
+ var longWeekdays = this._adapter.getDayOfWeekNames('long');
30
+ // Rotate the labels for days of the week based on the configured first day of the week.
31
+ var weekdays = longWeekdays.map(function (long, i) { return { long: long, narrow: narrowWeekdays[i] }; });
32
+ this._weekdays = weekdays
33
+ .slice(firstDayOfWeek)
34
+ .concat(weekdays.slice(0, firstDayOfWeek));
35
+ this._activeDate = this._adapter.today();
36
+ }
37
+ Object.defineProperty(GIPIDatetimepickerMonthViewComponent.prototype, "activeDate", {
38
+ get: function () {
39
+ return this._activeDate;
40
+ },
41
+ set: function (value) {
42
+ var oldActiveDate = this._activeDate;
43
+ this._activeDate = value || this._adapter.today();
44
+ if (oldActiveDate && this._activeDate && !this._adapter.sameMonthAndYear(oldActiveDate, this._activeDate)) {
45
+ this._init();
46
+ if (this._adapter.isInNextMonth(oldActiveDate, this._activeDate)) {
47
+ this.calendarState('right');
48
+ }
49
+ else {
50
+ this.calendarState('left');
51
+ }
52
+ }
53
+ },
54
+ enumerable: false,
55
+ configurable: true
56
+ });
57
+ Object.defineProperty(GIPIDatetimepickerMonthViewComponent.prototype, "selected", {
58
+ get: function () {
59
+ return this._selected;
60
+ },
61
+ set: function (value) {
62
+ this._selected = value;
63
+ this._selectedDate = this._getDateInCurrentMonth(this.selected);
64
+ },
65
+ enumerable: false,
66
+ configurable: true
67
+ });
68
+ GIPIDatetimepickerMonthViewComponent.prototype.ngAfterContentInit = function () {
69
+ this._init();
70
+ };
71
+ /** Handles when a new date is selected. */
72
+ GIPIDatetimepickerMonthViewComponent.prototype._dateSelected = function (date) {
73
+ this.selectedChange.emit(this._adapter.createDatetime(this._adapter.getYear(this.activeDate), this._adapter.getMonth(this.activeDate), date, this._adapter.getHour(this.activeDate), this._adapter.getMinute(this.activeDate)));
74
+ if (this.type === 'date') {
75
+ this._userSelection.emit();
76
+ }
77
+ };
78
+ GIPIDatetimepickerMonthViewComponent.prototype._calendarStateDone = function () {
79
+ this._calendarState = '';
80
+ };
81
+ /** Initializes this month view. */
82
+ GIPIDatetimepickerMonthViewComponent.prototype._init = function () {
83
+ this._selectedDate = this._getDateInCurrentMonth(this.selected);
84
+ this._todayDate = this._getDateInCurrentMonth(this._adapter.today());
85
+ var firstOfMonth = this._adapter.createDatetime(this._adapter.getYear(this.activeDate), this._adapter.getMonth(this.activeDate), 1, this._adapter.getHour(this.activeDate), this._adapter.getMinute(this.activeDate));
86
+ this._firstWeekOffset = (DAYS_PER_WEEK + this._adapter.getDayOfWeek(firstOfMonth) - this._adapter.getFirstDayOfWeek()) % DAYS_PER_WEEK;
87
+ this._createWeekCells();
88
+ };
89
+ /** Creates MdCalendarCells for the dates in this month. */
90
+ GIPIDatetimepickerMonthViewComponent.prototype._createWeekCells = function () {
91
+ var daysInMonth = this._adapter.getNumDaysInMonth(this.activeDate);
92
+ var dateNames = this._adapter.getDateNames();
93
+ this._weeks = [[]];
94
+ for (var i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {
95
+ if (cell == DAYS_PER_WEEK) {
96
+ this._weeks.push([]);
97
+ cell = 0;
98
+ }
99
+ var date = this._adapter.createDatetime(this._adapter.getYear(this.activeDate), this._adapter.getMonth(this.activeDate), i + 1, this._adapter.getHour(this.activeDate), this._adapter.getMinute(this.activeDate));
100
+ var enabled = !this.dateFilter || this.dateFilter(date);
101
+ var ariaLabel = this._adapter.format(date, this._dateFormats.display.dateA11yLabel);
102
+ this._weeks[this._weeks.length - 1].push(new GIPIDatetimepickerCalendarCell(i + 1, dateNames[i], ariaLabel, enabled));
103
+ }
104
+ };
105
+ /** Gets the date in this month that the given Date falls on. Returns null if the given Date is in another month. */
106
+ GIPIDatetimepickerMonthViewComponent.prototype._getDateInCurrentMonth = function (date) {
107
+ return this._adapter.sameMonthAndYear(date, this.activeDate)
108
+ ? this._adapter.getDate(date)
109
+ : null;
110
+ };
111
+ GIPIDatetimepickerMonthViewComponent.prototype.calendarState = function (direction) {
112
+ this._calendarState = direction;
113
+ };
114
+ GIPIDatetimepickerMonthViewComponent.ctorParameters = function () { return [
115
+ { type: GIPIDatetimeAdapter, decorators: [{ type: Optional }] },
116
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [GIPI_DATETIME_FORMATS,] }] }
117
+ ]; };
118
+ __decorate([
119
+ Input(),
120
+ __metadata("design:type", String)
121
+ ], GIPIDatetimepickerMonthViewComponent.prototype, "type", void 0);
122
+ __decorate([
123
+ Input(),
124
+ __metadata("design:type", Function)
125
+ ], GIPIDatetimepickerMonthViewComponent.prototype, "dateFilter", void 0);
126
+ __decorate([
127
+ Input(),
128
+ __metadata("design:type", Object),
129
+ __metadata("design:paramtypes", [Object])
130
+ ], GIPIDatetimepickerMonthViewComponent.prototype, "activeDate", null);
131
+ __decorate([
132
+ Input(),
133
+ __metadata("design:type", Object),
134
+ __metadata("design:paramtypes", [Object])
135
+ ], GIPIDatetimepickerMonthViewComponent.prototype, "selected", null);
136
+ __decorate([
137
+ Output(),
138
+ __metadata("design:type", Object)
139
+ ], GIPIDatetimepickerMonthViewComponent.prototype, "selectedChange", void 0);
140
+ __decorate([
141
+ Output(),
142
+ __metadata("design:type", Object)
143
+ ], GIPIDatetimepickerMonthViewComponent.prototype, "_userSelection", void 0);
144
+ GIPIDatetimepickerMonthViewComponent = __decorate([
145
+ Component({
146
+ selector: 'gipi-mat-datetime-picker-month-view',
147
+ template: "<table class=\"gipi-mat-datetime-picker-calendar-table\">\n <thead class=\"gipi-mat-datetime-picker-calendar-table-header\">\n <tr>\n <th *ngFor=\"let day of _weekdays\"\n [attr.aria-label]=\"day.long\">\n {{ day.narrow }}\n </th>\n </tr>\n <tr>\n <th class=\"gipi-mat-datetime-picker-calendar-table-header-divider\"\n colspan=\"7\"\n aria-hidden=\"true\">\n </th>\n </tr>\n </thead>\n <tbody gipiMatDatetimePickerCalendarBody\n role=\"grid\"\n [activeCell]=\"_adapter.getDate(activeDate) - 1\"\n [rows]=\"_weeks\"\n [selectedValue]=\"_selectedDate\"\n [todayValue]=\"_todayDate\"\n [@slideCalendar]=\"_calendarState\"\n (@slideCalendar.done)=\"_calendarStateDone()\"\n (selectedValueChange)=\"_dateSelected($event)\">\n </tbody>\n</table>",
148
+ animations: [slideCalendar],
149
+ encapsulation: ViewEncapsulation.None,
150
+ changeDetection: ChangeDetectionStrategy.OnPush
151
+ }),
152
+ __param(0, Optional()),
153
+ __param(1, Optional()),
154
+ __param(1, Inject(GIPI_DATETIME_FORMATS)),
155
+ __metadata("design:paramtypes", [GIPIDatetimeAdapter, Object])
156
+ ], GIPIDatetimepickerMonthViewComponent);
157
+ return GIPIDatetimepickerMonthViewComponent;
158
+ }());
159
+ export { GIPIDatetimepickerMonthViewComponent };
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGgtdmlldy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BnaXBpc2lzdGVtYXMvbmctY29yZS8iLCJzb3VyY2VzIjpbInNoYXJlZC9naXBpLWNvbXBvbmVudHMvZGF0ZXRpbWUtcGlja2VyL21hdC1kYXRldGltZS1waWNrZXIvbW9udGgtdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUV4SixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixHQUF3QixNQUFNLG1DQUFtQyxDQUFDO0FBRWhHLElBQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUV4Qjs7O0dBR0c7QUFRSDtJQXVESSw4Q0FDdUIsUUFBZ0MsRUFHM0MsWUFBaUM7UUFIdEIsYUFBUSxHQUFSLFFBQVEsQ0FBd0I7UUFHM0MsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBekNwQyxTQUFJLEdBQTJCLE1BQU0sQ0FBQztRQWlDL0MseUNBQXlDO1FBQy9CLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQztRQUN2QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFRaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsTUFBTSwwQkFBMEIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFD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QTZKaEQ7SUFBRCwyQ0FBQztDQUFBLEFBN0pELElBNkpDO1NBN0pZLG9DQUFvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24sIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEdJUElEYXRldGltZXBpY2tlckNhbGVuZGFyQ2VsbCB9IGZyb20gJy4vY2FsZW5kYXItYm9keSc7XG5pbXBvcnQgeyBzbGlkZUNhbGVuZGFyIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1hbmltYXRpb25zJztcbmltcG9ydCB7IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbEVycm9yIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1lcnJvcnMnO1xuaW1wb3J0IHsgR0lQSURhdGV0aW1lcGlja2VyVHlwZSB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItdHlwZSc7XG5pbXBvcnQgeyBHSVBJRGF0ZXRpbWVBZGFwdGVyIH0gZnJvbSAnLi9zaGFyZWQvYWRhcHRlci9kYXRldGltZS1hZGFwdGVyJztcbmltcG9ydCB7IEdJUElfREFURVRJTUVfRk9STUFUUywgR0lQSURhdGV0aW1lRm9ybWF0cywgfSBmcm9tICcuL3NoYXJlZC9hZGFwdGVyL2RhdGV0aW1lLWZvcm1hdHMnO1xuXG5jb25zdCBEQVlTX1BFUl9XRUVLID0gNztcblxuLyoqXG4gKiBBbiBpbnRlcm5hbCBjb21wb25lbnQgdXNlZCB0byBkaXNwbGF5IGEgc2luZ2xlIG1vbnRoIGluIHRoZSBkYXRlcGlja2VyLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2dpcGktbWF0LWRhdGV0aW1lLXBpY2tlci1tb250aC12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJ21vbnRoLXZpZXcuaHRtbCcsXG4gICAgYW5pbWF0aW9uczogW3NsaWRlQ2FsZW5kYXJdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEdJUElEYXRldGltZXBpY2tlck1vbnRoVmlld0NvbXBvbmVudDxEPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuXG4gICAgLyoqIEdyaWQgb2YgY2FsZW5kYXIgY2VsbHMgcmVwcmVzZW50aW5nIHRoZSBkYXRlcyBvZiB0aGUgbW9udGguICovXG4gICAgX3dlZWtzOiBHSVBJRGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNlbGxbXVtdO1xuXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgYmxhbmsgY2VsbHMgaW4gdGhlIGZpcnN0IHJvdyBiZWZvcmUgdGhlIDFzdCBvZiB0aGUgbW9udGguICovXG4gICAgX2ZpcnN0V2Vla09mZnNldDogbnVtYmVyO1xuXG4gICAgLyoqIFRoZSBkYXRlIG9mIHRoZSBtb250aCB0aGF0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgRGF0ZSBmYWxscyBvbi4gTnVsbCBpZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIERhdGUgaXMgaW4gYW5vdGhlciBtb250aC4gKi9cbiAgICBfc2VsZWN0ZWREYXRlOiBudW1iZXI7XG5cbiAgICAvKiogVGhlIGRhdGUgb2YgdGhlIG1vbnRoIHRoYXQgdG9kYXkgZmFsbHMgb24uIE51bGwgaWYgdG9kYXkgaXMgaW4gYW5vdGhlciBtb250aC4gKi9cbiAgICBfdG9kYXlEYXRlOiBudW1iZXI7XG5cbiAgICAvKiogVGhlIG5hbWVzIG9mIHRoZSB3ZWVrZGF5cy4gKi9cbiAgICBfd2Vla2RheXM6IHsgbG9uZzogc3RyaW5nOyBuYXJyb3c6IHN0cmluZyB9W107XG4gICAgX2NhbGVuZGFyU3RhdGU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHR5cGU6IEdJUElEYXRldGltZXBpY2tlclR5cGUgPSAnZGF0ZSc7XG5cbiAgICAvKiogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciB3aGljaCBkYXRlcyBhcmUgc2VsZWN0YWJsZS4gKi9cbiAgICBASW5wdXQoKSBkYXRlRmlsdGVyOiAoZGF0ZTogRCkgPT4gYm9vbGVhbjtcblxuICAgIC8qKiBUaGUgZGF0ZSB0byBkaXNwbGF5IGluIHRoaXMgbW9udGggdmlldyAoZXZlcnl0aGluZyBvdGhlciB0aGFuIHRoZSBtb250aCBhbmQgeWVhciBpcyBpZ25vcmVkKS4gKi9cbiAgICBwcml2YXRlIF9hY3RpdmVEYXRlOiBEO1xuICAgIEBJbnB1dCgpIGdldCBhY3RpdmVEYXRlKCk6IEQge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRGF0ZTtcbiAgICB9XG4gICAgc2V0IGFjdGl2ZURhdGUodmFsdWU6IEQpIHtcbiAgICAgICAgbGV0IG9sZEFjdGl2ZURhdGUgPSB0aGlzLl9hY3RpdmVEYXRlO1xuICAgICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdmFsdWUgfHwgdGhpcy5fYWRhcHRlci50b2RheSgpO1xuICAgICAgICBpZiAob2xkQWN0aXZlRGF0ZSAmJiB0aGlzLl9hY3RpdmVEYXRlICYmICF0aGlzLl9hZGFwdGVyLnNhbWVNb250aEFuZFllYXIob2xkQWN0aXZlRGF0ZSwgdGhpcy5fYWN0aXZlRGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hZGFwdGVyLmlzSW5OZXh0TW9udGgob2xkQWN0aXZlRGF0ZSwgdGhpcy5fYWN0aXZlRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyU3RhdGUoJ3JpZ2h0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJTdGF0ZSgnbGVmdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZS4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZDogRDtcbiAgICBASW5wdXQoKSBnZXQgc2VsZWN0ZWQoKTogRCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICB9XG4gICAgc2V0IHNlbGVjdGVkKHZhbHVlOiBEKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMuX2dldERhdGVJbkN1cnJlbnRNb250aCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKiogRW1pdHMgd2hlbiBhIG5ldyBkYXRlIGlzIHNlbGVjdGVkLiAqL1xuICAgIEBPdXRwdXQoKSBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcbiAgICBAT3V0cHV0KCkgX3VzZXJTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIF9hZGFwdGVyOiBHSVBJRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KEdJUElfREFURVRJTUVfRk9STUFUUylcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZUZvcm1hdHM6IEdJUElEYXRldGltZUZvcm1hdHNcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvcignR0lQSURhdGV0aW1lQWRhcHRlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlRm9ybWF0cykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsRXJyb3IoJ0dJUElfREFURVRJTUVfRk9STUFUUycpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3REYXlPZldlZWsgPSB0aGlzLl9hZGFwdGVyLmdldEZpcnN0RGF5T2ZXZWVrKCk7XG4gICAgICAgIGNvbnN0IG5hcnJvd1dlZWtkYXlzID0gdGhpcy5fYWRhcHRlci5nZXREYXlPZldlZWtOYW1lcygnbmFycm93Jyk7XG4gICAgICAgIGNvbnN0IGxvbmdXZWVrZGF5cyA9IHRoaXMuX2FkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ2xvbmcnKTtcblxuICAgICAgICAvLyBSb3RhdGUgdGhlIGxhYmVscyBmb3IgZGF5cyBvZiB0aGUgd2VlayBiYXNlZCBvbiB0aGUgY29uZmlndXJlZCBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGxldCB3ZWVrZGF5cyA9IGxvbmdXZWVrZGF5cy5tYXAoKGxvbmcsIGkpID0+IHsgcmV0dXJuIHsgbG9uZywgbmFycm93OiBuYXJyb3dXZWVrZGF5c1tpXSB9OyB9KTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXMgPSB3ZWVrZGF5c1xuICAgICAgICAgICAgLnNsaWNlKGZpcnN0RGF5T2ZXZWVrKVxuICAgICAgICAgICAgLmNvbmNhdCh3ZWVrZGF5cy5zbGljZSgwLCBmaXJzdERheU9mV2VlaykpO1xuXG4gICAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLnRvZGF5KCk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZXMgd2hlbiBhIG5ldyBkYXRlIGlzIHNlbGVjdGVkLiAqL1xuICAgIF9kYXRlU2VsZWN0ZWQoZGF0ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdChcbiAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuY3JlYXRlRGF0ZXRpbWUoXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRIb3VyKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJTZWxlY3Rpb24uZW1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2NhbGVuZGFyU3RhdGVEb25lKCkge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclN0YXRlID0gJyc7XG4gICAgfVxuXG4gICAgLyoqIEluaXRpYWxpemVzIHRoaXMgbW9udGggdmlldy4gKi9cbiAgICBwcml2YXRlIF9pbml0KCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGUgPSB0aGlzLl9nZXREYXRlSW5DdXJyZW50TW9udGgodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuX3RvZGF5RGF0ZSA9IHRoaXMuX2dldERhdGVJbkN1cnJlbnRNb250aCh0aGlzLl9hZGFwdGVyLnRvZGF5KCkpO1xuXG4gICAgICAgIGxldCBmaXJzdE9mTW9udGggPSB0aGlzLl9hZGFwdGVyLmNyZWF0ZURhdGV0aW1lKFxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRIb3VyKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmdldE1pbnV0ZSh0aGlzLmFjdGl2ZURhdGUpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ZpcnN0V2Vla09mZnNldCA9IChEQVlTX1BFUl9XRUVLICsgdGhpcy5fYWRhcHRlci5nZXREYXlPZldlZWsoZmlyc3RPZk1vbnRoKSAtIHRoaXMuX2FkYXB0ZXIuZ2V0Rmlyc3REYXlPZldlZWsoKSkgJSBEQVlTX1BFUl9XRUVLO1xuXG4gICAgICAgIHRoaXMuX2NyZWF0ZVdlZWtDZWxscygpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGVzIE1kQ2FsZW5kYXJDZWxscyBmb3IgdGhlIGRhdGVzIGluIHRoaXMgbW9udGguICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlV2Vla0NlbGxzKCk6IHZvaWQge1xuICAgICAgICBsZXQgZGF5c0luTW9udGggPSB0aGlzLl9hZGFwdGVyLmdldE51bURheXNJbk1vbnRoKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIGxldCBkYXRlTmFtZXMgPSB0aGlzLl9hZGFwdGVyLmdldERhdGVOYW1lcygpO1xuICAgICAgICB0aGlzLl93ZWVrcyA9IFtbXV07XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjZWxsID0gdGhpcy5fZmlyc3RXZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XG4gICAgICAgICAgICBpZiAoY2VsbCA9PSBEQVlTX1BFUl9XRUVLKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla3MucHVzaChbXSk7XG4gICAgICAgICAgICAgICAgY2VsbCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZGF0ZSA9IHRoaXMuX2FkYXB0ZXIuY3JlYXRlRGF0ZXRpbWUoXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICAgICAgICAgIGkgKyAxLFxuICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0SG91cih0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0TWludXRlKHRoaXMuYWN0aXZlRGF0ZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgZW5hYmxlZCA9ICF0aGlzLmRhdGVGaWx0ZXIgfHwgdGhpcy5kYXRlRmlsdGVyKGRhdGUpO1xuICAgICAgICAgICAgbGV0IGFyaWFMYWJlbCA9IHRoaXMuX2FkYXB0ZXIuZm9ybWF0KGRhdGUsIHRoaXMuX2RhdGVGb3JtYXRzLmRpc3BsYXkuZGF0ZUExMXlMYWJlbCk7XG4gICAgICAgICAgICB0aGlzLl93ZWVrc1t0aGlzLl93ZWVrcy5sZW5ndGggLSAxXS5wdXNoKG5ldyBHSVBJRGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNlbGwoaSArIDEsIGRhdGVOYW1lc1tpXSwgYXJpYUxhYmVsLCBlbmFibGVkKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0cyB0aGUgZGF0ZSBpbiB0aGlzIG1vbnRoIHRoYXQgdGhlIGdpdmVuIERhdGUgZmFsbHMgb24uICBSZXR1cm5zIG51bGwgaWYgdGhlIGdpdmVuIERhdGUgaXMgaW4gYW5vdGhlciBtb250aC4gKi9cbiAgICBwcml2YXRlIF9nZXREYXRlSW5DdXJyZW50TW9udGgoZGF0ZTogRCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGFwdGVyLnNhbWVNb250aEFuZFllYXIoZGF0ZSwgdGhpcy5hY3RpdmVEYXRlKVxuICAgICAgICAgICAgPyB0aGlzLl9hZGFwdGVyLmdldERhdGUoZGF0ZSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGVuZGFyU3RhdGUoZGlyZWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTdGF0ZSA9IGRpcmVjdGlvbjtcbiAgICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,248 @@
1
+ import { __decorate, __metadata, __param } from "tslib";
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional, Output, ViewEncapsulation, } from '@angular/core';
3
+ import { GIPIDatetimepickerCalendarCell } from './calendar-body';
4
+ import { slideCalendar } from './datetimepicker-animations';
5
+ import { createMissingDateImplError } from './datetimepicker-errors';
6
+ import { GIPIDatetimeAdapter } from './shared/adapter/datetime-adapter';
7
+ import { GIPI_DATETIME_FORMATS, } from './shared/adapter/datetime-formats';
8
+ export var yearsPerPage = 24;
9
+ export var yearsPerRow = 4;
10
+ /**
11
+ * An internal component used to display multiple years in the datepicker.
12
+ * @docs-private
13
+ */
14
+ var GIPIDatetimepickerMultiYearViewComponent = /** @class */ (function () {
15
+ function GIPIDatetimepickerMultiYearViewComponent(_adapter, _dateFormats) {
16
+ this._adapter = _adapter;
17
+ this._dateFormats = _dateFormats;
18
+ this.type = 'date';
19
+ /** Emits when a new month is selected. */
20
+ this.selectedChange = new EventEmitter();
21
+ this._userSelection = new EventEmitter();
22
+ if (!this._adapter) {
23
+ throw createMissingDateImplError('GIPIDatetimeAdapter');
24
+ }
25
+ if (!this._dateFormats) {
26
+ throw createMissingDateImplError('GIPI_DATETIME_FORMATS');
27
+ }
28
+ this._activeDate = this._adapter.today();
29
+ }
30
+ Object.defineProperty(GIPIDatetimepickerMultiYearViewComponent.prototype, "activeDate", {
31
+ get: function () {
32
+ return this._activeDate;
33
+ },
34
+ set: function (value) {
35
+ var oldActiveDate = this._activeDate;
36
+ this._activeDate = value || this._adapter.today();
37
+ if (oldActiveDate && this._activeDate && !isSameMultiYearView(this._adapter, oldActiveDate, this._activeDate, this.minDate, this.maxDate)) {
38
+ this._init();
39
+ }
40
+ },
41
+ enumerable: false,
42
+ configurable: true
43
+ });
44
+ Object.defineProperty(GIPIDatetimepickerMultiYearViewComponent.prototype, "selected", {
45
+ get: function () {
46
+ return this._selected;
47
+ },
48
+ set: function (value) {
49
+ this._selected = value;
50
+ this._selectedYear = this._selected && this._adapter.getYear(this._selected);
51
+ },
52
+ enumerable: false,
53
+ configurable: true
54
+ });
55
+ Object.defineProperty(GIPIDatetimepickerMultiYearViewComponent.prototype, "minDate", {
56
+ get: function () {
57
+ return this._minDate;
58
+ },
59
+ set: function (value) {
60
+ this._minDate = this._getValidDateOrNull(this._adapter.deserialize(value));
61
+ },
62
+ enumerable: false,
63
+ configurable: true
64
+ });
65
+ Object.defineProperty(GIPIDatetimepickerMultiYearViewComponent.prototype, "maxDate", {
66
+ get: function () {
67
+ return this._maxDate;
68
+ },
69
+ set: function (value) {
70
+ this._maxDate = this._getValidDateOrNull(this._adapter.deserialize(value));
71
+ },
72
+ enumerable: false,
73
+ configurable: true
74
+ });
75
+ GIPIDatetimepickerMultiYearViewComponent.prototype.ngAfterContentInit = function () {
76
+ this._init();
77
+ };
78
+ /** Handles when a new year is selected. */
79
+ GIPIDatetimepickerMultiYearViewComponent.prototype._yearSelected = function (year) {
80
+ var month = this._adapter.getMonth(this.activeDate);
81
+ var normalizedDate = this._adapter.createDatetime(year, month, 1, 0, 0);
82
+ this.selectedChange.emit(this._adapter.createDatetime(year, month, Math.min(this._adapter.getDate(this.activeDate), this._adapter.getNumDaysInMonth(normalizedDate)), this._adapter.getHour(this.activeDate), this._adapter.getMinute(this.activeDate)));
83
+ if (this.type === 'year') {
84
+ this._userSelection.emit();
85
+ }
86
+ };
87
+ GIPIDatetimepickerMultiYearViewComponent.prototype._getActiveCell = function () {
88
+ return getActiveOffset(this._adapter, this.activeDate, this.minDate, this.maxDate);
89
+ };
90
+ GIPIDatetimepickerMultiYearViewComponent.prototype._calendarStateDone = function () {
91
+ this._calendarState = '';
92
+ };
93
+ /** Initializes this year view. */
94
+ GIPIDatetimepickerMultiYearViewComponent.prototype._init = function () {
95
+ var _this = this;
96
+ this._todayYear = this._adapter.getYear(this._adapter.today());
97
+ this._yearLabel = this._adapter.getYearName(this.activeDate);
98
+ var activeYear = this._adapter.getYear(this.activeDate);
99
+ var minYearOfPage = activeYear - getActiveOffset(this._adapter, this.activeDate, this.minDate, this.maxDate);
100
+ this._years = [];
101
+ for (var i = 0, row = []; i < yearsPerPage; i++) {
102
+ row.push(minYearOfPage + i);
103
+ if (row.length == yearsPerRow) {
104
+ this._years.push(row.map(function (year) { return _this._createCellForYear(year); }));
105
+ row = [];
106
+ }
107
+ }
108
+ };
109
+ /** Creates an GIPIDatetimepickerCalendarCell for the given year. */
110
+ GIPIDatetimepickerMultiYearViewComponent.prototype._createCellForYear = function (year) {
111
+ var yearName = this._adapter.getYearName(this._adapter.createDate(year, 0, 1));
112
+ return new GIPIDatetimepickerCalendarCell(year, yearName, yearName, this._shouldEnableYear(year));
113
+ };
114
+ /** Whether the given year is enabled. */
115
+ GIPIDatetimepickerMultiYearViewComponent.prototype._shouldEnableYear = function (year) {
116
+ // disable if the year is greater than maxDate lower than minDate
117
+ if (year === undefined ||
118
+ year === null ||
119
+ (this.maxDate && year > this._adapter.getYear(this.maxDate)) ||
120
+ (this.minDate && year < this._adapter.getYear(this.minDate))) {
121
+ return false;
122
+ }
123
+ // enable if it reaches here and there's no filter defined
124
+ if (!this.dateFilter) {
125
+ return true;
126
+ }
127
+ var firstOfYear = this._adapter.createDate(year, 0, 1);
128
+ // If any date in the year is enabled count the year as enabled.
129
+ for (var date = firstOfYear; this._adapter.getYear(date) == year; date = this._adapter.addCalendarDays(date, 1)) {
130
+ if (this.dateFilter(date)) {
131
+ return true;
132
+ }
133
+ }
134
+ return false;
135
+ };
136
+ /**
137
+ * Gets the year in this years range that the given Date falls on.
138
+ * Returns null if the given Date is not in this range.
139
+ */
140
+ GIPIDatetimepickerMultiYearViewComponent.prototype._getYearInCurrentRange = function (date) {
141
+ var year = this._adapter.getYear(date);
142
+ return this._isInRange(year) ? year : null;
143
+ };
144
+ /**
145
+ * Validate if the current year is in the current range
146
+ * Returns true if is in range else returns false
147
+ */
148
+ GIPIDatetimepickerMultiYearViewComponent.prototype._isInRange = function (year) {
149
+ return true;
150
+ };
151
+ /**
152
+ * @param obj The object to check.
153
+ * @returns The given object if it is both a date instance and valid, otherwise null.
154
+ */
155
+ GIPIDatetimepickerMultiYearViewComponent.prototype._getValidDateOrNull = function (obj) {
156
+ return this._adapter.isDateInstance(obj) && this._adapter.isValid(obj) ? obj : null;
157
+ };
158
+ GIPIDatetimepickerMultiYearViewComponent.ctorParameters = function () { return [
159
+ { type: GIPIDatetimeAdapter, decorators: [{ type: Optional }] },
160
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [GIPI_DATETIME_FORMATS,] }] }
161
+ ]; };
162
+ __decorate([
163
+ Input(),
164
+ __metadata("design:type", String)
165
+ ], GIPIDatetimepickerMultiYearViewComponent.prototype, "type", void 0);
166
+ __decorate([
167
+ Input(),
168
+ __metadata("design:type", Function)
169
+ ], GIPIDatetimepickerMultiYearViewComponent.prototype, "dateFilter", void 0);
170
+ __decorate([
171
+ Input(),
172
+ __metadata("design:type", Object),
173
+ __metadata("design:paramtypes", [Object])
174
+ ], GIPIDatetimepickerMultiYearViewComponent.prototype, "activeDate", null);
175
+ __decorate([
176
+ Input(),
177
+ __metadata("design:type", Object),
178
+ __metadata("design:paramtypes", [Object])
179
+ ], GIPIDatetimepickerMultiYearViewComponent.prototype, "selected", null);
180
+ __decorate([
181
+ Input(),
182
+ __metadata("design:type", Object),
183
+ __metadata("design:paramtypes", [Object])
184
+ ], GIPIDatetimepickerMultiYearViewComponent.prototype, "minDate", null);
185
+ __decorate([
186
+ Input(),
187
+ __metadata("design:type", Object),
188
+ __metadata("design:paramtypes", [Object])
189
+ ], GIPIDatetimepickerMultiYearViewComponent.prototype, "maxDate", null);
190
+ __decorate([
191
+ Output(),
192
+ __metadata("design:type", Object)
193
+ ], GIPIDatetimepickerMultiYearViewComponent.prototype, "selectedChange", void 0);
194
+ __decorate([
195
+ Output(),
196
+ __metadata("design:type", Object)
197
+ ], GIPIDatetimepickerMultiYearViewComponent.prototype, "_userSelection", void 0);
198
+ GIPIDatetimepickerMultiYearViewComponent = __decorate([
199
+ Component({
200
+ selector: 'gipi-mat-datetime-picker-multi-year-view',
201
+ template: "<table class=\"gipi-mat-datetime-picker-calendar-table\">\n <thead class=\"gipi-mat-datetime-picker-calendar-table-header\">\n <tr>\n <th class=\"gipi-mat-datetime-picker-calendar-table-header-divider\"\n colspan=\"4\">\n </th>\n </tr>\n </thead>\n <tbody gipiMatDatetimePickerCalendarBody\n role=\"grid\"\n allowDisabledSelection=\"true\"\n [cellAspectRatio]=\"4 / 7\"\n [numCols]=\"4\"\n [rows]=\"_years\"\n [activeCell]=\"_getActiveCell()\"\n [selectedValue]=\"_selectedYear\"\n [todayValue]=\"_todayYear\"\n [@slideCalendar]=\"_calendarState\"\n (@slideCalendar.done)=\"_calendarStateDone()\"\n (selectedValueChange)=\"_yearSelected($event)\">\n </tbody>\n</table>",
202
+ animations: [slideCalendar],
203
+ encapsulation: ViewEncapsulation.None,
204
+ changeDetection: ChangeDetectionStrategy.OnPush
205
+ }),
206
+ __param(0, Optional()),
207
+ __param(1, Optional()),
208
+ __param(1, Inject(GIPI_DATETIME_FORMATS)),
209
+ __metadata("design:paramtypes", [GIPIDatetimeAdapter, Object])
210
+ ], GIPIDatetimepickerMultiYearViewComponent);
211
+ return GIPIDatetimepickerMultiYearViewComponent;
212
+ }());
213
+ export { GIPIDatetimepickerMultiYearViewComponent };
214
+ export function isSameMultiYearView(dateAdapter, date1, date2, minDate, maxDate) {
215
+ var year1 = dateAdapter.getYear(date1);
216
+ var year2 = dateAdapter.getYear(date2);
217
+ var startingYear = getStartingYear(dateAdapter, minDate, maxDate);
218
+ return (Math.floor((year1 - startingYear) / yearsPerPage) === Math.floor((year2 - startingYear) / yearsPerPage));
219
+ }
220
+ /**
221
+ * When the multi-year view is first opened, the active year will be in view.
222
+ * So we compute how many years are between the active year and the *slot* where our
223
+ * "startingYear" will render when paged into view.
224
+ */
225
+ export function getActiveOffset(dateAdapter, activeDate, minDate, maxDate) {
226
+ var activeYear = dateAdapter.getYear(activeDate);
227
+ return euclideanModulo(activeYear - getStartingYear(dateAdapter, minDate, maxDate), yearsPerPage);
228
+ }
229
+ /**
230
+ * We pick a "starting" year such that either the maximum year would be at the end
231
+ * or the minimum year would be at the beginning of a page.
232
+ */
233
+ function getStartingYear(dateAdapter, minDate, maxDate) {
234
+ var startingYear = 0;
235
+ if (maxDate) {
236
+ var maxYear = dateAdapter.getYear(maxDate);
237
+ startingYear = maxYear - yearsPerPage + 1;
238
+ }
239
+ else if (minDate) {
240
+ startingYear = dateAdapter.getYear(minDate);
241
+ }
242
+ return startingYear;
243
+ }
244
+ /** Gets remainder that is non-negative, even if first number is negative */
245
+ function euclideanModulo(a, b) {
246
+ return ((a % b) + b) % b;
247
+ }
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGkteWVhci12aWV3LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2dpcGktY29tcG9uZW50cy9kYXRldGltZS1waWNrZXIvbWF0LWRhdGV0aW1lLXBpY2tlci9tdWx0aS15ZWFyLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBb0IsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFFeEosT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsR0FBd0IsTUFBTSxtQ0FBbUMsQ0FBQztBQUVoRyxNQUFNLENBQUMsSUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBRS9CLE1BQU0sQ0FBQyxJQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFN0I7OztHQUdHO0FBUUg7SUFtRUksa0RBQ3VCLFFBQWdDLEVBRzNDLFlBQWlDO1FBSHRCLGFBQVEsR0FBUixRQUFRLENBQXdCO1FBRzNDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQXZEcEMsU0FBSSxHQUEyQixNQUFNLENBQUM7UUE4Qy9DLDBDQUEwQztRQUNoQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFDdkMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBU2hELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLE1BQU0sMEJBQTBCLENBQUMs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LENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDckgsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFJLFdBQW1DLEVBQUUsVUFBYSxFQUFFLE9BQWlCLEVBQUUsT0FBaUI7SUFDdkgsSUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRCxPQUFPLGVBQWUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDdEcsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFJLFdBQW1DLEVBQUUsT0FBaUIsRUFBRSxPQUFpQjtJQUNqRyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDckIsSUFBSSxPQUFPLEVBQUU7UUFDVCxJQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLFlBQVksR0FBRyxPQUFPLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztLQUM3QztTQUFNLElBQUksT0FBTyxFQUFFO1FBQ2hCLFlBQVksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsT0FBTyxZQUFZLENBQUM7QUFDeEIsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSxTQUFTLGVBQWUsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUN6QyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBHSVBJRGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNlbGwgfSBmcm9tICcuL2NhbGVuZGFyLWJvZHknO1xuaW1wb3J0IHsgc2xpZGVDYWxlbmRhciB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvciB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItZXJyb3JzJztcbmltcG9ydCB7IEdJUElEYXRldGltZXBpY2tlclR5cGUgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLXR5cGUnO1xuaW1wb3J0IHsgR0lQSURhdGV0aW1lQWRhcHRlciB9IGZyb20gJy4vc2hhcmVkL2FkYXB0ZXIvZGF0ZXRpbWUtYWRhcHRlcic7XG5pbXBvcnQgeyBHSVBJX0RBVEVUSU1FX0ZPUk1BVFMsIEdJUElEYXRldGltZUZvcm1hdHMsIH0gZnJvbSAnLi9zaGFyZWQvYWRhcHRlci9kYXRldGltZS1mb3JtYXRzJztcblxuZXhwb3J0IGNvbnN0IHllYXJzUGVyUGFnZSA9IDI0O1xuXG5leHBvcnQgY29uc3QgeWVhcnNQZXJSb3cgPSA0O1xuXG4vKipcbiAqIEFuIGludGVybmFsIGNvbXBvbmVudCB1c2VkIHRvIGRpc3BsYXkgbXVsdGlwbGUgeWVhcnMgaW4gdGhlIGRhdGVwaWNrZXIuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZ2lwaS1tYXQtZGF0ZXRpbWUtcGlja2VyLW11bHRpLXllYXItdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICdtdWx0aS15ZWFyLXZpZXcuaHRtbCcsXG4gICAgYW5pbWF0aW9uczogW3NsaWRlQ2FsZW5kYXJdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEdJUElEYXRldGltZXBpY2tlck11bHRpWWVhclZpZXdDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcblxuICAgIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB0aGUgeWVhcnMgaW4gdGhlIHJhbmdlLiAqL1xuICAgIF95ZWFyczogR0lQSURhdGV0aW1lcGlja2VyQ2FsZW5kYXJDZWxsW11bXTtcblxuICAgIC8qKiBUaGUgbGFiZWwgZm9yIHRoaXMgeWVhciByYW5nZSAoZS5nLiBcIjIwMDAtMjAyMFwiKS4gKi9cbiAgICBfeWVhckxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogVGhlIHllYXIgaW4gdGhpcyByYW5nZSB0aGF0IHRvZGF5IGZhbGxzIG9uLiBOdWxsIGlmIHRvZGF5IGlzIGluIGEgZGlmZmVyZW50IHJhbmdlLiAqL1xuICAgIF90b2RheVllYXI6IG51bWJlcjtcblxuICAgIC8qKiBUaGUgeWVhciBpbiB0aGlzIHJhbmdlIHRoYXQgdGhlIHNlbGVjdGVkIERhdGUgZmFsbHMgb24uIE51bGwgaWYgdGhlIHNlbGVjdGVkIERhdGUgaXMgaW4gYSBkaWZmZXJlbnQgcmFuZ2UuICovXG4gICAgX3NlbGVjdGVkWWVhcjogbnVtYmVyIHwgbnVsbDtcblxuICAgIF9jYWxlbmRhclN0YXRlOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSB0eXBlOiBHSVBJRGF0ZXRpbWVwaWNrZXJUeXBlID0gJ2RhdGUnO1xuXG4gICAgLyoqIEEgZnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgd2hpY2ggZGF0ZXMgYXJlIHNlbGVjdGFibGUuICovXG4gICAgQElucHV0KCkgZGF0ZUZpbHRlcjogKGRhdGU6IEQpID0+IGJvb2xlYW47XG5cbiAgICAvKiogVGhlIGRhdGUgdG8gZGlzcGxheSBpbiB0aGlzIG11bHRpIHllYXIgdmlldyAqL1xuICAgIHByaXZhdGUgX2FjdGl2ZURhdGU6IEQ7XG4gICAgQElucHV0KCkgZ2V0IGFjdGl2ZURhdGUoKTogRCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEYXRlO1xuICAgIH1cbiAgICBzZXQgYWN0aXZlRGF0ZSh2YWx1ZTogRCkge1xuICAgICAgICBsZXQgb2xkQWN0aXZlRGF0ZSA9IHRoaXMuX2FjdGl2ZURhdGU7XG4gICAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB2YWx1ZSB8fCB0aGlzLl9hZGFwdGVyLnRvZGF5KCk7XG4gICAgICAgIGlmIChvbGRBY3RpdmVEYXRlICYmIHRoaXMuX2FjdGl2ZURhdGUgJiYgIWlzU2FtZU11bHRpWWVhclZpZXcodGhpcy5fYWRhcHRlciwgb2xkQWN0aXZlRGF0ZSwgdGhpcy5fYWN0aXZlRGF0ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlLiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkOiBEO1xuICAgIEBJbnB1dCgpIGdldCBzZWxlY3RlZCgpOiBEIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IEQpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRZZWFyID0gdGhpcy5fc2VsZWN0ZWQgJiYgdGhpcy5fYWRhcHRlci5nZXRZZWFyKHRoaXMuX3NlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlLiAqL1xuICAgIHByaXZhdGUgX21pbkRhdGU6IEQgfCBudWxsO1xuICAgIEBJbnB1dCgpIGdldCBtaW5EYXRlKCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gICAgfVxuICAgIHNldCBtaW5EYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9taW5EYXRlID0gdGhpcy5fZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2FkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIG1heGltdW0gc2VsZWN0YWJsZSBkYXRlLiAqL1xuICAgIHByaXZhdGUgX21heERhdGU6IEQgfCBudWxsO1xuICAgIEBJbnB1dCgpIGdldCBtYXhEYXRlKCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heERhdGU7XG4gICAgfVxuICAgIHNldCBtYXhEYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9tYXhEYXRlID0gdGhpcy5fZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2FkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKiogRW1pdHMgd2hlbiBhIG5ldyBtb250aCBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KCkgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG4gICAgQE91dHB1dCgpIF91c2VyU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIF9hZGFwdGVyOiBHSVBJRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KEdJUElfREFURVRJTUVfRk9STUFUUylcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZUZvcm1hdHM6IEdJUElEYXRldGltZUZvcm1hdHNcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvcignR0lQSURhdGV0aW1lQWRhcHRlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlRm9ybWF0cykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsRXJyb3IoJ0dJUElfREFURVRJTUVfRk9STUFUUycpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIudG9kYXkoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuX2luaXQoKTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlcyB3aGVuIGEgbmV3IHllYXIgaXMgc2VsZWN0ZWQuICovXG4gICAgX3llYXJTZWxlY3RlZCh5ZWFyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRlID0gdGhpcy5fYWRhcHRlci5jcmVhdGVEYXRldGltZSh5ZWFyLCBtb250aCwgMSwgMCwgMCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KFxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5jcmVhdGVEYXRldGltZShcbiAgICAgICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgICAgIG1vbnRoLFxuICAgICAgICAgICAgICAgIE1hdGgubWluKHRoaXMuX2FkYXB0ZXIuZ2V0RGF0ZSh0aGlzLmFjdGl2ZURhdGUpLCB0aGlzLl9hZGFwdGVyLmdldE51bURheXNJbk1vbnRoKG5vcm1hbGl6ZWREYXRlKSksXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRIb3VyKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgdGhpcy5fdXNlclNlbGVjdGlvbi5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZ2V0QWN0aXZlQ2VsbCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZ2V0QWN0aXZlT2Zmc2V0KHRoaXMuX2FkYXB0ZXIsIHRoaXMuYWN0aXZlRGF0ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgIH1cblxuICAgIF9jYWxlbmRhclN0YXRlRG9uZSgpIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTdGF0ZSA9ICcnO1xuICAgIH1cblxuICAgIC8qKiBJbml0aWFsaXplcyB0aGlzIHllYXIgdmlldy4gKi9cbiAgICBwcml2YXRlIF9pbml0KCkge1xuICAgICAgICB0aGlzLl90b2RheVllYXIgPSB0aGlzLl9hZGFwdGVyLmdldFllYXIodGhpcy5fYWRhcHRlci50b2RheSgpKTtcbiAgICAgICAgdGhpcy5feWVhckxhYmVsID0gdGhpcy5fYWRhcHRlci5nZXRZZWFyTmFtZSh0aGlzLmFjdGl2ZURhdGUpO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZVllYXIgPSB0aGlzLl9hZGFwdGVyLmdldFllYXIodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgY29uc3QgbWluWWVhck9mUGFnZSA9IGFjdGl2ZVllYXIgLSBnZXRBY3RpdmVPZmZzZXQodGhpcy5fYWRhcHRlciwgdGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG5cbiAgICAgICAgdGhpcy5feWVhcnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIHJvdzogbnVtYmVyW10gPSBbXTsgaSA8IHllYXJzUGVyUGFnZTsgaSsrKSB7XG4gICAgICAgICAgICByb3cucHVzaChtaW5ZZWFyT2ZQYWdlICsgaSk7XG4gICAgICAgICAgICBpZiAocm93Lmxlbmd0aCA9PSB5ZWFyc1BlclJvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3llYXJzLnB1c2gocm93Lm1hcCgoeWVhcikgPT4gdGhpcy5fY3JlYXRlQ2VsbEZvclllYXIoeWVhcikpKTtcbiAgICAgICAgICAgICAgICByb3cgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDcmVhdGVzIGFuIEdJUElEYXRldGltZXBpY2tlckNhbGVuZGFyQ2VsbCBmb3IgdGhlIGdpdmVuIHllYXIuICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlQ2VsbEZvclllYXIoeWVhcjogbnVtYmVyKSB7XG4gICAgICAgIGxldCB5ZWFyTmFtZSA9IHRoaXMuX2FkYXB0ZXIuZ2V0WWVhck5hbWUodGhpcy5fYWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIDAsIDEpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBHSVBJRGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNlbGwoeWVhciwgeWVhck5hbWUsIHllYXJOYW1lLCB0aGlzLl9zaG91bGRFbmFibGVZZWFyKHllYXIpKTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgZ2l2ZW4geWVhciBpcyBlbmFibGVkLiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZEVuYWJsZVllYXIoeWVhcjogbnVtYmVyKSB7XG4gICAgICAgIC8vIGRpc2FibGUgaWYgdGhlIHllYXIgaXMgZ3JlYXRlciB0aGFuIG1heERhdGUgbG93ZXIgdGhhbiBtaW5EYXRlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHllYXIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgeWVhciA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgKHRoaXMubWF4RGF0ZSAmJiB5ZWFyID4gdGhpcy5fYWRhcHRlci5nZXRZZWFyKHRoaXMubWF4RGF0ZSkpIHx8XG4gICAgICAgICAgICAodGhpcy5taW5EYXRlICYmIHllYXIgPCB0aGlzLl9hZGFwdGVyLmdldFllYXIodGhpcy5taW5EYXRlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmFibGUgaWYgaXQgcmVhY2hlcyBoZXJlIGFuZCB0aGVyZSdzIG5vIGZpbHRlciBkZWZpbmVkXG4gICAgICAgIGlmICghdGhpcy5kYXRlRmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0T2ZZZWFyID0gdGhpcy5fYWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIDAsIDEpO1xuXG4gICAgICAgIC8vIElmIGFueSBkYXRlIGluIHRoZSB5ZWFyIGlzIGVuYWJsZWQgY291bnQgdGhlIHllYXIgYXMgZW5hYmxlZC5cbiAgICAgICAgZm9yIChsZXQgZGF0ZSA9IGZpcnN0T2ZZZWFyOyB0aGlzLl9hZGFwdGVyLmdldFllYXIoZGF0ZSkgPT0geWVhcjsgZGF0ZSA9IHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIDEpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRlRmlsdGVyKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgeWVhciBpbiB0aGlzIHllYXJzIHJhbmdlIHRoYXQgdGhlIGdpdmVuIERhdGUgZmFsbHMgb24uXG4gICAgICogUmV0dXJucyBudWxsIGlmIHRoZSBnaXZlbiBEYXRlIGlzIG5vdCBpbiB0aGlzIHJhbmdlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFllYXJJbkN1cnJlbnRSYW5nZShkYXRlOiBEKSB7XG4gICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLl9hZGFwdGVyLmdldFllYXIoZGF0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luUmFuZ2UoeWVhcikgPyB5ZWFyIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBpZiB0aGUgY3VycmVudCB5ZWFyIGlzIGluIHRoZSBjdXJyZW50IHJhbmdlXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGlzIGluIHJhbmdlIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2lzSW5SYW5nZSh5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIFRoZSBnaXZlbiBvYmplY3QgaWYgaXQgaXMgYm90aCBhIGRhdGUgaW5zdGFuY2UgYW5kIHZhbGlkLCBvdGhlcndpc2UgbnVsbC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRWYWxpZERhdGVPck51bGwob2JqOiBhbnkpOiBEIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGFwdGVyLmlzRGF0ZUluc3RhbmNlKG9iaikgJiYgdGhpcy5fYWRhcHRlci5pc1ZhbGlkKG9iaikgPyBvYmogOiBudWxsO1xuICAgIH1cblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lTXVsdGlZZWFyVmlldzxEPihkYXRlQWRhcHRlcjogR0lQSURhdGV0aW1lQWRhcHRlcjxEPiwgZGF0ZTE6IEQsIGRhdGUyOiBELCBtaW5EYXRlOiBEIHwgbnVsbCwgbWF4RGF0ZTogRCB8IG51bGwpOiBib29sZWFuIHtcbiAgICBjb25zdCB5ZWFyMSA9IGRhdGVBZGFwdGVyLmdldFllYXIoZGF0ZTEpO1xuICAgIGNvbnN0IHllYXIyID0gZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlMik7XG4gICAgY29uc3Qgc3RhcnRpbmdZZWFyID0gZ2V0U3RhcnRpbmdZZWFyKGRhdGVBZGFwdGVyLCBtaW5EYXRlLCBtYXhEYXRlKTtcbiAgICByZXR1cm4gKE1hdGguZmxvb3IoKHllYXIxIC0gc3RhcnRpbmdZZWFyKSAvIHllYXJzUGVyUGFnZSkgPT09IE1hdGguZmxvb3IoKHllYXIyIC0gc3RhcnRpbmdZZWFyKSAvIHllYXJzUGVyUGFnZSkpO1xufVxuXG4vKipcbiAqIFdoZW4gdGhlIG11bHRpLXllYXIgdmlldyBpcyBmaXJzdCBvcGVuZWQsIHRoZSBhY3RpdmUgeWVhciB3aWxsIGJlIGluIHZpZXcuXG4gKiBTbyB3ZSBjb21wdXRlIGhvdyBtYW55IHllYXJzIGFyZSBiZXR3ZWVuIHRoZSBhY3RpdmUgeWVhciBhbmQgdGhlICpzbG90KiB3aGVyZSBvdXJcbiAqIFwic3RhcnRpbmdZZWFyXCIgd2lsbCByZW5kZXIgd2hlbiBwYWdlZCBpbnRvIHZpZXcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3RpdmVPZmZzZXQ8RD4oZGF0ZUFkYXB0ZXI6IEdJUElEYXRldGltZUFkYXB0ZXI8RD4sIGFjdGl2ZURhdGU6IEQsIG1pbkRhdGU6IEQgfCBudWxsLCBtYXhEYXRlOiBEIHwgbnVsbCk6IG51bWJlciB7XG4gICAgY29uc3QgYWN0aXZlWWVhciA9IGRhdGVBZGFwdGVyLmdldFllYXIoYWN0aXZlRGF0ZSk7XG4gICAgcmV0dXJuIGV1Y2xpZGVhbk1vZHVsbyhhY3RpdmVZZWFyIC0gZ2V0U3RhcnRpbmdZZWFyKGRhdGVBZGFwdGVyLCBtaW5EYXRlLCBtYXhEYXRlKSwgeWVhcnNQZXJQYWdlKTtcbn1cblxuLyoqXG4gKiBXZSBwaWNrIGEgXCJzdGFydGluZ1wiIHllYXIgc3VjaCB0aGF0IGVpdGhlciB0aGUgbWF4aW11bSB5ZWFyIHdvdWxkIGJlIGF0IHRoZSBlbmRcbiAqIG9yIHRoZSBtaW5pbXVtIHllYXIgd291bGQgYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHBhZ2UuXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXJ0aW5nWWVhcjxEPihkYXRlQWRhcHRlcjogR0lQSURhdGV0aW1lQWRhcHRlcjxEPiwgbWluRGF0ZTogRCB8IG51bGwsIG1heERhdGU6IEQgfCBudWxsKTogbnVtYmVyIHtcbiAgICBsZXQgc3RhcnRpbmdZZWFyID0gMDtcbiAgICBpZiAobWF4RGF0ZSkge1xuICAgICAgICBjb25zdCBtYXhZZWFyID0gZGF0ZUFkYXB0ZXIuZ2V0WWVhcihtYXhEYXRlKTtcbiAgICAgICAgc3RhcnRpbmdZZWFyID0gbWF4WWVhciAtIHllYXJzUGVyUGFnZSArIDE7XG4gICAgfSBlbHNlIGlmIChtaW5EYXRlKSB7XG4gICAgICAgIHN0YXJ0aW5nWWVhciA9IGRhdGVBZGFwdGVyLmdldFllYXIobWluRGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdGFydGluZ1llYXI7XG59XG5cbi8qKiBHZXRzIHJlbWFpbmRlciB0aGF0IGlzIG5vbi1uZWdhdGl2ZSwgZXZlbiBpZiBmaXJzdCBudW1iZXIgaXMgbmVnYXRpdmUgKi9cbmZ1bmN0aW9uIGV1Y2xpZGVhbk1vZHVsbyhhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuICgoYSAlIGIpICsgYikgJSBiO1xufVxuIl19
@@ -0,0 +1,49 @@
1
+ import { __decorate } from "tslib";
2
+ import { NgModule } from '@angular/core';
3
+ import { MatNativeDateModule, NativeDateModule } from '@angular/material/core';
4
+ import { GIPIDatetimeAdapter } from './datetime-adapter';
5
+ import { GIPI_DATETIME_FORMATS } from './datetime-formats';
6
+ import { GIPINativeDatetimeAdapter } from './native-datetime-adapter';
7
+ import { GIPI_NATIVE_DATETIME_FORMATS } from './native-datetime-formats';
8
+ var NativeDatetimeModule = /** @class */ (function () {
9
+ function NativeDatetimeModule() {
10
+ }
11
+ NativeDatetimeModule = __decorate([
12
+ NgModule({
13
+ imports: [
14
+ NativeDateModule,
15
+ ],
16
+ providers: [
17
+ {
18
+ provide: GIPIDatetimeAdapter,
19
+ useClass: GIPINativeDatetimeAdapter,
20
+ },
21
+ ],
22
+ })
23
+ ], NativeDatetimeModule);
24
+ return NativeDatetimeModule;
25
+ }());
26
+ export { NativeDatetimeModule };
27
+ var ɵ0 = GIPI_NATIVE_DATETIME_FORMATS;
28
+ var GIPINativeDatetimeModule = /** @class */ (function () {
29
+ function GIPINativeDatetimeModule() {
30
+ }
31
+ GIPINativeDatetimeModule = __decorate([
32
+ NgModule({
33
+ imports: [
34
+ NativeDatetimeModule,
35
+ MatNativeDateModule,
36
+ ],
37
+ providers: [
38
+ {
39
+ provide: GIPI_DATETIME_FORMATS,
40
+ useValue: ɵ0,
41
+ },
42
+ ],
43
+ })
44
+ ], GIPINativeDatetimeModule);
45
+ return GIPINativeDatetimeModule;
46
+ }());
47
+ export { GIPINativeDatetimeModule };
48
+ export { ɵ0 };
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2lwaXNpc3RlbWFzL25nLWNvcmUvIiwic291cmNlcyI6WyJzaGFyZWQvZ2lwaS1jb21wb25lbnRzL2RhdGV0aW1lLXBpY2tlci9tYXQtZGF0ZXRpbWUtcGlja2VyL3NoYXJlZC9hZGFwdGVyL2FkYXB0ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBYXpFO0lBQUE7SUFBb0MsQ0FBQztJQUF4QixvQkFBb0I7UUFYaEMsUUFBUSxDQUFDO1lBQ04sT0FBTyxFQUFFO2dCQUNMLGdCQUFnQjthQUNuQjtZQUNELFNBQVMsRUFBRTtnQkFDUDtvQkFDSSxPQUFPLEVBQUUsbUJBQW1CO29CQUM1QixRQUFRLEVBQUUseUJBQXlCO2lCQUN0QzthQUNKO1NBQ0osQ0FBQztPQUNXLG9CQUFvQixDQUFJO0lBQUQsMkJBQUM7Q0FBQSxBQUFyQyxJQUFxQztTQUF4QixvQkFBb0I7U0FVWCw0QkFBNEI7QUFJbEQ7SUFBQTtJQUF3QyxDQUFDO0lBQTVCLHdCQUF3QjtRQVpwQyxRQUFRLENBQUM7WUFDTixPQUFPLEVBQUU7Z0JBQ0wsb0JBQW9CO2dCQUNwQixtQkFBbUI7YUFDdEI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1A7b0JBQ0ksT0FBTyxFQUFFLHFCQUFxQjtvQkFDOUIsUUFBUSxJQUE4QjtpQkFDekM7YUFDSjtTQUNKLENBQUM7T0FDVyx3QkFBd0IsQ0FBSTtJQUFELCtCQUFDO0NBQUEsQUFBekMsSUFBeUM7U0FBNUIsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUsIE5hdGl2ZURhdGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuaW1wb3J0IHsgR0lQSURhdGV0aW1lQWRhcHRlciB9IGZyb20gJy4vZGF0ZXRpbWUtYWRhcHRlcic7XG5pbXBvcnQgeyBHSVBJX0RBVEVUSU1FX0ZPUk1BVFMgfSBmcm9tICcuL2RhdGV0aW1lLWZvcm1hdHMnO1xuaW1wb3J0IHsgR0lQSU5hdGl2ZURhdGV0aW1lQWRhcHRlciB9IGZyb20gJy4vbmF0aXZlLWRhdGV0aW1lLWFkYXB0ZXInO1xuaW1wb3J0IHsgR0lQSV9OQVRJVkVfREFURVRJTUVfRk9STUFUUyB9IGZyb20gJy4vbmF0aXZlLWRhdGV0aW1lLWZvcm1hdHMnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmF0aXZlRGF0ZU1vZHVsZSxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBHSVBJRGF0ZXRpbWVBZGFwdGVyLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IEdJUElOYXRpdmVEYXRldGltZUFkYXB0ZXIsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0aXZlRGF0ZXRpbWVNb2R1bGUgeyB9XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBOYXRpdmVEYXRldGltZU1vZHVsZSxcbiAgICAgICAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBHSVBJX0RBVEVUSU1FX0ZPUk1BVFMsXG4gICAgICAgICAgICB1c2VWYWx1ZTogR0lQSV9OQVRJVkVfREFURVRJTUVfRk9STUFUUyxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHSVBJTmF0aXZlRGF0ZXRpbWVNb2R1bGUgeyB9XG4iXX0=