nxt-pick-datetime 12.0.1 → 13.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.
Files changed (74) hide show
  1. package/{esm2015/lib/class/date-time-adapter.class.js → esm2020/lib/class/date-time-adapter.class.mjs} +0 -0
  2. package/{esm2015/lib/class/date-time-format.class.js → esm2020/lib/class/date-time-format.class.mjs} +1 -1
  3. package/esm2020/lib/class/date-time.class.mjs +161 -0
  4. package/{esm2015/lib/class/dialog-config.class.js → esm2020/lib/class/dialog-config.class.mjs} +0 -0
  5. package/esm2020/lib/class/dialog-ref.class.mjs +121 -0
  6. package/esm2020/lib/date-time/calendar/calendar.component.mjs +345 -0
  7. package/esm2020/lib/date-time/calendar-body/calendar-body.component.mjs +145 -0
  8. package/esm2020/lib/date-time/calendar-month-view/calendar-month-view.component.mjs +438 -0
  9. package/esm2020/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.mjs +359 -0
  10. package/esm2020/lib/date-time/calendar-year-view/calendar-year-view.component.mjs +369 -0
  11. package/esm2020/lib/date-time/date-time-inline/date-time-inline.component.mjs +264 -0
  12. package/{esm2015/lib/date-time/date-time-picker/date-time-picker.component.js → esm2020/lib/date-time/date-time-picker/date-time-picker.component.mjs} +13 -14
  13. package/{esm2015/lib/date-time/date-time-picker-container/date-time-picker-container.animations.js → esm2020/lib/date-time/date-time-picker-container/date-time-picker-container.animations.mjs} +1 -1
  14. package/{esm2015/lib/date-time/date-time-picker-container/date-time-picker-container.component.js → esm2020/lib/date-time/date-time-picker-container/date-time-picker-container.component.mjs} +6 -14
  15. package/esm2020/lib/date-time/date-time-picker-input.directive.mjs +624 -0
  16. package/{esm2015/lib/date-time/date-time-picker-intl.service.js → esm2020/lib/date-time/date-time-picker-intl.service.mjs} +3 -3
  17. package/{esm2015/lib/date-time/date-time-picker-trigger.directive.js → esm2020/lib/date-time/date-time-picker-trigger.directive.mjs} +3 -3
  18. package/{esm2015/lib/date-time/date-time.module.js → esm2020/lib/date-time/date-time.module.mjs} +4 -4
  19. package/{esm2015/lib/date-time/number-fixed-len.pipe.js → esm2020/lib/date-time/number-fixed-len.pipe.mjs} +3 -3
  20. package/{esm2015/lib/date-time/timer/timer.component.js → esm2020/lib/date-time/timer/timer.component.mjs} +5 -12
  21. package/esm2020/lib/date-time/timer-box/timer-box.component.mjs +88 -0
  22. package/{esm2015/lib/dialog/dialog-container/dialog-container.component.js → esm2020/lib/dialog/dialog-container/dialog-container.component.mjs} +6 -10
  23. package/{esm2015/lib/dialog/dialog.module.js → esm2020/lib/dialog/dialog.module.mjs} +4 -4
  24. package/esm2020/lib/dialog/dialog.service.mjs +240 -0
  25. package/{esm2015/lib/utils/object.js → esm2020/lib/utils/object.mjs} +0 -0
  26. package/{esm2015/moment-adapter/date-time-adapter.class.js → esm2020/moment-adapter/date-time-adapter.class.mjs} +4 -4
  27. package/{esm2015/moment-adapter/date-time-format.class.js → esm2020/moment-adapter/date-time-format.class.mjs} +0 -0
  28. package/{esm2015/moment-adapter/moment-adapter.module.js → esm2020/moment-adapter/moment-adapter.module.mjs} +8 -8
  29. package/{esm2015/moment-adapter/nxt-pick-datetime-moment-adapter.js → esm2020/moment-adapter/nxt-pick-datetime-moment-adapter.mjs} +0 -0
  30. package/{esm2015/moment-adapter/public-api.js → esm2020/moment-adapter/public-api.mjs} +0 -0
  31. package/{esm2015/native-adapter/date-time-adapter.class.js → esm2020/native-adapter/date-time-adapter.class.mjs} +5 -5
  32. package/{esm2015/native-adapter/date-time-format.class.js → esm2020/native-adapter/date-time-format.class.mjs} +0 -0
  33. package/{esm2015/native-adapter/native-adapter.module.js → esm2020/native-adapter/native-adapter.module.mjs} +8 -8
  34. package/{esm2015/native-adapter/nxt-pick-datetime-native-adapter.js → esm2020/native-adapter/nxt-pick-datetime-native-adapter.mjs} +0 -0
  35. package/{esm2015/native-adapter/public-api.js → esm2020/native-adapter/public-api.mjs} +0 -0
  36. package/{esm2015/nxt-pick-datetime.js → esm2020/nxt-pick-datetime.mjs} +0 -0
  37. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  38. package/fesm2015/nxt-pick-datetime-moment-adapter.mjs +269 -0
  39. package/fesm2015/nxt-pick-datetime-moment-adapter.mjs.map +1 -0
  40. package/fesm2015/nxt-pick-datetime-native-adapter.mjs +392 -0
  41. package/fesm2015/nxt-pick-datetime-native-adapter.mjs.map +1 -0
  42. package/fesm2015/nxt-pick-datetime.mjs +4974 -0
  43. package/fesm2015/nxt-pick-datetime.mjs.map +1 -0
  44. package/{fesm2015/nxt-pick-datetime-moment-adapter.js → fesm2020/nxt-pick-datetime-moment-adapter.mjs} +11 -12
  45. package/fesm2020/nxt-pick-datetime-moment-adapter.mjs.map +1 -0
  46. package/{fesm2015/nxt-pick-datetime-native-adapter.js → fesm2020/nxt-pick-datetime-native-adapter.mjs} +12 -13
  47. package/fesm2020/nxt-pick-datetime-native-adapter.mjs.map +1 -0
  48. package/{fesm2015/nxt-pick-datetime.js → fesm2020/nxt-pick-datetime.mjs} +128 -193
  49. package/fesm2020/nxt-pick-datetime.mjs.map +1 -0
  50. package/lib/class/dialog-ref.class.d.ts +2 -0
  51. package/lib/dialog/dialog.service.d.ts +2 -1
  52. package/moment-adapter/package.json +5 -5
  53. package/native-adapter/package.json +5 -5
  54. package/package.json +40 -11
  55. package/bundles/nxt-pick-datetime-moment-adapter.umd.js +0 -629
  56. package/bundles/nxt-pick-datetime-moment-adapter.umd.js.map +0 -1
  57. package/bundles/nxt-pick-datetime-native-adapter.umd.js +0 -750
  58. package/bundles/nxt-pick-datetime-native-adapter.umd.js.map +0 -1
  59. package/bundles/nxt-pick-datetime.umd.js +0 -6150
  60. package/bundles/nxt-pick-datetime.umd.js.map +0 -1
  61. package/esm2015/lib/class/date-time.class.js +0 -163
  62. package/esm2015/lib/class/dialog-ref.class.js +0 -113
  63. package/esm2015/lib/date-time/calendar/calendar.component.js +0 -354
  64. package/esm2015/lib/date-time/calendar-body/calendar-body.component.js +0 -153
  65. package/esm2015/lib/date-time/calendar-month-view/calendar-month-view.component.js +0 -447
  66. package/esm2015/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.js +0 -364
  67. package/esm2015/lib/date-time/calendar-year-view/calendar-year-view.component.js +0 -376
  68. package/esm2015/lib/date-time/date-time-inline/date-time-inline.component.js +0 -269
  69. package/esm2015/lib/date-time/date-time-picker-input.directive.js +0 -626
  70. package/esm2015/lib/date-time/timer-box/timer-box.component.js +0 -95
  71. package/esm2015/lib/dialog/dialog.service.js +0 -238
  72. package/fesm2015/nxt-pick-datetime-moment-adapter.js.map +0 -1
  73. package/fesm2015/nxt-pick-datetime-native-adapter.js.map +0 -1
  74. package/fesm2015/nxt-pick-datetime.js.map +0 -1
