@netwin/angular-datetime-picker 19.0.0-rc.4 → 19.0.0-rc.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +27 -1
  2. package/assets/style/picker.min.css +1 -1
  3. package/fesm2022/netwin-angular-datetime-picker.mjs +4178 -1486
  4. package/fesm2022/netwin-angular-datetime-picker.mjs.map +1 -1
  5. package/lib/date-time/adapter/date-time-adapter.class.d.ts +19 -9
  6. package/lib/date-time/adapter/date-time-format.class.d.ts +12 -8
  7. package/lib/date-time/adapter/native-date-time-adapter.class.d.ts +16 -5
  8. package/lib/date-time/adapter/native-date-time-format.class.d.ts +3 -0
  9. package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.d.ts +15 -4
  10. package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.d.ts +3 -0
  11. package/lib/date-time/calendar-body.component.d.ts +18 -13
  12. package/lib/date-time/calendar-month-view.component.d.ts +17 -12
  13. package/lib/date-time/calendar-multi-year-view.component.d.ts +12 -12
  14. package/lib/date-time/calendar-year-view.component.d.ts +7 -6
  15. package/lib/date-time/calendar.component.d.ts +37 -17
  16. package/lib/date-time/date-time-inline.component.d.ts +79 -156
  17. package/lib/date-time/date-time-picker-container.component.d.ts +131 -0
  18. package/lib/date-time/date-time-picker-input.directive.d.ts +172 -0
  19. package/lib/date-time/date-time-picker-intl.service.d.ts +6 -0
  20. package/lib/date-time/date-time-picker-trigger.directive.d.ts +23 -0
  21. package/lib/date-time/date-time-picker.animations.d.ts +8 -0
  22. package/lib/date-time/date-time-picker.component.d.ts +171 -0
  23. package/lib/date-time/date-time.class.d.ts +103 -0
  24. package/lib/date-time/date-time.module.d.ts +17 -11
  25. package/lib/date-time/numberedFixLen.pipe.d.ts +10 -0
  26. package/lib/date-time/timer-box.component.d.ts +4 -3
  27. package/lib/date-time/timer.component.d.ts +19 -16
  28. package/lib/dialog/dialog-config.class.d.ts +169 -0
  29. package/lib/dialog/dialog-container.component.d.ts +69 -0
  30. package/lib/dialog/dialog-ref.class.d.ts +51 -0
  31. package/lib/dialog/dialog.module.d.ts +11 -0
  32. package/lib/dialog/dialog.service.d.ts +76 -0
  33. package/lib/utils/index.d.ts +4 -0
  34. package/lib/utils/object.utils.d.ts +8 -0
  35. package/package.json +5 -7
  36. package/public_api.d.ts +16 -12
  37. package/esm2022/lib/date-time/adapter/date-time-adapter.class.mjs +0 -114
  38. package/esm2022/lib/date-time/adapter/date-time-format.class.mjs +0 -4
  39. package/esm2022/lib/date-time/adapter/native-date-time-adapter.class.mjs +0 -238
  40. package/esm2022/lib/date-time/adapter/native-date-time-format.class.mjs +0 -15
  41. package/esm2022/lib/date-time/adapter/native-date-time.module.mjs +0 -42
  42. package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.mjs +0 -215
  43. package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.mjs +0 -15
  44. package/esm2022/lib/date-time/calendar-body.component.mjs +0 -137
  45. package/esm2022/lib/date-time/calendar-month-view.component.mjs +0 -420
  46. package/esm2022/lib/date-time/calendar-multi-year-view.component.mjs +0 -360
  47. package/esm2022/lib/date-time/calendar-year-view.component.mjs +0 -354
  48. package/esm2022/lib/date-time/calendar.component.mjs +0 -357
  49. package/esm2022/lib/date-time/date-time-inline.component.mjs +0 -463
  50. package/esm2022/lib/date-time/date-time-picker-intl.service.mjs +0 -55
  51. package/esm2022/lib/date-time/date-time.module.mjs +0 -59
  52. package/esm2022/lib/date-time/options-provider.mjs +0 -34
  53. package/esm2022/lib/date-time/timer-box.component.mjs +0 -130
  54. package/esm2022/lib/date-time/timer.component.mjs +0 -280
  55. package/esm2022/lib/types/date-view.mjs +0 -19
  56. package/esm2022/lib/types/index.mjs +0 -4
  57. package/esm2022/lib/types/picker-type.mjs +0 -2
  58. package/esm2022/lib/types/select-mode.mjs +0 -2
  59. package/esm2022/lib/utils/array.utils.mjs +0 -5
  60. package/esm2022/lib/utils/constants.mjs +0 -31
  61. package/esm2022/lib/utils/date.utils.mjs +0 -46
  62. package/esm2022/netwin-angular-datetime-picker.mjs +0 -5
  63. package/esm2022/public_api.mjs +0 -23
  64. package/lib/types/date-view.d.ts +0 -17
  65. package/lib/types/index.d.ts +0 -3
  66. package/lib/types/picker-type.d.ts +0 -7
  67. package/lib/types/select-mode.d.ts +0 -8
