@netwin/angular-datetime-picker 19.0.0-rc.3 → 19.0.0-rc.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -1
- package/assets/style/picker.min.css +1 -1
- package/fesm2022/netwin-angular-datetime-picker.mjs +4178 -1486
- package/fesm2022/netwin-angular-datetime-picker.mjs.map +1 -1
- package/lib/date-time/adapter/date-time-adapter.class.d.ts +19 -9
- package/lib/date-time/adapter/date-time-format.class.d.ts +12 -8
- package/lib/date-time/adapter/native-date-time-adapter.class.d.ts +16 -5
- package/lib/date-time/adapter/native-date-time-format.class.d.ts +3 -0
- package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.d.ts +15 -4
- package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.d.ts +3 -0
- package/lib/date-time/calendar-body.component.d.ts +18 -13
- package/lib/date-time/calendar-month-view.component.d.ts +17 -12
- package/lib/date-time/calendar-multi-year-view.component.d.ts +12 -12
- package/lib/date-time/calendar-year-view.component.d.ts +7 -6
- package/lib/date-time/calendar.component.d.ts +37 -17
- package/lib/date-time/date-time-inline.component.d.ts +79 -156
- package/lib/date-time/date-time-picker-container.component.d.ts +131 -0
- package/lib/date-time/date-time-picker-input.directive.d.ts +172 -0
- package/lib/date-time/date-time-picker-intl.service.d.ts +6 -0
- package/lib/date-time/date-time-picker-trigger.directive.d.ts +23 -0
- package/lib/date-time/date-time-picker.animations.d.ts +8 -0
- package/lib/date-time/date-time-picker.component.d.ts +171 -0
- package/lib/date-time/date-time.class.d.ts +103 -0
- package/lib/date-time/date-time.module.d.ts +17 -11
- package/lib/date-time/numberedFixLen.pipe.d.ts +10 -0
- package/lib/date-time/timer-box.component.d.ts +4 -3
- package/lib/date-time/timer.component.d.ts +19 -16
- package/lib/dialog/dialog-config.class.d.ts +169 -0
- package/lib/dialog/dialog-container.component.d.ts +69 -0
- package/lib/dialog/dialog-ref.class.d.ts +51 -0
- package/lib/dialog/dialog.module.d.ts +11 -0
- package/lib/dialog/dialog.service.d.ts +76 -0
- package/lib/utils/index.d.ts +4 -0
- package/lib/utils/object.utils.d.ts +8 -0
- package/package.json +5 -7
- package/public_api.d.ts +16 -12
- package/esm2022/lib/date-time/adapter/date-time-adapter.class.mjs +0 -114
- package/esm2022/lib/date-time/adapter/date-time-format.class.mjs +0 -4
- package/esm2022/lib/date-time/adapter/native-date-time-adapter.class.mjs +0 -238
- package/esm2022/lib/date-time/adapter/native-date-time-format.class.mjs +0 -15
- package/esm2022/lib/date-time/adapter/native-date-time.module.mjs +0 -42
- package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.mjs +0 -215
- package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.mjs +0 -15
- package/esm2022/lib/date-time/calendar-body.component.mjs +0 -137
- package/esm2022/lib/date-time/calendar-month-view.component.mjs +0 -420
- package/esm2022/lib/date-time/calendar-multi-year-view.component.mjs +0 -360
- package/esm2022/lib/date-time/calendar-year-view.component.mjs +0 -354
- package/esm2022/lib/date-time/calendar.component.mjs +0 -357
- package/esm2022/lib/date-time/date-time-inline.component.mjs +0 -463
- package/esm2022/lib/date-time/date-time-picker-intl.service.mjs +0 -55
- package/esm2022/lib/date-time/date-time.module.mjs +0 -59
- package/esm2022/lib/date-time/options-provider.mjs +0 -34
- package/esm2022/lib/date-time/timer-box.component.mjs +0 -130
- package/esm2022/lib/date-time/timer.component.mjs +0 -280
- package/esm2022/lib/types/date-view.mjs +0 -19
- package/esm2022/lib/types/index.mjs +0 -4
- package/esm2022/lib/types/picker-type.mjs +0 -2
- package/esm2022/lib/types/select-mode.mjs +0 -2
- package/esm2022/lib/utils/array.utils.mjs +0 -5
- package/esm2022/lib/utils/constants.mjs +0 -31
- package/esm2022/lib/utils/date.utils.mjs +0 -46
- package/esm2022/netwin-angular-datetime-picker.mjs +0 -5
- package/esm2022/public_api.mjs +0 -23
- package/lib/types/date-view.d.ts +0 -17
- package/lib/types/index.d.ts +0 -3
- package/lib/types/picker-type.d.ts +0 -7
- package/lib/types/select-mode.d.ts +0 -8
|
@@ -1,463 +0,0 @@
|
|
|
1
|
-
import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, numberAttribute, Output } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { DateView } from '../types';
|
|
4
|
-
import { DateTimeAdapter } from './adapter/date-time-adapter.class';
|
|
5
|
-
import { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';
|
|
6
|
-
import { OwlDateTimeIntl } from './date-time-picker-intl.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "./timer.component";
|
|
9
|
-
import * as i2 from "./calendar.component";
|
|
10
|
-
const OWL_DATETIME_VALUE_ACCESSOR = {
|
|
11
|
-
provide: NG_VALUE_ACCESSOR,
|
|
12
|
-
useExisting: forwardRef(() => OwlDateTimeInlineComponent),
|
|
13
|
-
multi: true
|
|
14
|
-
};
|
|
15
|
-
let nextUniqueComponentId = 0;
|
|
16
|
-
export class OwlDateTimeInlineComponent {
|
|
17
|
-
#changeDetector;
|
|
18
|
-
#pickerIntl;
|
|
19
|
-
#dateTimeFormats;
|
|
20
|
-
#dateTimeAdapter;
|
|
21
|
-
get firstDayOfWeek() {
|
|
22
|
-
return this._firstDayOfWeek;
|
|
23
|
-
}
|
|
24
|
-
set firstDayOfWeek(value) {
|
|
25
|
-
value = numberAttribute(value, undefined);
|
|
26
|
-
if (value > 6 || value < 0) {
|
|
27
|
-
this._firstDayOfWeek = undefined;
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
this._firstDayOfWeek = value;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
get formatOptions() {
|
|
34
|
-
if (this.pickerType === 'both') {
|
|
35
|
-
return this.#dateTimeFormats.fullPickerInput;
|
|
36
|
-
}
|
|
37
|
-
if (this.pickerType === 'calendar') {
|
|
38
|
-
return this.#dateTimeFormats.datePickerInput;
|
|
39
|
-
}
|
|
40
|
-
return this.#dateTimeFormats.timePickerInput;
|
|
41
|
-
}
|
|
42
|
-
getValidDate(obj) {
|
|
43
|
-
return this.#dateTimeAdapter.isDateInstance(obj) && this.#dateTimeAdapter.isValid(obj) ? obj : null;
|
|
44
|
-
}
|
|
45
|
-
get startAt() {
|
|
46
|
-
if (this._startAt) {
|
|
47
|
-
return this._startAt;
|
|
48
|
-
}
|
|
49
|
-
if (this.selectMode === 'single') {
|
|
50
|
-
return this.value || null;
|
|
51
|
-
}
|
|
52
|
-
else if (this.selectMode === 'range' || this.selectMode === 'rangeFrom') {
|
|
53
|
-
return this.values[0] || null;
|
|
54
|
-
}
|
|
55
|
-
else if (this.selectMode === 'rangeTo') {
|
|
56
|
-
return this.values[1] || null;
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
set startAt(date) {
|
|
63
|
-
this._startAt = this.getValidDate(this.#dateTimeAdapter.deserialize(date));
|
|
64
|
-
}
|
|
65
|
-
get endAt() {
|
|
66
|
-
if (this._endAt) {
|
|
67
|
-
return this._endAt;
|
|
68
|
-
}
|
|
69
|
-
if (this.selectMode === 'single') {
|
|
70
|
-
return this.value || null;
|
|
71
|
-
}
|
|
72
|
-
else if (this.selectMode === 'range' || this.selectMode === 'rangeFrom') {
|
|
73
|
-
return this.values[1] || null;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
set endAt(date) {
|
|
80
|
-
this._endAt = this.getValidDate(this.#dateTimeAdapter.deserialize(date));
|
|
81
|
-
}
|
|
82
|
-
// TODO: remove this getter when `owlDateTimeFilter` is removed
|
|
83
|
-
get dateTimeFilterGetter() {
|
|
84
|
-
return this.dateTimeFilter || this.owlDateTimeFilter;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* The minimum valid date.
|
|
88
|
-
*/
|
|
89
|
-
get min() {
|
|
90
|
-
return this._min || null;
|
|
91
|
-
}
|
|
92
|
-
set min(value) {
|
|
93
|
-
this._min = this.getValidDate(this.#dateTimeAdapter.deserialize(value));
|
|
94
|
-
this.#changeDetector.markForCheck();
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* The maximum valid date.
|
|
98
|
-
*/
|
|
99
|
-
get max() {
|
|
100
|
-
return this._max || null;
|
|
101
|
-
}
|
|
102
|
-
set max(value) {
|
|
103
|
-
this._max = this.getValidDate(this.#dateTimeAdapter.deserialize(value));
|
|
104
|
-
this.#changeDetector.markForCheck();
|
|
105
|
-
}
|
|
106
|
-
get value() {
|
|
107
|
-
return this._value;
|
|
108
|
-
}
|
|
109
|
-
set value(value) {
|
|
110
|
-
value = this.#dateTimeAdapter.deserialize(value);
|
|
111
|
-
value = this.getValidDate(value);
|
|
112
|
-
this._value = value;
|
|
113
|
-
this.selected = value;
|
|
114
|
-
}
|
|
115
|
-
get values() {
|
|
116
|
-
return this._values;
|
|
117
|
-
}
|
|
118
|
-
set values(values) {
|
|
119
|
-
if (values && values.length > 0) {
|
|
120
|
-
values = values.map((v) => {
|
|
121
|
-
v = this.#dateTimeAdapter.deserialize(v);
|
|
122
|
-
v = this.getValidDate(v);
|
|
123
|
-
return v ? this.#dateTimeAdapter.clone(v) : null;
|
|
124
|
-
});
|
|
125
|
-
this._values = [...values];
|
|
126
|
-
this.selecteds = [...values];
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
this._values = [];
|
|
130
|
-
this.selecteds = [];
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
get selected() {
|
|
134
|
-
return this._selected;
|
|
135
|
-
}
|
|
136
|
-
set selected(value) {
|
|
137
|
-
this._selected = value;
|
|
138
|
-
this.#changeDetector.markForCheck();
|
|
139
|
-
}
|
|
140
|
-
get selecteds() {
|
|
141
|
-
return this._selecteds;
|
|
142
|
-
}
|
|
143
|
-
set selecteds(values) {
|
|
144
|
-
this._selecteds = values;
|
|
145
|
-
this.#changeDetector.markForCheck();
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Returns whether the picker is in single mode
|
|
149
|
-
*/
|
|
150
|
-
get isInSingleMode() {
|
|
151
|
-
return this.selectMode === 'single';
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Returns whether the picker is in range mode (range, rangeFrom, rangeTo)
|
|
155
|
-
*/
|
|
156
|
-
get isInRangeMode() {
|
|
157
|
-
return this.selectMode === 'range' || this.selectMode === 'rangeFrom' || this.selectMode === 'rangeTo';
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* The range 'from' label
|
|
161
|
-
*/
|
|
162
|
-
get fromLabel() {
|
|
163
|
-
return this.#pickerIntl.rangeFromLabel;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* The range 'to' label
|
|
167
|
-
*/
|
|
168
|
-
get toLabel() {
|
|
169
|
-
return this.#pickerIntl.rangeToLabel;
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* The range 'from' formatted value
|
|
173
|
-
*/
|
|
174
|
-
get fromFormattedValue() {
|
|
175
|
-
const value = this.selecteds[0];
|
|
176
|
-
return value ? this.#dateTimeAdapter.format(value, this.formatOptions) : '';
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* The range 'to' formatted value
|
|
180
|
-
*/
|
|
181
|
-
get toFormattedValue() {
|
|
182
|
-
const value = this.selecteds[1];
|
|
183
|
-
return value ? this.#dateTimeAdapter.format(value, this.formatOptions) : '';
|
|
184
|
-
}
|
|
185
|
-
constructor() {
|
|
186
|
-
this.#changeDetector = inject(ChangeDetectorRef);
|
|
187
|
-
this.#pickerIntl = inject(OwlDateTimeIntl);
|
|
188
|
-
this.#dateTimeFormats = inject(OWL_DATE_TIME_FORMATS, { optional: true });
|
|
189
|
-
this.#dateTimeAdapter = inject(DateTimeAdapter, { optional: true });
|
|
190
|
-
/**
|
|
191
|
-
* Whether the timer is in hour12 format
|
|
192
|
-
*/
|
|
193
|
-
this.hour12Timer = false;
|
|
194
|
-
/**
|
|
195
|
-
* The view that the calendar should start in.
|
|
196
|
-
*/
|
|
197
|
-
this.startView = DateView.MONTH;
|
|
198
|
-
/**
|
|
199
|
-
* Whether to should only the year and multi-year views.
|
|
200
|
-
*/
|
|
201
|
-
this.yearOnly = false;
|
|
202
|
-
/**
|
|
203
|
-
* Whether to should only the multi-year view.
|
|
204
|
-
*/
|
|
205
|
-
this.multiyearOnly = false;
|
|
206
|
-
/**
|
|
207
|
-
* Hours to change per step
|
|
208
|
-
*/
|
|
209
|
-
this.stepHour = 1;
|
|
210
|
-
/**
|
|
211
|
-
* Minutes to change per step
|
|
212
|
-
*/
|
|
213
|
-
this.stepMinute = 1;
|
|
214
|
-
/**
|
|
215
|
-
* Seconds to change per step
|
|
216
|
-
*/
|
|
217
|
-
this.stepSecond = 1;
|
|
218
|
-
/**
|
|
219
|
-
* Whether to hide dates in other months at the start or end of the current month.
|
|
220
|
-
*/
|
|
221
|
-
this.hideOtherMonths = false;
|
|
222
|
-
/**
|
|
223
|
-
* Date Time Checker to check if the give dateTime is selectable
|
|
224
|
-
*/
|
|
225
|
-
this.dateTimeChecker = (dateTime) => {
|
|
226
|
-
return (!!dateTime &&
|
|
227
|
-
(!this.dateTimeFilter || this.dateTimeFilter(dateTime)) &&
|
|
228
|
-
(!this.min || this.#dateTimeAdapter.compare(dateTime, this.min) >= 0) &&
|
|
229
|
-
(!this.max || this.#dateTimeAdapter.compare(dateTime, this.max) <= 0));
|
|
230
|
-
};
|
|
231
|
-
/**
|
|
232
|
-
* Set the {@link PickerType} of the dateTime picker
|
|
233
|
-
*/
|
|
234
|
-
this.pickerType = 'both';
|
|
235
|
-
/**
|
|
236
|
-
* Whether the picker is disabled or not
|
|
237
|
-
*/
|
|
238
|
-
this.disabled = false;
|
|
239
|
-
/**
|
|
240
|
-
* Whether to show the second's timer
|
|
241
|
-
*/
|
|
242
|
-
this.showSecondsTimer = false;
|
|
243
|
-
/**
|
|
244
|
-
* Which select mode to use:
|
|
245
|
-
* - 'single'
|
|
246
|
-
* - 'range'
|
|
247
|
-
* - 'rangeFrom'
|
|
248
|
-
* - 'rangeTo'
|
|
249
|
-
*/
|
|
250
|
-
this.selectMode = 'single';
|
|
251
|
-
/**
|
|
252
|
-
* @deprecated use `dateTimeFilter` instead!
|
|
253
|
-
*/
|
|
254
|
-
this.owlDateTimeFilter = null;
|
|
255
|
-
this.dateTimeFilter = null;
|
|
256
|
-
this._values = [];
|
|
257
|
-
/**
|
|
258
|
-
* Emits selected year in multi-year view
|
|
259
|
-
* This doesn't imply a change on the selected date.
|
|
260
|
-
*/
|
|
261
|
-
this.yearSelected = new EventEmitter();
|
|
262
|
-
/**
|
|
263
|
-
* Emits selected month in year view
|
|
264
|
-
* This doesn't imply a change on the selected date.
|
|
265
|
-
*/
|
|
266
|
-
this.monthSelected = new EventEmitter();
|
|
267
|
-
/**
|
|
268
|
-
* Emits selected date
|
|
269
|
-
*/
|
|
270
|
-
this.dateSelected = new EventEmitter();
|
|
271
|
-
this.activeSelectedIndex = 0; // The current active SelectedIndex in range select mode (0: 'from', 1: 'to')
|
|
272
|
-
this._selecteds = [];
|
|
273
|
-
this.onModelChange = () => {
|
|
274
|
-
/* noop */
|
|
275
|
-
};
|
|
276
|
-
this.onModelTouched = () => {
|
|
277
|
-
/* noop */
|
|
278
|
-
};
|
|
279
|
-
if (!this.#dateTimeAdapter) {
|
|
280
|
-
throw Error(`OwlDateTimePicker: No provider found for DateTimeAdapter. You must import one of the following ` +
|
|
281
|
-
`modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a ` +
|
|
282
|
-
`custom implementation.`);
|
|
283
|
-
}
|
|
284
|
-
if (!this.#dateTimeFormats) {
|
|
285
|
-
throw Error(`OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import one of the following ` +
|
|
286
|
-
`modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a ` +
|
|
287
|
-
`custom implementation.`);
|
|
288
|
-
}
|
|
289
|
-
this.id = `owl-dt-picker-${nextUniqueComponentId++}`;
|
|
290
|
-
}
|
|
291
|
-
writeValue(value) {
|
|
292
|
-
if (this.isInSingleMode) {
|
|
293
|
-
this.selected = value;
|
|
294
|
-
this.value = this.selected;
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
297
|
-
// Handle the case where the second selected date is before the first selected date
|
|
298
|
-
// In this case "go back" and treat the value as the first selected date
|
|
299
|
-
if (this.activeSelectedIndex === 1) {
|
|
300
|
-
if (this.selecteds[0] && value.getTime() < this.selecteds[0].getTime()) {
|
|
301
|
-
this.activeSelectedIndex = 0;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
// Set the correct value according to the active selected index
|
|
305
|
-
if (this.activeSelectedIndex === 0) {
|
|
306
|
-
this.selecteds = [value, null];
|
|
307
|
-
}
|
|
308
|
-
else {
|
|
309
|
-
this.selecteds[1] = value;
|
|
310
|
-
}
|
|
311
|
-
// Set the values to the selecteds
|
|
312
|
-
this.values = [...this.selecteds];
|
|
313
|
-
this.activeSelectedIndex = (this.activeSelectedIndex + 1) % 2;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
registerOnChange(fn) {
|
|
317
|
-
this.onModelChange = fn;
|
|
318
|
-
}
|
|
319
|
-
registerOnTouched(fn) {
|
|
320
|
-
this.onModelTouched = fn;
|
|
321
|
-
}
|
|
322
|
-
setDisabledState(isDisabled) {
|
|
323
|
-
this.disabled = isDisabled;
|
|
324
|
-
}
|
|
325
|
-
select(date) {
|
|
326
|
-
if (this.disabled) {
|
|
327
|
-
return;
|
|
328
|
-
}
|
|
329
|
-
if (Array.isArray(date)) {
|
|
330
|
-
this.values = [...date];
|
|
331
|
-
}
|
|
332
|
-
else {
|
|
333
|
-
this.value = date;
|
|
334
|
-
}
|
|
335
|
-
this.onModelChange(date);
|
|
336
|
-
this.onModelTouched();
|
|
337
|
-
}
|
|
338
|
-
/**
|
|
339
|
-
* Emits the selected year in multi-year view
|
|
340
|
-
*/
|
|
341
|
-
selectYear(normalizedYear) {
|
|
342
|
-
this.yearSelected.emit(normalizedYear);
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Emits selected month in year view
|
|
346
|
-
*/
|
|
347
|
-
selectMonth(normalizedMonth) {
|
|
348
|
-
this.writeValue(normalizedMonth);
|
|
349
|
-
this.monthSelected.emit(normalizedMonth);
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* Emits the selected date
|
|
353
|
-
*/
|
|
354
|
-
selectDate(normalizedDate) {
|
|
355
|
-
this.writeValue(normalizedDate);
|
|
356
|
-
this.dateSelected.emit(normalizedDate);
|
|
357
|
-
}
|
|
358
|
-
/**
|
|
359
|
-
* Sets the active "selected" index in range mode.
|
|
360
|
-
* - 0 for 'from'
|
|
361
|
-
* - 1 for 'to'
|
|
362
|
-
*/
|
|
363
|
-
setActiveSelectedIndex(index) {
|
|
364
|
-
if (this.selectMode === 'range' && this.activeSelectedIndex !== index) {
|
|
365
|
-
this.activeSelectedIndex = index;
|
|
366
|
-
const selected = this.selecteds[this.activeSelectedIndex];
|
|
367
|
-
if (this.selecteds && selected) {
|
|
368
|
-
this.value = this.#dateTimeAdapter.clone(selected);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
return;
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Handle click on inform radio group
|
|
375
|
-
*/
|
|
376
|
-
handleKeydownOnInfoGroup(event, next, index) {
|
|
377
|
-
let handled = false;
|
|
378
|
-
switch (event.key) {
|
|
379
|
-
// Navigate between the radio group options with arrow keys
|
|
380
|
-
case 'ArrowDown':
|
|
381
|
-
case 'ArrowRight':
|
|
382
|
-
case 'ArrowUp':
|
|
383
|
-
case 'ArrowLeft':
|
|
384
|
-
next.focus();
|
|
385
|
-
this.setActiveSelectedIndex(index === 0 ? 1 : 0);
|
|
386
|
-
handled = true;
|
|
387
|
-
break;
|
|
388
|
-
// Select the active selected index when space is pressed
|
|
389
|
-
case ' ':
|
|
390
|
-
this.setActiveSelectedIndex(index);
|
|
391
|
-
handled = true;
|
|
392
|
-
break;
|
|
393
|
-
}
|
|
394
|
-
if (handled) {
|
|
395
|
-
event.preventDefault();
|
|
396
|
-
event.stopPropagation();
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: OwlDateTimeInlineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
400
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: OwlDateTimeInlineComponent, selector: "owl-date-time-inline", inputs: { hour12Timer: ["hour12Timer", "hour12Timer", booleanAttribute], startView: "startView", yearOnly: ["yearOnly", "yearOnly", booleanAttribute], multiyearOnly: ["multiyearOnly", "multiyearOnly", booleanAttribute], stepHour: "stepHour", stepMinute: "stepMinute", stepSecond: "stepSecond", firstDayOfWeek: "firstDayOfWeek", hideOtherMonths: ["hideOtherMonths", "hideOtherMonths", booleanAttribute], pickerType: "pickerType", disabled: ["disabled", "disabled", booleanAttribute], showSecondsTimer: ["showSecondsTimer", "showSecondsTimer", booleanAttribute], selectMode: "selectMode", startAt: "startAt", endAt: "endAt", owlDateTimeFilter: "owlDateTimeFilter", dateTimeFilter: "dateTimeFilter", min: "min", max: "max", value: "value", values: "values" }, outputs: { yearSelected: "yearSelected", monthSelected: "monthSelected", dateSelected: "dateSelected" }, host: { properties: { "class.owl-dt-container-disabled": "disabled" }, classAttribute: "owl-dt-inline owl-dt-container owl-dt-inline-container" }, providers: [OWL_DATETIME_VALUE_ACCESSOR], ngImport: i0, template: "<div class=\"owl-dt-container-inner\">\n @if (pickerType === 'both' || pickerType === 'calendar') {\n <owl-date-time-calendar\n [dateFilter]=\"dateTimeFilterGetter\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [hideOtherMonths]=\"hideOtherMonths\"\n [maxDate]=\"max\"\n [minDate]=\"min\"\n [multiyearOnly]=\"multiyearOnly\"\n [selectMode]=\"selectMode\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [startView]=\"startView\"\n [yearOnly]=\"yearOnly\"\n [(pickerMoment)]=\"value\"\n (dateClicked)=\"selectDate($event)\"\n (monthSelected)=\"selectMonth($event)\"\n (selectedChange)=\"select($event)\"\n (yearSelected)=\"selectYear($event)\"\n class=\"owl-dt-container-row\">\n </owl-date-time-calendar>\n }\n\n @if (pickerType === 'both' || pickerType === 'timer') {\n <owl-date-time-timer\n [hour12Timer]=\"hour12Timer\"\n [maxDateTime]=\"max\"\n [minDateTime]=\"min\"\n [pickerMoment]=\"value\"\n [showSecondsTimer]=\"showSecondsTimer\"\n [stepHour]=\"stepHour\"\n [stepMinute]=\"stepMinute\"\n [stepSecond]=\"stepSecond\"\n (selectedChange)=\"select($event)\"\n class=\"owl-dt-container-row\">\n </owl-date-time-timer>\n }\n\n @if (isInRangeMode) {\n <div\n class=\"owl-dt-container-info owl-dt-container-row\"\n role=\"radiogroup\">\n <div\n #from\n [attr.aria-checked]=\"activeSelectedIndex === 0\"\n [class.owl-dt-container-info-active]=\"activeSelectedIndex === 0\"\n [tabindex]=\"activeSelectedIndex === 0 ? 0 : -1\"\n (click)=\"setActiveSelectedIndex(0)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-from\"\n role=\"radio\">\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\">\n <span class=\"owl-dt-container-info-label\">{{ fromLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{ fromFormattedValue }}</span>\n </span>\n </div>\n <div\n #to\n [attr.aria-checked]=\"activeSelectedIndex === 1\"\n [class.owl-dt-container-info-active]=\"activeSelectedIndex === 1\"\n [tabindex]=\"activeSelectedIndex === 1 ? 0 : -1\"\n (click)=\"setActiveSelectedIndex(1)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-to\"\n role=\"radio\">\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\">\n <span class=\"owl-dt-container-info-label\">{{ toLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{ toFormattedValue }}</span>\n </span>\n </div>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.OwlTimerComponent, selector: "owl-date-time-timer", inputs: ["pickerMoment", "minDateTime", "maxDateTime", "showSecondsTimer", "hour12Timer", "stepHour", "stepMinute", "stepSecond"], outputs: ["selectedChange"], exportAs: ["owlDateTimeTimer"] }, { kind: "component", type: i2.OwlCalendarComponent, selector: "owl-date-time-calendar", inputs: ["minDate", "maxDate", "pickerMoment", "selected", "selecteds", "dateFilter", "firstDayOfWeek", "selectMode", "startView", "yearOnly", "multiyearOnly", "hideOtherMonths"], outputs: ["pickerMomentChange", "dateClicked", "selectedChange", "yearSelected", "monthSelected"], exportAs: ["owlDateTimeCalendar"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
401
|
-
}
|
|
402
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: OwlDateTimeInlineComponent, decorators: [{
|
|
403
|
-
type: Component,
|
|
404
|
-
args: [{ selector: 'owl-date-time-inline', host: {
|
|
405
|
-
'[class.owl-dt-container-disabled]': 'disabled',
|
|
406
|
-
'class': 'owl-dt-inline owl-dt-container owl-dt-inline-container'
|
|
407
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, providers: [OWL_DATETIME_VALUE_ACCESSOR], template: "<div class=\"owl-dt-container-inner\">\n @if (pickerType === 'both' || pickerType === 'calendar') {\n <owl-date-time-calendar\n [dateFilter]=\"dateTimeFilterGetter\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [hideOtherMonths]=\"hideOtherMonths\"\n [maxDate]=\"max\"\n [minDate]=\"min\"\n [multiyearOnly]=\"multiyearOnly\"\n [selectMode]=\"selectMode\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [startView]=\"startView\"\n [yearOnly]=\"yearOnly\"\n [(pickerMoment)]=\"value\"\n (dateClicked)=\"selectDate($event)\"\n (monthSelected)=\"selectMonth($event)\"\n (selectedChange)=\"select($event)\"\n (yearSelected)=\"selectYear($event)\"\n class=\"owl-dt-container-row\">\n </owl-date-time-calendar>\n }\n\n @if (pickerType === 'both' || pickerType === 'timer') {\n <owl-date-time-timer\n [hour12Timer]=\"hour12Timer\"\n [maxDateTime]=\"max\"\n [minDateTime]=\"min\"\n [pickerMoment]=\"value\"\n [showSecondsTimer]=\"showSecondsTimer\"\n [stepHour]=\"stepHour\"\n [stepMinute]=\"stepMinute\"\n [stepSecond]=\"stepSecond\"\n (selectedChange)=\"select($event)\"\n class=\"owl-dt-container-row\">\n </owl-date-time-timer>\n }\n\n @if (isInRangeMode) {\n <div\n class=\"owl-dt-container-info owl-dt-container-row\"\n role=\"radiogroup\">\n <div\n #from\n [attr.aria-checked]=\"activeSelectedIndex === 0\"\n [class.owl-dt-container-info-active]=\"activeSelectedIndex === 0\"\n [tabindex]=\"activeSelectedIndex === 0 ? 0 : -1\"\n (click)=\"setActiveSelectedIndex(0)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-from\"\n role=\"radio\">\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\">\n <span class=\"owl-dt-container-info-label\">{{ fromLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{ fromFormattedValue }}</span>\n </span>\n </div>\n <div\n #to\n [attr.aria-checked]=\"activeSelectedIndex === 1\"\n [class.owl-dt-container-info-active]=\"activeSelectedIndex === 1\"\n [tabindex]=\"activeSelectedIndex === 1 ? 0 : -1\"\n (click)=\"setActiveSelectedIndex(1)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-to\"\n role=\"radio\">\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\">\n <span class=\"owl-dt-container-info-label\">{{ toLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{ toFormattedValue }}</span>\n </span>\n </div>\n </div>\n }\n</div>\n" }]
|
|
408
|
-
}], ctorParameters: () => [], propDecorators: { hour12Timer: [{
|
|
409
|
-
type: Input,
|
|
410
|
-
args: [{ transform: booleanAttribute }]
|
|
411
|
-
}], startView: [{
|
|
412
|
-
type: Input
|
|
413
|
-
}], yearOnly: [{
|
|
414
|
-
type: Input,
|
|
415
|
-
args: [{ transform: booleanAttribute }]
|
|
416
|
-
}], multiyearOnly: [{
|
|
417
|
-
type: Input,
|
|
418
|
-
args: [{ transform: booleanAttribute }]
|
|
419
|
-
}], stepHour: [{
|
|
420
|
-
type: Input
|
|
421
|
-
}], stepMinute: [{
|
|
422
|
-
type: Input
|
|
423
|
-
}], stepSecond: [{
|
|
424
|
-
type: Input
|
|
425
|
-
}], firstDayOfWeek: [{
|
|
426
|
-
type: Input
|
|
427
|
-
}], hideOtherMonths: [{
|
|
428
|
-
type: Input,
|
|
429
|
-
args: [{ transform: booleanAttribute }]
|
|
430
|
-
}], pickerType: [{
|
|
431
|
-
type: Input
|
|
432
|
-
}], disabled: [{
|
|
433
|
-
type: Input,
|
|
434
|
-
args: [{ transform: booleanAttribute }]
|
|
435
|
-
}], showSecondsTimer: [{
|
|
436
|
-
type: Input,
|
|
437
|
-
args: [{ transform: booleanAttribute }]
|
|
438
|
-
}], selectMode: [{
|
|
439
|
-
type: Input
|
|
440
|
-
}], startAt: [{
|
|
441
|
-
type: Input
|
|
442
|
-
}], endAt: [{
|
|
443
|
-
type: Input
|
|
444
|
-
}], owlDateTimeFilter: [{
|
|
445
|
-
type: Input
|
|
446
|
-
}], dateTimeFilter: [{
|
|
447
|
-
type: Input
|
|
448
|
-
}], min: [{
|
|
449
|
-
type: Input
|
|
450
|
-
}], max: [{
|
|
451
|
-
type: Input
|
|
452
|
-
}], value: [{
|
|
453
|
-
type: Input
|
|
454
|
-
}], values: [{
|
|
455
|
-
type: Input
|
|
456
|
-
}], yearSelected: [{
|
|
457
|
-
type: Output
|
|
458
|
-
}], monthSelected: [{
|
|
459
|
-
type: Output
|
|
460
|
-
}], dateSelected: [{
|
|
461
|
-
type: Output
|
|
462
|
-
}] } });
|
|
463
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi9kYXRlLXRpbWUvZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi9kYXRlLXRpbWUvZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUEwQixNQUFNLFVBQVUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBRWxFLE1BQU0sMkJBQTJCLEdBQWE7SUFDNUMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO0lBQ3pELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBYzlCLE1BQU0sT0FBTywwQkFBMEI7SUFHNUIsZUFBZSxDQUE2QjtJQUU1QyxXQUFXLENBQTJCO0lBRXRDLGdCQUFnQixDQUFxRDtJQUVyRSxnQkFBZ0IsQ0FBc0U7SUFpRC9GLElBQ1csY0FB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c0JBRGYsS0FBSztnQkFzQkMsaUJBQWlCO3NCQUR2QixLQUFLO2dCQUlDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBYUssR0FBRztzQkFEYixLQUFLO2dCQWNLLEdBQUc7c0JBRGIsS0FBSztnQkFXSyxLQUFLO3NCQURmLEtBQUs7Z0JBY0ssTUFBTTtzQkFEaEIsS0FBSztnQkF3QlUsWUFBWTtzQkFEM0IsTUFBTTtnQkFRUyxhQUFhO3NCQUQ1QixNQUFNO2dCQU9TLFlBQVk7c0JBRDNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIE91dHB1dCxcbiAgUHJvdmlkZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRlVmlldywgUGlja2VyVHlwZSwgU2VsZWN0TW9kZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBPV0xfREFURV9USU1FX0ZPUk1BVFMgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWZvcm1hdC5jbGFzcyc7XG5pbXBvcnQgeyBPd2xEYXRlVGltZUludGwgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXItaW50bC5zZXJ2aWNlJztcblxuY29uc3QgT1dMX0RBVEVUSU1FX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbmxldCBuZXh0VW5pcXVlQ29tcG9uZW50SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvd2wtZGF0ZS10aW1lLWlubGluZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXRpbWUtaW5saW5lLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuc2NzcyddLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vd2wtZHQtY29udGFpbmVyLWRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgJ2NsYXNzJzogJ293bC1kdC1pbmxpbmUgb3dsLWR0LWNvbnRhaW5lciBvd2wtZHQtaW5saW5lLWNvbnRhaW5lcidcbiAgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBwcm92aWRlcnM6IFtPV0xfREFURVRJTUVfVkFMVUVfQUNDRVNTT1JdXG59KVxuZXhwb3J0IGNsYXNzIE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICByZWFkb25seSAjY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHJlYWRvbmx5ICNwaWNrZXJJbnRsID0gaW5qZWN0KE93bERhdGVUaW1lSW50bCk7XG5cbiAgcmVhZG9ubHkgI2RhdGVUaW1lRm9ybWF0cyA9IGluamVjdChPV0xfREFURV9USU1FX0ZPUk1BVFMsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcmVhZG9ubHkgI2RhdGVUaW1lQWRhcHRlciA9IGluamVjdDxEYXRlVGltZUFkYXB0ZXI8RGF0ZT4+KERhdGVUaW1lQWRhcHRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdGltZXIgaXMgaW4gaG91cjEyIGZvcm1hdFxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBob3VyMTJUaW1lciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlldyB0aGF0IHRoZSBjYWxlbmRhciBzaG91bGQgc3RhcnQgaW4uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3RhcnRWaWV3OiBEYXRlVmlldyA9IERhdGVWaWV3Lk1PTlRIO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3VsZCBvbmx5IHRoZSB5ZWFyIGFuZCBtdWx0aS15ZWFyIHZpZXdzLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyB5ZWFyT25seSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3VsZCBvbmx5IHRoZSBtdWx0aS15ZWFyIHZpZXcuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIG11bHRpeWVhck9ubHkgPSBmYWxzZTtcblxuICAvKipcbiAgICogSG91cnMgdG8gY2hhbmdlIHBlciBzdGVwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3RlcEhvdXI6IG51bWJlciA9IDE7XG5cbiAgLyoqXG4gICAqIE1pbnV0ZXMgdG8gY2hhbmdlIHBlciBzdGVwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3RlcE1pbnV0ZTogbnVtYmVyID0gMTtcblxuICAvKipcbiAgICogU2Vjb25kcyB0byBjaGFuZ2UgcGVyIHN0ZXBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGVwU2Vjb25kOiBudW1iZXIgPSAxO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrLlxuICAgKiBIYXMgdG8gYmUgYSBudW1iZXIgYmV0d2VlbiAwIChTdW5kYXkpIGFuZCA2IChTYXR1cmRheSlcbiAgICovXG4gIHByaXZhdGUgX2ZpcnN0RGF5T2ZXZWVrOiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZmlyc3REYXlPZldlZWsoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZmlyc3REYXlPZldlZWs7XG4gIH1cbiAgcHVibGljIHNldCBmaXJzdERheU9mV2Vlayh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdmFsdWUgPSBudW1iZXJBdHRyaWJ1dGUodmFsdWUsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHZhbHVlID4gNiB8fCB2YWx1ZSA8IDApIHtcbiAgICAgIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9maXJzdERheU9mV2VlayA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGhpZGUgZGF0ZXMgaW4gb3RoZXIgbW9udGhzIGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIGN1cnJlbnQgbW9udGguXG4gICAqL1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgaGlkZU90aGVyTW9udGhzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGdldCBmb3JtYXRPcHRpb25zKCk6IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zIHtcbiAgICBpZiAodGhpcy5waWNrZXJUeXBlID09PSAnYm90aCcpIHtcbiAgICAgIHJldHVybiB0aGlzLiNkYXRlVGltZUZvcm1hdHMuZnVsbFBpY2tlcklucHV0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBpY2tlclR5cGUgPT09ICdjYWxlbmRhcicpIHtcbiAgICAgIHJldHVybiB0aGlzLiNkYXRlVGltZUZvcm1hdHMuZGF0ZVBpY2tlcklucHV0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNkYXRlVGltZUZvcm1hdHMudGltZVBpY2tlcklucHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIERhdGUgVGltZSBDaGVja2VyIHRvIGNoZWNrIGlmIHRoZSBnaXZlIGRhdGVUaW1lIGlzIHNlbGVjdGFibGVcbiAgICovXG4gIHB1YmxpYyBkYXRlVGltZUNoZWNrZXIgPSAoZGF0ZVRpbWU6IERhdGUpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgISFkYXRlVGltZSAmJlxuICAgICAgKCF0aGlzLmRhdGVUaW1lRmlsdGVyIHx8IHRoaXMuZGF0ZVRpbWVGaWx0ZXIoZGF0ZVRpbWUpKSAmJlxuICAgICAgKCF0aGlzLm1pbiB8fCB0aGlzLiNkYXRlVGltZUFkYXB0ZXIuY29tcGFyZShkYXRlVGltZSwgdGhpcy5taW4pID49IDApICYmXG4gICAgICAoIXRoaXMubWF4IHx8IHRoaXMuI2RhdGVUaW1lQWRhcHRlci5jb21wYXJlKGRhdGVUaW1lLCB0aGlzLm1heCkgPD0gMClcbiAgICApO1xuICB9O1xuXG4gIHByb3RlY3RlZCBnZXRWYWxpZERhdGUob2JqOiB1bmtub3duKTogRGF0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLiNkYXRlVGltZUFkYXB0ZXIuaXNEYXRlSW5zdGFuY2Uob2JqKSAmJiB0aGlzLiNkYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChvYmopID8gb2JqIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHtAbGluayBQaWNrZXJUeXBlfSBvZiB0aGUgZGF0ZVRpbWUgcGlja2VyXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcGlja2VyVHlwZTogUGlja2VyVHlwZSA9ICdib3RoJztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGlja2VyIGlzIGRpc2FibGVkIG9yIG5vdFxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIHNlY29uZCdzIHRpbWVyXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIHNob3dTZWNvbmRzVGltZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hpY2ggc2VsZWN0IG1vZGUgdG8gdXNlOlxuICAgKiAtICdzaW5nbGUnXG4gICAqIC0gJ3JhbmdlJ1xuICAgKiAtICdyYW5nZUZyb20nXG4gICAqIC0gJ3JhbmdlVG8nXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VsZWN0TW9kZTogU2VsZWN0TW9kZSA9ICdzaW5nbGUnO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0byBvcGVuIHRoZSBjYWxlbmRhciB0byBpbml0aWFsbHkuXG4gICAqL1xuICBwcml2YXRlIF9zdGFydEF0OiBEYXRlIHwgbnVsbDtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBzdGFydEF0KCk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAodGhpcy5fc3RhcnRBdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHwgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJykge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdIHx8IG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZVRvJykge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdIHx8IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0IHN0YXJ0QXQoZGF0ZTogRGF0ZSB8IG51bGwpIHtcbiAgICB0aGlzLl9zdGFydEF0ID0gdGhpcy5nZXRWYWxpZERhdGUodGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKGRhdGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0byBvcGVuIGZvciByYW5nZSBjYWxlbmRhci5cbiAgICovXG4gIHByaXZhdGUgX2VuZEF0OiBEYXRlIHwgbnVsbDtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBlbmRBdCgpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuX2VuZEF0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5kQXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHwgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJykge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdIHx8IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0IGVuZEF0KGRhdGU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fZW5kQXQgPSB0aGlzLmdldFZhbGlkRGF0ZSh0aGlzLiNkYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgZGF0ZVRpbWVGaWx0ZXJgIGluc3RlYWQhXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgb3dsRGF0ZVRpbWVGaWx0ZXI6ICgoZGF0ZTogRGF0ZSB8IG51bGwpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGRhdGVUaW1lRmlsdGVyOiAoKGRhdGU6IERhdGUgfCBudWxsKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFRPRE86IHJlbW92ZSB0aGlzIGdldHRlciB3aGVuIGBvd2xEYXRlVGltZUZpbHRlcmAgaXMgcmVtb3ZlZFxuICBwcm90ZWN0ZWQgZ2V0IGRhdGVUaW1lRmlsdGVyR2V0dGVyKCk6ICgoZGF0ZTogRGF0ZSB8IG51bGwpID0+IGJvb2xlYW4pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVGaWx0ZXIgfHwgdGhpcy5vd2xEYXRlVGltZUZpbHRlcjtcbiAgfVxuXG4gIHByaXZhdGUgX21pbjogRGF0ZSB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSB2YWxpZCBkYXRlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBtaW4oKTogRGF0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9taW4gfHwgbnVsbDtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbih2YWx1ZTogRGF0ZSB8IG51bGwpIHtcbiAgICB0aGlzLl9taW4gPSB0aGlzLmdldFZhbGlkRGF0ZSh0aGlzLiNkYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgX21heDogRGF0ZSB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB2YWxpZCBkYXRlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBtYXgoKTogRGF0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXggfHwgbnVsbDtcbiAgfVxuICBwdWJsaWMgc2V0IG1heCh2YWx1ZTogRGF0ZSB8IG51bGwpIHtcbiAgICB0aGlzLl9tYXggPSB0aGlzLmdldFZhbGlkRGF0ZSh0aGlzLiNkYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlOiBEYXRlIHwgbnVsbDtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCB2YWx1ZSgpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogRGF0ZSB8IG51bGwpIHtcbiAgICB2YWx1ZSA9IHRoaXMuI2RhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgdmFsdWUgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSk7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnNlbGVjdGVkID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZXM6IEFycmF5PERhdGU+ID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgdmFsdWVzKCk6IEFycmF5PERhdGU+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlcyh2YWx1ZXM6IEFycmF5PERhdGU+KSB7XG4gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgdmFsdWVzID0gdmFsdWVzLm1hcCgodikgPT4ge1xuICAgICAgICB2ID0gdGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHYpO1xuICAgICAgICB2ID0gdGhpcy5nZXRWYWxpZERhdGUodik7XG4gICAgICAgIHJldHVybiB2ID8gdGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmNsb25lKHYpIDogbnVsbDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fdmFsdWVzID0gWy4uLnZhbHVlc107XG4gICAgICB0aGlzLnNlbGVjdGVkcyA9IFsuLi52YWx1ZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHNlbGVjdGVkIHllYXIgaW4gbXVsdGkteWVhciB2aWV3XG4gICAqIFRoaXMgZG9lc24ndCBpbXBseSBhIGNoYW5nZSBvbiB0aGUgc2VsZWN0ZWQgZGF0ZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgeWVhclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBzZWxlY3RlZCBtb250aCBpbiB5ZWFyIHZpZXdcbiAgICogVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBtb250aFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBzZWxlY3RlZCBkYXRlXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGRhdGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBwcm90ZWN0ZWQgYWN0aXZlU2VsZWN0ZWRJbmRleCA9IDA7IC8vIFRoZSBjdXJyZW50IGFjdGl2ZSBTZWxlY3RlZEluZGV4IGluIHJhbmdlIHNlbGVjdCBtb2RlICgwOiAnZnJvbScsIDE6ICd0bycpXG5cbiAgcHJpdmF0ZSBfc2VsZWN0ZWQ6IERhdGUgfCBudWxsO1xuICBwcm90ZWN0ZWQgZ2V0IHNlbGVjdGVkKCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIHNldCBzZWxlY3RlZCh2YWx1ZTogRGF0ZSB8IG51bGwpIHtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHZhbHVlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRzOiBBcnJheTxEYXRlPiA9IFtdO1xuICBwcm90ZWN0ZWQgZ2V0IHNlbGVjdGVkcygpOiBBcnJheTxEYXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkcztcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXQgc2VsZWN0ZWRzKHZhbHVlczogQXJyYXk8RGF0ZT4pIHtcbiAgICB0aGlzLl9zZWxlY3RlZHMgPSB2YWx1ZXM7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwaWNrZXIgaXMgaW4gc2luZ2xlIG1vZGVcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgaXNJblNpbmdsZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZSc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwaWNrZXIgaXMgaW4gcmFuZ2UgbW9kZSAocmFuZ2UsIHJhbmdlRnJvbSwgcmFuZ2VUbylcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgaXNJblJhbmdlTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8IHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScgfHwgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VUbyc7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJhbmdlICdmcm9tJyBsYWJlbFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmcm9tTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jcGlja2VySW50bC5yYW5nZUZyb21MYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmFuZ2UgJ3RvJyBsYWJlbFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB0b0xhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI3BpY2tlckludGwucmFuZ2VUb0xhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByYW5nZSAnZnJvbScgZm9ybWF0dGVkIHZhbHVlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZyb21Gb3JtYXR0ZWRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RlZHNbMF07XG4gICAgcmV0dXJuIHZhbHVlID8gdGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdCh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByYW5nZSAndG8nIGZvcm1hdHRlZCB2YWx1ZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB0b0Zvcm1hdHRlZFZhbHVlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGVkc1sxXTtcbiAgICByZXR1cm4gdmFsdWUgPyB0aGlzLiNkYXRlVGltZUFkYXB0ZXIuZm9ybWF0KHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIDogJyc7XG4gIH1cblxuICBwcml2YXRlIG9uTW9kZWxDaGFuZ2U6ICh2OiBEYXRlIHwgQXJyYXk8RGF0ZT4pID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgLyogbm9vcCAqL1xuICB9O1xuXG4gIHByaXZhdGUgb25Nb2RlbFRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgLyogbm9vcCAqL1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy4jZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYE93bERhdGVUaW1lUGlja2VyOiBObyBwcm92aWRlciBmb3VuZCBmb3IgRGF0ZVRpbWVBZGFwdGVyLiBZb3UgbXVzdCBpbXBvcnQgb25lIG9mIHRoZSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgYG1vZHVsZXMgYXQgeW91ciBhcHBsaWNhdGlvbiByb290OiBPd2xOYXRpdmVEYXRlVGltZU1vZHVsZSwgT3dsTW9tZW50RGF0ZVRpbWVNb2R1bGUsIG9yIHByb3ZpZGUgYSBgICtcbiAgICAgICAgICBgY3VzdG9tIGltcGxlbWVudGF0aW9uLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLiNkYXRlVGltZUZvcm1hdHMpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgT3dsRGF0ZVRpbWVQaWNrZXI6IE5vIHByb3ZpZGVyIGZvdW5kIGZvciBPV0xfREFURV9USU1FX0ZPUk1BVFMuIFlvdSBtdXN0IGltcG9ydCBvbmUgb2YgdGhlIGZvbGxvd2luZyBgICtcbiAgICAgICAgICBgbW9kdWxlcyBhdCB5b3VyIGFwcGxpY2F0aW9uIHJvb3Q6IE93bE5hdGl2ZURhdGVUaW1lTW9kdWxlLCBPd2xNb21lbnREYXRlVGltZU1vZHVsZSwgb3IgcHJvdmlkZSBhIGAgK1xuICAgICAgICAgIGBjdXN0b20gaW1wbGVtZW50YXRpb24uYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmlkID0gYG93bC1kdC1waWNrZXItJHtuZXh0VW5pcXVlQ29tcG9uZW50SWQrK31gO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgc2Vjb25kIHNlbGVjdGVkIGRhdGUgaXMgYmVmb3JlIHRoZSBmaXJzdCBzZWxlY3RlZCBkYXRlXG4gICAgICAvLyBJbiB0aGlzIGNhc2UgXCJnbyBiYWNrXCIgYW5kIHRyZWF0IHRoZSB2YWx1ZSBhcyB0aGUgZmlyc3Qgc2VsZWN0ZWQgZGF0ZVxuICAgICAgaWYgKHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZHNbMF0gJiYgdmFsdWUuZ2V0VGltZSgpIDwgdGhpcy5zZWxlY3RlZHNbMF0uZ2V0VGltZSgpKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdGhlIGNvcnJlY3QgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBhY3RpdmUgc2VsZWN0ZWQgaW5kZXhcbiAgICAgIGlmICh0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZHMgPSBbdmFsdWUsIG51bGxdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZHNbMV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHRoZSB2YWx1ZXMgdG8gdGhlIHNlbGVjdGVkc1xuICAgICAgdGhpcy52YWx1ZXMgPSBbLi4udGhpcy5zZWxlY3RlZHNdO1xuICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gKHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCArIDEpICUgMjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHY6IERhdGUgfCBBcnJheTxEYXRlPikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdChkYXRlOiBBcnJheTxEYXRlPiB8IERhdGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGUpKSB7XG4gICAgICB0aGlzLnZhbHVlcyA9IFsuLi5kYXRlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IGRhdGU7XG4gICAgfVxuICAgIHRoaXMub25Nb2RlbENoYW5nZShkYXRlKTtcbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIHNlbGVjdGVkIHllYXIgaW4gbXVsdGkteWVhciB2aWV3XG4gICAqL1xuICBwdWJsaWMgc2VsZWN0WWVhcihub3JtYWxpemVkWWVhcjogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMueWVhclNlbGVjdGVkLmVtaXQobm9ybWFsaXplZFllYXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHNlbGVjdGVkIG1vbnRoIGluIHllYXIgdmlld1xuICAgKi9cbiAgcHVibGljIHNlbGVjdE1vbnRoKG5vcm1hbGl6ZWRNb250aDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMud3JpdGVWYWx1ZShub3JtYWxpemVkTW9udGgpO1xuICAgIHRoaXMubW9udGhTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRNb250aCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIHNlbGVjdGVkIGRhdGVcbiAgICovXG4gIHB1YmxpYyBzZWxlY3REYXRlKG5vcm1hbGl6ZWREYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVZhbHVlKG5vcm1hbGl6ZWREYXRlKTtcbiAgICB0aGlzLmRhdGVTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWREYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhY3RpdmUgXCJzZWxlY3RlZFwiIGluZGV4IGluIHJhbmdlIG1vZGUuXG4gICAqIC0gMCBmb3IgJ2Zyb20nXG4gICAqIC0gMSBmb3IgJ3RvJ1xuICAgKi9cbiAgcHJvdGVjdGVkIHNldEFjdGl2ZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgJiYgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ICE9PSBpbmRleCkge1xuICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gaW5kZXg7XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZHNbdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4XTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkcyAmJiBzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmNsb25lKHNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjbGljayBvbiBpbmZvcm0gcmFkaW8gZ3JvdXBcbiAgICovXG4gIHByb3RlY3RlZCBoYW5kbGVLZXlkb3duT25JbmZvR3JvdXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG5leHQ6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGhhbmRsZWQgPSBmYWxzZTtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAvLyBOYXZpZ2F0ZSBiZXR3ZWVuIHRoZSByYWRpbyBncm91cCBvcHRpb25zIHdpdGggYXJyb3cga2V5c1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBuZXh0LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRJbmRleChpbmRleCA9PT0gMCA/IDEgOiAwKTtcbiAgICAgICAgaGFuZGxlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBTZWxlY3QgdGhlIGFjdGl2ZSBzZWxlY3RlZCBpbmRleCB3aGVuIHNwYWNlIGlzIHByZXNzZWRcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgICB0aGlzLnNldEFjdGl2ZVNlbGVjdGVkSW5kZXgoaW5kZXgpO1xuICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvd2wtZHQtY29udGFpbmVyLWlubmVyXCI+XG4gIEBpZiAocGlja2VyVHlwZSA9PT0gJ2JvdGgnIHx8IHBpY2tlclR5cGUgPT09ICdjYWxlbmRhcicpIHtcbiAgICA8b3dsLWRhdGUtdGltZS1jYWxlbmRhclxuICAgICAgW2RhdGVGaWx0ZXJdPVwiZGF0ZVRpbWVGaWx0ZXJHZXR0ZXJcIlxuICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcbiAgICAgIFtoaWRlT3RoZXJNb250aHNdPVwiaGlkZU90aGVyTW9udGhzXCJcbiAgICAgIFttYXhEYXRlXT1cIm1heFwiXG4gICAgICBbbWluRGF0ZV09XCJtaW5cIlxuICAgICAgW211bHRpeWVhck9ubHldPVwibXVsdGl5ZWFyT25seVwiXG4gICAgICBbc2VsZWN0TW9kZV09XCJzZWxlY3RNb2RlXCJcbiAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICBbc2VsZWN0ZWRzXT1cInNlbGVjdGVkc1wiXG4gICAgICBbc3RhcnRWaWV3XT1cInN0YXJ0Vmlld1wiXG4gICAgICBbeWVhck9ubHldPVwieWVhck9ubHlcIlxuICAgICAgWyhwaWNrZXJNb21lbnQpXT1cInZhbHVlXCJcbiAgICAgIChkYXRlQ2xpY2tlZCk9XCJzZWxlY3REYXRlKCRldmVudClcIlxuICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwic2VsZWN0TW9udGgoJGV2ZW50KVwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwic2VsZWN0KCRldmVudClcIlxuICAgICAgKHllYXJTZWxlY3RlZCk9XCJzZWxlY3RZZWFyKCRldmVudClcIlxuICAgICAgY2xhc3M9XCJvd2wtZHQtY29udGFpbmVyLXJvd1wiPlxuICAgIDwvb3dsLWRhdGUtdGltZS1jYWxlbmRhcj5cbiAgfVxuXG4gIEBpZiAocGlja2VyVHlwZSA9PT0gJ2JvdGgnIHx8IHBpY2tlclR5cGUgPT09ICd0aW1lcicpIHtcbiAgICA8b3dsLWRhdGUtdGltZS10aW1lclxuICAgICAgW2hvdXIxMlRpbWVyXT1cImhvdXIxMlRpbWVyXCJcbiAgICAgIFttYXhEYXRlVGltZV09XCJtYXhcIlxuICAgICAgW21pbkRhdGVUaW1lXT1cIm1pblwiXG4gICAgICBbcGlja2VyTW9tZW50XT1cInZhbHVlXCJcbiAgICAgIFtzaG93U2Vjb25kc1RpbWVyXT1cInNob3dTZWNvbmRzVGltZXJcIlxuICAgICAgW3N0ZXBIb3VyXT1cInN0ZXBIb3VyXCJcbiAgICAgIFtzdGVwTWludXRlXT1cInN0ZXBNaW51dGVcIlxuICAgICAgW3N0ZXBTZWNvbmRdPVwic3RlcFNlY29uZFwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwic2VsZWN0KCRldmVudClcIlxuICAgICAgY2xhc3M9XCJvd2wtZHQtY29udGFpbmVyLXJvd1wiPlxuICAgIDwvb3dsLWRhdGUtdGltZS10aW1lcj5cbiAgfVxuXG4gIEBpZiAoaXNJblJhbmdlTW9kZSkge1xuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwib3dsLWR0LWNvbnRhaW5lci1pbmZvIG93bC1kdC1jb250YWluZXItcm93XCJcbiAgICAgIHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNmcm9tXG4gICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAwXCJcbiAgICAgICAgW2NsYXNzLm93bC1kdC1jb250YWluZXItaW5mby1hY3RpdmVdPVwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMFwiXG4gICAgICAgIFt0YWJpbmRleF09XCJhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAwID8gMCA6IC0xXCJcbiAgICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZVNlbGVjdGVkSW5kZXgoMClcIlxuICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlkb3duT25JbmZvR3JvdXAoJGV2ZW50LCB0bywgMClcIlxuICAgICAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sIG93bC1kdC1jb250YWluZXItcmFuZ2Ugb3dsLWR0LWNvbnRhaW5lci1mcm9tXCJcbiAgICAgICAgcm9sZT1cInJhZGlvXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJvd2wtZHQtY29udHJvbC1jb250ZW50IG93bC1kdC1jb250YWluZXItcmFuZ2UtY29udGVudFwiXG4gICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3dsLWR0LWNvbnRhaW5lci1pbmZvLWxhYmVsXCI+e3sgZnJvbUxhYmVsIH19Ojwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm93bC1kdC1jb250YWluZXItaW5mby12YWx1ZVwiPnt7IGZyb21Gb3JtYXR0ZWRWYWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICN0b1xuICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMVwiXG4gICAgICAgIFtjbGFzcy5vd2wtZHQtY29udGFpbmVyLWluZm8tYWN0aXZlXT1cImFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDFcIlxuICAgICAgICBbdGFiaW5kZXhdPVwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMSA/IDAgOiAtMVwiXG4gICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVTZWxlY3RlZEluZGV4KDEpXCJcbiAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5ZG93bk9uSW5mb0dyb3VwKCRldmVudCwgZnJvbSwgMSlcIlxuICAgICAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sIG93bC1kdC1jb250YWluZXItcmFuZ2Ugb3dsLWR0LWNvbnRhaW5lci10b1wiXG4gICAgICAgIHJvbGU9XCJyYWRpb1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwib3dsLWR0LWNvbnRyb2wtY29udGVudCBvd2wtZHQtY29udGFpbmVyLXJhbmdlLWNvbnRlbnRcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm93bC1kdC1jb250YWluZXItaW5mby1sYWJlbFwiPnt7IHRvTGFiZWwgfX06PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3dsLWR0LWNvbnRhaW5lci1pbmZvLXZhbHVlXCI+e3sgdG9Gb3JtYXR0ZWRWYWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class OwlDateTimeIntl {
|
|
5
|
-
constructor() {
|
|
6
|
-
/**
|
|
7
|
-
* Stream that emits whenever the labels here are changed. Use this to notify
|
|
8
|
-
* components if the labels have changed after initialization.
|
|
9
|
-
*/
|
|
10
|
-
this.changes = new Subject();
|
|
11
|
-
/** A label for the up second button (used by screen readers). */
|
|
12
|
-
this.upSecondLabel = 'Add a second';
|
|
13
|
-
/** A label for the down second button (used by screen readers). */
|
|
14
|
-
this.downSecondLabel = 'Minus a second';
|
|
15
|
-
/** A label for the up minute button (used by screen readers). */
|
|
16
|
-
this.upMinuteLabel = 'Add a minute';
|
|
17
|
-
/** A label for the down minute button (used by screen readers). */
|
|
18
|
-
this.downMinuteLabel = 'Minus a minute';
|
|
19
|
-
/** A label for the up hour button (used by screen readers). */
|
|
20
|
-
this.upHourLabel = 'Add a hour';
|
|
21
|
-
/** A label for the down hour button (used by screen readers). */
|
|
22
|
-
this.downHourLabel = 'Minus a hour';
|
|
23
|
-
/** A label for the previous month button (used by screen readers). */
|
|
24
|
-
this.prevMonthLabel = 'Previous month';
|
|
25
|
-
/** A label for the next month button (used by screen readers). */
|
|
26
|
-
this.nextMonthLabel = 'Next month';
|
|
27
|
-
/** A label for the previous year button (used by screen readers). */
|
|
28
|
-
this.prevYearLabel = 'Previous year';
|
|
29
|
-
/** A label for the next year button (used by screen readers). */
|
|
30
|
-
this.nextYearLabel = 'Next year';
|
|
31
|
-
/** A label for the previous multi-year button (used by screen readers). */
|
|
32
|
-
this.prevMultiYearLabel = 'Previous 21 years';
|
|
33
|
-
/** A label for the next multi-year button (used by screen readers). */
|
|
34
|
-
this.nextMultiYearLabel = 'Next 21 years';
|
|
35
|
-
/** A label for the 'switch to month view' button (used by screen readers). */
|
|
36
|
-
this.switchToMonthViewLabel = 'Change to month view';
|
|
37
|
-
/** A label for the 'switch to year view' button (used by screen readers). */
|
|
38
|
-
this.switchToMultiYearViewLabel = 'Choose month and year';
|
|
39
|
-
/** A label for the range 'from' in picker info */
|
|
40
|
-
this.rangeFromLabel = 'From';
|
|
41
|
-
/** A label for the range 'to' in picker info */
|
|
42
|
-
this.rangeToLabel = 'To';
|
|
43
|
-
/** A label for the hour12 button (AM) */
|
|
44
|
-
this.hour12AMLabel = 'AM';
|
|
45
|
-
/** A label for the hour12 button (PM) */
|
|
46
|
-
this.hour12PMLabel = 'PM';
|
|
47
|
-
}
|
|
48
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: OwlDateTimeIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
49
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: OwlDateTimeIntl, providedIn: 'root' }); }
|
|
50
|
-
}
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: OwlDateTimeIntl, decorators: [{
|
|
52
|
-
type: Injectable,
|
|
53
|
-
args: [{ providedIn: 'root' }]
|
|
54
|
-
}] });
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci1pbnRsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi9kYXRlLXRpbWUvZGF0ZS10aW1lLXBpY2tlci1pbnRsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUcvQixNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVFOzs7V0FHRztRQUNNLFlBQU8sR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUV0RCxrRUFBa0U7UUFDbEUsa0JBQWEsR0FBRyxjQUFjLENBQUM7UUFFL0Isb0VBQW9FO1FBQ3BFLG9CQUFlLEdBQUcsZ0JBQWdCLENBQUM7UUFFbkMsa0VBQWtFO1FBQ2xFLGtCQUFhLEdBQUcsY0FBYyxDQUFDO1FBRS9CLG9FQUFvRTtRQUNwRSxvQkFBZSxHQUFHLGdCQUFnQixDQUFDO1FBRW5DLGdFQUFnRTtRQUNoRSxnQkFBVyxHQUFHLFlBQVksQ0FBQztRQUUzQixrRUFBa0U7UUFDbEUsa0JBQWEsR0FBRyxjQUFjLENBQUM7UUFFL0Isc0VBQXNFO1FBQ3RFLG1CQUFjLEdBQUcsZ0JBQWdCLENBQUM7UUFFbEMsa0VBQWtFO1FBQ2xFLG1CQUFjLEdBQUcsWUFBWSxDQUFDO1FBRTlCLHFFQUFxRTtRQUNyRSxrQkFBYSxHQUFHLGVBQWUsQ0FBQztRQUVoQyxpRUFBaUU7UUFDakUsa0JBQWEsR0FBRyxXQUFXLENBQUM7UUFFNUIsMkVBQTJFO1FBQzNFLHVCQUFrQixHQUFHLG1CQUFtQixDQUFDO1FBRXpDLHVFQUF1RTtRQUN2RSx1QkFBa0IsR0FBRyxlQUFlLENBQUM7UUFFckMsOEVBQThFO1FBQzlFLDJCQUFzQixHQUFHLHNCQUFzQixDQUFDO1FBRWhELDZFQUE2RTtRQUM3RSwrQkFBMEIsR0FBRyx1QkFBdUIsQ0FBQztRQUVyRCxrREFBa0Q7UUFDbEQsbUJBQWMsR0FBRyxNQUFNLENBQUM7UUFFeEIsZ0RBQWdEO1FBQ2hELGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCLHlDQUF5QztRQUN6QyxrQkFBYSxHQUFHLElBQUksQ0FBQztRQUVyQix5Q0FBeUM7UUFDekMsa0JBQWEsR0FBRyxJQUFJLENBQUM7S0FDdEI7K0dBNURZLGVBQWU7bUhBQWYsZUFBZSxjQURGLE1BQU07OzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBPd2xEYXRlVGltZUludGwge1xuICAvKipcbiAgICogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbmV2ZXIgdGhlIGxhYmVscyBoZXJlIGFyZSBjaGFuZ2VkLiBVc2UgdGhpcyB0byBub3RpZnlcbiAgICogY29tcG9uZW50cyBpZiB0aGUgbGFiZWxzIGhhdmUgY2hhbmdlZCBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZXM6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKiBBIGxhYmVsIGZvciB0aGUgdXAgc2Vjb25kIGJ1dHRvbiAodXNlZCBieSBzY3JlZW4gcmVhZGVycykuICAqL1xuICB1cFNlY29uZExhYmVsID0gJ0FkZCBhIHNlY29uZCc7XG5cbiAgLyoqIEEgbGFiZWwgZm9yIHRoZSBkb3duIHNlY29uZCBidXR0b24gKHVzZWQgYnkgc2NyZWVuIHJlYWRlcnMpLiAgKi9cbiAgZG93blNlY29uZExhYmVsID0gJ01pbnVzIGEgc2Vjb25kJztcblxuICAvKiogQSBsYWJlbCBmb3IgdGhlIHVwIG1pbnV0ZSBidXR0b24gKHVzZWQgYnkgc2NyZWVuIHJlYWRlcnMpLiAgKi9cbiAgdXBNaW51dGVMYWJlbCA9ICdBZGQgYSBtaW51dGUnO1xuXG4gIC8qKiBBIGxhYmVsIGZvciB0aGUgZG93biBtaW51dGUgYnV0dG9uICh1c2VkIGJ5IHNjcmVlbiByZWFkZXJzKS4gICovXG4gIGRvd25NaW51dGVMYWJlbCA9ICdNaW51cyBhIG1pbnV0ZSc7XG5cbiAgLyoqIEEgbGFiZWwgZm9yIHRoZSB1cCBob3VyIGJ1dHRvbiAodXNlZCBieSBzY3JlZW4gcmVhZGVycykuICAqL1xuICB1cEhvdXJMYWJlbCA9ICdBZGQgYSBob3VyJztcblxuICAvKiogQSBsYWJlbCBmb3IgdGhlIGRvd24gaG91ciBidXR0b24gKHVzZWQgYnkgc2NyZWVuIHJlYWRlcnMpLiAgKi9cbiAgZG93bkhvdXJMYWJlbCA9ICdNaW51cyBhIGhvdXInO1xuXG4gIC8qKiBBIGxhYmVsIGZvciB0aGUgcHJldmlvdXMgbW9udGggYnV0dG9uICh1c2VkIGJ5IHNjcmVlbiByZWFkZXJzKS4gKi9cbiAgcHJldk1vbnRoTGFiZWwgPSAnUHJldmlvdXMgbW9udGgnO1xuXG4gIC8qKiBBIGxhYmVsIGZvciB0aGUgbmV4dCBtb250aCBidXR0b24gKHVzZWQgYnkgc2NyZWVuIHJlYWRlcnMpLiAqL1xuICBuZXh0TW9udGhMYWJlbCA9ICdOZXh0IG1vbnRoJztcblxuICAvKiogQSBsYWJlbCBmb3IgdGhlIHByZXZpb3VzIHllYXIgYnV0dG9uICh1c2VkIGJ5IHNjcmVlbiByZWFkZXJzKS4gKi9cbiAgcHJldlllYXJMYWJlbCA9ICdQcmV2aW91cyB5ZWFyJztcblxuICAvKiogQSBsYWJlbCBmb3IgdGhlIG5leHQgeWVhciBidXR0b24gKHVzZWQgYnkgc2NyZWVuIHJlYWRlcnMpLiAqL1xuICBuZXh0WWVhckxhYmVsID0gJ05leHQgeWVhcic7XG5cbiAgLyoqIEEgbGFiZWwgZm9yIHRoZSBwcmV2aW91cyBtdWx0aS15ZWFyIGJ1dHRvbiAodXNlZCBieSBzY3JlZW4gcmVhZGVycykuICovXG4gIHByZXZNdWx0aVllYXJMYWJlbCA9ICdQcmV2aW91cyAyMSB5ZWFycyc7XG5cbiAgLyoqIEEgbGFiZWwgZm9yIHRoZSBuZXh0IG11bHRpLXllYXIgYnV0dG9uICh1c2VkIGJ5IHNjcmVlbiByZWFkZXJzKS4gKi9cbiAgbmV4dE11bHRpWWVhckxhYmVsID0gJ05leHQgMjEgeWVhcnMnO1xuXG4gIC8qKiBBIGxhYmVsIGZvciB0aGUgJ3N3aXRjaCB0byBtb250aCB2aWV3JyBidXR0b24gKHVzZWQgYnkgc2NyZWVuIHJlYWRlcnMpLiAqL1xuICBzd2l0Y2hUb01vbnRoVmlld0xhYmVsID0gJ0NoYW5nZSB0byBtb250aCB2aWV3JztcblxuICAvKiogQSBsYWJlbCBmb3IgdGhlICdzd2l0Y2ggdG8geWVhciB2aWV3JyBidXR0b24gKHVzZWQgYnkgc2NyZWVuIHJlYWRlcnMpLiAqL1xuICBzd2l0Y2hUb011bHRpWWVhclZpZXdMYWJlbCA9ICdDaG9vc2UgbW9udGggYW5kIHllYXInO1xuXG4gIC8qKiBBIGxhYmVsIGZvciB0aGUgcmFuZ2UgJ2Zyb20nIGluIHBpY2tlciBpbmZvICovXG4gIHJhbmdlRnJvbUxhYmVsID0gJ0Zyb20nO1xuXG4gIC8qKiBBIGxhYmVsIGZvciB0aGUgcmFuZ2UgJ3RvJyBpbiBwaWNrZXIgaW5mbyAqL1xuICByYW5nZVRvTGFiZWwgPSAnVG8nO1xuXG4gIC8qKiBBIGxhYmVsIGZvciB0aGUgaG91cjEyIGJ1dHRvbiAoQU0pICovXG4gIGhvdXIxMkFNTGFiZWwgPSAnQU0nO1xuXG4gIC8qKiBBIGxhYmVsIGZvciB0aGUgaG91cjEyIGJ1dHRvbiAoUE0pICovXG4gIGhvdXIxMlBNTGFiZWwgPSAnUE0nO1xufVxuIl19
|