@@ -1,354 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Inject, Input, Optional, Output } from '@angular/core';
2
- import { Subscription } from 'rxjs';
3
- import { take } from 'rxjs/operators';
4
- import { OWL_DATE_TIME_FORMATS } from '../../class/date-time-format.class';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../date-time-picker-intl.service";
7
- import * as i2 from "../../class/date-time-adapter.class";
8
- import * as i3 from "../calendar-month-view/calendar-month-view.component";
9
- import * as i4 from "../calendar-year-view/calendar-year-view.component";
10
- import * as i5 from "../calendar-multi-year-view/calendar-multi-year-view.component";
11
- import * as i6 from "@angular/cdk/a11y";
12
- import * as i7 from "@angular/common";
13
- export class OwlCalendarComponent {
14
- constructor(elmRef, pickerIntl, ngZone, cdRef, dateTimeAdapter, dateTimeFormats) {
15
- this.elmRef = elmRef;
16
- this.pickerIntl = pickerIntl;
17
- this.ngZone = ngZone;
18
- this.cdRef = cdRef;
19
- this.dateTimeAdapter = dateTimeAdapter;
20
- this.dateTimeFormats = dateTimeFormats;
21
- /**
22
- * Set the first day of week
23
- */
24
- this.firstDayOfWeek = 0;
25
- this._selecteds = [];
26
- /**
27
- * The view that the calendar should start in.
28
- */
29
- this.startView = 'month';
30
- /** Emits when the currently picker moment changes. */
31
- this.pickerMomentChange = new EventEmitter();
32
- /** Emits when the currently selected date changes. */
33
- this.selectedChange = new EventEmitter();
34
- /** Emits when any date is selected. */
35
- this.userSelection = new EventEmitter();
36
- /**
37
- * Emits the selected year. This doesn't imply a change on the selected date
38
- * */
39
- this.yearSelected = new EventEmitter();
40
- /**
41
- * Emits the selected month. This doesn't imply a change on the selected date
42
- * */
43
- this.monthSelected = new EventEmitter();
44
- /**
45
- * Date filter for the month and year view
46
- */
47
- this.dateFilterForViews = (date) => {
48
- return (!!date &&
49
- (!this.dateFilter || this.dateFilter(date, 'date')) &&
50
- (!this.minDate ||
51
- this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&
52
- (!this.maxDate ||
53
- this.dateTimeAdapter.compare(date, this.maxDate) <= 0));
54
- };
55
- this.intlChangesSub = Subscription.EMPTY;
56
- /**
57
- * Used for scheduling that focus should be moved to the active cell on the next tick.
58
- * We need to schedule it, rather than do it immediately, because we have to wait
59
- * for Angular to re-evaluate the view children.
60
- */
61
- this.moveFocusOnNextTick = false;
62
- this.intlChangesSub = this.pickerIntl.changes.subscribe(() => {
63
- this.cdRef.markForCheck();
64
- });
65
- }
66
- get minDate() {
67
- return this._minDate;
68
- }
69
- set minDate(value) {
70
- value = this.dateTimeAdapter.deserialize(value);
71
- value = this.getValidDate(value);
72
- this._minDate = value
73
- ? this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(value), this.dateTimeAdapter.getMonth(value), this.dateTimeAdapter.getDate(value))
74
- : null;
75
- }
76
- get maxDate() {
77
- return this._maxDate;
78
- }
79
- set maxDate(value) {
80
- value = this.dateTimeAdapter.deserialize(value);
81
- value = this.getValidDate(value);
82
- this._maxDate = value
83
- ? this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(value), this.dateTimeAdapter.getMonth(value), this.dateTimeAdapter.getDate(value))
84
- : null;
85
- }
86
- get pickerMoment() {
87
- return this._pickerMoment;
88
- }
89
- set pickerMoment(value) {
90
- value = this.dateTimeAdapter.deserialize(value);
91
- this._pickerMoment =
92
- this.getValidDate(value) || this.dateTimeAdapter.now();
93
- }
94
- get selected() {
95
- return this._selected;
96
- }
97
- set selected(value) {
98
- value = this.dateTimeAdapter.deserialize(value);
99
- this._selected = this.getValidDate(value);
100
- }
101
- get selecteds() {
102
- return this._selecteds;
103
- }
104
- set selecteds(values) {
105
- this._selecteds = values.map(v => {
106
- v = this.dateTimeAdapter.deserialize(v);
107
- return this.getValidDate(v);
108
- });
109
- }
110
- get periodButtonText() {
111
- return this.isMonthView
112
- ? this.dateTimeAdapter.format(this.pickerMoment, this.dateTimeFormats.monthYearLabel)
113
- : this.dateTimeAdapter.getYearName(this.pickerMoment);
114
- }
115
- get periodButtonLabel() {
116
- return this.isMonthView
117
- ? this.pickerIntl.switchToMultiYearViewLabel
118
- : this.pickerIntl.switchToMonthViewLabel;
119
- }
120
- get prevButtonLabel() {
121
- if (this._currentView === 'month') {
122
- return this.pickerIntl.prevMonthLabel;
123
- }
124
- else if (this._currentView === 'year') {
125
- return this.pickerIntl.prevYearLabel;
126
- }
127
- else {
128
- return null;
129
- }
130
- }
131
- get nextButtonLabel() {
132
- if (this._currentView === 'month') {
133
- return this.pickerIntl.nextMonthLabel;
134
- }
135
- else if (this._currentView === 'year') {
136
- return this.pickerIntl.nextYearLabel;
137
- }
138
- else {
139
- return null;
140
- }
141
- }
142
- get currentView() {
143
- return this._currentView;
144
- }
145
- set currentView(view) {
146
- this._currentView = view;
147
- this.moveFocusOnNextTick = true;
148
- }
149
- get isInSingleMode() {
150
- return this.selectMode === 'single';
151
- }
152
- get isInRangeMode() {
153
- return (this.selectMode === 'range' ||
154
- this.selectMode === 'rangeFrom' ||
155
- this.selectMode === 'rangeTo');
156
- }
157
- get showControlArrows() {
158
- return this._currentView !== 'multi-years';
159
- }
160
- get isMonthView() {
161
- return this._currentView === 'month';
162
- }
163
- /**
164
- * Bind class 'owl-dt-calendar' to host
165
- * */
166
- get owlDTCalendarClass() {
167
- return true;
168
- }
169
- ngOnInit() { }
170
- ngAfterContentInit() {
171
- this._currentView = this.startView;
172
- }
173
- ngAfterViewChecked() {
174
- if (this.moveFocusOnNextTick) {
175
- this.moveFocusOnNextTick = false;
176
- this.focusActiveCell();
177
- }
178
- }
179
- ngOnDestroy() {
180
- this.intlChangesSub.unsubscribe();
181
- }
182
- /**
183
- * Toggle between month view and year view
184
- */
185
- toggleViews() {
186
- this.currentView =
187
- this._currentView == 'month' ? 'multi-years' : 'month';
188
- }
189
- /**
190
- * Handles user clicks on the previous button.
191
- * */
192
- previousClicked() {
193
- this.pickerMoment = this.isMonthView
194
- ? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1)
195
- : this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1);
196
- this.pickerMomentChange.emit(this.pickerMoment);
197
- }
198
- /**
199
- * Handles user clicks on the next button.
200
- * */
201
- nextClicked() {
202
- this.pickerMoment = this.isMonthView
203
- ? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1)
204
- : this.dateTimeAdapter.addCalendarYears(this.pickerMoment, 1);
205
- this.pickerMomentChange.emit(this.pickerMoment);
206
- }
207
- dateSelected(date) {
208
- if (!this.dateFilterForViews(date)) {
209
- return;
210
- }
211
- this.selectedChange.emit(date);
212
- /*if ((this.isInSingleMode && !this.dateTimeAdapter.isSameDay(date, this.selected)) ||
213
- this.isInRangeMode) {
214
- this.selectedChange.emit(date);
215
- }*/
216
- }
217
- /**
218
- * Change the pickerMoment value and switch to a specific view
219
- */
220
- goToDateInView(date, view) {
221
- this.handlePickerMomentChange(date);
222
- this.currentView = view;
223
- return;
224
- }
225
- /**
226
- * Change the pickerMoment value
227
- */
228
- handlePickerMomentChange(date) {
229
- this.pickerMoment = this.dateTimeAdapter.clampDate(date, this.minDate, this.maxDate);
230
- this.pickerMomentChange.emit(this.pickerMoment);
231
- return;
232
- }
233
- userSelected() {
234
- this.userSelection.emit();
235
- }
236
- /**
237
- * Whether the previous period button is enabled.
238
- */
239
- prevButtonEnabled() {
240
- return (!this.minDate || !this.isSameView(this.pickerMoment, this.minDate));
241
- }
242
- /**
243
- * Whether the next period button is enabled.
244
- */
245
- nextButtonEnabled() {
246
- return (!this.maxDate || !this.isSameView(this.pickerMoment, this.maxDate));
247
- }
248
- /**
249
- * Focus to the host element
250
- * */
251
- focusActiveCell() {
252
- this.ngZone.runOutsideAngular(() => {
253
- this.ngZone.onStable
254
- .asObservable()
255
- .pipe(take(1))
256
- .subscribe(() => {
257
- this.elmRef.nativeElement
258
- .querySelector('.owl-dt-calendar-cell-active')
259
- .focus();
260
- });
261
- });
262
- }
263
- selectYearInMultiYearView(normalizedYear) {
264
- this.yearSelected.emit(normalizedYear);
265
- }
266
- selectMonthInYearView(normalizedMonth) {
267
- this.monthSelected.emit(normalizedMonth);
268
- }
269
- /**
270
- * Whether the two dates represent the same view in the current view mode (month or year).
271
- */
272
- isSameView(date1, date2) {
273
- if (this._currentView === 'month') {
274
- return !!(date1 &&
275
- date2 &&
276
- this.dateTimeAdapter.getYear(date1) ===
277
- this.dateTimeAdapter.getYear(date2) &&
278
- this.dateTimeAdapter.getMonth(date1) ===
279
- this.dateTimeAdapter.getMonth(date2));
280
- }
281
- else if (this._currentView === 'year') {
282
- return !!(date1 &&
283
- date2 &&
284
- this.dateTimeAdapter.getYear(date1) ===
285
- this.dateTimeAdapter.getYear(date2));
286
- }
287
- else {
288
- return false;
289
- }
290
- }
291
- /**
292
- * Get a valid date object
293
- */
294
- getValidDate(obj) {
295
- return this.dateTimeAdapter.isDateInstance(obj) &&
296
- this.dateTimeAdapter.isValid(obj)
297
- ? obj
298
- : null;
299
- }
300
- }
301
- OwlCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", 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 });
302
- OwlCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: OwlCalendarComponent, selector: "owl-date-time-calendar", inputs: { dateFilter: "dateFilter", firstDayOfWeek: "firstDayOfWeek", minDate: "minDate", maxDate: "maxDate", 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.owl-dt-calendar": "this.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 class=\"owl-dt-control owl-dt-control-button owl-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=\"owl-dt-control-content owl-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=\"owl-dt-calendar-control-content\">\n <button class=\"owl-dt-control owl-dt-control-button owl-dt-control-period-button\"\n type=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"periodButtonLabel\"\n (click)=\"toggleViews()\">\n <span class=\"owl-dt-control-content owl-dt-control-button-content\"\n tabindex=\"-1\">\n {{periodButtonText}}\n\n <span class=\"owl-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\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 class=\"owl-dt-control owl-dt-control-button owl-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=\"owl-dt-control-content owl-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=\"owl-dt-calendar-main\"\n cdkMonitorSubtreeFocus\n [ngSwitch]=\"currentView\"\n tabindex=\"-1\">\n <owl-date-time-month-view *ngSwitchCase=\"'month'\"\n [pickerMoment]=\"pickerMoment\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [selectMode]=\"selectMode\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [dateFilter]=\"dateFilter\"\n [hideOtherMonths]=\"hideOtherMonths\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (selectedChange)=\"dateSelected($event)\"\n (userSelection)=\"userSelected()\"></owl-date-time-month-view>\n\n <owl-date-time-year-view *ngSwitchCase=\"'year'\"\n [pickerMoment]=\"pickerMoment\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [selectMode]=\"selectMode\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [dateFilter]=\"dateFilter\"\n (keyboardEnter)=\"focusActiveCell()\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (monthSelected)=\"selectMonthInYearView($event)\"\n (change)=\"goToDateInView($event, 'month')\"></owl-date-time-year-view>\n\n <owl-date-time-multi-year-view *ngSwitchCase=\"'multi-years'\"\n [pickerMoment]=\"pickerMoment\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [selectMode]=\"selectMode\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [dateFilter]=\"dateFilter\"\n (keyboardEnter)=\"focusActiveCell()\"\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\n (yearSelected)=\"selectYearInMultiYearView($event)\"\n (change)=\"goToDateInView($event, 'year')\"></owl-date-time-multi-year-view>\n</div>\n", styles: [""], components: [{ type: i3.OwlMonthViewComponent, selector: "owl-date-time-month-view", inputs: ["hideOtherMonths", "firstDayOfWeek", "selectMode", "selected", "selecteds", "pickerMoment", "dateFilter", "minDate", "maxDate"], outputs: ["selectedChange", "userSelection", "pickerMomentChange"], exportAs: ["owlYearView"] }, { type: i4.OwlYearViewComponent, selector: "owl-date-time-year-view", inputs: ["selectMode", "selected", "selecteds", "pickerMoment", "dateFilter", "minDate", "maxDate"], outputs: ["change", "monthSelected", "pickerMomentChange", "keyboardEnter"], exportAs: ["owlMonthView"] }, { type: i5.OwlMultiYearViewComponent, selector: "owl-date-time-multi-year-view", inputs: ["selectMode", "selected", "selecteds", "pickerMoment", "dateFilter", "minDate", "maxDate"], outputs: ["change", "yearSelected", "pickerMomentChange", "keyboardEnter"] }], directives: [{ type: i6.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"] }, { type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
303
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: OwlCalendarComponent, decorators: [{
304
- type: Component,
305
- args: [{
306
- selector: 'owl-date-time-calendar',
307
- exportAs: 'owlDateTimeCalendar',
308
- templateUrl: './calendar.component.html',
309
- styleUrls: ['./calendar.component.scss'],
310
- preserveWhitespaces: false,
311
- changeDetection: ChangeDetectionStrategy.OnPush
312
- }]
313
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.OwlDateTimeIntl }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i2.DateTimeAdapter, decorators: [{
314
- type: Optional
315
- }] }, { type: undefined, decorators: [{
316
- type: Optional
317
- }, {
318
- type: Inject,
319
- args: [OWL_DATE_TIME_FORMATS]
320
- }] }]; }, propDecorators: { dateFilter: [{
321
- type: Input
322
- }], firstDayOfWeek: [{
323
- type: Input
324
- }], minDate: [{
325
- type: Input
326
- }], maxDate: [{
327
- type: Input
328
- }], pickerMoment: [{
329
- type: Input
330
- }], selectMode: [{
331
- type: Input
332
- }], selected: [{
333
- type: Input
334
- }], selecteds: [{
335
- type: Input
336
- }], startView: [{
337
- type: Input
338
- }], hideOtherMonths: [{
339
- type: Input
340
- }], pickerMomentChange: [{
341
- type: Output
342
- }], selectedChange: [{
343
- type: Output
344
- }], userSelection: [{
345
- type: Output
346
- }], yearSelected: [{
347
- type: Output
348
- }], monthSelected: [{
349
- type: Output
350
- }], owlDTCalendarClass: [{
351
- type: HostBinding,
352
- args: ['class.owl-dt-calendar']
353
- }] } });
354
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LXBpY2stZGF0ZXRpbWUvc3JjL2xpYi9kYXRlLXRpbWUvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LXBpY2stZGF0ZXRpbWUvc3JjL2xpYi9kYXRlLXRpbWUvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyx1QkFBdUIsRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBNkIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM1TixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVyQyxPQUFPLEVBQXNCLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUE7Ozs7Ozs7OztBQVk5RixNQUFNLE9BQU8sb0JBQW9CO0lBbU83QixZQUNZLE1BQWtCLEVBQ2xCLFVBQTJCLEVBQzNCLE1BQWMsRUFDZCxLQUF3QixFQUNaLGVBQW1DLEVBRy9DLGVBQW1DO1FBUG5DLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDbEIsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ1osb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBRy9DLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQW5PL0M7O1dBRUc7UUFFSCxtQkFBYyxHQUFHLENBQUMsQ0FBQTtRQXNFVixlQUFVLEdBQVEsRUFBRSxDQUFBO1FBYTVCOztXQUVHO1FBRUgsY0FBUyxHQUFxQyxPQUFPLENB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RUFBRSwyQkFBMkI7b0JBQ3hDLFNBQVMsRUFBRSxDQUFDLDJCQUEyQixDQUFDO29CQUN4QyxtQkFBbUIsRUFBRSxLQUFLO29CQUMxQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7OzBCQXlPUSxRQUFROzswQkFDUixRQUFROzswQkFDUixNQUFNOzJCQUFDLHFCQUFxQjs0Q0FwT2pDLFVBQVU7c0JBRFQsS0FBSztnQkFPTixjQUFjO3NCQURiLEtBQUs7Z0JBTUYsT0FBTztzQkFEVixLQUFLO2dCQXFCRixPQUFPO3NCQURWLEtBQUs7Z0JBcUJGLFlBQVk7c0JBRGYsS0FBSztnQkFZTixVQUFVO3NCQURULEtBQUs7Z0JBTUYsUUFBUTtzQkFEWCxLQUFLO2dCQVlGLFNBQVM7c0JBRFosS0FBSztnQkFnQk4sU0FBUztzQkFEUixLQUFLO2dCQU9OLGVBQWU7c0JBRGQsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsY0FBYztzQkFEYixNQUFNO2dCQUtQLGFBQWE7c0JBRFosTUFBTTtnQkFPRSxZQUFZO3NCQURwQixNQUFNO2dCQU9FLGFBQWE7c0JBRHJCLE1BQU07Z0JBc0ZILGtCQUFrQjtzQkFEckIsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgTmdab25lLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgRGF0ZVRpbWVBZGFwdGVyIH0gZnJvbSAnLi4vLi4vY2xhc3MvZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnXG5pbXBvcnQgeyBPd2xEYXRlVGltZUZvcm1hdHMsIE9XTF9EQVRFX1RJTUVfRk9STUFUUyB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnXG5pbXBvcnQgeyBEYXRlRmlsdGVyLCBTZWxlY3RNb2RlIH0gZnJvbSAnLi4vLi4vY2xhc3MvZGF0ZS10aW1lLmNsYXNzJ1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVJbnRsIH0gZnJvbSAnLi4vZGF0ZS10aW1lLXBpY2tlci1pbnRsLnNlcnZpY2UnXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnb3dsLWRhdGUtdGltZS1jYWxlbmRhcicsXG4gICAgZXhwb3J0QXM6ICdvd2xEYXRlVGltZUNhbGVuZGFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgT3dsQ2FsZW5kYXJDb21wb25lbnQ8VD5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBEYXRlIGZpbHRlciBmb3IgdGhlIG1vbnRoIGFuZCB5ZWFyIHZpZXdcbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGF0ZUZpbHRlcjogRGF0ZUZpbHRlcjxUPlxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBmaXJzdCBkYXkgb2Ygd2Vla1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlyc3REYXlPZldlZWsgPSAwXG5cbiAgICAvKiogVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlLiAqL1xuICAgIHByaXZhdGUgX21pbkRhdGU6IFQgfCBudWxsXG4gICAgQElucHV0KClcbiAgICBnZXQgbWluRGF0ZSgpOiBUIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlXG4gICAgfVxuXG4gICAgc2V0IG1pbkRhdGUodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpXG4gICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpXG5cbiAgICAgICAgdGhpcy5fbWluRGF0ZSA9IHZhbHVlXG4gICAgICAgICAgICA/IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih2YWx1ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGxcbiAgICB9XG5cbiAgICAvKiogVGhlIG1heGltdW0gc2VsZWN0YWJsZSBkYXRlLiAqL1xuICAgIHByaXZhdGUgX21heERhdGU6IFQgfCBudWxsXG4gICAgQElucHV0KClcbiAgICBnZXQgbWF4RGF0ZSgpOiBUIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhEYXRlXG4gICAgfVxuXG4gICAgc2V0IG1heERhdGUodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpXG4gICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpXG5cbiAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IHZhbHVlXG4gICAgICAgICAgICA/IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih2YWx1ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGxcbiAgICB9XG5cbiAgICAvKiogVGhlIGN1cnJlbnQgcGlja2VyIG1vbWVudCAqL1xuICAgIHByaXZhdGUgX3BpY2tlck1vbWVudDogVFxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHBpY2tlck1vbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BpY2tlck1vbWVudFxuICAgIH1cblxuICAgIHNldCBwaWNrZXJNb21lbnQodmFsdWU6IFQpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSlcbiAgICAgICAgdGhpcy5fcGlja2VyTW9tZW50ID1cbiAgICAgICAgICAgIHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5ub3coKVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0TW9kZTogU2VsZWN0TW9kZVxuXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbW9tZW50LiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkOiBUIHwgbnVsbFxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNlbGVjdGVkKCk6IFQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkXG4gICAgfVxuXG4gICAgc2V0IHNlbGVjdGVkKHZhbHVlOiBUIHwgbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKVxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NlbGVjdGVkczogVFtdID0gW11cbiAgICBASW5wdXQoKVxuICAgIGdldCBzZWxlY3RlZHMoKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkc1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZHModmFsdWVzOiBUW10pIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRzID0gdmFsdWVzLm1hcCh2ID0+IHtcbiAgICAgICAgICAgIHYgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsaWREYXRlKHYpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHZpZXcgdGhhdCB0aGUgY2FsZW5kYXIgc2hvdWxkIHN0YXJ0IGluLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRWaWV3OiAnbW9udGgnIHwgJ3llYXInIHwgJ211bHRpLXllYXJzJyA9ICdtb250aCdcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gaGlkZSBkYXRlcyBpbiBvdGhlciBtb250aHMgYXQgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgY3VycmVudCBtb250aC5cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZU90aGVyTW9udGhzOiBib29sZWFuXG5cbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgY3VycmVudGx5IHBpY2tlciBtb21lbnQgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwaWNrZXJNb21lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KClcblxuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpXG5cbiAgICAvKiogRW1pdHMgd2hlbiBhbnkgZGF0ZSBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICB1c2VyU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB0aGUgc2VsZWN0ZWQgeWVhci4gVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlXG4gICAgICogKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB5ZWFyU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KClcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHRoZSBzZWxlY3RlZCBtb250aC4gVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlXG4gICAgICogKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBtb250aFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpXG5cbiAgICBnZXQgcGVyaW9kQnV0dG9uVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc01vbnRoVmlld1xuICAgICAgICAgICAgPyB0aGlzLmRhdGVUaW1lQWRhcHRlci5mb3JtYXQoXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnQsXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdHMubW9udGhZZWFyTGFiZWxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhck5hbWUodGhpcy5waWNrZXJNb21lbnQpXG4gICAgfVxuXG4gICAgZ2V0IHBlcmlvZEJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTW9udGhWaWV3XG4gICAgICAgICAgICA/IHRoaXMucGlja2VySW50bC5zd2l0Y2hUb011bHRpWWVhclZpZXdMYWJlbFxuICAgICAgICAgICAgOiB0aGlzLnBpY2tlckludGwuc3dpdGNoVG9Nb250aFZpZXdMYWJlbFxuICAgIH1cblxuICAgIGdldCBwcmV2QnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLnByZXZNb250aExhYmVsXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5wcmV2WWVhckxhYmVsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IG5leHRCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlckludGwubmV4dE1vbnRoTGFiZWxcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jdXJyZW50VmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLm5leHRZZWFyTGFiZWxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jdXJyZW50VmlldzogJ21vbnRoJyB8ICd5ZWFyJyB8ICdtdWx0aS15ZWFycydcbiAgICBnZXQgY3VycmVudFZpZXcoKTogJ21vbnRoJyB8ICd5ZWFyJyB8ICdtdWx0aS15ZWFycycge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFZpZXdcbiAgICB9XG5cbiAgICBzZXQgY3VycmVudFZpZXcodmlldzogJ21vbnRoJyB8ICd5ZWFyJyB8ICdtdWx0aS15ZWFycycpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFZpZXcgPSB2aWV3XG4gICAgICAgIHRoaXMubW92ZUZvY3VzT25OZXh0VGljayA9IHRydWVcbiAgICB9XG5cbiAgICBnZXQgaXNJblNpbmdsZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnXG4gICAgfVxuXG4gICAgZ2V0IGlzSW5SYW5nZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScgfHxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBnZXQgc2hvd0NvbnRyb2xBcnJvd3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmlldyAhPT0gJ211bHRpLXllYXJzJ1xuICAgIH1cblxuICAgIGdldCBpc01vbnRoVmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRWaWV3ID09PSAnbW9udGgnXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGF0ZSBmaWx0ZXIgZm9yIHRoZSBtb250aCBhbmQgeWVhciB2aWV3XG4gICAgICovXG4gICAgcHVibGljIGRhdGVGaWx0ZXJGb3JWaWV3cyA9IChkYXRlOiBUKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhIWRhdGUgJiZcbiAgICAgICAgICAgICghdGhpcy5kYXRlRmlsdGVyIHx8IHRoaXMuZGF0ZUZpbHRlcihkYXRlLCAnZGF0ZScpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLm1pbkRhdGUgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGRhdGUsIHRoaXMubWluRGF0ZSkgPj0gMCkgJiZcbiAgICAgICAgICAgICghdGhpcy5tYXhEYXRlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZShkYXRlLCB0aGlzLm1heERhdGUpIDw9IDApXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGNsYXNzICdvd2wtZHQtY2FsZW5kYXInIHRvIGhvc3RcbiAgICAgKiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3Mub3dsLWR0LWNhbGVuZGFyJylcbiAgICBnZXQgb3dsRFRDYWxlbmRhckNsYXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHByaXZhdGUgaW50bENoYW5nZXNTdWIgPSBTdWJzY3JpcHRpb24uRU1QVFlcblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIHNjaGVkdWxpbmcgdGhhdCBmb2N1cyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIGFjdGl2ZSBjZWxsIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgICogV2UgbmVlZCB0byBzY2hlZHVsZSBpdCwgcmF0aGVyIHRoYW4gZG8gaXQgaW1tZWRpYXRlbHksIGJlY2F1c2Ugd2UgaGF2ZSB0byB3YWl0XG4gICAgICogZm9yIEFuZ3VsYXIgdG8gcmUtZXZhbHVhdGUgdGhlIHZpZXcgY2hpbGRyZW4uXG4gICAgICovXG4gICAgcHJpdmF0ZSBtb3ZlRm9jdXNPbk5leHRUaWNrID0gZmFsc2VcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsbVJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBwaWNrZXJJbnRsOiBPd2xEYXRlVGltZUludGwsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRhdGVUaW1lQWRhcHRlcjogRGF0ZVRpbWVBZGFwdGVyPFQ+LFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KE9XTF9EQVRFX1RJTUVfRk9STUFUUylcbiAgICAgICAgcHJpdmF0ZSBkYXRlVGltZUZvcm1hdHM6IE93bERhdGVUaW1lRm9ybWF0c1xuICAgICkge1xuICAgICAgICB0aGlzLmludGxDaGFuZ2VzU3ViID0gdGhpcy5waWNrZXJJbnRsLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKClcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7IH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWaWV3ID0gdGhpcy5zdGFydFZpZXdcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBpZiAodGhpcy5tb3ZlRm9jdXNPbk5leHRUaWNrKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVGb2N1c09uTmV4dFRpY2sgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZUNlbGwoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmludGxDaGFuZ2VzU3ViLnVuc3Vic2NyaWJlKClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgYmV0d2VlbiBtb250aCB2aWV3IGFuZCB5ZWFyIHZpZXdcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlVmlld3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudFZpZXcgPVxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFZpZXcgPT0gJ21vbnRoJyA/ICdtdWx0aS15ZWFycycgOiAnbW9udGgnXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyB1c2VyIGNsaWNrcyBvbiB0aGUgcHJldmlvdXMgYnV0dG9uLlxuICAgICAqICovXG4gICAgcHVibGljIHByZXZpb3VzQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnQgPSB0aGlzLmlzTW9udGhWaWV3XG4gICAgICAgICAgICA/IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMucGlja2VyTW9tZW50LCAtMSlcbiAgICAgICAgICAgIDogdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLnBpY2tlck1vbWVudCwgLTEpXG5cbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdCh0aGlzLnBpY2tlck1vbWVudClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHVzZXIgY2xpY2tzIG9uIHRoZSBuZXh0IGJ1dHRvbi5cbiAgICAgKiAqL1xuICAgIHB1YmxpYyBuZXh0Q2xpY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnQgPSB0aGlzLmlzTW9udGhWaWV3XG4gICAgICAgICAgICA/IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMucGlja2VyTW9tZW50LCAxKVxuICAgICAgICAgICAgOiB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMucGlja2VyTW9tZW50LCAxKVxuXG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQodGhpcy5waWNrZXJNb21lbnQpXG4gICAgfVxuXG4gICAgcHVibGljIGRhdGVTZWxlY3RlZChkYXRlOiBUKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kYXRlRmlsdGVyRm9yVmlld3MoZGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KGRhdGUpXG5cbiAgICAgICAgLyppZiAoKHRoaXMuaXNJblNpbmdsZU1vZGUgJiYgIXRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzU2FtZURheShkYXRlLCB0aGlzLnNlbGVjdGVkKSkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNJblJhbmdlTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KGRhdGUpO1xuICAgICAgICB9Ki9cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIHBpY2tlck1vbWVudCB2YWx1ZSBhbmQgc3dpdGNoIHRvIGEgc3BlY2lmaWMgdmlld1xuICAgICAqL1xuICAgIHB1YmxpYyBnb1RvRGF0ZUluVmlldyhcbiAgICAgICAgZGF0ZTogVCxcbiAgICAgICAgdmlldzogJ21vbnRoJyB8ICd5ZWFyJyB8ICdtdWx0aS15ZWFycydcbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYW5kbGVQaWNrZXJNb21lbnRDaGFuZ2UoZGF0ZSlcbiAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHZpZXdcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSBwaWNrZXJNb21lbnQgdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlUGlja2VyTW9tZW50Q2hhbmdlKGRhdGU6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbGFtcERhdGUoXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgdGhpcy5taW5EYXRlLFxuICAgICAgICAgICAgdGhpcy5tYXhEYXRlXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdCh0aGlzLnBpY2tlck1vbWVudClcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcHVibGljIHVzZXJTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51c2VyU2VsZWN0aW9uLmVtaXQoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHByZXZpb3VzIHBlcmlvZCBidXR0b24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHJldkJ1dHRvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhdGhpcy5taW5EYXRlIHx8ICF0aGlzLmlzU2FtZVZpZXcodGhpcy5waWNrZXJNb21lbnQsIHRoaXMubWluRGF0ZSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG5leHQgcGVyaW9kIGJ1dHRvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0QnV0dG9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICF0aGlzLm1heERhdGUgfHwgIXRoaXMuaXNTYW1lVmlldyh0aGlzLnBpY2tlck1vbWVudCwgdGhpcy5tYXhEYXRlKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXMgdG8gdGhlIGhvc3QgZWxlbWVudFxuICAgICAqICovXG4gICAgcHVibGljIGZvY3VzQWN0aXZlQ2VsbCgpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAucXVlcnlTZWxlY3RvcignLm93bC1kdC1jYWxlbmRhci1jZWxsLWFjdGl2ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdFllYXJJbk11bHRpWWVhclZpZXcobm9ybWFsaXplZFllYXI6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy55ZWFyU2VsZWN0ZWQuZW1pdChub3JtYWxpemVkWWVhcilcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0TW9udGhJblllYXJWaWV3KG5vcm1hbGl6ZWRNb250aDogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vbnRoU2VsZWN0ZWQuZW1pdChub3JtYWxpemVkTW9udGgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdHdvIGRhdGVzIHJlcHJlc2VudCB0aGUgc2FtZSB2aWV3IGluIHRoZSBjdXJyZW50IHZpZXcgbW9kZSAobW9udGggb3IgeWVhcikuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc1NhbWVWaWV3KGRhdGUxOiBULCBkYXRlMjogVCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICAgICAgICBkYXRlMSAmJlxuICAgICAgICAgICAgICAgIGRhdGUyICYmXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlMSkgPT09XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlMikgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aChkYXRlMSkgPT09XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZTIpXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgcmV0dXJuICEhKFxuICAgICAgICAgICAgICAgIGRhdGUxICYmXG4gICAgICAgICAgICAgICAgZGF0ZTIgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGUxKSA9PT1cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGUyKVxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSB2YWxpZCBkYXRlIG9iamVjdFxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0VmFsaWREYXRlKG9iajogYW55KTogVCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNEYXRlSW5zdGFuY2Uob2JqKSAmJlxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChvYmopXG4gICAgICAgICAgICA/IG9ialxuICAgICAgICAgICAgOiBudWxsXG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm93bC1kdC1jYWxlbmRhci1jb250cm9sXCI+XG4gICAgPCEtLSBmb2N1cyB3aGVuIGtleWJvYXJkIHRhYiAoaHR0cDovL2tpenUucnUvZW4vYmxvZy9rZXlib2FyZC1vbmx5LWZvY3VzLyN4KSAtLT5cbiAgICA8YnV0dG9uIGNsYXNzPVwib3dsLWR0LWNvbnRyb2wgb3dsLWR0LWNvbnRyb2wtYnV0dG9uIG93bC1kdC1jb250cm9sLWFycm93LWJ1dHRvblwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG93Q29udHJvbEFycm93cz8gJ3Zpc2libGUnOiAnaGlkZGVuJ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhcHJldkJ1dHRvbkVuYWJsZWQoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJldkJ1dHRvbkxhYmVsXCJcbiAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzQ2xpY2tlZCgpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwib3dsLWR0LWNvbnRyb2wtY29udGVudCBvd2wtZHQtY29udHJvbC1idXR0b24tY29udGVudFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICA8IS0tIDxlZGl0b3ItZm9sZCBkZXNjPVwiU1ZHIEFycm93IExlZnRcIj4gLS0+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG4gICAgICAgICAgICAgICAgdmVyc2lvbj1cIjEuMVwiXG4gICAgICAgICAgICAgICAgeD1cIjBweFwiXG4gICAgICAgICAgICAgICAgeT1cIjBweFwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNTAuNzM4IDI1MC43MzhcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAuNzM4IDI1MC43Mzg7XCJcbiAgICAgICAgICAgICAgICB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMDAlXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3R5bGU9XCJmaWxsLXJ1bGU6IGV2ZW5vZGQ7IGNsaXAtcnVsZTogZXZlbm9kZDtcIlxuICAgICAgICAgICAgICAgICAgICBkPVwiTTk2LjYzMywxMjUuMzY5bDk1LjA1My05NC41MzNjNy4xMDEtNy4wNTUsNy4xMDEtMTguNDkyLDAtMjUuNTQ2ICAgYy03LjEtNy4wNTQtMTguNjEzLTcuMDU0LTI1LjcxNCwwTDU4Ljk4OSwxMTEuNjg5Yy0zLjc4NCwzLjc1OS01LjQ4Nyw4Ljc1OS01LjIzOCwxMy42OGMtMC4yNDksNC45MjIsMS40NTQsOS45MjEsNS4yMzgsMTMuNjgxICAgbDEwNi45ODMsMTA2LjM5OGM3LjEwMSw3LjA1NSwxOC42MTMsNy4wNTUsMjUuNzE0LDBjNy4xMDEtNy4wNTQsNy4xMDEtMTguNDkxLDAtMjUuNTQ0TDk2LjYzMywxMjUuMzY5elwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwhLS0gPC9lZGl0b3ItZm9sZD4gLS0+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwib3dsLWR0LWNhbGVuZGFyLWNvbnRyb2wtY29udGVudFwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwib3dsLWR0LWNvbnRyb2wgb3dsLWR0LWNvbnRyb2wtYnV0dG9uIG93bC1kdC1jb250cm9sLXBlcmlvZC1idXR0b25cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwZXJpb2RCdXR0b25MYWJlbFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlVmlld3MoKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvd2wtZHQtY29udHJvbC1jb250ZW50IG93bC1kdC1jb250cm9sLWJ1dHRvbi1jb250ZW50XCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAge3twZXJpb2RCdXR0b25UZXh0fX1cblxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3dsLWR0LWNvbnRyb2wtYnV0dG9uLWFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCIncm90YXRlKCcgKyAoaXNNb250aFZpZXc/IDAgOiAxODApICsnZGVnKSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZWRpdG9yLWZvbGQgZGVzYz1cIlNWRyBBcnJvd1wiPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHg9XCIwcHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgeT1cIjBweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjUwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI1MCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyOTIuMzYyIDI5Mi4zNjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDI5Mi4zNjIgMjkyLjM2MjtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgeG1sOnNwYWNlPVwicHJlc2VydmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjg2LjkzNSw2OS4zNzdjLTMuNjE0LTMuNjE3LTcuODk4LTUuNDI0LTEyLjg0OC01LjQyNEgxOC4yNzRjLTQuOTUyLDAtOS4yMzMsMS44MDctMTIuODUsNS40MjRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzEuODA3LDcyLjk5OCwwLDc3LjI3OSwwLDgyLjIyOGMwLDQuOTQ4LDEuODA3LDkuMjI5LDUuNDI0LDEyLjg0N2wxMjcuOTA3LDEyNy45MDdjMy42MjEsMy42MTcsNy45MDIsNS40MjgsMTIuODUsNS40MjhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczkuMjMzLTEuODExLDEyLjg0Ny01LjQyOEwyODYuOTM1LDk1LjA3NGMzLjYxMy0zLjYxNyw1LjQyNy03Ljg5OCw1LjQyNy0xMi44NDdDMjkyLjM2Miw3Ny4yNzksMjkwLjU0OCw3Mi45OTgsMjg2LjkzNSw2OS4zNzd6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPC9lZGl0b3ItZm9sZD4gLS0+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIGNsYXNzPVwib3dsLWR0LWNvbnRyb2wgb3dsLWR0LWNvbnRyb2wtYnV0dG9uIG93bC1kdC1jb250cm9sLWFycm93LWJ1dHRvblwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG93Q29udHJvbEFycm93cz8gJ3Zpc2libGUnOiAnaGlkZGVuJ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhbmV4dEJ1dHRvbkVuYWJsZWQoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibmV4dEJ1dHRvbkxhYmVsXCJcbiAgICAgICAgKGNsaWNrKT1cIm5leHRDbGlja2VkKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJvd2wtZHQtY29udHJvbC1jb250ZW50IG93bC1kdC1jb250cm9sLWJ1dHRvbi1jb250ZW50XCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgIDwhLS0gPGVkaXRvci1mb2xkIGRlc2M9XCJTVkcgQXJyb3cgUmlnaHRcIj4gLS0+XG4gICAgICAgICAgICA8c3ZnIHZlcnNpb249XCIxLjFcIlxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG4gICAgICAgICAgICAgICAgeD1cIjBweFwiXG4gICAgICAgICAgICAgICAgeT1cIjBweFwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNTAuNzM4IDI1MC43MzhcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAuNzM4IDI1MC43Mzg7XCJcbiAgICAgICAgICAgICAgICB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIHN0eWxlPVwiZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7XCJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOTEuNzUsMTExLjY4OUw4NC43NjYsNS4yOTFjLTcuMS03LjA1NS0xOC42MTMtNy4wNTUtMjUuNzEzLDBcbiAgICAgICAgICAgICAgICAgICAgYy03LjEwMSw3LjA1NC03LjEwMSwxOC40OSwwLDI1LjU0NGw5NS4wNTMsOTQuNTM0bC05NS4wNTMsOTQuNTMzYy03LjEwMSw3LjA1NC03LjEwMSwxOC40OTEsMCwyNS41NDVcbiAgICAgICAgICAgICAgICAgICAgYzcuMSw3LjA1NCwxOC42MTMsNy4wNTQsMjUuNzEzLDBMMTkxLjc1LDEzOS4wNWMzLjc4NC0zLjc1OSw1LjQ4Ny04Ljc1OSw1LjIzOC0xMy42ODFcbiAgICAgICAgICAgICAgICAgICAgQzE5Ny4yMzcsMTIwLjQ0NywxOTUuNTM0LDExNS40NDgsMTkxLjc1LDExMS42ODl6XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPCEtLSA8L2VkaXRvci1mb2xkPiAtLT5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwib3dsLWR0LWNhbGVuZGFyLW1haW5cIlxuICAgIGNka01vbml0b3JTdWJ0cmVlRm9jdXNcbiAgICBbbmdTd2l0Y2hdPVwiY3VycmVudFZpZXdcIlxuICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICA8b3dsLWRhdGUtdGltZS1tb250aC12aWV3ICpuZ1N3aXRjaENhc2U9XCInbW9udGgnXCJcbiAgICAgICAgW3BpY2tlck1vbWVudF09XCJwaWNrZXJNb21lbnRcIlxuICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiZmlyc3REYXlPZldlZWtcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgICAgICBbc2VsZWN0ZWRzXT1cInNlbGVjdGVkc1wiXG4gICAgICAgIFtzZWxlY3RNb2RlXT1cInNlbGVjdE1vZGVcIlxuICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICBbaGlkZU90aGVyTW9udGhzXT1cImhpZGVPdGhlck1vbnRoc1wiXG4gICAgICAgIChwaWNrZXJNb21lbnRDaGFuZ2UpPVwiaGFuZGxlUGlja2VyTW9tZW50Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiZGF0ZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAodXNlclNlbGVjdGlvbik9XCJ1c2VyU2VsZWN0ZWQoKVwiPjwvb3dsLWRhdGUtdGltZS1tb250aC12aWV3PlxuXG4gICAgPG93bC1kYXRlLXRpbWUteWVhci12aWV3ICpuZ1N3aXRjaENhc2U9XCIneWVhcidcIlxuICAgICAgICBbcGlja2VyTW9tZW50XT1cInBpY2tlck1vbWVudFwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICAgIFtzZWxlY3RlZHNdPVwic2VsZWN0ZWRzXCJcbiAgICAgICAgW3NlbGVjdE1vZGVdPVwic2VsZWN0TW9kZVwiXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiXG4gICAgICAgIChrZXlib2FyZEVudGVyKT1cImZvY3VzQWN0aXZlQ2VsbCgpXCJcbiAgICAgICAgKHBpY2tlck1vbWVudENoYW5nZSk9XCJoYW5kbGVQaWNrZXJNb21lbnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChtb250aFNlbGVjdGVkKT1cInNlbGVjdE1vbnRoSW5ZZWFyVmlldygkZXZlbnQpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJnb1RvRGF0ZUluVmlldygkZXZlbnQsICdtb250aCcpXCI+PC9vd2wtZGF0ZS10aW1lLXllYXItdmlldz5cblxuICAgIDxvd2wtZGF0ZS10aW1lLW11bHRpLXllYXItdmlldyAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXllYXJzJ1wiXG4gICAgICAgIFtwaWNrZXJNb21lbnRdPVwicGlja2VyTW9tZW50XCJcbiAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkXCJcbiAgICAgICAgW3NlbGVjdGVkc109XCJzZWxlY3RlZHNcIlxuICAgICAgICBbc2VsZWN0TW9kZV09XCJzZWxlY3RNb2RlXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyXCJcbiAgICAgICAgKGtleWJvYXJkRW50ZXIpPVwiZm9jdXNBY3RpdmVDZWxsKClcIlxuICAgICAgICAocGlja2VyTW9tZW50Q2hhbmdlKT1cImhhbmRsZVBpY2tlck1vbWVudENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJzZWxlY3RZZWFySW5NdWx0aVllYXJWaWV3KCRldmVudClcIlxuICAgICAgICAoY2hhbmdlKT1cImdvVG9EYXRlSW5WaWV3KCRldmVudCwgJ3llYXInKVwiPjwvb3dsLWRhdGUtdGltZS1tdWx0aS15ZWFyLXZpZXc+XG48L2Rpdj5cbiJdfQ==
@@ -1,153 +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
- export class OwlCalendarBodyComponent {
16
- constructor(elmRef, ngZone) {
17
- this.elmRef = elmRef;
18
- this.ngZone = ngZone;
19
- /**
20
- * The cell number of the active cell in the table.
21
- */
22
- this.activeCell = 0;
23
- /**
24
- * The number of columns in the table.
25
- * */
26
- this.numCols = 7;
27
- /**
28
- * The ratio (width / height) to use for the cells in the table.
29
- */
30
- this.cellRatio = 1;
31
- /**
32
- * Emit when a calendar cell is selected
33
- * */
34
- this.select = new EventEmitter();
35
- }
36
- get owlDTCalendarBodyClass() {
37
- return true;
38
- }
39
- get isInSingleMode() {
40
- return this.selectMode === 'single';
41
- }
42
- get isInRangeMode() {
43
- return (this.selectMode === 'range' ||
44
- this.selectMode === 'rangeFrom' ||
45
- this.selectMode === 'rangeTo');
46
- }
47
- ngOnInit() { }
48
- selectCell(cell) {
49
- this.select.emit(cell);
50
- }
51
- isActiveCell(rowIndex, colIndex) {
52
- const cellNumber = rowIndex * this.numCols + colIndex;
53
- return cellNumber === this.activeCell;
54
- }
55
- /**
56
- * Check if the cell is selected
57
- */
58
- isSelected(value) {
59
- if (!this.selectedValues || this.selectedValues.length === 0) {
60
- return false;
61
- }
62
- if (this.isInSingleMode) {
63
- return value === this.selectedValues[0];
64
- }
65
- if (this.isInRangeMode) {
66
- const fromValue = this.selectedValues[0];
67
- const toValue = this.selectedValues[1];
68
- return value === fromValue || value === toValue;
69
- }
70
- }
71
- /**
72
- * Check if the cell in the range
73
- * */
74
- isInRange(value) {
75
- if (this.isInRangeMode) {
76
- const fromValue = this.selectedValues[0];
77
- const toValue = this.selectedValues[1];
78
- if (fromValue !== null && toValue !== null) {
79
- return value >= fromValue && value <= toValue;
80
- }
81
- else {
82
- return value === fromValue || value === toValue;
83
- }
84
- }
85
- }
86
- /**
87
- * Check if the cell is the range from
88
- * */
89
- isRangeFrom(value) {
90
- if (this.isInRangeMode) {
91
- const fromValue = this.selectedValues[0];
92
- return fromValue !== null && value === fromValue;
93
- }
94
- }
95
- /**
96
- * Check if the cell is the range to
97
- * */
98
- isRangeTo(value) {
99
- if (this.isInRangeMode) {
100
- const toValue = this.selectedValues[1];
101
- return toValue !== null && value === toValue;
102
- }
103
- }
104
- /**
105
- * Focus to a active cell
106
- * */
107
- focusActiveCell() {
108
- this.ngZone.runOutsideAngular(() => {
109
- this.ngZone.onStable
110
- .asObservable()
111
- .pipe(take(1))
112
- .subscribe(() => {
113
- this.elmRef.nativeElement
114
- .querySelector('.owl-dt-calendar-cell-active')
115
- .focus();
116
- });
117
- });
118
- }
119
- }
120
- OwlCalendarBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: OwlCalendarBodyComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
121
- OwlCalendarBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: OwlCalendarBodyComponent, selector: "[owl-date-time-calendar-body]", inputs: { activeCell: "activeCell", rows: "rows", numCols: "numCols", cellRatio: "cellRatio", todayValue: "todayValue", selectedValues: "selectedValues", selectMode: "selectMode" }, outputs: { select: "select" }, host: { properties: { "class.owl-dt-calendar-body": "this.owlDTCalendarBodyClass" } }, exportAs: ["owlDateTimeCalendarBody"], 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=\"owl-dt-calendar-cell {{item.cellClass}}\"\n [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.owl-dt-calendar-cell-active]=\"isActiveCell(rowIndex, colIndex)\"\n [class.owl-dt-calendar-cell-disabled]=\"!item.enabled\"\n [class.owl-dt-calendar-cell-in-range]=\"isInRange(item.value)\"\n [class.owl-dt-calendar-cell-range-from]=\"isRangeFrom(item.value)\"\n [class.owl-dt-calendar-cell-range-to]=\"isRangeTo(item.value)\"\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=\"owl-dt-calendar-cell-content\"\n [ngClass]=\"{\n 'owl-dt-calendar-cell-out': item.out,\n 'owl-dt-calendar-cell-today': item.value === todayValue,\n 'owl-dt-calendar-cell-selected': isSelected(item.value)\n }\">\n {{item.displayValue}}\n </span>\n </td>\n</tr>\n", styles: [""], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
122
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: OwlCalendarBodyComponent, decorators: [{
123
- type: Component,
124
- args: [{
125
- // tslint:disable-next-line:component-selector
126
- selector: '[owl-date-time-calendar-body]',
127
- exportAs: 'owlDateTimeCalendarBody',
128
- templateUrl: './calendar-body.component.html',
129
- styleUrls: ['./calendar-body.component.scss'],
130
- preserveWhitespaces: false,
131
- changeDetection: ChangeDetectionStrategy.OnPush
132
- }]
133
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { activeCell: [{
134
- type: Input
135
- }], rows: [{
136
- type: Input
137
- }], numCols: [{
138
- type: Input
139
- }], cellRatio: [{
140
- type: Input
141
- }], todayValue: [{
142
- type: Input
143
- }], selectedValues: [{
144
- type: Input
145
- }], selectMode: [{
146
- type: Input
147
- }], select: [{
148
- type: Output
149
- }], owlDTCalendarBodyClass: [{
150
- type: HostBinding,
151
- args: ['class.owl-dt-calendar-body']
152
- }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtcGljay1kYXRldGltZS9zcmMvbGliL2RhdGUtdGltZS9jYWxlbmRhci1ib2R5L2NhbGVuZGFyLWJvZHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LXBpY2stZGF0ZXRpbWUvc3JjL2xpYi9kYXRlLXRpbWUvY2FsZW5kYXItYm9keS9jYWxlbmRhci1ib2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQWtCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4SSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7OztBQUdyQyxNQUFNLE9BQU8sWUFBWTtJQUNyQixZQUNXLEtBQWEsRUFDYixZQUFvQixFQUNwQixTQUFpQixFQUNqQixPQUFnQixFQUNoQixNQUFlLEtBQUssRUFDcEIsWUFBb0IsRUFBRTtRQUx0QixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLFFBQUcsR0FBSCxHQUFHLENBQWlCO1FBQ3BCLGNBQVMsR0FBVCxTQUFTLENBQWE7SUFDN0IsQ0FBQztDQUNSO0FBV0QsTUFBTSxPQUFPLHdCQUF3QjtJQWtFakMsWUFBb0IsTUFBa0IsRUFBVSxNQUFjO1FBQTFDLFdBQU0sR0FBTixNQUFNLENBQVk7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBakU5RDs7V0FFRztRQUVILGVBQVUsR0FBRyxDQUFDLENBQUE7UUFRZDs7YUFFSztRQUVMLFlBQU8sR0FBRyxDQUFD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Q0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtpQkFDZixZQUFZLEVBQUU7aUJBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYTtxQkFDcEIsYUFBYSxDQUFDLDhCQUE4QixDQUFDO3FCQUM3QyxLQUFLLEVBQUUsQ0FBQTtZQUNoQixDQUFDLENBQUMsQ0FBQTtRQUNWLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzs7cUhBckpRLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLHdaQ3hCckMsMHhDQTBCQTsyRkRGYSx3QkFBd0I7a0JBVHBDLFNBQVM7bUJBQUM7b0JBQ1AsOENBQThDO29CQUM5QyxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxXQUFXLEVBQUUsZ0NBQWdDO29CQUM3QyxTQUFTLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztvQkFDN0MsbUJBQW1CLEVBQUUsS0FBSztvQkFDMUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEO3NIQU1HLFVBQVU7c0JBRFQsS0FBSztnQkFPTixJQUFJO3NCQURILEtBQUs7Z0JBT04sT0FBTztzQkFETixLQUFLO2dCQU9OLFNBQVM7c0JBRFIsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBT04sY0FBYztzQkFEYixLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFPVSxNQUFNO3NCQURyQixNQUFNO2dCQUlILHNCQUFzQjtzQkFEekIsV0FBVzt1QkFBQyw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgTmdab25lLCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBTZWxlY3RNb2RlIH0gZnJvbSAnLi4vLi4vY2xhc3MvZGF0ZS10aW1lLmNsYXNzJ1xuXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDZWxsIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHZhbHVlOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBkaXNwbGF5VmFsdWU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGFyaWFMYWJlbDogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgZW5hYmxlZDogYm9vbGVhbixcbiAgICAgICAgcHVibGljIG91dDogYm9vbGVhbiA9IGZhbHNlLFxuICAgICAgICBwdWJsaWMgY2VsbENsYXNzOiBzdHJpbmcgPSAnJ1xuICAgICkgeyB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tvd2wtZGF0ZS10aW1lLWNhbGVuZGFyLWJvZHldJyxcbiAgICBleHBvcnRBczogJ293bERhdGVUaW1lQ2FsZW5kYXJCb2R5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItYm9keS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXItYm9keS5jb21wb25lbnQuc2NzcyddLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE93bENhbGVuZGFyQm9keUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICogVGhlIGNlbGwgbnVtYmVyIG9mIHRoZSBhY3RpdmUgY2VsbCBpbiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhY3RpdmVDZWxsID0gMFxuXG4gICAgLyoqXG4gICAgICogVGhlIGNlbGxzIHRvIGRpc3BsYXkgaW4gdGhlIHRhYmxlLlxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICByb3dzOiBDYWxlbmRhckNlbGxbXVtdXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHRhYmxlLlxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBudW1Db2xzID0gN1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJhdGlvICh3aWR0aCAvIGhlaWdodCkgdG8gdXNlIGZvciB0aGUgY2VsbHMgaW4gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2VsbFJhdGlvID0gMVxuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIGluIHRoZSB0YWJsZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRvZGF5LlxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICB0b2RheVZhbHVlOiBudW1iZXJcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBpbiB0aGUgdGFibGUgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkVmFsdWVzOiBudW1iZXJbXVxuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBwaWNrZXIgc2VsZWN0IG1vZGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdE1vZGU6IFNlbGVjdE1vZGVcblxuICAgIC8qKlxuICAgICAqIEVtaXQgd2hlbiBhIGNhbGVuZGFyIGNlbGwgaXMgc2VsZWN0ZWRcbiAgICAgKiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPENhbGVuZGFyQ2VsbD4oKVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtY2FsZW5kYXItYm9keScpXG4gICAgZ2V0IG93bERUQ2FsZW5kYXJCb2R5Q2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgZ2V0IGlzSW5TaW5nbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlID09PSAnc2luZ2xlJ1xuICAgIH1cblxuICAgIGdldCBpc0luUmFuZ2VNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nIHx8XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZVRvJ1xuICAgICAgICApXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbG1SZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHsgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkgeyB9XG5cbiAgICBwdWJsaWMgc2VsZWN0Q2VsbChjZWxsOiBDYWxlbmRhckNlbGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3QuZW1pdChjZWxsKVxuICAgIH1cblxuICAgIHB1YmxpYyBpc0FjdGl2ZUNlbGwocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjZWxsTnVtYmVyID0gcm93SW5kZXggKiB0aGlzLm51bUNvbHMgKyBjb2xJbmRleFxuICAgICAgICByZXR1cm4gY2VsbE51bWJlciA9PT0gdGhpcy5hY3RpdmVDZWxsXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGNlbGwgaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTZWxlY3RlZCh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFZhbHVlcyB8fCB0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0aGlzLnNlbGVjdGVkVmFsdWVzWzBdXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0luUmFuZ2VNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzBdXG4gICAgICAgICAgICBjb25zdCB0b1ZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlc1sxXVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IGZyb21WYWx1ZSB8fCB2YWx1ZSA9PT0gdG9WYWx1ZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGNlbGwgaW4gdGhlIHJhbmdlXG4gICAgICogKi9cbiAgICBwdWJsaWMgaXNJblJhbmdlKHZhbHVlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSkge1xuICAgICAgICAgICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlc1swXVxuICAgICAgICAgICAgY29uc3QgdG9WYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXNbMV1cblxuICAgICAgICAgICAgaWYgKGZyb21WYWx1ZSAhPT0gbnVsbCAmJiB0b1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID49IGZyb21WYWx1ZSAmJiB2YWx1ZSA8PSB0b1ZhbHVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gZnJvbVZhbHVlIHx8IHZhbHVlID09PSB0b1ZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgY2VsbCBpcyB0aGUgcmFuZ2UgZnJvbVxuICAgICAqICovXG4gICAgcHVibGljIGlzUmFuZ2VGcm9tKHZhbHVlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSkge1xuICAgICAgICAgICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlc1swXVxuICAgICAgICAgICAgcmV0dXJuIGZyb21WYWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSA9PT0gZnJvbVZhbHVlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgY2VsbCBpcyB0aGUgcmFuZ2UgdG9cbiAgICAgKiAqL1xuICAgIHB1YmxpYyBpc1JhbmdlVG8odmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pc0luUmFuZ2VNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCB0b1ZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlc1sxXVxuICAgICAgICAgICAgcmV0dXJuIHRvVmFsdWUgIT09IG51bGwgJiYgdmFsdWUgPT09IHRvVmFsdWVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvY3VzIHRvIGEgYWN0aXZlIGNlbGxcbiAgICAgKiAqL1xuICAgIHB1YmxpYyBmb2N1c0FjdGl2ZUNlbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbG1SZWYubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5vd2wtZHQtY2FsZW5kYXItY2VsbC1hY3RpdmUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cbn1cbiIsIjx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3M7IGxldCByb3dJbmRleCA9IGluZGV4XCJcbiAgICByb2xlPVwicm93XCI+XG4gICAgPHRkICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJvdzsgbGV0IGNvbEluZGV4ID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cIm93bC1kdC1jYWxlbmRhci1jZWxsIHt7aXRlbS5jZWxsQ2xhc3N9fVwiXG4gICAgICAgIFt0YWJpbmRleF09XCJpc0FjdGl2ZUNlbGwocm93SW5kZXgsIGNvbEluZGV4KSA/IDAgOiAtMVwiXG4gICAgICAgIFtjbGFzcy5vd2wtZHQtY2FsZW5kYXItY2VsbC1hY3RpdmVdPVwiaXNBY3RpdmVDZWxsKHJvd0luZGV4LCBjb2xJbmRleClcIlxuICAgICAgICBbY2xhc3Mub3dsLWR0LWNhbGVuZGFyLWNlbGwtZGlzYWJsZWRdPVwiIWl0ZW0uZW5hYmxlZFwiXG4gICAgICAgIFtjbGFzcy5vd2wtZHQtY2FsZW5kYXItY2VsbC1pbi1yYW5nZV09XCJpc0luUmFuZ2UoaXRlbS52YWx1ZSlcIlxuICAgICAgICBbY2xhc3Mub3dsLWR0LWNhbGVuZGFyLWNlbGwtcmFuZ2UtZnJvbV09XCJpc1JhbmdlRnJvbShpdGVtLnZhbHVlKVwiXG4gICAgICAgIFtjbGFzcy5vd2wtZHQtY2FsZW5kYXItY2VsbC1yYW5nZS10b109XCJpc1JhbmdlVG8oaXRlbS52YWx1ZSlcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0uYXJpYUxhYmVsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCIhaXRlbS5lbmFibGVkIHx8IG51bGxcIlxuICAgICAgICBbc3R5bGUud2lkdGguJV09XCIxMDAgLyBudW1Db2xzXCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmdUb3AuJV09XCI1MCAqIGNlbGxSYXRpbyAvIG51bUNvbHNcIlxuICAgICAgICBbc3R5bGUucGFkZGluZ0JvdHRvbS4lXT1cIjUwICogY2VsbFJhdGlvIC8gbnVtQ29sc1wiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RDZWxsKGl0ZW0pXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwib3dsLWR0LWNhbGVuZGFyLWNlbGwtY29udGVudFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ293bC1kdC1jYWxlbmRhci1jZWxsLW91dCc6IGl0ZW0ub3V0LFxuICAgICAgICAgICAgICAgICdvd2wtZHQtY2FsZW5kYXItY2VsbC10b2RheSc6IGl0ZW0udmFsdWUgPT09IHRvZGF5VmFsdWUsXG4gICAgICAgICAgICAgICAgJ293bC1kdC1jYWxlbmRhci1jZWxsLXNlbGVjdGVkJzogaXNTZWxlY3RlZChpdGVtLnZhbHVlKVxuICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICB7e2l0ZW0uZGlzcGxheVZhbHVlfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvdGQ+XG48L3RyPlxuIl19