nxt-pick-datetime 17.0.1 → 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -53
- package/assets/picker.scss +673 -673
- package/fesm2022/nxt-pick-datetime-moment-adapter.mjs +23 -26
- package/fesm2022/nxt-pick-datetime-moment-adapter.mjs.map +1 -1
- package/fesm2022/nxt-pick-datetime-native-adapter.mjs +22 -24
- package/fesm2022/nxt-pick-datetime-native-adapter.mjs.map +1 -1
- package/fesm2022/nxt-pick-datetime.mjs +77 -75
- package/fesm2022/nxt-pick-datetime.mjs.map +1 -1
- package/lib/class/date-time.class.d.ts +1 -1
- package/moment-adapter/moment-adapter.module.d.ts +2 -0
- package/moment-adapter/public-api.d.ts +1 -1
- package/native-adapter/native-adapter.module.d.ts +2 -0
- package/native-adapter/public-api.d.ts +1 -1
- package/package.json +10 -15
- package/esm2022/lib/class/date-time-adapter.class.mjs +0 -97
- package/esm2022/lib/class/date-time-format.class.mjs +0 -4
- package/esm2022/lib/class/date-time.class.mjs +0 -95
- package/esm2022/lib/class/dialog-config.class.mjs +0 -47
- package/esm2022/lib/class/dialog-ref.class.mjs +0 -119
- package/esm2022/lib/date-time/calendar/calendar.component.mjs +0 -346
- package/esm2022/lib/date-time/calendar-body/calendar-body.component.mjs +0 -151
- package/esm2022/lib/date-time/calendar-month-view/calendar-month-view.component.mjs +0 -429
- package/esm2022/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.mjs +0 -358
- package/esm2022/lib/date-time/calendar-year-view/calendar-year-view.component.mjs +0 -362
- package/esm2022/lib/date-time/date-time-inline/date-time-inline.component.mjs +0 -275
- package/esm2022/lib/date-time/date-time-picker/date-time-picker.component.mjs +0 -541
- package/esm2022/lib/date-time/date-time-picker-container/date-time-picker-container.animations.mjs +0 -19
- package/esm2022/lib/date-time/date-time-picker-container/date-time-picker-container.component.mjs +0 -389
- package/esm2022/lib/date-time/date-time-picker-input.directive.mjs +0 -618
- package/esm2022/lib/date-time/date-time-picker-intl.service.mjs +0 -61
- package/esm2022/lib/date-time/date-time-picker-trigger.directive.mjs +0 -70
- package/esm2022/lib/date-time/date-time.module.mjs +0 -96
- package/esm2022/lib/date-time/number-fixed-len.pipe.mjs +0 -22
- package/esm2022/lib/date-time/timer/timer.component.mjs +0 -299
- package/esm2022/lib/date-time/timer-box/timer-box.component.mjs +0 -95
- package/esm2022/lib/dialog/dialog-container/dialog-container.component.mjs +0 -248
- package/esm2022/lib/dialog/dialog.module.mjs +0 -42
- package/esm2022/lib/dialog/dialog.service.mjs +0 -251
- package/esm2022/lib/utils/object.mjs +0 -24
- package/esm2022/moment-adapter/date-time-adapter.class.mjs +0 -220
- package/esm2022/moment-adapter/date-time-format.class.mjs +0 -13
- package/esm2022/moment-adapter/moment-adapter.module.mjs +0 -37
- package/esm2022/moment-adapter/nxt-pick-datetime-moment-adapter.mjs +0 -5
- package/esm2022/moment-adapter/public-api.mjs +0 -3
- package/esm2022/native-adapter/date-time-adapter.class.mjs +0 -366
- package/esm2022/native-adapter/date-time-format.class.mjs +0 -13
- package/esm2022/native-adapter/native-adapter.module.mjs +0 -37
- package/esm2022/native-adapter/nxt-pick-datetime-native-adapter.mjs +0 -5
- package/esm2022/native-adapter/public-api.mjs +0 -2
- package/esm2022/nxt-pick-datetime.mjs +0 -5
- package/esm2022/public-api.mjs +0 -14
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Inject, Input, Output } from '@angular/core';
|
|
2
|
-
import { take } from 'rxjs/operators';
|
|
3
|
-
import { NXT_DATE_TIME_FORMATS } from '../../class/date-time-format.class';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../date-time-picker-intl.service";
|
|
6
|
-
import * as i2 from "../../class/date-time-adapter.class";
|
|
7
|
-
import * as i3 from "@angular/common";
|
|
8
|
-
import * as i4 from "@angular/cdk/a11y";
|
|
9
|
-
import * as i5 from "../calendar-multi-year-view/calendar-multi-year-view.component";
|
|
10
|
-
import * as i6 from "../calendar-year-view/calendar-year-view.component";
|
|
11
|
-
import * as i7 from "../calendar-month-view/calendar-month-view.component";
|
|
12
|
-
export class CalendarComponent {
|
|
13
|
-
get min() {
|
|
14
|
-
return this._minDate;
|
|
15
|
-
}
|
|
16
|
-
set min(value) {
|
|
17
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
18
|
-
value = this.getValidDate(value);
|
|
19
|
-
this._minDate = value
|
|
20
|
-
? this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(value), this.dateTimeAdapter.getMonth(value), this.dateTimeAdapter.getDate(value))
|
|
21
|
-
: undefined;
|
|
22
|
-
}
|
|
23
|
-
get max() {
|
|
24
|
-
return this._maxDate;
|
|
25
|
-
}
|
|
26
|
-
set max(value) {
|
|
27
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
28
|
-
value = this.getValidDate(value);
|
|
29
|
-
this._maxDate = value
|
|
30
|
-
? this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(value), this.dateTimeAdapter.getMonth(value), this.dateTimeAdapter.getDate(value))
|
|
31
|
-
: undefined;
|
|
32
|
-
}
|
|
33
|
-
get pickerMoment() {
|
|
34
|
-
return this._pickerMoment;
|
|
35
|
-
}
|
|
36
|
-
set pickerMoment(value) {
|
|
37
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
38
|
-
this._pickerMoment =
|
|
39
|
-
this.getValidDate(value) || this.dateTimeAdapter.now();
|
|
40
|
-
}
|
|
41
|
-
get selected() {
|
|
42
|
-
return this._selected;
|
|
43
|
-
}
|
|
44
|
-
set selected(value) {
|
|
45
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
46
|
-
this._selected = this.getValidDate(value);
|
|
47
|
-
}
|
|
48
|
-
get selecteds() {
|
|
49
|
-
return this._selecteds;
|
|
50
|
-
}
|
|
51
|
-
set selecteds(values) {
|
|
52
|
-
this._selecteds = values.map(v => {
|
|
53
|
-
v = this.dateTimeAdapter.deserialize(v);
|
|
54
|
-
return this.getValidDate(v);
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
get periodButtonText() {
|
|
58
|
-
return this.isMonthView
|
|
59
|
-
? this.dateTimeAdapter.format(this.pickerMoment, this.dateTimeFormats.monthYearLabel)
|
|
60
|
-
: this.dateTimeAdapter.getYearName(this.pickerMoment);
|
|
61
|
-
}
|
|
62
|
-
get periodButtonLabel() {
|
|
63
|
-
return this.isMonthView
|
|
64
|
-
? this.pickerIntl.switchToMultiYearViewLabel
|
|
65
|
-
: this.pickerIntl.switchToMonthViewLabel;
|
|
66
|
-
}
|
|
67
|
-
get prevButtonLabel() {
|
|
68
|
-
if (this._currentView === 'month') {
|
|
69
|
-
return this.pickerIntl.prevMonthLabel;
|
|
70
|
-
}
|
|
71
|
-
else if (this._currentView === 'year') {
|
|
72
|
-
return this.pickerIntl.prevYearLabel;
|
|
73
|
-
}
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
get nextButtonLabel() {
|
|
77
|
-
if (this._currentView === 'month') {
|
|
78
|
-
return this.pickerIntl.nextMonthLabel;
|
|
79
|
-
}
|
|
80
|
-
else if (this._currentView === 'year') {
|
|
81
|
-
return this.pickerIntl.nextYearLabel;
|
|
82
|
-
}
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
get currentView() {
|
|
86
|
-
return this._currentView;
|
|
87
|
-
}
|
|
88
|
-
set currentView(view) {
|
|
89
|
-
this._currentView = view;
|
|
90
|
-
this.moveFocusOnNextTick = true;
|
|
91
|
-
}
|
|
92
|
-
get isInSingleMode() {
|
|
93
|
-
return this.selectMode === 'single';
|
|
94
|
-
}
|
|
95
|
-
get isInRangeMode() {
|
|
96
|
-
return (this.selectMode === 'range' ||
|
|
97
|
-
this.selectMode === 'rangeFrom' ||
|
|
98
|
-
this.selectMode === 'rangeTo');
|
|
99
|
-
}
|
|
100
|
-
get showControlArrows() {
|
|
101
|
-
return this._currentView !== 'multi-years';
|
|
102
|
-
}
|
|
103
|
-
get isMonthView() {
|
|
104
|
-
return this._currentView === 'month';
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Bind class 'nxt-dt-calendar' to host
|
|
108
|
-
*
|
|
109
|
-
* @internal
|
|
110
|
-
*/
|
|
111
|
-
get calendarClass() {
|
|
112
|
-
return true;
|
|
113
|
-
}
|
|
114
|
-
constructor(elmRef, pickerIntl, ngZone, cdRef, dateTimeAdapter, dateTimeFormats) {
|
|
115
|
-
this.elmRef = elmRef;
|
|
116
|
-
this.pickerIntl = pickerIntl;
|
|
117
|
-
this.ngZone = ngZone;
|
|
118
|
-
this.cdRef = cdRef;
|
|
119
|
-
this.dateTimeAdapter = dateTimeAdapter;
|
|
120
|
-
this.dateTimeFormats = dateTimeFormats;
|
|
121
|
-
/**
|
|
122
|
-
* Set the first day of week
|
|
123
|
-
*/
|
|
124
|
-
this.firstDayOfWeek = 0;
|
|
125
|
-
this._selecteds = new Array();
|
|
126
|
-
/**
|
|
127
|
-
* The view that the calendar should start in
|
|
128
|
-
*/
|
|
129
|
-
this.startView = 'month';
|
|
130
|
-
/**
|
|
131
|
-
* Whether to hide dates in other months at the start or end of the current month
|
|
132
|
-
*/
|
|
133
|
-
this.hideOtherMonths = false;
|
|
134
|
-
/** Emits when the currently picker moment changes */
|
|
135
|
-
this.pickerMomentChange = new EventEmitter();
|
|
136
|
-
/** Emits when the currently selected date changes */
|
|
137
|
-
this.selectedChange = new EventEmitter();
|
|
138
|
-
/** Emits when any date is selected */
|
|
139
|
-
this.userSelection = new EventEmitter();
|
|
140
|
-
/**
|
|
141
|
-
* Emits the selected year
|
|
142
|
-
*
|
|
143
|
-
* This doesn't imply a change on the selected date.
|
|
144
|
-
*/
|
|
145
|
-
this.yearSelected = new EventEmitter();
|
|
146
|
-
/**
|
|
147
|
-
* Emits the selected month
|
|
148
|
-
*
|
|
149
|
-
* This doesn't imply a change on the selected date.
|
|
150
|
-
*/
|
|
151
|
-
this.monthSelected = new EventEmitter();
|
|
152
|
-
/**
|
|
153
|
-
* Date filter for the month and year view
|
|
154
|
-
*/
|
|
155
|
-
this.dateTimeFilterForViews = (date) => (!!date &&
|
|
156
|
-
(!this.dateTimeFilter || this.dateTimeFilter(date, 'date')) &&
|
|
157
|
-
(!this.min ||
|
|
158
|
-
this.dateTimeAdapter.compare(date, this.min) >= 0) &&
|
|
159
|
-
(!this.max ||
|
|
160
|
-
this.dateTimeAdapter.compare(date, this.max) <= 0));
|
|
161
|
-
/**
|
|
162
|
-
* Used for scheduling that focus should be moved to the active cell on the next tick.
|
|
163
|
-
* We need to schedule it, rather than do it immediately, because we have to wait
|
|
164
|
-
* for Angular to re-evaluate the view children.
|
|
165
|
-
*/
|
|
166
|
-
this.moveFocusOnNextTick = false;
|
|
167
|
-
this.intlChangesSub = this.pickerIntl.changes.subscribe(() => {
|
|
168
|
-
this.cdRef.markForCheck();
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
ngOnInit() { }
|
|
172
|
-
ngAfterContentInit() {
|
|
173
|
-
this._currentView = this.startView;
|
|
174
|
-
}
|
|
175
|
-
ngAfterViewChecked() {
|
|
176
|
-
if (this.moveFocusOnNextTick) {
|
|
177
|
-
this.moveFocusOnNextTick = false;
|
|
178
|
-
this.focusActiveCell();
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
ngOnDestroy() {
|
|
182
|
-
this.intlChangesSub?.unsubscribe();
|
|
183
|
-
this.intlChangesSub = undefined;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Toggle between month view and year view
|
|
187
|
-
*/
|
|
188
|
-
toggleViews() {
|
|
189
|
-
this.currentView =
|
|
190
|
-
this._currentView == 'month' ? 'multi-years' : 'month';
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Handles user clicks on the previous button.
|
|
194
|
-
*/
|
|
195
|
-
previousClicked() {
|
|
196
|
-
this.pickerMoment = this.isMonthView
|
|
197
|
-
? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1)
|
|
198
|
-
: this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1);
|
|
199
|
-
this.pickerMomentChange.emit(this.pickerMoment);
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Handles user clicks on the next button.
|
|
203
|
-
*/
|
|
204
|
-
nextClicked() {
|
|
205
|
-
this.pickerMoment = this.isMonthView
|
|
206
|
-
? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1)
|
|
207
|
-
: this.dateTimeAdapter.addCalendarYears(this.pickerMoment, 1);
|
|
208
|
-
this.pickerMomentChange.emit(this.pickerMoment);
|
|
209
|
-
}
|
|
210
|
-
dateSelected(date) {
|
|
211
|
-
if (!this.dateTimeFilterForViews(date)) {
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
this.selectedChange.emit(date);
|
|
215
|
-
/*if ((this.isInSingleMode && !this.dateTimeAdapter.isSameDay(date, this.selected)) ||
|
|
216
|
-
this.isInRangeMode) {
|
|
217
|
-
this.selectedChange.emit(date);
|
|
218
|
-
}*/
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Change the pickerMoment value and switch to a specific view
|
|
222
|
-
*/
|
|
223
|
-
goToDateInView(date, view) {
|
|
224
|
-
this.handlePickerMomentChange(date);
|
|
225
|
-
this.currentView = view;
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Change the pickerMoment value
|
|
230
|
-
*/
|
|
231
|
-
handlePickerMomentChange(date) {
|
|
232
|
-
this.pickerMoment = this.dateTimeAdapter.clampDate(date, this.min, this.max);
|
|
233
|
-
this.pickerMomentChange.emit(this.pickerMoment);
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
userSelected() {
|
|
237
|
-
this.userSelection.emit();
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Whether the previous period button is enabled.
|
|
241
|
-
*/
|
|
242
|
-
prevButtonEnabled() {
|
|
243
|
-
return (!this.min || !this.isSameView(this.pickerMoment, this.min));
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Whether the next period button is enabled.
|
|
247
|
-
*/
|
|
248
|
-
nextButtonEnabled() {
|
|
249
|
-
return (!this.max || !this.isSameView(this.pickerMoment, this.max));
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Focus to the host element
|
|
253
|
-
*/
|
|
254
|
-
focusActiveCell() {
|
|
255
|
-
this.ngZone.runOutsideAngular(() => {
|
|
256
|
-
this.ngZone.onStable
|
|
257
|
-
.asObservable()
|
|
258
|
-
.pipe(take(1))
|
|
259
|
-
.subscribe(() => {
|
|
260
|
-
this.elmRef.nativeElement
|
|
261
|
-
?.querySelector('.nxt-dt-calendar-cell-active')
|
|
262
|
-
?.focus();
|
|
263
|
-
});
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
selectYearInMultiYearView(normalizedYear) {
|
|
267
|
-
this.yearSelected.emit(normalizedYear);
|
|
268
|
-
}
|
|
269
|
-
selectMonthInYearView(normalizedMonth) {
|
|
270
|
-
this.monthSelected.emit(normalizedMonth);
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Whether the two dates represent the same view in the current view mode (month or year).
|
|
274
|
-
*/
|
|
275
|
-
isSameView(date1, date2) {
|
|
276
|
-
if (this._currentView === 'month') {
|
|
277
|
-
return !!(date1 &&
|
|
278
|
-
date2 &&
|
|
279
|
-
this.dateTimeAdapter.getYear(date1) ===
|
|
280
|
-
this.dateTimeAdapter.getYear(date2) &&
|
|
281
|
-
this.dateTimeAdapter.getMonth(date1) ===
|
|
282
|
-
this.dateTimeAdapter.getMonth(date2));
|
|
283
|
-
}
|
|
284
|
-
else if (this._currentView === 'year') {
|
|
285
|
-
return !!(date1 &&
|
|
286
|
-
date2 &&
|
|
287
|
-
this.dateTimeAdapter.getYear(date1) ===
|
|
288
|
-
this.dateTimeAdapter.getYear(date2));
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
return false;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Get a valid date object
|
|
296
|
-
*/
|
|
297
|
-
getValidDate(obj) {
|
|
298
|
-
return this.dateTimeAdapter.isDateInstance(obj) &&
|
|
299
|
-
this.dateTimeAdapter.isValid(obj)
|
|
300
|
-
? obj
|
|
301
|
-
: undefined;
|
|
302
|
-
}
|
|
303
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: CalendarComponent, deps: [{ token: i0.ElementRef }, { token: i1.DateTimeIntl }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i2.DateTimeAdapter }, { token: NXT_DATE_TIME_FORMATS }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
304
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.4", type: CalendarComponent, selector: "nxt-date-time-calendar", inputs: { dateTimeFilter: "dateTimeFilter", firstDayOfWeek: "firstDayOfWeek", min: "min", max: "max", pickerMoment: "pickerMoment", selectMode: "selectMode", selected: "selected", selecteds: "selecteds", startView: "startView", hideOtherMonths: "hideOtherMonths" }, outputs: { pickerMomentChange: "pickerMomentChange", selectedChange: "selectedChange", userSelection: "userSelection", yearSelected: "yearSelected", monthSelected: "monthSelected" }, host: { properties: { "class.nxt-dt-calendar": "this.calendarClass" } }, ngImport: i0, template: "<div class=\"nxt-dt-calendar-control\">\n <!-- focus when keyboard tab (http://kizu.ru/en/blog/keyboard-only-focus/#x) -->\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-arrow-button\"\n type=\"button\"\n tabindex=\"0\"\n [style.visibility]=\"showControlArrows? 'visible': 'hidden'\"\n [disabled]=\"!prevButtonEnabled()\"\n [attr.aria-label]=\"prevButtonLabel\"\n (click)=\"previousClicked()\">\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Left\"> -->\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n version=\"1.1\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 250.738 250.738\"\n style=\"enable-background:new 0 0 250.738 250.738;\"\n xml:space=\"preserve\"\n width=\"100%\"\n height=\"100%\">\n <path style=\"fill-rule: evenodd; clip-rule: evenodd;\"\n d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n </button>\n <div class=\"nxt-dt-calendar-control-content\">\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-period-button\"\n type=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"periodButtonLabel\"\n (click)=\"toggleViews()\">\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\n tabindex=\"-1\">\n {{periodButtonText}}\n\n <span class=\"nxt-dt-control-button-arrow\"\n [style.transform]=\"'rotate(' + (isMonthView? 0 : 180) +'deg)'\">\n <!-- <editor-fold desc=\"SVG Arrow\"> -->\n <svg version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n x=\"0px\"\n y=\"0px\"\n width=\"50%\"\n height=\"50%\"\n viewBox=\"0 0 292.362 292.362\"\n style=\"enable-background:new 0 0 292.362 292.362;\"\n xml:space=\"preserve\">\n <g>\n <path d=\"M286.935,69.377c-3.614-3.617-7.898-5.424-12.848-5.424H18.274c-4.952,0-9.233,1.807-12.85,5.424\n C1.807,72.998,0,77.279,0,82.228c0,4.948,1.807,9.229,5.424,12.847l127.907,127.907c3.621,3.617,7.902,5.428,12.85,5.428\n s9.233-1.811,12.847-5.428L286.935,95.074c3.613-3.617,5.427-7.898,5.427-12.847C292.362,77.279,290.548,72.998,286.935,69.377z\" />\n </g>\n </svg>\n <!-- </editor-fold> -->\n </span>\n </span>\n </button>\n </div>\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-arrow-button\"\n type=\"button\"\n tabindex=\"0\"\n [style.visibility]=\"showControlArrows? 'visible': 'hidden'\"\n [disabled]=\"!nextButtonEnabled()\"\n [attr.aria-label]=\"nextButtonLabel\"\n (click)=\"nextClicked()\">\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Right\"> -->\n <svg version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 250.738 250.738\"\n style=\"enable-background:new 0 0 250.738 250.738;\"\n xml:space=\"preserve\">\n <path style=\"fill-rule:evenodd;clip-rule:evenodd;\"\n d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\n C197.237,120.447,195.534,115.448,191.75,111.689z\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n </button>\n</div>\n<div class=\"nxt-dt-calendar-main\"\n cdkMonitorSubtreeFocus\n [ngSwitch]=\"currentView\"\n tabindex=\"-1\">\n <nxt-date-time-month-view *ngSwitchCase=\"'month'\"\n [pickerMoment]=\"pickerMoment\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [selectMode]=\"selectMode ?? 'single'\"\n [min]=\"min\"\n [max]=\"max\"\n [dateTimeFilter]=\"dateTimeFilter\"\n [hideOtherMonths]=\"hideOtherMonths\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (selectedChange)=\"dateSelected($event)\"\n (userSelection)=\"userSelected()\"></nxt-date-time-month-view>\n\n <nxt-date-time-year-view *ngSwitchCase=\"'year'\"\n [pickerMoment]=\"pickerMoment\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [selectMode]=\"selectMode ?? 'single'\"\n [min]=\"min\"\n [max]=\"max\"\n [dateTimeFilter]=\"dateTimeFilter\"\n (keyboardEnter)=\"focusActiveCell()\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (monthSelected)=\"selectMonthInYearView($event)\"\n (change)=\"goToDateInView($event, 'month')\"></nxt-date-time-year-view>\n\n <nxt-date-time-multi-year-view *ngSwitchCase=\"'multi-years'\"\n [pickerMoment]=\"pickerMoment\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [selectMode]=\"selectMode ?? 'single'\"\n [min]=\"min\"\n [max]=\"max\"\n [dateTimeFilter]=\"dateTimeFilter\"\n (keyboardEnter)=\"focusActiveCell()\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (yearSelected)=\"selectYearInMultiYearView($event)\"\n (change)=\"goToDateInView($event, 'year')\"></nxt-date-time-multi-year-view>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "component", type: i5.MultiYearViewComponent, selector: "nxt-date-time-multi-year-view", inputs: ["selectMode", "selected", "selecteds", "pickerMoment", "dateTimeFilter", "min", "max"], outputs: ["change", "yearSelected", "pickerMomentChange", "keyboardEnter"] }, { kind: "component", type: i6.YearViewComponent, selector: "nxt-date-time-year-view", inputs: ["selectMode", "selected", "selecteds", "pickerMoment", "dateTimeFilter", "min", "max"], outputs: ["change", "monthSelected", "pickerMomentChange", "keyboardEnter"] }, { kind: "component", type: i7.MonthViewComponent, selector: "nxt-date-time-month-view", inputs: ["hideOtherMonths", "firstDayOfWeek", "selectMode", "selected", "selecteds", "pickerMoment", "dateTimeFilter", "min", "max"], outputs: ["selectedChange", "userSelection", "pickerMomentChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
305
|
-
}
|
|
306
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: CalendarComponent, decorators: [{
|
|
307
|
-
type: Component,
|
|
308
|
-
args: [{ selector: 'nxt-date-time-calendar', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"nxt-dt-calendar-control\">\n <!-- focus when keyboard tab (http://kizu.ru/en/blog/keyboard-only-focus/#x) -->\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-arrow-button\"\n type=\"button\"\n tabindex=\"0\"\n [style.visibility]=\"showControlArrows? 'visible': 'hidden'\"\n [disabled]=\"!prevButtonEnabled()\"\n [attr.aria-label]=\"prevButtonLabel\"\n (click)=\"previousClicked()\">\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Left\"> -->\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n version=\"1.1\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 250.738 250.738\"\n style=\"enable-background:new 0 0 250.738 250.738;\"\n xml:space=\"preserve\"\n width=\"100%\"\n height=\"100%\">\n <path style=\"fill-rule: evenodd; clip-rule: evenodd;\"\n d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n </button>\n <div class=\"nxt-dt-calendar-control-content\">\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-period-button\"\n type=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"periodButtonLabel\"\n (click)=\"toggleViews()\">\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\n tabindex=\"-1\">\n {{periodButtonText}}\n\n <span class=\"nxt-dt-control-button-arrow\"\n [style.transform]=\"'rotate(' + (isMonthView? 0 : 180) +'deg)'\">\n <!-- <editor-fold desc=\"SVG Arrow\"> -->\n <svg version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n x=\"0px\"\n y=\"0px\"\n width=\"50%\"\n height=\"50%\"\n viewBox=\"0 0 292.362 292.362\"\n style=\"enable-background:new 0 0 292.362 292.362;\"\n xml:space=\"preserve\">\n <g>\n <path d=\"M286.935,69.377c-3.614-3.617-7.898-5.424-12.848-5.424H18.274c-4.952,0-9.233,1.807-12.85,5.424\n C1.807,72.998,0,77.279,0,82.228c0,4.948,1.807,9.229,5.424,12.847l127.907,127.907c3.621,3.617,7.902,5.428,12.85,5.428\n s9.233-1.811,12.847-5.428L286.935,95.074c3.613-3.617,5.427-7.898,5.427-12.847C292.362,77.279,290.548,72.998,286.935,69.377z\" />\n </g>\n </svg>\n <!-- </editor-fold> -->\n </span>\n </span>\n </button>\n </div>\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-arrow-button\"\n type=\"button\"\n tabindex=\"0\"\n [style.visibility]=\"showControlArrows? 'visible': 'hidden'\"\n [disabled]=\"!nextButtonEnabled()\"\n [attr.aria-label]=\"nextButtonLabel\"\n (click)=\"nextClicked()\">\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Right\"> -->\n <svg version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 250.738 250.738\"\n style=\"enable-background:new 0 0 250.738 250.738;\"\n xml:space=\"preserve\">\n <path style=\"fill-rule:evenodd;clip-rule:evenodd;\"\n d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\n C197.237,120.447,195.534,115.448,191.75,111.689z\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n </button>\n</div>\n<div class=\"nxt-dt-calendar-main\"\n cdkMonitorSubtreeFocus\n [ngSwitch]=\"currentView\"\n tabindex=\"-1\">\n <nxt-date-time-month-view *ngSwitchCase=\"'month'\"\n [pickerMoment]=\"pickerMoment\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [selectMode]=\"selectMode ?? 'single'\"\n [min]=\"min\"\n [max]=\"max\"\n [dateTimeFilter]=\"dateTimeFilter\"\n [hideOtherMonths]=\"hideOtherMonths\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (selectedChange)=\"dateSelected($event)\"\n (userSelection)=\"userSelected()\"></nxt-date-time-month-view>\n\n <nxt-date-time-year-view *ngSwitchCase=\"'year'\"\n [pickerMoment]=\"pickerMoment\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [selectMode]=\"selectMode ?? 'single'\"\n [min]=\"min\"\n [max]=\"max\"\n [dateTimeFilter]=\"dateTimeFilter\"\n (keyboardEnter)=\"focusActiveCell()\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (monthSelected)=\"selectMonthInYearView($event)\"\n (change)=\"goToDateInView($event, 'month')\"></nxt-date-time-year-view>\n\n <nxt-date-time-multi-year-view *ngSwitchCase=\"'multi-years'\"\n [pickerMoment]=\"pickerMoment\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [selectMode]=\"selectMode ?? 'single'\"\n [min]=\"min\"\n [max]=\"max\"\n [dateTimeFilter]=\"dateTimeFilter\"\n (keyboardEnter)=\"focusActiveCell()\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (yearSelected)=\"selectYearInMultiYearView($event)\"\n (change)=\"goToDateInView($event, 'year')\"></nxt-date-time-multi-year-view>\n</div>\n" }]
|
|
309
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.DateTimeIntl }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i2.DateTimeAdapter }, { type: undefined, decorators: [{
|
|
310
|
-
type: Inject,
|
|
311
|
-
args: [NXT_DATE_TIME_FORMATS]
|
|
312
|
-
}] }], propDecorators: { dateTimeFilter: [{
|
|
313
|
-
type: Input
|
|
314
|
-
}], firstDayOfWeek: [{
|
|
315
|
-
type: Input
|
|
316
|
-
}], min: [{
|
|
317
|
-
type: Input
|
|
318
|
-
}], max: [{
|
|
319
|
-
type: Input
|
|
320
|
-
}], pickerMoment: [{
|
|
321
|
-
type: Input
|
|
322
|
-
}], selectMode: [{
|
|
323
|
-
type: Input
|
|
324
|
-
}], selected: [{
|
|
325
|
-
type: Input
|
|
326
|
-
}], selecteds: [{
|
|
327
|
-
type: Input
|
|
328
|
-
}], startView: [{
|
|
329
|
-
type: Input
|
|
330
|
-
}], hideOtherMonths: [{
|
|
331
|
-
type: Input
|
|
332
|
-
}], pickerMomentChange: [{
|
|
333
|
-
type: Output
|
|
334
|
-
}], selectedChange: [{
|
|
335
|
-
type: Output
|
|
336
|
-
}], userSelection: [{
|
|
337
|
-
type: Output
|
|
338
|
-
}], yearSelected: [{
|
|
339
|
-
type: Output
|
|
340
|
-
}], monthSelected: [{
|
|
341
|
-
type: Output
|
|
342
|
-
}], calendarClass: [{
|
|
343
|
-
type: HostBinding,
|
|
344
|
-
args: ['class.nxt-dt-calendar']
|
|
345
|
-
}] } });
|
|
346
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGljay1kYXRldGltZS9zcmMvbGliL2RhdGUtdGltZS9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0MsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQTZCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVsTixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFckMsT0FBTyxFQUFtQixxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFBOzs7Ozs7Ozs7QUFXM0YsTUFBTSxPQUFPLGlCQUFpQjtJQWUxQixJQUNJLEdBQUc7UUFDSCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDeEIsQ0FBQztJQUVELElBQUksR0FBRyxDQUFDLEtBQW9CO1FBQ3hCLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMvQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUs7WUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFD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QUFHO3NCQUROLEtBQUs7Z0JBcUJGLEdBQUc7c0JBRE4sS0FBSztnQkFxQkYsWUFBWTtzQkFEZixLQUFLO2dCQVlOLFVBQVU7c0JBRFQsS0FBSztnQkFNRixRQUFRO3NCQURYLEtBQUs7Z0JBWUYsU0FBUztzQkFEWixLQUFLO2dCQWdCTixTQUFTO3NCQURSLEtBQUs7Z0JBT04sZUFBZTtzQkFEZCxLQUFLO2dCQUtHLGtCQUFrQjtzQkFEMUIsTUFBTTtnQkFLRSxjQUFjO3NCQUR0QixNQUFNO2dCQUtFLGFBQWE7c0JBRHJCLE1BQU07Z0JBU0UsWUFBWTtzQkFEcEIsTUFBTTtnQkFTRSxhQUFhO3NCQURyQixNQUFNO2dCQW9GSCxhQUFhO3NCQURoQixXQUFXO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbmplY3QsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS1hZGFwdGVyLmNsYXNzJ1xuaW1wb3J0IHsgRGF0ZVRpbWVGb3JtYXRzLCBOWFRfREFURV9USU1FX0ZPUk1BVFMgfSBmcm9tICcuLi8uLi9jbGFzcy9kYXRlLXRpbWUtZm9ybWF0LmNsYXNzJ1xuaW1wb3J0IHsgRGF0ZUZpbHRlciwgU2VsZWN0TW9kZSB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS5jbGFzcydcbmltcG9ydCB7IERhdGVUaW1lSW50bCB9IGZyb20gJy4uL2RhdGUtdGltZS1waWNrZXItaW50bC5zZXJ2aWNlJ1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ254dC1kYXRlLXRpbWUtY2FsZW5kYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBEYXRlIGZpbHRlciBmb3IgdGhlIG1vbnRoIGFuZCB5ZWFyIHZpZXdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGVUaW1lRmlsdGVyPzogRGF0ZUZpbHRlcjxUPlxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBmaXJzdCBkYXkgb2Ygd2Vla1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlyc3REYXlPZldlZWsgPSAwXG5cbiAgICAvKiogVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlICovXG4gICAgcHJpdmF0ZSBfbWluRGF0ZT86IFRcbiAgICBASW5wdXQoKVxuICAgIGdldCBtaW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlXG4gICAgfVxuXG4gICAgc2V0IG1pbih2YWx1ZTogVCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKVxuICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKVxuXG4gICAgICAgIHRoaXMuX21pbkRhdGUgPSB2YWx1ZVxuICAgICAgICAgICAgPyB0aGlzLmRhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodmFsdWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHZhbHVlKSxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXRlKHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICAvKiogVGhlIG1heGltdW0gc2VsZWN0YWJsZSBkYXRlICovXG4gICAgcHJpdmF0ZSBfbWF4RGF0ZT86IFRcbiAgICBASW5wdXQoKVxuICAgIGdldCBtYXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhEYXRlXG4gICAgfVxuXG4gICAgc2V0IG1heCh2YWx1ZTogVCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKVxuICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKVxuXG4gICAgICAgIHRoaXMuX21heERhdGUgPSB2YWx1ZVxuICAgICAgICAgICAgPyB0aGlzLmRhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodmFsdWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHZhbHVlKSxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXRlKHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICAvKiogVGhlIGN1cnJlbnQgcGlja2VyIG1vbWVudCAqL1xuICAgIHByaXZhdGUgX3BpY2tlck1vbWVudD86IFRcbiAgICBASW5wdXQoKVxuICAgIGdldCBwaWNrZXJNb21lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waWNrZXJNb21lbnRcbiAgICB9XG5cbiAgICBzZXQgcGlja2VyTW9tZW50KHZhbHVlOiBUIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpXG4gICAgICAgIHRoaXMuX3BpY2tlck1vbWVudCA9XG4gICAgICAgICAgICB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSkgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIubm93KClcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdE1vZGU/OiBTZWxlY3RNb2RlXG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBtb21lbnQgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZD86IFRcbiAgICBASW5wdXQoKVxuICAgIGdldCBzZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkXG4gICAgfVxuXG4gICAgc2V0IHNlbGVjdGVkKHZhbHVlOiBUIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRzID0gbmV3IEFycmF5PFQgfCB1bmRlZmluZWQ+KClcbiAgICBASW5wdXQoKVxuICAgIGdldCBzZWxlY3RlZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZHNcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0ZWRzKHZhbHVlczogQXJyYXk8VCB8IHVuZGVmaW5lZD4pIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRzID0gdmFsdWVzLm1hcCh2ID0+IHtcbiAgICAgICAgICAgIHYgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsaWREYXRlKHYpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHZpZXcgdGhhdCB0aGUgY2FsZW5kYXIgc2hvdWxkIHN0YXJ0IGluXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGFydFZpZXc6ICdtb250aCcgfCAneWVhcicgfCAnbXVsdGkteWVhcnMnID0gJ21vbnRoJ1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBoaWRlIGRhdGVzIGluIG90aGVyIG1vbnRocyBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBjdXJyZW50IG1vbnRoXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBoaWRlT3RoZXJNb250aHM6IGJvb2xlYW4gPSBmYWxzZVxuXG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIGN1cnJlbnRseSBwaWNrZXIgbW9tZW50IGNoYW5nZXMgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBwaWNrZXJNb21lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KClcblxuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBjaGFuZ2VzICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCB1bmRlZmluZWQ+KClcblxuICAgIC8qKiBFbWl0cyB3aGVuIGFueSBkYXRlIGlzIHNlbGVjdGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgdXNlclNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgdGhlIHNlbGVjdGVkIHllYXJcbiAgICAgKlxuICAgICAqIFRoaXMgZG9lc24ndCBpbXBseSBhIGNoYW5nZSBvbiB0aGUgc2VsZWN0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB5ZWFyU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KClcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHRoZSBzZWxlY3RlZCBtb250aFxuICAgICAqXG4gICAgICogVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG1vbnRoU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KClcblxuICAgIGdldCBwZXJpb2RCdXR0b25UZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTW9udGhWaWV3XG4gICAgICAgICAgICA/IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudCxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0cy5tb250aFllYXJMYWJlbFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyTmFtZSh0aGlzLnBpY2tlck1vbWVudClcbiAgICB9XG5cbiAgICBnZXQgcGVyaW9kQnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNb250aFZpZXdcbiAgICAgICAgICAgID8gdGhpcy5waWNrZXJJbnRsLnN3aXRjaFRvTXVsdGlZZWFyVmlld0xhYmVsXG4gICAgICAgICAgICA6IHRoaXMucGlja2VySW50bC5zd2l0Y2hUb01vbnRoVmlld0xhYmVsXG4gICAgfVxuXG4gICAgZ2V0IHByZXZCdXR0b25MYWJlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLnByZXZNb250aExhYmVsXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5wcmV2WWVhckxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZ2V0IG5leHRCdXR0b25MYWJlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLm5leHRNb250aExhYmVsXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5uZXh0WWVhckxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3VycmVudFZpZXc/OiAnbW9udGgnIHwgJ3llYXInIHwgJ211bHRpLXllYXJzJ1xuICAgIGdldCBjdXJyZW50VmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRWaWV3XG4gICAgfVxuXG4gICAgc2V0IGN1cnJlbnRWaWV3KHZpZXc6ICdtb250aCcgfCAneWVhcicgfCAnbXVsdGkteWVhcnMnIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWaWV3ID0gdmlld1xuICAgICAgICB0aGlzLm1vdmVGb2N1c09uTmV4dFRpY2sgPSB0cnVlXG4gICAgfVxuXG4gICAgZ2V0IGlzSW5TaW5nbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlID09PSAnc2luZ2xlJ1xuICAgIH1cblxuICAgIGdldCBpc0luUmFuZ2VNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nIHx8XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZVRvJ1xuICAgICAgICApXG4gICAgfVxuXG4gICAgZ2V0IHNob3dDb250cm9sQXJyb3dzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFZpZXcgIT09ICdtdWx0aS15ZWFycydcbiAgICB9XG5cbiAgICBnZXQgaXNNb250aFZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmlldyA9PT0gJ21vbnRoJ1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERhdGUgZmlsdGVyIGZvciB0aGUgbW9udGggYW5kIHllYXIgdmlld1xuICAgICAqL1xuICAgIGRhdGVUaW1lRmlsdGVyRm9yVmlld3MgPSAoZGF0ZT86IFQpID0+IChcbiAgICAgICAgISFkYXRlICYmXG4gICAgICAgICghdGhpcy5kYXRlVGltZUZpbHRlciB8fCB0aGlzLmRhdGVUaW1lRmlsdGVyKGRhdGUsICdkYXRlJykpICYmXG4gICAgICAgICghdGhpcy5taW4gfHxcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoZGF0ZSwgdGhpcy5taW4pID49IDApICYmXG4gICAgICAgICghdGhpcy5tYXggfHxcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoZGF0ZSwgdGhpcy5tYXgpIDw9IDApXG4gICAgKVxuXG4gICAgLyoqXG4gICAgICogQmluZCBjbGFzcyAnbnh0LWR0LWNhbGVuZGFyJyB0byBob3N0XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm54dC1kdC1jYWxlbmRhcicpXG4gICAgZ2V0IGNhbGVuZGFyQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnRsQ2hhbmdlc1N1Yj86IFN1YnNjcmlwdGlvblxuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3Igc2NoZWR1bGluZyB0aGF0IGZvY3VzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgYWN0aXZlIGNlbGwgb24gdGhlIG5leHQgdGljay5cbiAgICAgKiBXZSBuZWVkIHRvIHNjaGVkdWxlIGl0LCByYXRoZXIgdGhhbiBkbyBpdCBpbW1lZGlhdGVseSwgYmVjYXVzZSB3ZSBoYXZlIHRvIHdhaXRcbiAgICAgKiBmb3IgQW5ndWxhciB0byByZS1ldmFsdWF0ZSB0aGUgdmlldyBjaGlsZHJlbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdmVGb2N1c09uTmV4dFRpY2sgPSBmYWxzZVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxtUmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwaWNrZXJJbnRsOiBEYXRlVGltZUludGwsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGVUaW1lQWRhcHRlcjogRGF0ZVRpbWVBZGFwdGVyPFQ+LFxuICAgICAgICBASW5qZWN0KE5YVF9EQVRFX1RJTUVfRk9STUFUUylcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0c1xuICAgICkge1xuICAgICAgICB0aGlzLmludGxDaGFuZ2VzU3ViID0gdGhpcy5waWNrZXJJbnRsLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKClcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHsgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50VmlldyA9IHRoaXMuc3RhcnRWaWV3XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBpZiAodGhpcy5tb3ZlRm9jdXNPbk5leHRUaWNrKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVGb2N1c09uTmV4dFRpY2sgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZUNlbGwoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50bENoYW5nZXNTdWI/LnVuc3Vic2NyaWJlKClcbiAgICAgICAgdGhpcy5pbnRsQ2hhbmdlc1N1YiA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSBiZXR3ZWVuIG1vbnRoIHZpZXcgYW5kIHllYXIgdmlld1xuICAgICAqL1xuICAgIHRvZ2dsZVZpZXdzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID1cbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRWaWV3ID09ICdtb250aCcgPyAnbXVsdGkteWVhcnMnIDogJ21vbnRoJ1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdXNlciBjbGlja3Mgb24gdGhlIHByZXZpb3VzIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBwcmV2aW91c0NsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gdGhpcy5pc01vbnRoVmlld1xuICAgICAgICAgICAgPyB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLnBpY2tlck1vbWVudCwgLTEpXG4gICAgICAgICAgICA6IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5waWNrZXJNb21lbnQsIC0xKVxuXG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQodGhpcy5waWNrZXJNb21lbnQpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyB1c2VyIGNsaWNrcyBvbiB0aGUgbmV4dCBidXR0b24uXG4gICAgICovXG4gICAgbmV4dENsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gdGhpcy5pc01vbnRoVmlld1xuICAgICAgICAgICAgPyB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLnBpY2tlck1vbWVudCwgMSlcbiAgICAgICAgICAgIDogdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLnBpY2tlck1vbWVudCwgMSlcblxuICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KHRoaXMucGlja2VyTW9tZW50KVxuICAgIH1cblxuICAgIGRhdGVTZWxlY3RlZChkYXRlPzogVCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGF0ZVRpbWVGaWx0ZXJGb3JWaWV3cyhkYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoZGF0ZSlcblxuICAgICAgICAvKmlmICgodGhpcy5pc0luU2luZ2xlTW9kZSAmJiAhdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNTYW1lRGF5KGRhdGUsIHRoaXMuc2VsZWN0ZWQpKSB8fFxuICAgICAgICAgICAgdGhpcy5pc0luUmFuZ2VNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgICAgIH0qL1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgcGlja2VyTW9tZW50IHZhbHVlIGFuZCBzd2l0Y2ggdG8gYSBzcGVjaWZpYyB2aWV3XG4gICAgICovXG4gICAgZ29Ub0RhdGVJblZpZXcoXG4gICAgICAgIGRhdGU6IFQsXG4gICAgICAgIHZpZXc6ICdtb250aCcgfCAneWVhcicgfCAnbXVsdGkteWVhcnMnXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFuZGxlUGlja2VyTW9tZW50Q2hhbmdlKGRhdGUpXG4gICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSB2aWV3XG4gICAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgcGlja2VyTW9tZW50IHZhbHVlXG4gICAgICovXG4gICAgaGFuZGxlUGlja2VyTW9tZW50Q2hhbmdlKGRhdGU6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbGFtcERhdGUoXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgdGhpcy5taW4sXG4gICAgICAgICAgICB0aGlzLm1heFxuICAgICAgICApXG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQodGhpcy5waWNrZXJNb21lbnQpXG4gICAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVzZXJTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51c2VyU2VsZWN0aW9uLmVtaXQoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHByZXZpb3VzIHBlcmlvZCBidXR0b24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBwcmV2QnV0dG9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICF0aGlzLm1pbiB8fCAhdGhpcy5pc1NhbWVWaWV3KHRoaXMucGlja2VyTW9tZW50LCB0aGlzLm1pbilcbiAgICAgICAgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG5leHQgcGVyaW9kIGJ1dHRvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIG5leHRCdXR0b25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgIXRoaXMubWF4IHx8ICF0aGlzLmlzU2FtZVZpZXcodGhpcy5waWNrZXJNb21lbnQsIHRoaXMubWF4KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXMgdG8gdGhlIGhvc3QgZWxlbWVudFxuICAgICAqL1xuICAgIGZvY3VzQWN0aXZlQ2VsbCgpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcubnh0LWR0LWNhbGVuZGFyLWNlbGwtYWN0aXZlJylcbiAgICAgICAgICAgICAgICAgICAgICAgID8uZm9jdXMoKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VsZWN0WWVhckluTXVsdGlZZWFyVmlldyhub3JtYWxpemVkWWVhcjogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnllYXJTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRZZWFyKVxuICAgIH1cblxuICAgIHNlbGVjdE1vbnRoSW5ZZWFyVmlldyhub3JtYWxpemVkTW9udGg6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb250aFNlbGVjdGVkLmVtaXQobm9ybWFsaXplZE1vbnRoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHR3byBkYXRlcyByZXByZXNlbnQgdGhlIHNhbWUgdmlldyBpbiB0aGUgY3VycmVudCB2aWV3IG1vZGUgKG1vbnRoIG9yIHllYXIpLlxuICAgICAqL1xuICAgIHByaXZhdGUgaXNTYW1lVmlldyhkYXRlMT86IFQsIGRhdGUyPzogVCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICAgICAgICBkYXRlMSAmJlxuICAgICAgICAgICAgICAgIGRhdGUyICYmXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlMSkgPT09XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlMikgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aChkYXRlMSkgPT09XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZTIpXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgcmV0dXJuICEhKFxuICAgICAgICAgICAgICAgIGRhdGUxICYmXG4gICAgICAgICAgICAgICAgZGF0ZTIgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGUxKSA9PT1cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGUyKVxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSB2YWxpZCBkYXRlIG9iamVjdFxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0VmFsaWREYXRlKG9iajogYW55KTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVUaW1lQWRhcHRlci5pc0RhdGVJbnN0YW5jZShvYmopICYmXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKG9iailcbiAgICAgICAgICAgID8gb2JqXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJueHQtZHQtY2FsZW5kYXItY29udHJvbFwiPlxuICAgIDwhLS0gZm9jdXMgd2hlbiBrZXlib2FyZCB0YWIgKGh0dHA6Ly9raXp1LnJ1L2VuL2Jsb2cva2V5Ym9hcmQtb25seS1mb2N1cy8jeCkgLS0+XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1kdC1jb250cm9sIG54dC1kdC1jb250cm9sLWJ1dHRvbiBueHQtZHQtY29udHJvbC1hcnJvdy1idXR0b25cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvd0NvbnRyb2xBcnJvd3M/ICd2aXNpYmxlJzogJ2hpZGRlbidcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXByZXZCdXR0b25FbmFibGVkKClcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByZXZCdXR0b25MYWJlbFwiXG4gICAgICAgIChjbGljayk9XCJwcmV2aW91c0NsaWNrZWQoKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kdC1jb250cm9sLWNvbnRlbnQgbnh0LWR0LWNvbnRyb2wtYnV0dG9uLWNvbnRlbnRcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgPCEtLSA8ZWRpdG9yLWZvbGQgZGVzYz1cIlNWRyBBcnJvdyBMZWZ0XCI+IC0tPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxuICAgICAgICAgICAgICAgIHZlcnNpb249XCIxLjFcIlxuICAgICAgICAgICAgICAgIHg9XCIwcHhcIlxuICAgICAgICAgICAgICAgIHk9XCIwcHhcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjUwLjczOCAyNTAuNzM4XCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjUwLjczOCAyNTAuNzM4O1wiXG4gICAgICAgICAgICAgICAgeG1sOnNwYWNlPVwicHJlc2VydmVcIlxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTAwJVwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIHN0eWxlPVwiZmlsbC1ydWxlOiBldmVub2RkOyBjbGlwLXJ1bGU6IGV2ZW5vZGQ7XCJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk05Ni42MzMsMTI1LjM2OWw5NS4wNTMtOTQuNTMzYzcuMTAxLTcuMDU1LDcuMTAxLTE4LjQ5MiwwLTI1LjU0NiAgIGMtNy4xLTcuMDU0LTE4LjYxMy03LjA1NC0yNS43MTQsMEw1OC45ODksMTExLjY4OWMtMy43ODQsMy43NTktNS40ODcsOC43NTktNS4yMzgsMTMuNjhjLTAuMjQ5LDQuOTIyLDEuNDU0LDkuOTIxLDUuMjM4LDEzLjY4MSAgIGwxMDYuOTgzLDEwNi4zOThjNy4xMDEsNy4wNTUsMTguNjEzLDcuMDU1LDI1LjcxNCwwYzcuMTAxLTcuMDU0LDcuMTAxLTE4LjQ5MSwwLTI1LjU0NEw5Ni42MzMsMTI1LjM2OXpcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8IS0tIDwvZWRpdG9yLWZvbGQ+IC0tPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1kdC1jYWxlbmRhci1jb250cm9sLWNvbnRlbnRcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1kdC1jb250cm9sIG54dC1kdC1jb250cm9sLWJ1dHRvbiBueHQtZHQtY29udHJvbC1wZXJpb2QtYnV0dG9uXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicGVyaW9kQnV0dG9uTGFiZWxcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVZpZXdzKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWR0LWNvbnRyb2wtY29udGVudCBueHQtZHQtY29udHJvbC1idXR0b24tY29udGVudFwiXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgIHt7cGVyaW9kQnV0dG9uVGV4dH19XG5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kdC1jb250cm9sLWJ1dHRvbi1hcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3JvdGF0ZSgnICsgKGlzTW9udGhWaWV3PyAwIDogMTgwKSArJ2RlZyknXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGVkaXRvci1mb2xkIGRlc2M9XCJTVkcgQXJyb3dcIj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgdmVyc2lvbj1cIjEuMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB4PVwiMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk9XCIwcHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNTAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjkyLjM2MiAyOTIuMzYyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyOTIuMzYyIDI5Mi4zNjI7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI4Ni45MzUsNjkuMzc3Yy0zLjYxNC0zLjYxNy03Ljg5OC01LjQyNC0xMi44NDgtNS40MjRIMTguMjc0Yy00Ljk1MiwwLTkuMjMzLDEuODA3LTEyLjg1LDUuNDI0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMxLjgwNyw3Mi45OTgsMCw3Ny4yNzksMCw4Mi4yMjhjMCw0Ljk0OCwxLjgwNyw5LjIyOSw1LjQyNCwxMi44NDdsMTI3LjkwNywxMjcuOTA3YzMuNjIxLDMuNjE3LDcuOTAyLDUuNDI4LDEyLjg1LDUuNDI4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM5LjIzMy0xLjgxMSwxMi44NDctNS40MjhMMjg2LjkzNSw5NS4wNzRjMy42MTMtMy42MTcsNS40MjctNy44OTgsNS40MjctMTIuODQ3QzI5Mi4zNjIsNzcuMjc5LDI5MC41NDgsNzIuOTk4LDI4Ni45MzUsNjkuMzc3elwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDwvZWRpdG9yLWZvbGQ+IC0tPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1kdC1jb250cm9sIG54dC1kdC1jb250cm9sLWJ1dHRvbiBueHQtZHQtY29udHJvbC1hcnJvdy1idXR0b25cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvd0NvbnRyb2xBcnJvd3M/ICd2aXNpYmxlJzogJ2hpZGRlbidcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIW5leHRCdXR0b25FbmFibGVkKClcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm5leHRCdXR0b25MYWJlbFwiXG4gICAgICAgIChjbGljayk9XCJuZXh0Q2xpY2tlZCgpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWR0LWNvbnRyb2wtY29udGVudCBueHQtZHQtY29udHJvbC1idXR0b24tY29udGVudFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICA8IS0tIDxlZGl0b3ItZm9sZCBkZXNjPVwiU1ZHIEFycm93IFJpZ2h0XCI+IC0tPlxuICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4xXCJcbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxuICAgICAgICAgICAgICAgIHg9XCIwcHhcIlxuICAgICAgICAgICAgICAgIHk9XCIwcHhcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjUwLjczOCAyNTAuNzM4XCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjUwLjczOCAyNTAuNzM4O1wiXG4gICAgICAgICAgICAgICAgeG1sOnNwYWNlPVwicHJlc2VydmVcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHlsZT1cImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO1wiXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkxLjc1LDExMS42ODlMODQuNzY2LDUuMjkxYy03LjEtNy4wNTUtMTguNjEzLTcuMDU1LTI1LjcxMywwXG4gICAgICAgICAgICAgICAgICAgIGMtNy4xMDEsNy4wNTQtNy4xMDEsMTguNDksMCwyNS41NDRsOTUuMDUzLDk0LjUzNGwtOTUuMDUzLDk0LjUzM2MtNy4xMDEsNy4wNTQtNy4xMDEsMTguNDkxLDAsMjUuNTQ1XG4gICAgICAgICAgICAgICAgICAgIGM3LjEsNy4wNTQsMTguNjEzLDcuMDU0LDI1LjcxMywwTDE5MS43NSwxMzkuMDVjMy43ODQtMy43NTksNS40ODctOC43NTksNS4yMzgtMTMuNjgxXG4gICAgICAgICAgICAgICAgICAgIEMxOTcuMjM3LDEyMC40NDcsMTk1LjUzNCwxMTUuNDQ4LDE5MS43NSwxMTEuNjg5elwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwhLS0gPC9lZGl0b3ItZm9sZD4gLS0+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm54dC1kdC1jYWxlbmRhci1tYWluXCJcbiAgICBjZGtNb25pdG9yU3VidHJlZUZvY3VzXG4gICAgW25nU3dpdGNoXT1cImN1cnJlbnRWaWV3XCJcbiAgICB0YWJpbmRleD1cIi0xXCI+XG4gICAgPG54dC1kYXRlLXRpbWUtbW9udGgtdmlldyAqbmdTd2l0Y2hDYXNlPVwiJ21vbnRoJ1wiXG4gICAgICAgIFtwaWNrZXJNb21lbnRdPVwicGlja2VyTW9tZW50XCJcbiAgICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkXCJcbiAgICAgICAgW3NlbGVjdGVkc109XCJzZWxlY3RlZHNcIlxuICAgICAgICBbc2VsZWN0TW9kZV09XCJzZWxlY3RNb2RlID8/ICdzaW5nbGUnXCJcbiAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgIFtkYXRlVGltZUZpbHRlcl09XCJkYXRlVGltZUZpbHRlclwiXG4gICAgICAgIFtoaWRlT3RoZXJNb250aHNdPVwiaGlkZU90aGVyTW9udGhzXCJcbiAgICAgICAgKHBpY2tlck1vbWVudENoYW5nZSk9XCJoYW5kbGVQaWNrZXJNb21lbnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJkYXRlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICh1c2VyU2VsZWN0aW9uKT1cInVzZXJTZWxlY3RlZCgpXCI+PC9ueHQtZGF0ZS10aW1lLW1vbnRoLXZpZXc+XG5cbiAgICA8bnh0LWRhdGUtdGltZS15ZWFyLXZpZXcgKm5nU3dpdGNoQ2FzZT1cIid5ZWFyJ1wiXG4gICAgICAgIFtwaWNrZXJNb21lbnRdPVwicGlja2VyTW9tZW50XCJcbiAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkXCJcbiAgICAgICAgW3NlbGVjdGVkc109XCJzZWxlY3RlZHNcIlxuICAgICAgICBbc2VsZWN0TW9kZV09XCJzZWxlY3RNb2RlID8/ICdzaW5nbGUnXCJcbiAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgIFtkYXRlVGltZUZpbHRlcl09XCJkYXRlVGltZUZpbHRlclwiXG4gICAgICAgIChrZXlib2FyZEVudGVyKT1cImZvY3VzQWN0aXZlQ2VsbCgpXCJcbiAgICAgICAgKHBpY2tlck1vbWVudENoYW5nZSk9XCJoYW5kbGVQaWNrZXJNb21lbnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChtb250aFNlbGVjdGVkKT1cInNlbGVjdE1vbnRoSW5ZZWFyVmlldygkZXZlbnQpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJnb1RvRGF0ZUluVmlldygkZXZlbnQsICdtb250aCcpXCI+PC9ueHQtZGF0ZS10aW1lLXllYXItdmlldz5cblxuICAgIDxueHQtZGF0ZS10aW1lLW11bHRpLXllYXItdmlldyAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXllYXJzJ1wiXG4gICAgICAgIFtwaWNrZXJNb21lbnRdPVwicGlja2VyTW9tZW50XCJcbiAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkXCJcbiAgICAgICAgW3NlbGVjdGVkc109XCJzZWxlY3RlZHNcIlxuICAgICAgICBbc2VsZWN0TW9kZV09XCJzZWxlY3RNb2RlID8/ICdzaW5nbGUnXCJcbiAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgIFtkYXRlVGltZUZpbHRlcl09XCJkYXRlVGltZUZpbHRlclwiXG4gICAgICAgIChrZXlib2FyZEVudGVyKT1cImZvY3VzQWN0aXZlQ2VsbCgpXCJcbiAgICAgICAgKHBpY2tlck1vbWVudENoYW5nZSk9XCJoYW5kbGVQaWNrZXJNb21lbnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICh5ZWFyU2VsZWN0ZWQpPVwic2VsZWN0WWVhckluTXVsdGlZZWFyVmlldygkZXZlbnQpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJnb1RvRGF0ZUluVmlldygkZXZlbnQsICd5ZWFyJylcIj48L254dC1kYXRlLXRpbWUtbXVsdGkteWVhci12aWV3PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
|
|
2
|
-
import { take } from 'rxjs/operators';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
export class CalendarCell {
|
|
6
|
-
constructor(value, displayValue, ariaLabel, enabled, out = false, cellClass = '') {
|
|
7
|
-
this.value = value;
|
|
8
|
-
this.displayValue = displayValue;
|
|
9
|
-
this.ariaLabel = ariaLabel;
|
|
10
|
-
this.enabled = enabled;
|
|
11
|
-
this.out = out;
|
|
12
|
-
this.cellClass = cellClass;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/** @internal */
|
|
16
|
-
export class CalendarBodyComponent {
|
|
17
|
-
/** @internal */
|
|
18
|
-
get calendarBodyClass() {
|
|
19
|
-
return true;
|
|
20
|
-
}
|
|
21
|
-
get isInSingleMode() {
|
|
22
|
-
return this.selectMode === 'single';
|
|
23
|
-
}
|
|
24
|
-
get isInRangeMode() {
|
|
25
|
-
return (this.selectMode === 'range' ||
|
|
26
|
-
this.selectMode === 'rangeFrom' ||
|
|
27
|
-
this.selectMode === 'rangeTo');
|
|
28
|
-
}
|
|
29
|
-
constructor(elmRef, ngZone) {
|
|
30
|
-
this.elmRef = elmRef;
|
|
31
|
-
this.ngZone = ngZone;
|
|
32
|
-
/**
|
|
33
|
-
* The cell number of the active cell in the table.
|
|
34
|
-
*/
|
|
35
|
-
this.activeCell = 0;
|
|
36
|
-
/**
|
|
37
|
-
* The number of columns in the table.
|
|
38
|
-
*/
|
|
39
|
-
this.numCols = 7;
|
|
40
|
-
/**
|
|
41
|
-
* The ratio (width / height) to use for the cells in the table.
|
|
42
|
-
*/
|
|
43
|
-
this.cellRatio = 1;
|
|
44
|
-
/**
|
|
45
|
-
* Emit when a calendar cell is selected
|
|
46
|
-
*/
|
|
47
|
-
this.select = new EventEmitter();
|
|
48
|
-
}
|
|
49
|
-
ngOnInit() { }
|
|
50
|
-
selectCell(cell) {
|
|
51
|
-
this.select.emit(cell);
|
|
52
|
-
}
|
|
53
|
-
isActiveCell(rowIndex, colIndex) {
|
|
54
|
-
const cellNumber = rowIndex * this.numCols + colIndex;
|
|
55
|
-
return cellNumber === this.activeCell;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Check if the cell is selected
|
|
59
|
-
*/
|
|
60
|
-
isSelected(value) {
|
|
61
|
-
if (!this.selectedValues || this.selectedValues.length === 0) {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
if (this.isInSingleMode) {
|
|
65
|
-
return value === this.selectedValues[0];
|
|
66
|
-
}
|
|
67
|
-
if (this.isInRangeMode) {
|
|
68
|
-
const fromValue = this.selectedValues[0];
|
|
69
|
-
const toValue = this.selectedValues[1];
|
|
70
|
-
return value === fromValue || value === toValue;
|
|
71
|
-
}
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Check if the cell in the range
|
|
76
|
-
*/
|
|
77
|
-
isInRange(value) {
|
|
78
|
-
if (this.isInRangeMode) {
|
|
79
|
-
const fromValue = this.selectedValues?.[0];
|
|
80
|
-
const toValue = this.selectedValues?.[1];
|
|
81
|
-
if (fromValue !== undefined && toValue !== undefined) {
|
|
82
|
-
return value >= fromValue && value <= toValue;
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
return value === fromValue || value === toValue;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Check if the cell is the range from
|
|
92
|
-
*/
|
|
93
|
-
isRangeFrom(value) {
|
|
94
|
-
if (this.isInRangeMode) {
|
|
95
|
-
const fromValue = this.selectedValues?.[0];
|
|
96
|
-
return fromValue !== undefined && value === fromValue;
|
|
97
|
-
}
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Check if the cell is the range to
|
|
102
|
-
*/
|
|
103
|
-
isRangeTo(value) {
|
|
104
|
-
if (this.isInRangeMode) {
|
|
105
|
-
const toValue = this.selectedValues?.[1];
|
|
106
|
-
return toValue !== undefined && value === toValue;
|
|
107
|
-
}
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Focus to a active cell
|
|
112
|
-
*/
|
|
113
|
-
focusActiveCell() {
|
|
114
|
-
this.ngZone.runOutsideAngular(() => {
|
|
115
|
-
this.ngZone.onStable
|
|
116
|
-
.asObservable()
|
|
117
|
-
.pipe(take(1))
|
|
118
|
-
.subscribe(() => {
|
|
119
|
-
this.elmRef.nativeElement
|
|
120
|
-
?.querySelector('.nxt-dt-calendar-cell-active')
|
|
121
|
-
?.focus();
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: CalendarBodyComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
126
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.4", type: CalendarBodyComponent, selector: "[nxtDateTimeCalendarBody]", inputs: { activeCell: "activeCell", rows: "rows", numCols: "numCols", cellRatio: "cellRatio", todayValue: "todayValue", selectedValues: "selectedValues", selectMode: "selectMode" }, outputs: { select: "select" }, host: { properties: { "class.nxt-dt-calendar-body": "this.calendarBodyClass" } }, exportAs: ["nxtDateTimeCalendarBody"], ngImport: i0, template: "<tr *ngFor=\"let row of rows; let rowIndex = index\"\n role=\"row\">\n <td *ngFor=\"let item of row; let colIndex = index\"\n class=\"nxt-dt-calendar-cell {{item.cellClass}}\"\n [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.nxt-dt-calendar-cell-active]=\"isActiveCell(rowIndex, colIndex)\"\n [class.nxt-dt-calendar-cell-disabled]=\"!item.enabled\"\n [class.nxt-dt-calendar-cell-in-range]=\"isInRange(item.value)\"\n [class.nxt-dt-calendar-cell-range-from]=\"isRangeFrom(item.value)\"\n [class.nxt-dt-calendar-cell-range-from-long]=\"isInRange(item.value + 7)\"\n [class.nxt-dt-calendar-cell-range-to]=\"isRangeTo(item.value)\"\n [class.nxt-dt-calendar-cell-range-to-long]=\"isInRange(item.value - 7)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n [style.width.%]=\"100 / numCols\"\n [style.paddingTop.%]=\"50 * cellRatio / numCols\"\n [style.paddingBottom.%]=\"50 * cellRatio / numCols\"\n (click)=\"selectCell(item)\">\n <span class=\"nxt-dt-calendar-cell-content\"\n [ngClass]=\"{\n 'nxt-dt-calendar-cell-out': item.out,\n 'nxt-dt-calendar-cell-today': item.value === todayValue,\n 'nxt-dt-calendar-cell-selected': isSelected(item.value)\n }\">\n {{item.displayValue}}\n </span>\n </td>\n</tr>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
127
|
-
}
|
|
128
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: CalendarBodyComponent, decorators: [{
|
|
129
|
-
type: Component,
|
|
130
|
-
args: [{ selector: '[nxtDateTimeCalendarBody]', exportAs: 'nxtDateTimeCalendarBody', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<tr *ngFor=\"let row of rows; let rowIndex = index\"\n role=\"row\">\n <td *ngFor=\"let item of row; let colIndex = index\"\n class=\"nxt-dt-calendar-cell {{item.cellClass}}\"\n [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.nxt-dt-calendar-cell-active]=\"isActiveCell(rowIndex, colIndex)\"\n [class.nxt-dt-calendar-cell-disabled]=\"!item.enabled\"\n [class.nxt-dt-calendar-cell-in-range]=\"isInRange(item.value)\"\n [class.nxt-dt-calendar-cell-range-from]=\"isRangeFrom(item.value)\"\n [class.nxt-dt-calendar-cell-range-from-long]=\"isInRange(item.value + 7)\"\n [class.nxt-dt-calendar-cell-range-to]=\"isRangeTo(item.value)\"\n [class.nxt-dt-calendar-cell-range-to-long]=\"isInRange(item.value - 7)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n [style.width.%]=\"100 / numCols\"\n [style.paddingTop.%]=\"50 * cellRatio / numCols\"\n [style.paddingBottom.%]=\"50 * cellRatio / numCols\"\n (click)=\"selectCell(item)\">\n <span class=\"nxt-dt-calendar-cell-content\"\n [ngClass]=\"{\n 'nxt-dt-calendar-cell-out': item.out,\n 'nxt-dt-calendar-cell-today': item.value === todayValue,\n 'nxt-dt-calendar-cell-selected': isSelected(item.value)\n }\">\n {{item.displayValue}}\n </span>\n </td>\n</tr>\n" }]
|
|
131
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { activeCell: [{
|
|
132
|
-
type: Input
|
|
133
|
-
}], rows: [{
|
|
134
|
-
type: Input
|
|
135
|
-
}], numCols: [{
|
|
136
|
-
type: Input
|
|
137
|
-
}], cellRatio: [{
|
|
138
|
-
type: Input
|
|
139
|
-
}], todayValue: [{
|
|
140
|
-
type: Input
|
|
141
|
-
}], selectedValues: [{
|
|
142
|
-
type: Input
|
|
143
|
-
}], selectMode: [{
|
|
144
|
-
type: Input
|
|
145
|
-
}], select: [{
|
|
146
|
-
type: Output
|
|
147
|
-
}], calendarBodyClass: [{
|
|
148
|
-
type: HostBinding,
|
|
149
|
-
args: ['class.nxt-dt-calendar-body']
|
|
150
|
-
}] } });
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2NhbGVuZGFyLWJvZHkvY2FsZW5kYXItYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2NhbGVuZGFyLWJvZHkvY2FsZW5kYXItYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFrQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEksT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFBOzs7QUFHckMsTUFBTSxPQUFPLFlBQVk7SUFDckIsWUFDVyxLQUFhLEVBQ2IsWUFBb0IsRUFDcEIsU0FBaUIsRUFDakIsT0FBZ0IsRUFDaEIsTUFBZSxLQUFLLEVBQ3BCLFlBQW9CLEVBQUU7UUFMdEIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixRQUFHLEdBQUgsR0FBRyxDQUFpQjtRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFhO0lBQzdCLENBQUM7Q0FDUjtBQUVELGdCQUFnQjtBQVVoQixNQUFNLE9BQU8scUJBQXFCO0lBa0Q5QixnQkFBZ0I7SUFDaEIsSUFDSSxpQkFBaUI7UUFDakIsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQTtJQUN2QyxDQUFDO0lBRUQsSUFBSSxhQUFh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QUE7WUFDeEMsT0FBTyxPQUFPLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxPQUFPLENBQUE7U0FDcEQ7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2lCQUNmLFlBQVksRUFBRTtpQkFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNiLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhO29CQUNyQixFQUFFLGFBQWEsQ0FBYyw4QkFBOEIsQ0FBQztvQkFDNUQsRUFBRSxLQUFLLEVBQUUsQ0FBQTtZQUNqQixDQUFDLENBQUMsQ0FBQTtRQUNWLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzs4R0E5SlEscUJBQXFCO2tHQUFyQixxQkFBcUIsK1lDekJsQyxnOENBNEJBOzsyRkRIYSxxQkFBcUI7a0JBVGpDLFNBQVM7K0JBRUksMkJBQTJCLFlBQzNCLHlCQUF5Qix1QkFHZCxLQUFLLG1CQUNULHVCQUF1QixDQUFDLE1BQU07b0dBTy9DLFVBQVU7c0JBRFQsS0FBSztnQkFPTixJQUFJO3NCQURILEtBQUs7Z0JBT04sT0FBTztzQkFETixLQUFLO2dCQU9OLFNBQVM7c0JBRFIsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBT04sY0FBYztzQkFEYixLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFRRyxNQUFNO3NCQUZkLE1BQU07Z0JBTUgsaUJBQWlCO3NCQURwQixXQUFXO3VCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBOZ1pvbmUsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IFNlbGVjdE1vZGUgfSBmcm9tICcuLi8uLi9jbGFzcy9kYXRlLXRpbWUuY2xhc3MnXG5cbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNlbGwge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgdmFsdWU6IG51bWJlcixcbiAgICAgICAgcHVibGljIGRpc3BsYXlWYWx1ZTogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgYXJpYUxhYmVsOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBlbmFibGVkOiBib29sZWFuLFxuICAgICAgICBwdWJsaWMgb3V0OiBib29sZWFuID0gZmFsc2UsXG4gICAgICAgIHB1YmxpYyBjZWxsQ2xhc3M6IHN0cmluZyA9ICcnXG4gICAgKSB7IH1cbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tueHREYXRlVGltZUNhbGVuZGFyQm9keV0nLFxuICAgIGV4cG9ydEFzOiAnbnh0RGF0ZVRpbWVDYWxlbmRhckJvZHknLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci1ib2R5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci1ib2R5LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJCb2R5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgY2VsbCBudW1iZXIgb2YgdGhlIGFjdGl2ZSBjZWxsIGluIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZUNlbGwgPSAwXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2VsbHMgdG8gZGlzcGxheSBpbiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dzPzogQ2FsZW5kYXJDZWxsW11bXVxuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG51bUNvbHMgPSA3XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmF0aW8gKHdpZHRoIC8gaGVpZ2h0KSB0byB1c2UgZm9yIHRoZSBjZWxscyBpbiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjZWxsUmF0aW8gPSAxXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgaW4gdGhlIHRhYmxlIHRoYXQgY29ycmVzcG9uZHMgdG8gdG9kYXkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0b2RheVZhbHVlPzogbnVtYmVyXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgaW4gdGhlIHRhYmxlIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRWYWx1ZXM/OiBBcnJheTxudW1iZXIgfCB1bmRlZmluZWQ+XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBpY2tlciBzZWxlY3QgbW9kZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0TW9kZT86IFNlbGVjdE1vZGVcblxuICAgIC8qKlxuICAgICAqIEVtaXQgd2hlbiBhIGNhbGVuZGFyIGNlbGwgaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgICByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPENhbGVuZGFyQ2VsbD4oKVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubnh0LWR0LWNhbGVuZGFyLWJvZHknKVxuICAgIGdldCBjYWxlbmRhckJvZHlDbGFzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBnZXQgaXNJblNpbmdsZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnXG4gICAgfVxuXG4gICAgZ2V0IGlzSW5SYW5nZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScgfHxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlbG1SZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lXG4gICAgKSB7IH1cblxuICAgIG5nT25Jbml0KCkgeyB9XG5cbiAgICBzZWxlY3RDZWxsKGNlbGw6IENhbGVuZGFyQ2VsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdC5lbWl0KGNlbGwpXG4gICAgfVxuXG4gICAgaXNBY3RpdmVDZWxsKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2VsbE51bWJlciA9IHJvd0luZGV4ICogdGhpcy5udW1Db2xzICsgY29sSW5kZXhcbiAgICAgICAgcmV0dXJuIGNlbGxOdW1iZXIgPT09IHRoaXMuYWN0aXZlQ2VsbFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBjZWxsIGlzIHNlbGVjdGVkXG4gICAgICovXG4gICAgaXNTZWxlY3RlZCh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFZhbHVlcyB8fCB0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0aGlzLnNlbGVjdGVkVmFsdWVzWzBdXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0luUmFuZ2VNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzBdXG4gICAgICAgICAgICBjb25zdCB0b1ZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlc1sxXVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IGZyb21WYWx1ZSB8fCB2YWx1ZSA9PT0gdG9WYWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBjZWxsIGluIHRoZSByYW5nZVxuICAgICAqL1xuICAgIGlzSW5SYW5nZSh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5SYW5nZU1vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXM/LlswXVxuICAgICAgICAgICAgY29uc3QgdG9WYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXM/LlsxXVxuXG4gICAgICAgICAgICBpZiAoZnJvbVZhbHVlICE9PSB1bmRlZmluZWQgJiYgdG9WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID49IGZyb21WYWx1ZSAmJiB2YWx1ZSA8PSB0b1ZhbHVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gZnJvbVZhbHVlIHx8IHZhbHVlID09PSB0b1ZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGNlbGwgaXMgdGhlIHJhbmdlIGZyb21cbiAgICAgKi9cbiAgICBpc1JhbmdlRnJvbSh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5SYW5nZU1vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXM/LlswXVxuICAgICAgICAgICAgcmV0dXJuIGZyb21WYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID09PSBmcm9tVmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgY2VsbCBpcyB0aGUgcmFuZ2UgdG9cbiAgICAgKi9cbiAgICBpc1JhbmdlVG8odmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pc0luUmFuZ2VNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCB0b1ZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlcz8uWzFdXG4gICAgICAgICAgICByZXR1cm4gdG9WYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID09PSB0b1ZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXMgdG8gYSBhY3RpdmUgY2VsbFxuICAgICAqL1xuICAgIGZvY3VzQWN0aXZlQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcubnh0LWR0LWNhbGVuZGFyLWNlbGwtYWN0aXZlJylcbiAgICAgICAgICAgICAgICAgICAgICAgID8uZm9jdXMoKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxufVxuIiwiPHRyICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuICAgIHJvbGU9XCJyb3dcIj5cbiAgICA8dGQgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygcm93OyBsZXQgY29sSW5kZXggPSBpbmRleFwiXG4gICAgICAgIGNsYXNzPVwibnh0LWR0LWNhbGVuZGFyLWNlbGwge3tpdGVtLmNlbGxDbGFzc319XCJcbiAgICAgICAgW3RhYmluZGV4XT1cImlzQWN0aXZlQ2VsbChyb3dJbmRleCwgY29sSW5kZXgpID8gMCA6IC0xXCJcbiAgICAgICAgW2NsYXNzLm54dC1kdC1jYWxlbmRhci1jZWxsLWFjdGl2ZV09XCJpc0FjdGl2ZUNlbGwocm93SW5kZXgsIGNvbEluZGV4KVwiXG4gICAgICAgIFtjbGFzcy5ueHQtZHQtY2FsZW5kYXItY2VsbC1kaXNhYmxlZF09XCIhaXRlbS5lbmFibGVkXCJcbiAgICAgICAgW2NsYXNzLm54dC1kdC1jYWxlbmRhci1jZWxsLWluLXJhbmdlXT1cImlzSW5SYW5nZShpdGVtLnZhbHVlKVwiXG4gICAgICAgIFtjbGFzcy5ueHQtZHQtY2FsZW5kYXItY2VsbC1yYW5nZS1mcm9tXT1cImlzUmFuZ2VGcm9tKGl0ZW0udmFsdWUpXCJcbiAgICAgICAgW2NsYXNzLm54dC1kdC1jYWxlbmRhci1jZWxsLXJhbmdlLWZyb20tbG9uZ109XCJpc0luUmFuZ2UoaXRlbS52YWx1ZSArIDcpXCJcbiAgICAgICAgW2NsYXNzLm54dC1kdC1jYWxlbmRhci1jZWxsLXJhbmdlLXRvXT1cImlzUmFuZ2VUbyhpdGVtLnZhbHVlKVwiXG4gICAgICAgIFtjbGFzcy5ueHQtZHQtY2FsZW5kYXItY2VsbC1yYW5nZS10by1sb25nXT1cImlzSW5SYW5nZShpdGVtLnZhbHVlIC0gNylcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0uYXJpYUxhYmVsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCIhaXRlbS5lbmFibGVkIHx8IG51bGxcIlxuICAgICAgICBbc3R5bGUud2lkdGguJV09XCIxMDAgLyBudW1Db2xzXCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmdUb3AuJV09XCI1MCAqIGNlbGxSYXRpbyAvIG51bUNvbHNcIlxuICAgICAgICBbc3R5bGUucGFkZGluZ0JvdHRvbS4lXT1cIjUwICogY2VsbFJhdGlvIC8gbnVtQ29sc1wiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RDZWxsKGl0ZW0pXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWR0LWNhbGVuZGFyLWNlbGwtY29udGVudFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ254dC1kdC1jYWxlbmRhci1jZWxsLW91dCc6IGl0ZW0ub3V0LFxuICAgICAgICAgICAgICAgICdueHQtZHQtY2FsZW5kYXItY2VsbC10b2RheSc6IGl0ZW0udmFsdWUgPT09IHRvZGF5VmFsdWUsXG4gICAgICAgICAgICAgICAgJ254dC1kdC1jYWxlbmRhci1jZWxsLXNlbGVjdGVkJzogaXNTZWxlY3RlZChpdGVtLnZhbHVlKVxuICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICB7e2l0ZW0uZGlzcGxheVZhbHVlfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvdGQ+XG48L3RyPlxuIl19
|