@@ -1,357 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';
2
- import { Subscription } from 'rxjs';
3
- import { take } from 'rxjs/operators';
4
- import { DateView } from '../types';
5
- import { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./date-time-picker-intl.service";
8
- import * as i2 from "./adapter/date-time-adapter.class";
9
- import * as i3 from "@angular/cdk/a11y";
10
- import * as i4 from "./calendar-multi-year-view.component";
11
- import * as i5 from "./calendar-year-view.component";
12
- import * as i6 from "./calendar-month-view.component";
13
- export class OwlCalendarComponent {
14
- get minDate() {
15
- return this._minDate;
16
- }
17
- set minDate(value) {
18
- value = this.dateTimeAdapter.deserialize(value);
19
- value = this.getValidDate(value);
20
- this._minDate =
21
- value ?
22
- this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(value), this.dateTimeAdapter.getMonth(value), this.dateTimeAdapter.getDate(value))
23
- : null;
24
- }
25
- get maxDate() {
26
- return this._maxDate;
27
- }
28
- set maxDate(value) {
29
- value = this.dateTimeAdapter.deserialize(value);
30
- value = this.getValidDate(value);
31
- this._maxDate =
32
- value ?
33
- this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(value), this.dateTimeAdapter.getMonth(value), this.dateTimeAdapter.getDate(value))
34
- : null;
35
- }
36
- get pickerMoment() {
37
- return this._pickerMoment;
38
- }
39
- set pickerMoment(value) {
40
- value = this.dateTimeAdapter.deserialize(value);
41
- this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();
42
- }
43
- get selected() {
44
- return this._selected;
45
- }
46
- set selected(value) {
47
- value = this.dateTimeAdapter.deserialize(value);
48
- this._selected = this.getValidDate(value);
49
- }
50
- get selecteds() {
51
- return this._selecteds;
52
- }
53
- set selecteds(values) {
54
- this._selecteds = values.map((v) => {
55
- v = this.dateTimeAdapter.deserialize(v);
56
- return this.getValidDate(v);
57
- });
58
- }
59
- get periodButtonText() {
60
- return this.isMonthView ?
61
- this.dateTimeAdapter.format(this.pickerMoment, this.dateTimeFormats.monthYearLabel)
62
- : this.dateTimeAdapter.getYearName(this.pickerMoment);
63
- }
64
- get periodButtonLabel() {
65
- return this.isMonthView ? this.pickerIntl.switchToMultiYearViewLabel : this.pickerIntl.switchToMonthViewLabel;
66
- }
67
- get prevButtonLabel() {
68
- if (this._currentView === DateView.MONTH) {
69
- return this.pickerIntl.prevMonthLabel;
70
- }
71
- else if (this._currentView === DateView.YEAR) {
72
- return this.pickerIntl.prevYearLabel;
73
- }
74
- else {
75
- return null;
76
- }
77
- }
78
- get nextButtonLabel() {
79
- if (this._currentView === DateView.MONTH) {
80
- return this.pickerIntl.nextMonthLabel;
81
- }
82
- else if (this._currentView === DateView.YEAR) {
83
- return this.pickerIntl.nextYearLabel;
84
- }
85
- else {
86
- return null;
87
- }
88
- }
89
- get currentView() {
90
- return this._currentView;
91
- }
92
- set currentView(view) {
93
- this._currentView = view;
94
- this.moveFocusOnNextTick = true;
95
- }
96
- get isInSingleMode() {
97
- return this.selectMode === 'single';
98
- }
99
- get isInRangeMode() {
100
- return this.selectMode === 'range' || this.selectMode === 'rangeFrom' || this.selectMode === 'rangeTo';
101
- }
102
- get showControlArrows() {
103
- return this._currentView !== DateView.MULTI_YEARS;
104
- }
105
- get isMonthView() {
106
- return this._currentView === DateView.MONTH;
107
- }
108
- /**
109
- * Bind class 'owl-dt-calendar' to host
110
- */
111
- get owlDTCalendarClass() {
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
- this.DateView = DateView;
122
- this._selecteds = [];
123
- /**
124
- * The view that the calendar should start in.
125
- */
126
- this.startView = DateView.MONTH;
127
- /**
128
- * Whether to should only the year and multi-year views.
129
- */
130
- this.yearOnly = false;
131
- /**
132
- * Whether to should only the multi-year view.
133
- */
134
- this.multiyearOnly = false;
135
- /** Emits when the currently picker moment changes. */
136
- this.pickerMomentChange = new EventEmitter();
137
- /** Emits when the selected date changes. */
138
- this.dateClicked = new EventEmitter();
139
- /** Emits when the currently selected date changes. */
140
- this.selectedChange = new EventEmitter();
141
- /**
142
- * Emits the selected year. This doesn't imply a change on the selected date
143
- */
144
- this.yearSelected = new EventEmitter();
145
- /**
146
- * Emits the selected month. This doesn't imply a change on the selected date
147
- */
148
- this.monthSelected = new EventEmitter();
149
- this.intlChangesSub = Subscription.EMPTY;
150
- /**
151
- * Used for scheduling that focus should be moved to the active cell on the next tick.
152
- * We need to schedule it, rather than do it immediately, because we have to wait
153
- * for Angular to re-evaluate the view children.
154
- */
155
- this.moveFocusOnNextTick = false;
156
- /**
157
- * Date filter for the month and year view
158
- */
159
- this.dateFilterForViews = (date) => {
160
- return (!!date &&
161
- (!this.dateFilter || this.dateFilter(date)) &&
162
- (!this.minDate || this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&
163
- (!this.maxDate || this.dateTimeAdapter.compare(date, this.maxDate) <= 0));
164
- };
165
- this.intlChangesSub = this.pickerIntl.changes.subscribe(() => {
166
- this.cdRef.markForCheck();
167
- });
168
- }
169
- ngAfterContentInit() {
170
- this._currentView = this.startView;
171
- }
172
- ngAfterViewChecked() {
173
- if (this.moveFocusOnNextTick) {
174
- this.moveFocusOnNextTick = false;
175
- this.focusActiveCell();
176
- }
177
- }
178
- ngOnDestroy() {
179
- this.intlChangesSub.unsubscribe();
180
- }
181
- /**
182
- * Toggle between month view and year view
183
- */
184
- toggleViews() {
185
- let nextView = null;
186
- if (this._currentView === DateView.MONTH) {
187
- nextView = DateView.MULTI_YEARS;
188
- }
189
- else {
190
- if (this.multiyearOnly) {
191
- nextView = DateView.MULTI_YEARS;
192
- }
193
- else if (this.yearOnly) {
194
- nextView = this._currentView === DateView.YEAR ? DateView.MULTI_YEARS : DateView.YEAR;
195
- }
196
- else {
197
- nextView = DateView.MONTH;
198
- }
199
- }
200
- this.currentView = nextView;
201
- }
202
- /**
203
- * Handles user clicks on the previous button.
204
- */
205
- previousClicked() {
206
- this.pickerMoment =
207
- this.isMonthView ?
208
- this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1)
209
- : this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1);
210
- this.pickerMomentChange.emit(this.pickerMoment);
211
- }
212
- /**
213
- * Handles user clicks on the next button.
214
- */
215
- nextClicked() {
216
- this.pickerMoment =
217
- this.isMonthView ?
218
- this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1)
219
- : this.dateTimeAdapter.addCalendarYears(this.pickerMoment, 1);
220
- this.pickerMomentChange.emit(this.pickerMoment);
221
- }
222
- dateSelected(date) {
223
- if (!this.dateFilterForViews(date)) {
224
- return;
225
- }
226
- this.dateClicked.emit(date);
227
- this.selectedChange.emit(date);
228
- /*if ((this.isInSingleMode && !this.dateTimeAdapter.isSameDay(date, this.selected)) ||
229
- this.isInRangeMode) {
230
- this.selectedChange.emit(date);
231
- }*/
232
- }
233
- /**
234
- * Change the pickerMoment value and switch to a specific view
235
- */
236
- goToDateInView(date, view) {
237
- this.handlePickerMomentChange(date);
238
- if ((!this.yearOnly && !this.multiyearOnly) ||
239
- (this.multiyearOnly && view !== DateView.MONTH && view !== DateView.YEAR) ||
240
- (this.yearOnly && view !== DateView.MONTH)) {
241
- this.currentView = view;
242
- }
243
- return;
244
- }
245
- /**
246
- * Change the pickerMoment value
247
- */
248
- handlePickerMomentChange(date) {
249
- this.pickerMoment = this.dateTimeAdapter.clampDate(date, this.minDate, this.maxDate);
250
- this.pickerMomentChange.emit(this.pickerMoment);
251
- return;
252
- }
253
- /**
254
- * Whether the previous period button is enabled.
255
- */
256
- prevButtonEnabled() {
257
- return !this.minDate || !this.isSameView(this.pickerMoment, this.minDate);
258
- }
259
- /**
260
- * Whether the next period button is enabled.
261
- */
262
- nextButtonEnabled() {
263
- return !this.maxDate || !this.isSameView(this.pickerMoment, this.maxDate);
264
- }
265
- /**
266
- * Focus to the host element
267
- */
268
- focusActiveCell() {
269
- this.ngZone.runOutsideAngular(() => {
270
- this.ngZone.onStable
271
- .asObservable()
272
- .pipe(take(1))
273
- .subscribe(() => {
274
- this.elmRef.nativeElement.querySelector('.owl-dt-calendar-cell-active').focus();
275
- });
276
- });
277
- }
278
- selectYearInMultiYearView(normalizedYear) {
279
- this.yearSelected.emit(normalizedYear);
280
- }
281
- selectMonthInYearView(normalizedMonth) {
282
- this.monthSelected.emit(normalizedMonth);
283
- }
284
- /**
285
- * Whether the two dates represent the same view in the current view mode (month or year).
286
- */
287
- isSameView(date1, date2) {
288
- if (this._currentView === DateView.MONTH) {
289
- return !!(date1 &&
290
- date2 &&
291
- this.dateTimeAdapter.getYear(date1) === this.dateTimeAdapter.getYear(date2) &&
292
- this.dateTimeAdapter.getMonth(date1) === this.dateTimeAdapter.getMonth(date2));
293
- }
294
- else if (this._currentView === DateView.YEAR) {
295
- return !!(date1 && date2 && this.dateTimeAdapter.getYear(date1) === this.dateTimeAdapter.getYear(date2));
296
- }
297
- else {
298
- return false;
299
- }
300
- }
301
- /**
302
- * Get a valid date object
303
- */
304
- getValidDate(obj) {
305
- return this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj) ? obj : null;
306
- }
307
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: OwlCalendarComponent, deps: [{ token: i0.ElementRef }, { token: i1.OwlDateTimeIntl }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i2.DateTimeAdapter, optional: true }, { token: OWL_DATE_TIME_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
308
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: OwlCalendarComponent, selector: "owl-date-time-calendar", inputs: { minDate: "minDate", maxDate: "maxDate", pickerMoment: "pickerMoment", selected: "selected", selecteds: "selecteds", dateFilter: "dateFilter", firstDayOfWeek: "firstDayOfWeek", selectMode: "selectMode", startView: "startView", yearOnly: "yearOnly", multiyearOnly: "multiyearOnly", hideOtherMonths: "hideOtherMonths" }, outputs: { pickerMomentChange: "pickerMomentChange", dateClicked: "dateClicked", selectedChange: "selectedChange", yearSelected: "yearSelected", monthSelected: "monthSelected" }, host: { properties: { "class.owl-dt-calendar": "owlDTCalendarClass" } }, exportAs: ["owlDateTimeCalendar"], ngImport: i0, template: "<div class=\"owl-dt-calendar-control\">\n <!-- focus when keyboard tab (http://kizu.ru/en/blog/keyboard-only-focus/#x) -->\n <button\n [attr.aria-label]=\"prevButtonLabel\"\n [disabled]=\"!prevButtonEnabled()\"\n [style.visibility]=\"showControlArrows ? 'visible' : 'hidden'\"\n (click)=\"previousClicked()\"\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-arrow-button\"\n tabindex=\"0\"\n type=\"button\">\n <span\n class=\"owl-dt-control-content owl-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Left\"> -->\n <svg\n xml:space=\"preserve\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n height=\"100%\"\n style=\"enable-background: new 0 0 250.738 250.738\"\n version=\"1.1\"\n viewBox=\"0 0 250.738 250.738\"\n width=\"100%\"\n x=\"0px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n y=\"0px\">\n <path\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 style=\"fill-rule: evenodd; clip-rule: evenodd\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n </button>\n <div class=\"owl-dt-calendar-control-content\">\n <button\n [attr.aria-label]=\"periodButtonLabel\"\n (click)=\"toggleViews()\"\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-period-button\"\n tabindex=\"0\"\n type=\"button\">\n <span\n class=\"owl-dt-control-content owl-dt-control-button-content\"\n tabindex=\"-1\">\n {{ periodButtonText }}\n\n <span\n [style.transform]=\"'rotate(' + (isMonthView ? 0 : 180) + 'deg)'\"\n class=\"owl-dt-control-button-arrow\">\n <!-- <editor-fold desc=\"SVG Arrow\"> -->\n <svg\n xml:space=\"preserve\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n height=\"50%\"\n style=\"enable-background: new 0 0 292.362 292.362\"\n version=\"1.1\"\n viewBox=\"0 0 292.362 292.362\"\n width=\"50%\"\n x=\"0px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n y=\"0px\">\n <g>\n <path\n 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\n [attr.aria-label]=\"nextButtonLabel\"\n [disabled]=\"!nextButtonEnabled()\"\n [style.visibility]=\"showControlArrows ? 'visible' : 'hidden'\"\n (click)=\"nextClicked()\"\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-arrow-button\"\n tabindex=\"0\"\n type=\"button\">\n <span\n class=\"owl-dt-control-content owl-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Right\"> -->\n <svg\n xml:space=\"preserve\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n style=\"enable-background: new 0 0 250.738 250.738\"\n version=\"1.1\"\n viewBox=\"0 0 250.738 250.738\"\n x=\"0px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n y=\"0px\">\n <path\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 style=\"fill-rule: evenodd; clip-rule: evenodd\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n </button>\n</div>\n<div\n cdkMonitorSubtreeFocus\n class=\"owl-dt-calendar-main\"\n tabindex=\"-1\">\n @switch (currentView) {\n @case (DateView.MONTH) {\n <owl-date-time-month-view\n [dateFilter]=\"dateFilter\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [hideOtherMonths]=\"hideOtherMonths\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [pickerMoment]=\"pickerMoment\"\n [selectMode]=\"selectMode\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (selectedChange)=\"dateSelected($event)\">\n </owl-date-time-month-view>\n }\n\n @case (DateView.YEAR) {\n <owl-date-time-year-view\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [pickerMoment]=\"pickerMoment\"\n [selectMode]=\"selectMode\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n (change)=\"goToDateInView($event, DateView.MONTH)\"\n (keyboardEnter)=\"focusActiveCell()\"\n (monthSelected)=\"selectMonthInYearView($event)\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\">\n </owl-date-time-year-view>\n }\n\n @case (DateView.MULTI_YEARS) {\n <owl-date-time-multi-year-view\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [pickerMoment]=\"pickerMoment\"\n [selectMode]=\"selectMode\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n (change)=\"goToDateInView($event, DateView.YEAR)\"\n (keyboardEnter)=\"focusActiveCell()\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (yearSelected)=\"selectYearInMultiYearView($event)\">\n </owl-date-time-multi-year-view>\n }\n }\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "component", type: i4.OwlMultiYearViewComponent, selector: "owl-date-time-multi-year-view", inputs: ["selectMode", "selected", "selecteds", "pickerMoment", "dateFilter", "minDate", "maxDate"], outputs: ["change", "yearSelected", "pickerMomentChange", "keyboardEnter"] }, { kind: "component", type: i5.OwlYearViewComponent, selector: "owl-date-time-year-view", inputs: ["selectMode", "selected", "selecteds", "pickerMoment", "dateFilter", "minDate", "maxDate"], outputs: ["change", "monthSelected", "pickerMomentChange", "keyboardEnter"], exportAs: ["owlMonthView"] }, { kind: "component", type: i6.OwlMonthViewComponent, selector: "owl-date-time-month-view", inputs: ["hideOtherMonths", "firstDayOfWeek", "selectMode", "selected", "selecteds", "pickerMoment", "dateFilter", "minDate", "maxDate"], outputs: ["selectedChange", "pickerMomentChange"], exportAs: ["owlYearView"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
309
- }
310
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: OwlCalendarComponent, decorators: [{
311
- type: Component,
312
- args: [{ selector: 'owl-date-time-calendar', exportAs: 'owlDateTimeCalendar', host: {
313
- '[class.owl-dt-calendar]': 'owlDTCalendarClass'
314
- }, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"owl-dt-calendar-control\">\n <!-- focus when keyboard tab (http://kizu.ru/en/blog/keyboard-only-focus/#x) -->\n <button\n [attr.aria-label]=\"prevButtonLabel\"\n [disabled]=\"!prevButtonEnabled()\"\n [style.visibility]=\"showControlArrows ? 'visible' : 'hidden'\"\n (click)=\"previousClicked()\"\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-arrow-button\"\n tabindex=\"0\"\n type=\"button\">\n <span\n class=\"owl-dt-control-content owl-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Left\"> -->\n <svg\n xml:space=\"preserve\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n height=\"100%\"\n style=\"enable-background: new 0 0 250.738 250.738\"\n version=\"1.1\"\n viewBox=\"0 0 250.738 250.738\"\n width=\"100%\"\n x=\"0px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n y=\"0px\">\n <path\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 style=\"fill-rule: evenodd; clip-rule: evenodd\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n </button>\n <div class=\"owl-dt-calendar-control-content\">\n <button\n [attr.aria-label]=\"periodButtonLabel\"\n (click)=\"toggleViews()\"\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-period-button\"\n tabindex=\"0\"\n type=\"button\">\n <span\n class=\"owl-dt-control-content owl-dt-control-button-content\"\n tabindex=\"-1\">\n {{ periodButtonText }}\n\n <span\n [style.transform]=\"'rotate(' + (isMonthView ? 0 : 180) + 'deg)'\"\n class=\"owl-dt-control-button-arrow\">\n <!-- <editor-fold desc=\"SVG Arrow\"> -->\n <svg\n xml:space=\"preserve\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n height=\"50%\"\n style=\"enable-background: new 0 0 292.362 292.362\"\n version=\"1.1\"\n viewBox=\"0 0 292.362 292.362\"\n width=\"50%\"\n x=\"0px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n y=\"0px\">\n <g>\n <path\n 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\n [attr.aria-label]=\"nextButtonLabel\"\n [disabled]=\"!nextButtonEnabled()\"\n [style.visibility]=\"showControlArrows ? 'visible' : 'hidden'\"\n (click)=\"nextClicked()\"\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-arrow-button\"\n tabindex=\"0\"\n type=\"button\">\n <span\n class=\"owl-dt-control-content owl-dt-control-button-content\"\n tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Right\"> -->\n <svg\n xml:space=\"preserve\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n style=\"enable-background: new 0 0 250.738 250.738\"\n version=\"1.1\"\n viewBox=\"0 0 250.738 250.738\"\n x=\"0px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n y=\"0px\">\n <path\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 style=\"fill-rule: evenodd; clip-rule: evenodd\" />\n </svg>\n <!-- </editor-fold> -->\n </span>\n </button>\n</div>\n<div\n cdkMonitorSubtreeFocus\n class=\"owl-dt-calendar-main\"\n tabindex=\"-1\">\n @switch (currentView) {\n @case (DateView.MONTH) {\n <owl-date-time-month-view\n [dateFilter]=\"dateFilter\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [hideOtherMonths]=\"hideOtherMonths\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [pickerMoment]=\"pickerMoment\"\n [selectMode]=\"selectMode\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (selectedChange)=\"dateSelected($event)\">\n </owl-date-time-month-view>\n }\n\n @case (DateView.YEAR) {\n <owl-date-time-year-view\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [pickerMoment]=\"pickerMoment\"\n [selectMode]=\"selectMode\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n (change)=\"goToDateInView($event, DateView.MONTH)\"\n (keyboardEnter)=\"focusActiveCell()\"\n (monthSelected)=\"selectMonthInYearView($event)\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\">\n </owl-date-time-year-view>\n }\n\n @case (DateView.MULTI_YEARS) {\n <owl-date-time-multi-year-view\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [pickerMoment]=\"pickerMoment\"\n [selectMode]=\"selectMode\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n (change)=\"goToDateInView($event, DateView.YEAR)\"\n (keyboardEnter)=\"focusActiveCell()\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (yearSelected)=\"selectYearInMultiYearView($event)\">\n </owl-date-time-multi-year-view>\n }\n }\n</div>\n" }]
315
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.OwlDateTimeIntl }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i2.DateTimeAdapter, decorators: [{
316
- type: Optional
317
- }] }, { type: undefined, decorators: [{
318
- type: Optional
319
- }, {
320
- type: Inject,
321
- args: [OWL_DATE_TIME_FORMATS]
322
- }] }], propDecorators: { minDate: [{
323
- type: Input
324
- }], maxDate: [{
325
- type: Input
326
- }], pickerMoment: [{
327
- type: Input
328
- }], selected: [{
329
- type: Input
330
- }], selecteds: [{
331
- type: Input
332
- }], dateFilter: [{
333
- type: Input
334
- }], firstDayOfWeek: [{
335
- type: Input
336
- }], selectMode: [{
337
- type: Input
338
- }], startView: [{
339
- type: Input
340
- }], yearOnly: [{
341
- type: Input
342
- }], multiyearOnly: [{
343
- type: Input
344
- }], hideOtherMonths: [{
345
- type: Input
346
- }], pickerMomentChange: [{
347
- type: Output
348
- }], dateClicked: [{
349
- type: Output
350
- }], selectedChange: [{
351
- type: Output
352
- }], yearSelected: [{
353
- type: Output
354
- }], monthSelected: [{
355
- type: Output
356
- }] } });
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGlja2VyL3NyYy9saWIvZGF0ZS10aW1lL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BpY2tlci9zcmMvbGliL2RhdGUtdGltZS9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxRQUFRLEVBQWMsTUFBTSxVQUFVLENBQUM7QUFFaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFzQixNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7OztBQWM3RixNQUFNLE9BQU8sb0JBQW9CO0lBRy9CLElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBZTtRQUN6QixLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLFFBQVE7WUFDWCxLQUFLLENBQUMsQ0FBQztnQkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUss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c0JBRFYsS0FBSztnQkFvQkYsT0FBTztzQkFEVixLQUFLO2dCQW9CRixZQUFZO3NCQURmLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLO2dCQVdGLFNBQVM7c0JBRFosS0FBSztnQkE2Rk4sVUFBVTtzQkFEVCxLQUFLO2dCQU9OLGNBQWM7c0JBRGIsS0FBSztnQkFhTixVQUFVO3NCQURULEtBQUs7Z0JBWU4sU0FBUztzQkFEUixLQUFLO2dCQU9OLFFBQVE7c0JBRFAsS0FBSztnQkFPTixhQUFhO3NCQURaLEtBQUs7Z0JBT04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFLRSxXQUFXO3NCQURuQixNQUFNO2dCQUtFLGNBQWM7c0JBRHRCLE1BQU07Z0JBT0UsWUFBWTtzQkFEcEIsTUFBTTtnQkFPRSxhQUFhO3NCQURyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEYXRlVmlldywgU2VsZWN0TW9kZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBPV0xfREFURV9USU1FX0ZPUk1BVFMsIE93bERhdGVUaW1lRm9ybWF0cyB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtZm9ybWF0LmNsYXNzJztcbmltcG9ydCB7IE93bERhdGVUaW1lSW50bCB9IGZyb20gJy4vZGF0ZS10aW1lLXBpY2tlci1pbnRsLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvd2wtZGF0ZS10aW1lLWNhbGVuZGFyJyxcbiAgZXhwb3J0QXM6ICdvd2xEYXRlVGltZUNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Mub3dsLWR0LWNhbGVuZGFyXSc6ICdvd2xEVENhbGVuZGFyQ2xhc3MnXG4gIH0sXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBPd2xDYWxlbmRhckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBEYXRlVmlldyA9IERhdGVWaWV3O1xuXG4gIEBJbnB1dCgpXG4gIGdldCBtaW5EYXRlKCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgfVxuXG4gIHNldCBtaW5EYXRlKHZhbHVlOiBUIHwgbnVsbCkge1xuICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgIHZhbHVlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpO1xuXG4gICAgdGhpcy5fbWluRGF0ZSA9XG4gICAgICB2YWx1ZSA/XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih2YWx1ZSksXG4gICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodmFsdWUpXG4gICAgICAgIClcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBtYXhEYXRlKCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgfVxuXG4gIHNldCBtYXhEYXRlKHZhbHVlOiBUIHwgbnVsbCkge1xuICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgIHZhbHVlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpO1xuXG4gICAgdGhpcy5fbWF4RGF0ZSA9XG4gICAgICB2YWx1ZSA/XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih2YWx1ZSksXG4gICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodmFsdWUpXG4gICAgICAgIClcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBwaWNrZXJNb21lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BpY2tlck1vbWVudDtcbiAgfVxuXG4gIHNldCBwaWNrZXJNb21lbnQodmFsdWU6IFQpIHtcbiAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICB0aGlzLl9waWNrZXJNb21lbnQgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSkgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIubm93KCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWQoKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuXG4gIHNldCBzZWxlY3RlZCh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZHMoKTogQXJyYXk8VD4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZHM7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRzKHZhbHVlczogQXJyYXk8VD4pIHtcbiAgICB0aGlzLl9zZWxlY3RlZHMgPSB2YWx1ZXMubWFwKCh2KSA9PiB7XG4gICAgICB2ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodik7XG4gICAgICByZXR1cm4gdGhpcy5nZXRWYWxpZERhdGUodik7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgcGVyaW9kQnV0dG9uVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlzTW9udGhWaWV3ID9cbiAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KHRoaXMucGlja2VyTW9tZW50LCB0aGlzLmRhdGVUaW1lRm9ybWF0cy5tb250aFllYXJMYWJlbClcbiAgICAgIDogdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhck5hbWUodGhpcy5waWNrZXJNb21lbnQpO1xuICB9XG5cbiAgZ2V0IHBlcmlvZEJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNNb250aFZpZXcgPyB0aGlzLnBpY2tlckludGwuc3dpdGNoVG9NdWx0aVllYXJWaWV3TGFiZWwgOiB0aGlzLnBpY2tlckludGwuc3dpdGNoVG9Nb250aFZpZXdMYWJlbDtcbiAgfVxuXG4gIGdldCBwcmV2QnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09IERhdGVWaWV3Lk1PTlRIKSB7XG4gICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLnByZXZNb250aExhYmVsO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09IERhdGVWaWV3LllFQVIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBpY2tlckludGwucHJldlllYXJMYWJlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG5leHRCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9jdXJyZW50VmlldyA9PT0gRGF0ZVZpZXcuTU9OVEgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBpY2tlckludGwubmV4dE1vbnRoTGFiZWw7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jdXJyZW50VmlldyA9PT0gRGF0ZVZpZXcuWUVBUikge1xuICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5uZXh0WWVhckxhYmVsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXQgY3VycmVudFZpZXcoKTogRGF0ZVZpZXcge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmlldztcbiAgfVxuXG4gIHNldCBjdXJyZW50Vmlldyh2aWV3OiBEYXRlVmlldykge1xuICAgIHRoaXMuX2N1cnJlbnRWaWV3ID0gdmlldztcbiAgICB0aGlzLm1vdmVGb2N1c09uTmV4dFRpY2sgPSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzSW5TaW5nbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnO1xuICB9XG5cbiAgZ2V0IGlzSW5SYW5nZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyB8fCB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nIHx8IHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nO1xuICB9XG5cbiAgZ2V0IHNob3dDb250cm9sQXJyb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmlldyAhPT0gRGF0ZVZpZXcuTVVMVElfWUVBUlM7XG4gIH1cblxuICBnZXQgaXNNb250aFZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRWaWV3ID09PSBEYXRlVmlldy5NT05USDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIGNsYXNzICdvd2wtZHQtY2FsZW5kYXInIHRvIGhvc3RcbiAgICovXG4gIGdldCBvd2xEVENhbGVuZGFyQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsbVJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHBpY2tlckludGw6IE93bERhdGVUaW1lSW50bCxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZVRpbWVBZGFwdGVyOiBEYXRlVGltZUFkYXB0ZXI8VD4sXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KE9XTF9EQVRFX1RJTUVfRk9STUFUUylcbiAgICBwcml2YXRlIGRhdGVUaW1lRm9ybWF0czogT3dsRGF0ZVRpbWVGb3JtYXRzXG4gICkge1xuICAgIHRoaXMuaW50bENoYW5nZXNTdWIgPSB0aGlzLnBpY2tlckludGwuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEYXRlIGZpbHRlciBmb3IgdGhlIG1vbnRoIGFuZCB5ZWFyIHZpZXdcbiAgICovXG4gIEBJbnB1dCgpXG4gIGRhdGVGaWx0ZXI6IChkYXRlOiBUKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrXG4gICAqL1xuICBASW5wdXQoKVxuICBmaXJzdERheU9mV2VlazogbnVtYmVyO1xuXG4gIC8qKiBUaGUgbWluaW11bSBzZWxlY3RhYmxlIGRhdGUuICovXG4gIHByaXZhdGUgX21pbkRhdGU6IFQgfCBudWxsO1xuXG4gIC8qKiBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuICovXG4gIHByaXZhdGUgX21heERhdGU6IFQgfCBudWxsO1xuXG4gIC8qKiBUaGUgY3VycmVudCBwaWNrZXIgbW9tZW50ICovXG4gIHByaXZhdGUgX3BpY2tlck1vbWVudDogVDtcblxuICBASW5wdXQoKVxuICBzZWxlY3RNb2RlOiBTZWxlY3RNb2RlO1xuXG4gIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIG1vbWVudC4gKi9cbiAgcHJpdmF0ZSBfc2VsZWN0ZWQ6IFQgfCBudWxsO1xuXG4gIHByaXZhdGUgX3NlbGVjdGVkczogQXJyYXk8VD4gPSBbXTtcblxuICAvKipcbiAgICogVGhlIHZpZXcgdGhhdCB0aGUgY2FsZW5kYXIgc2hvdWxkIHN0YXJ0IGluLlxuICAgKi9cbiAgQElucHV0KClcbiAgc3RhcnRWaWV3OiBEYXRlVmlldyA9IERhdGVWaWV3Lk1PTlRIO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3VsZCBvbmx5IHRoZSB5ZWFyIGFuZCBtdWx0aS15ZWFyIHZpZXdzLlxuICAgKi9cbiAgQElucHV0KClcbiAgeWVhck9ubHkgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG91bGQgb25seSB0aGUgbXVsdGkteWVhciB2aWV3LlxuICAgKi9cbiAgQElucHV0KClcbiAgbXVsdGl5ZWFyT25seSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGhpZGUgZGF0ZXMgaW4gb3RoZXIgbW9udGhzIGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIGN1cnJlbnQgbW9udGguXG4gICAqL1xuICBASW5wdXQoKVxuICBoaWRlT3RoZXJNb250aHM6IGJvb2xlYW47XG5cbiAgLyoqIEVtaXRzIHdoZW4gdGhlIGN1cnJlbnRseSBwaWNrZXIgbW9tZW50IGNoYW5nZXMuICovXG4gIEBPdXRwdXQoKVxuICBwaWNrZXJNb21lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgLyoqIEVtaXRzIHdoZW4gdGhlIHNlbGVjdGVkIGRhdGUgY2hhbmdlcy4gKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGRhdGVDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBjaGFuZ2VzLiAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzZWxlY3RlZCB5ZWFyLiBUaGlzIGRvZXNuJ3QgaW1wbHkgYSBjaGFuZ2Ugb24gdGhlIHNlbGVjdGVkIGRhdGVcbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSB5ZWFyU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzZWxlY3RlZCBtb250aC4gVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgbW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICBwcml2YXRlIF9jdXJyZW50VmlldzogRGF0ZVZpZXc7XG5cbiAgcHJpdmF0ZSBpbnRsQ2hhbmdlc1N1YiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICAvKipcbiAgICogVXNlZCBmb3Igc2NoZWR1bGluZyB0aGF0IGZvY3VzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgYWN0aXZlIGNlbGwgb24gdGhlIG5leHQgdGljay5cbiAgICogV2UgbmVlZCB0byBzY2hlZHVsZSBpdCwgcmF0aGVyIHRoYW4gZG8gaXQgaW1tZWRpYXRlbHksIGJlY2F1c2Ugd2UgaGF2ZSB0byB3YWl0XG4gICAqIGZvciBBbmd1bGFyIHRvIHJlLWV2YWx1YXRlIHRoZSB2aWV3IGNoaWxkcmVuLlxuICAgKi9cbiAgcHJpdmF0ZSBtb3ZlRm9jdXNPbk5leHRUaWNrID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERhdGUgZmlsdGVyIGZvciB0aGUgbW9udGggYW5kIHllYXIgdmlld1xuICAgKi9cbiAgcHVibGljIGRhdGVGaWx0ZXJGb3JWaWV3cyA9IChkYXRlOiBUKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhZGF0ZSAmJlxuICAgICAgKCF0aGlzLmRhdGVGaWx0ZXIgfHwgdGhpcy5kYXRlRmlsdGVyKGRhdGUpKSAmJlxuICAgICAgKCF0aGlzLm1pbkRhdGUgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZShkYXRlLCB0aGlzLm1pbkRhdGUpID49IDApICYmXG4gICAgICAoIXRoaXMubWF4RGF0ZSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGRhdGUsIHRoaXMubWF4RGF0ZSkgPD0gMClcbiAgICApO1xuICB9O1xuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY3VycmVudFZpZXcgPSB0aGlzLnN0YXJ0VmlldztcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgaWYgKHRoaXMubW92ZUZvY3VzT25OZXh0VGljaykge1xuICAgICAgdGhpcy5tb3ZlRm9jdXNPbk5leHRUaWNrID0gZmFsc2U7XG4gICAgICB0aGlzLmZvY3VzQWN0aXZlQ2VsbCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmludGxDaGFuZ2VzU3ViLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIGJldHdlZW4gbW9udGggdmlldyBhbmQgeWVhciB2aWV3XG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlVmlld3MoKTogdm9pZCB7XG4gICAgbGV0IG5leHRWaWV3ID0gbnVsbDtcbiAgICBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09IERhdGVWaWV3Lk1PTlRIKSB7XG4gICAgICBuZXh0VmlldyA9IERhdGVWaWV3Lk1VTFRJX1lFQVJTO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXllYXJPbmx5KSB7XG4gICAgICAgIG5leHRWaWV3ID0gRGF0ZVZpZXcuTVVMVElfWUVBUlM7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMueWVhck9ubHkpIHtcbiAgICAgICAgbmV4dFZpZXcgPSB0aGlzLl9jdXJyZW50VmlldyA9PT0gRGF0ZVZpZXcuWUVBUiA/IERhdGVWaWV3Lk1VTFRJX1lFQVJTIDogRGF0ZVZpZXcuWUVBUjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRWaWV3ID0gRGF0ZVZpZXcuTU9OVEg7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFZpZXcgPSBuZXh0VmlldztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHVzZXIgY2xpY2tzIG9uIHRoZSBwcmV2aW91cyBidXR0b24uXG4gICAqL1xuICBwdWJsaWMgcHJldmlvdXNDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMucGlja2VyTW9tZW50ID1cbiAgICAgIHRoaXMuaXNNb250aFZpZXcgP1xuICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLnBpY2tlck1vbWVudCwgLTEpXG4gICAgICA6IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5waWNrZXJNb21lbnQsIC0xKTtcblxuICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQodGhpcy5waWNrZXJNb21lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdXNlciBjbGlja3Mgb24gdGhlIG5leHQgYnV0dG9uLlxuICAgKi9cbiAgcHVibGljIG5leHRDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMucGlja2VyTW9tZW50ID1cbiAgICAgIHRoaXMuaXNNb250aFZpZXcgP1xuICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLnBpY2tlck1vbWVudCwgMSlcbiAgICAgIDogdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLnBpY2tlck1vbWVudCwgMSk7XG5cbiAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KHRoaXMucGlja2VyTW9tZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBkYXRlU2VsZWN0ZWQoZGF0ZTogVCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRlRmlsdGVyRm9yVmlld3MoZGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGVDbGlja2VkLmVtaXQoZGF0ZSk7XG4gICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KGRhdGUpO1xuXG4gICAgLyppZiAoKHRoaXMuaXNJblNpbmdsZU1vZGUgJiYgIXRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzU2FtZURheShkYXRlLCB0aGlzLnNlbGVjdGVkKSkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNJblJhbmdlTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KGRhdGUpO1xuICAgICAgICB9Ki9cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2UgdGhlIHBpY2tlck1vbWVudCB2YWx1ZSBhbmQgc3dpdGNoIHRvIGEgc3BlY2lmaWMgdmlld1xuICAgKi9cbiAgcHVibGljIGdvVG9EYXRlSW5WaWV3KGRhdGU6IFQsIHZpZXc6IERhdGVWaWV3KTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVQaWNrZXJNb21lbnRDaGFuZ2UoZGF0ZSk7XG4gICAgaWYgKFxuICAgICAgKCF0aGlzLnllYXJPbmx5ICYmICF0aGlzLm11bHRpeWVhck9ubHkpIHx8XG4gICAgICAodGhpcy5tdWx0aXllYXJPbmx5ICYmIHZpZXcgIT09IERhdGVWaWV3Lk1PTlRIICYmIHZpZXcgIT09IERhdGVWaWV3LllFQVIpIHx8XG4gICAgICAodGhpcy55ZWFyT25seSAmJiB2aWV3ICE9PSBEYXRlVmlldy5NT05USClcbiAgICApIHtcbiAgICAgIHRoaXMuY3VycmVudFZpZXcgPSB2aWV3O1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIHRoZSBwaWNrZXJNb21lbnQgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBoYW5kbGVQaWNrZXJNb21lbnRDaGFuZ2UoZGF0ZTogVCk6IHZvaWQge1xuICAgIHRoaXMucGlja2VyTW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY2xhbXBEYXRlKGRhdGUsIHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlKTtcbiAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KHRoaXMucGlja2VyTW9tZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJldmlvdXMgcGVyaW9kIGJ1dHRvbiBpcyBlbmFibGVkLlxuICAgKi9cbiAgcHVibGljIHByZXZCdXR0b25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5taW5EYXRlIHx8ICF0aGlzLmlzU2FtZVZpZXcodGhpcy5waWNrZXJNb21lbnQsIHRoaXMubWluRGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbmV4dCBwZXJpb2QgYnV0dG9uIGlzIGVuYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgbmV4dEJ1dHRvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLm1heERhdGUgfHwgIXRoaXMuaXNTYW1lVmlldyh0aGlzLnBpY2tlck1vbWVudCwgdGhpcy5tYXhEYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0byB0aGUgaG9zdCBlbGVtZW50XG4gICAqL1xuICBwdWJsaWMgZm9jdXNBY3RpdmVDZWxsKCkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vd2wtZHQtY2FsZW5kYXItY2VsbC1hY3RpdmUnKS5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RZZWFySW5NdWx0aVllYXJWaWV3KG5vcm1hbGl6ZWRZZWFyOiBUKTogdm9pZCB7XG4gICAgdGhpcy55ZWFyU2VsZWN0ZWQuZW1pdChub3JtYWxpemVkWWVhcik7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0TW9udGhJblllYXJWaWV3KG5vcm1hbGl6ZWRNb250aDogVCk6IHZvaWQge1xuICAgIHRoaXMubW9udGhTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRNb250aCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdHdvIGRhdGVzIHJlcHJlc2VudCB0aGUgc2FtZSB2aWV3IGluIHRoZSBjdXJyZW50IHZpZXcgbW9kZSAobW9udGggb3IgeWVhcikuXG4gICAqL1xuICBwcml2YXRlIGlzU2FtZVZpZXcoZGF0ZTE6IFQsIGRhdGUyOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRWaWV3ID09PSBEYXRlVmlldy5NT05USCkge1xuICAgICAgcmV0dXJuICEhKFxuICAgICAgICBkYXRlMSAmJlxuICAgICAgICBkYXRlMiAmJlxuICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGUxKSA9PT0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlMikgJiZcbiAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZTEpID09PSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aChkYXRlMilcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jdXJyZW50VmlldyA9PT0gRGF0ZVZpZXcuWUVBUikge1xuICAgICAgcmV0dXJuICEhKGRhdGUxICYmIGRhdGUyICYmIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZTEpID09PSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGUyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgdmFsaWQgZGF0ZSBvYmplY3RcbiAgICovXG4gIHByaXZhdGUgZ2V0VmFsaWREYXRlKG9iajogYW55KTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRhdGVUaW1lQWRhcHRlci5pc0RhdGVJbnN0YW5jZShvYmopICYmIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQob2JqKSA/IG9iaiA6IG51bGw7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvd2wtZHQtY2FsZW5kYXItY29udHJvbFwiPlxuICA8IS0tIGZvY3VzIHdoZW4ga2V5Ym9hcmQgdGFiIChodHRwOi8va2l6dS5ydS9lbi9ibG9nL2tleWJvYXJkLW9ubHktZm9jdXMvI3gpIC0tPlxuICA8YnV0dG9uXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwcmV2QnV0dG9uTGFiZWxcIlxuICAgIFtkaXNhYmxlZF09XCIhcHJldkJ1dHRvbkVuYWJsZWQoKVwiXG4gICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvd0NvbnRyb2xBcnJvd3MgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiXG4gICAgKGNsaWNrKT1cInByZXZpb3VzQ2xpY2tlZCgpXCJcbiAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sIG93bC1kdC1jb250cm9sLWJ1dHRvbiBvd2wtZHQtY29udHJvbC1hcnJvdy1idXR0b25cIlxuICAgIHRhYmluZGV4PVwiMFwiXG4gICAgdHlwZT1cImJ1dHRvblwiPlxuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sLWNvbnRlbnQgb3dsLWR0LWNvbnRyb2wtYnV0dG9uLWNvbnRlbnRcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPCEtLSA8ZWRpdG9yLWZvbGQgZGVzYz1cIlNWRyBBcnJvdyBMZWZ0XCI+IC0tPlxuICAgICAgPHN2Z1xuICAgICAgICB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiXG4gICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG4gICAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgICBzdHlsZT1cImVuYWJsZS1iYWNrZ3JvdW5kOiBuZXcgMCAwIDI1MC43MzggMjUwLjczOFwiXG4gICAgICAgIHZlcnNpb249XCIxLjFcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDI1MC43MzggMjUwLjczOFwiXG4gICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgIHg9XCIwcHhcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgeT1cIjBweFwiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNOTYuNjMzLDEyNS4zNjlsOTUuMDUzLTk0LjUzM2M3LjEwMS03LjA1NSw3LjEwMS0xOC40OTIsMC0yNS41NDYgICBjLTcuMS03LjA1NC0xOC42MTMtNy4wNTQtMjUuNzE0LDBMNTguOTg5LDExMS42ODljLTMuNzg0LDMuNzU5LTUuNDg3LDguNzU5LTUuMjM4LDEzLjY4Yy0wLjI0OSw0LjkyMiwxLjQ1NCw5LjkyMSw1LjIzOCwxMy42ODEgICBsMTA2Ljk4MywxMDYuMzk4YzcuMTAxLDcuMDU1LDE4LjYxMyw3LjA1NSwyNS43MTQsMGM3LjEwMS03LjA1NCw3LjEwMS0xOC40OTEsMC0yNS41NDRMOTYuNjMzLDEyNS4zNjl6XCJcbiAgICAgICAgICBzdHlsZT1cImZpbGwtcnVsZTogZXZlbm9kZDsgY2xpcC1ydWxlOiBldmVub2RkXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgICAgPCEtLSA8L2VkaXRvci1mb2xkPiAtLT5cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwib3dsLWR0LWNhbGVuZGFyLWNvbnRyb2wtY29udGVudFwiPlxuICAgIDxidXR0b25cbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicGVyaW9kQnV0dG9uTGFiZWxcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZVZpZXdzKClcIlxuICAgICAgY2xhc3M9XCJvd2wtZHQtY29udHJvbCBvd2wtZHQtY29udHJvbC1idXR0b24gb3dsLWR0LWNvbnRyb2wtcGVyaW9kLWJ1dHRvblwiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJvd2wtZHQtY29udHJvbC1jb250ZW50IG93bC1kdC1jb250cm9sLWJ1dHRvbi1jb250ZW50XCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICB7eyBwZXJpb2RCdXR0b25UZXh0IH19XG5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIidyb3RhdGUoJyArIChpc01vbnRoVmlldyA/IDAgOiAxODApICsgJ2RlZyknXCJcbiAgICAgICAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sLWJ1dHRvbi1hcnJvd1wiPlxuICAgICAgICAgIDwhLS0gPGVkaXRvci1mb2xkIGRlc2M9XCJTVkcgQXJyb3dcIj4gLS0+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgeG1sOnNwYWNlPVwicHJlc2VydmVcIlxuICAgICAgICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjUwJVwiXG4gICAgICAgICAgICBzdHlsZT1cImVuYWJsZS1iYWNrZ3JvdW5kOiBuZXcgMCAwIDI5Mi4zNjIgMjkyLjM2MlwiXG4gICAgICAgICAgICB2ZXJzaW9uPVwiMS4xXCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjkyLjM2MiAyOTIuMzYyXCJcbiAgICAgICAgICAgIHdpZHRoPVwiNTAlXCJcbiAgICAgICAgICAgIHg9XCIwcHhcIlxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICB5PVwiMHB4XCI+XG4gICAgICAgICAgICA8Zz5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBkPVwiTTI4Ni45MzUsNjkuMzc3Yy0zLjYxNC0zLjYxNy03Ljg5OC01LjQyNC0xMi44NDgtNS40MjRIMTguMjc0Yy00Ljk1MiwwLTkuMjMzLDEuODA3LTEyLjg1LDUuNDI0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMxLjgwNyw3Mi45OTgsMCw3Ny4yNzksMCw4Mi4yMjhjMCw0Ljk0OCwxLjgwNyw5LjIyOSw1LjQyNCwxMi44NDdsMTI3LjkwNywxMjcuOTA3YzMuNjIxLDMuNjE3LDcuOTAyLDUuNDI4LDEyLjg1LDUuNDI4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM5LjIzMy0xLjgxMSwxMi44NDctNS40MjhMMjg2LjkzNSw5NS4wNzRjMy42MTMtMy42MTcsNS40MjctNy44OTgsNS40MjctMTIuODQ3QzI5Mi4zNjIsNzcuMjc5LDI5MC41NDgsNzIuOTk4LDI4Ni45MzUsNjkuMzc3elwiIC8+XG4gICAgICAgICAgICA8L2c+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPCEtLSA8L2VkaXRvci1mb2xkPiAtLT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGJ1dHRvblxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibmV4dEJ1dHRvbkxhYmVsXCJcbiAgICBbZGlzYWJsZWRdPVwiIW5leHRCdXR0b25FbmFibGVkKClcIlxuICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInNob3dDb250cm9sQXJyb3dzID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgIChjbGljayk9XCJuZXh0Q2xpY2tlZCgpXCJcbiAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sIG93bC1kdC1jb250cm9sLWJ1dHRvbiBvd2wtZHQtY29udHJvbC1hcnJvdy1idXR0b25cIlxuICAgIHRhYmluZGV4PVwiMFwiXG4gICAgdHlwZT1cImJ1dHRvblwiPlxuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sLWNvbnRlbnQgb3dsLWR0LWNvbnRyb2wtYnV0dG9uLWNvbnRlbnRcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPCEtLSA8ZWRpdG9yLWZvbGQgZGVzYz1cIlNWRyBBcnJvdyBSaWdodFwiPiAtLT5cbiAgICAgIDxzdmdcbiAgICAgICAgeG1sOnNwYWNlPVwicHJlc2VydmVcIlxuICAgICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxuICAgICAgICBzdHlsZT1cImVuYWJsZS1iYWNrZ3JvdW5kOiBuZXcgMCAwIDI1MC43MzggMjUwLjczOFwiXG4gICAgICAgIHZlcnNpb249XCIxLjFcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDI1MC43MzggMjUwLjczOFwiXG4gICAgICAgIHg9XCIwcHhcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgeT1cIjBweFwiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTkxLjc1LDExMS42ODlMODQuNzY2LDUuMjkxYy03LjEtNy4wNTUtMTguNjEzLTcuMDU1LTI1LjcxMywwXG4gICAgICAgICAgICAgICAgICAgIGMtNy4xMDEsNy4wNTQtNy4xMDEsMTguNDksMCwyNS41NDRsOTUuMDUzLDk0LjUzNGwtOTUuMDUzLDk0LjUzM2MtNy4xMDEsNy4wNTQtNy4xMDEsMTguNDkxLDAsMjUuNTQ1XG4gICAgICAgICAgICAgICAgICAgIGM3LjEsNy4wNTQsMTguNjEzLDcuMDU0LDI1LjcxMywwTDE5MS43NSwxMzkuMDVjMy43ODQtMy43NTksNS40ODctOC43NTksNS4yMzgtMTMuNjgxXG4gICAgICAgICAgICAgICAgICAgIEMxOTcuMjM3LDEyMC40NDcsMTk1LjUzNCwxMTUuNDQ4LDE5MS43NSwxMTEuNjg5elwiXG4gICAgICAgICAgc3R5bGU9XCJmaWxsLXJ1bGU6IGV2ZW5vZGQ7IGNsaXAtcnVsZTogZXZlbm9kZFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICAgIDwhLS0gPC9lZGl0b3ItZm9sZD4gLS0+XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuPGRpdlxuICBjZGtNb25pdG9yU3VidHJlZUZvY3VzXG4gIGNsYXNzPVwib3dsLWR0LWNhbGVuZGFyLW1haW5cIlxuICB0YWJpbmRleD1cIi0xXCI+XG4gIEBzd2l0Y2ggKGN1cnJlbnRWaWV3KSB7XG4gICAgQGNhc2UgKERhdGVWaWV3Lk1PTlRIKSB7XG4gICAgICA8b3dsLWRhdGUtdGltZS1tb250aC12aWV3XG4gICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiZmlyc3REYXlPZldlZWtcIlxuICAgICAgICBbaGlkZU90aGVyTW9udGhzXT1cImhpZGVPdGhlck1vbnRoc1wiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgICAgW3BpY2tlck1vbWVudF09XCJwaWNrZXJNb21lbnRcIlxuICAgICAgICBbc2VsZWN0TW9kZV09XCJzZWxlY3RNb2RlXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkXCJcbiAgICAgICAgW3NlbGVjdGVkc109XCJzZWxlY3RlZHNcIlxuICAgICAgICAocGlja2VyTW9tZW50Q2hhbmdlKT1cImhhbmRsZVBpY2tlck1vbWVudENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cImRhdGVTZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICA8L293bC1kYXRlLXRpbWUtbW9udGgtdmlldz5cbiAgICB9XG5cbiAgICBAY2FzZSAoRGF0ZVZpZXcuWUVBUikge1xuICAgICAgPG93bC1kYXRlLXRpbWUteWVhci12aWV3XG4gICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFtwaWNrZXJNb21lbnRdPVwicGlja2VyTW9tZW50XCJcbiAgICAgICAgW3NlbGVjdE1vZGVdPVwic2VsZWN0TW9kZVwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICAgIFtzZWxlY3RlZHNdPVwic2VsZWN0ZWRzXCJcbiAgICAgICAgKGNoYW5nZSk9XCJnb1RvRGF0ZUluVmlldygkZXZlbnQsIERhdGVWaWV3Lk1PTlRIKVwiXG4gICAgICAgIChrZXlib2FyZEVudGVyKT1cImZvY3VzQWN0aXZlQ2VsbCgpXCJcbiAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwic2VsZWN0TW9udGhJblllYXJWaWV3KCRldmVudClcIlxuICAgICAgICAocGlja2VyTW9tZW50Q2hhbmdlKT1cImhhbmRsZVBpY2tlck1vbWVudENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L293bC1kYXRlLXRpbWUteWVhci12aWV3PlxuICAgIH1cblxuICAgIEBjYXNlIChEYXRlVmlldy5NVUxUSV9ZRUFSUykge1xuICAgICAgPG93bC1kYXRlLXRpbWUtbXVsdGkteWVhci12aWV3XG4gICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFtwaWNrZXJNb21lbnRdPVwicGlja2VyTW9tZW50XCJcbiAgICAgICAgW3NlbGVjdE1vZGVdPVwic2VsZWN0TW9kZVwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICAgIFtzZWxlY3RlZHNdPVwic2VsZWN0ZWRzXCJcbiAgICAgICAgKGNoYW5nZSk9XCJnb1RvRGF0ZUluVmlldygkZXZlbnQsIERhdGVWaWV3LllFQVIpXCJcbiAgICAgICAgKGtleWJvYXJkRW50ZXIpPVwiZm9jdXNBY3RpdmVDZWxsKClcIlxuICAgICAgICAocGlja2VyTW9tZW50Q2hhbmdlKT1cImhhbmRsZVBpY2tlck1vbWVudENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJzZWxlY3RZZWFySW5NdWx0aVllYXJWaWV3KCRldmVudClcIj5cbiAgICAgIDwvb3dsLWRhdGUtdGltZS1tdWx0aS15ZWFyLXZpZXc+XG4gICAgfVxuICB9XG48L2Rpdj5cbiJdfQ==