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