@skyux/datetime 11.39.0 → 12.0.0-alpha.1

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 (69) hide show
  1. package/documentation.json +1004 -2555
  2. package/fesm2022/skyux-datetime-testing.mjs +4 -3
  3. package/fesm2022/skyux-datetime-testing.mjs.map +1 -1
  4. package/fesm2022/skyux-datetime.mjs +105 -102
  5. package/fesm2022/skyux-datetime.mjs.map +1 -1
  6. package/package.json +15 -19
  7. package/testing/modules/datepicker/datepicker-calendar-harness.d.ts +3 -2
  8. package/testing/public-api.d.ts +0 -2
  9. package/esm2022/index.mjs +0 -23
  10. package/esm2022/lib/modules/date-pipe/date-pipe.module.mjs +0 -20
  11. package/esm2022/lib/modules/date-pipe/date.pipe.mjs +0 -68
  12. package/esm2022/lib/modules/date-pipe/date.service.mjs +0 -94
  13. package/esm2022/lib/modules/date-pipe/fuzzy-date.pipe.mjs +0 -47
  14. package/esm2022/lib/modules/date-range-picker/date-range-picker-end-date-resource-key.pipe.mjs +0 -21
  15. package/esm2022/lib/modules/date-range-picker/date-range-picker-start-date-resource-key.pipe.mjs +0 -21
  16. package/esm2022/lib/modules/date-range-picker/date-range-picker.component.mjs +0 -445
  17. package/esm2022/lib/modules/date-range-picker/date-range-picker.module.mjs +0 -17
  18. package/esm2022/lib/modules/date-range-picker/date-range.service.mjs +0 -95
  19. package/esm2022/lib/modules/date-range-picker/types/date-range-calculation.mjs +0 -2
  20. package/esm2022/lib/modules/date-range-picker/types/date-range-calculator-config.mjs +0 -2
  21. package/esm2022/lib/modules/date-range-picker/types/date-range-calculator-date-range-function.mjs +0 -2
  22. package/esm2022/lib/modules/date-range-picker/types/date-range-calculator-id.mjs +0 -118
  23. package/esm2022/lib/modules/date-range-picker/types/date-range-calculator-type.mjs +0 -23
  24. package/esm2022/lib/modules/date-range-picker/types/date-range-calculator-validate-function.mjs +0 -2
  25. package/esm2022/lib/modules/date-range-picker/types/date-range-calculator.mjs +0 -71
  26. package/esm2022/lib/modules/date-range-picker/types/date-range-default-calculator-config.mjs +0 -2
  27. package/esm2022/lib/modules/date-range-picker/types/date-range-default-calculator-configs.mjs +0 -173
  28. package/esm2022/lib/modules/date-range-picker/types/date-range-relative-value.mjs +0 -249
  29. package/esm2022/lib/modules/date-range-picker/types/date-range.mjs +0 -2
  30. package/esm2022/lib/modules/datepicker/calendar/datepicker-calendar-change.mjs +0 -2
  31. package/esm2022/lib/modules/datepicker/calendar/datepicker-calendar-inner.component.mjs +0 -383
  32. package/esm2022/lib/modules/datepicker/calendar/datepicker-calendar-label.pipe.mjs +0 -39
  33. package/esm2022/lib/modules/datepicker/calendar/datepicker-calendar.component.mjs +0 -100
  34. package/esm2022/lib/modules/datepicker/calendar/datepicker-calendar.service.mjs +0 -22
  35. package/esm2022/lib/modules/datepicker/calendar/daypicker-button.component.mjs +0 -23
  36. package/esm2022/lib/modules/datepicker/calendar/daypicker-cell.component.mjs +0 -129
  37. package/esm2022/lib/modules/datepicker/calendar/daypicker-context.mjs +0 -2
  38. package/esm2022/lib/modules/datepicker/calendar/daypicker.component.mjs +0 -221
  39. package/esm2022/lib/modules/datepicker/calendar/monthpicker.component.mjs +0 -80
  40. package/esm2022/lib/modules/datepicker/calendar/yearpicker.component.mjs +0 -87
  41. package/esm2022/lib/modules/datepicker/date-formatter.mjs +0 -38
  42. package/esm2022/lib/modules/datepicker/datepicker-config.service.mjs +0 -21
  43. package/esm2022/lib/modules/datepicker/datepicker-custom-date.mjs +0 -2
  44. package/esm2022/lib/modules/datepicker/datepicker-host.service.mjs +0 -61
  45. package/esm2022/lib/modules/datepicker/datepicker-input.directive.mjs +0 -526
  46. package/esm2022/lib/modules/datepicker/datepicker.component.mjs +0 -419
  47. package/esm2022/lib/modules/datepicker/datepicker.module.mjs +0 -62
  48. package/esm2022/lib/modules/datepicker/fuzzy/datepicker-input-fuzzy.directive.mjs +0 -516
  49. package/esm2022/lib/modules/datepicker/fuzzy/fuzzy-date.mjs +0 -2
  50. package/esm2022/lib/modules/datepicker/fuzzy/fuzzy-date.service.mjs +0 -411
  51. package/esm2022/lib/modules/shared/sky-datetime-resources.module.mjs +0 -130
  52. package/esm2022/lib/modules/timepicker/timepicker-time-format-type.mjs +0 -2
  53. package/esm2022/lib/modules/timepicker/timepicker-time-output.mjs +0 -2
  54. package/esm2022/lib/modules/timepicker/timepicker.component.mjs +0 -415
  55. package/esm2022/lib/modules/timepicker/timepicker.directive.mjs +0 -226
  56. package/esm2022/lib/modules/timepicker/timepicker.module.mjs +0 -37
  57. package/esm2022/skyux-datetime.mjs +0 -5
  58. package/esm2022/testing/legacy/datepicker-fixture.mjs +0 -56
  59. package/esm2022/testing/legacy/timepicker-fixture.mjs +0 -52
  60. package/esm2022/testing/modules/date-range-picker/date-range-picker-harness.filters.mjs +0 -2
  61. package/esm2022/testing/modules/date-range-picker/date-range-picker-harness.mjs +0 -193
  62. package/esm2022/testing/modules/datepicker/datepicker-calendar-harness.filters.mjs +0 -2
  63. package/esm2022/testing/modules/datepicker/datepicker-calendar-harness.mjs +0 -87
  64. package/esm2022/testing/modules/datepicker/datepicker-harness.filters.mjs +0 -2
  65. package/esm2022/testing/modules/datepicker/datepicker-harness.mjs +0 -60
  66. package/esm2022/testing/modules/datepicker/datepicker-input-harness.mjs +0 -29
  67. package/esm2022/testing/modules/datepicker/fuzzy-datepicker-input-harness.mjs +0 -29
  68. package/esm2022/testing/public-api.mjs +0 -8
  69. package/esm2022/testing/skyux-datetime-testing.mjs +0 -5
@@ -1,411 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import moment from 'moment';
3
- import { Subject } from 'rxjs';
4
- import { takeUntil } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@skyux/i18n";
7
- /**
8
- * @internal
9
- */
10
- export class SkyFuzzyDateService {
11
- #currentLocale;
12
- #ngUnsubscribe = new Subject();
13
- constructor(localeProvider) {
14
- this.#currentLocale = localeProvider.defaultLocale;
15
- localeProvider
16
- .getLocaleInfo()
17
- .pipe(takeUntil(this.#ngUnsubscribe))
18
- .subscribe((localeInfo) => {
19
- this.#currentLocale = localeInfo.locale;
20
- });
21
- }
22
- /* istanbul ignore next */
23
- ngOnDestroy() {
24
- this.#ngUnsubscribe.next();
25
- this.#ngUnsubscribe.complete();
26
- }
27
- /**
28
- * Returns the browser's current locale string.
29
- */
30
- getCurrentLocale() {
31
- return this.#currentLocale;
32
- }
33
- /**
34
- * Returns the short format of the provided locale.
35
- * If not provided, the locale will be taken from the browser's default locale.
36
- */
37
- getLocaleShortFormat(locale) {
38
- return moment.localeData(locale || this.#currentLocale).longDateFormat('L');
39
- }
40
- /**
41
- * Formats a fuzzy date by using the provided format and locale strings.
42
- * If not provided, the locale will be taken from the browser's default locale.
43
- */
44
- format(fuzzyDate, format, locale) {
45
- if (!this.#isFuzzyDateValid(fuzzyDate)) {
46
- return '';
47
- }
48
- if (!format) {
49
- return '';
50
- }
51
- const separator = this.#getDateSeparator(format);
52
- const dateParts = [];
53
- const formatTokens = separator
54
- ? format.split(separator)
55
- : [format];
56
- locale = locale || this.#currentLocale;
57
- const fuzzyDateMoment = this.getMomentFromFuzzyDate(fuzzyDate).locale(locale);
58
- for (const token of formatTokens) {
59
- /* istanbul ignore else */
60
- if (token) {
61
- switch (token.substr(0, 1).toLowerCase()) {
62
- case 'y':
63
- if (fuzzyDate.year) {
64
- dateParts.push(fuzzyDateMoment.format(token));
65
- }
66
- break;
67
- case 'm':
68
- if (fuzzyDate.month) {
69
- dateParts.push(fuzzyDateMoment.format(token));
70
- }
71
- break;
72
- case 'd':
73
- if (fuzzyDate.day) {
74
- dateParts.push(fuzzyDateMoment.format(token));
75
- }
76
- break;
77
- }
78
- }
79
- }
80
- return dateParts.join(separator);
81
- }
82
- /**
83
- * If not provided, years will default to current year; months will default to January;
84
- * days will default to 1st of the month.
85
- */
86
- getMomentFromFuzzyDate(fuzzyDate) {
87
- if (!fuzzyDate) {
88
- return;
89
- }
90
- const year = fuzzyDate.year || this.#getDefaultYear(fuzzyDate);
91
- const month = fuzzyDate.month && fuzzyDate.month > 0 ? fuzzyDate.month - 1 : 0;
92
- const day = fuzzyDate.day || 1;
93
- return moment([year, month, day]);
94
- }
95
- /**
96
- * Gets a string instance of a fuzzy date.
97
- * @deprecated Deprecated in favor of the `format` function.
98
- */
99
- getStringFromFuzzyDate(fuzzyDate, dateFormat) {
100
- if (!fuzzyDate || !dateFormat) {
101
- return;
102
- }
103
- const separator = this.#getDateSeparator(dateFormat);
104
- const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);
105
- let dateString = '';
106
- // Get the components of the date in the order expected of the local format.
107
- const dateComponents = [
108
- { value: fuzzyDate.year || 0, index: dateFormatIndexes.yearIndex },
109
- { value: fuzzyDate.month || 0, index: dateFormatIndexes.monthIndex },
110
- { value: fuzzyDate.day || 0, index: dateFormatIndexes.dayIndex },
111
- ];
112
- dateComponents.sort((a, b) => a.index - b.index);
113
- dateComponents.forEach((component) => {
114
- if (component.value > 0 && component.index > -1) {
115
- if (dateString) {
116
- dateString += separator;
117
- }
118
- dateString += component.value.toString();
119
- }
120
- });
121
- return dateString.trim();
122
- }
123
- getFuzzyDateFromSelectedDate(selectedDate, dateFormat) {
124
- if (!selectedDate || !dateFormat) {
125
- return;
126
- }
127
- const fuzzyDate = {};
128
- const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);
129
- if (dateFormatIndexes.yearIndex > -1) {
130
- fuzzyDate.year = selectedDate.getFullYear();
131
- }
132
- if (dateFormatIndexes.dayIndex > -1) {
133
- fuzzyDate.day = selectedDate.getDate();
134
- }
135
- if (dateFormatIndexes.monthIndex > -1) {
136
- fuzzyDate.month = selectedDate.getMonth() + 1; // getMonth() is 0-indexed.
137
- }
138
- return fuzzyDate;
139
- }
140
- getFuzzyDateFromString(date, dateFormat) {
141
- if (!date || !dateFormat) {
142
- return;
143
- }
144
- let day;
145
- let month;
146
- let year;
147
- const dateComponents = this.#getDateComponents(date);
148
- const indexes = this.#getDateValueIndexes(date, dateFormat);
149
- // Look at the date string's component count:
150
- // 3 indicates a full date
151
- // 2 indicates a month-year or month-day date
152
- // 1 indicates a year
153
- // Other indicates a problem
154
- switch (dateComponents.length) {
155
- case 3:
156
- year = dateComponents[indexes.yearIndex];
157
- month = dateComponents[indexes.monthIndex];
158
- day = dateComponents[indexes.dayIndex];
159
- break;
160
- case 2:
161
- // First, check for a 4-digit year. If year exists, then we assume the other component
162
- // is the month. Otherwise, we can assume the input is mm/dd or mm/yy (2-digit year).
163
- year = this.#get4DigitYearFromDateString(date);
164
- if (year) {
165
- month =
166
- dateComponents[0] === year.toString()
167
- ? dateComponents[1]
168
- : dateComponents[0];
169
- }
170
- else {
171
- if (indexes.dayIndex > -1) {
172
- // mm/dd
173
- month =
174
- indexes.monthIndex < indexes.dayIndex
175
- ? dateComponents[0]
176
- : dateComponents[1];
177
- day =
178
- month === dateComponents[1]
179
- ? dateComponents[0]
180
- : dateComponents[1];
181
- }
182
- else {
183
- // mm/yy
184
- month =
185
- indexes.monthIndex < indexes.yearIndex
186
- ? dateComponents[0]
187
- : dateComponents[1];
188
- year =
189
- month === dateComponents[1]
190
- ? dateComponents[0]
191
- : dateComponents[1];
192
- }
193
- }
194
- break;
195
- case 1:
196
- year = date;
197
- break;
198
- default:
199
- return;
200
- }
201
- if (month) {
202
- // Check if month is valid.
203
- month = this.#getMonthNumber(month);
204
- if (month === undefined) {
205
- return;
206
- }
207
- // Check if day is valid.
208
- if (day) {
209
- day = parseInt(day, 10);
210
- const fuzzyMoment = this.getMomentFromFuzzyDate({
211
- month: month,
212
- day: day,
213
- year: year,
214
- });
215
- if (isNaN(day) || !fuzzyMoment.isValid()) {
216
- return;
217
- }
218
- }
219
- }
220
- if (year) {
221
- year =
222
- year.toString().length === 2
223
- ? moment.parseTwoDigitYear(year)
224
- : parseInt(year.toString(), 10);
225
- if (isNaN(year) || year.toString().length !== 4) {
226
- return;
227
- }
228
- }
229
- return {
230
- month: month,
231
- day: day,
232
- year: year,
233
- };
234
- }
235
- getFuzzyDateRange(startFuzzyDate, endFuzzyDate) {
236
- const start = this.getMomentFromFuzzyDate(startFuzzyDate);
237
- const end = this.getMomentFromFuzzyDate(endFuzzyDate);
238
- let days;
239
- let months;
240
- let years;
241
- let valid = false;
242
- if (startFuzzyDate &&
243
- startFuzzyDate.year &&
244
- endFuzzyDate &&
245
- endFuzzyDate.year) {
246
- years = end.diff(start, 'years');
247
- months = end.diff(start, 'months');
248
- days = end.diff(start, 'days');
249
- valid = end.diff(start) >= 0;
250
- }
251
- return {
252
- years: years,
253
- months: months,
254
- days: days,
255
- startDate: start.toDate(),
256
- endDate: end.toDate(),
257
- valid: valid,
258
- };
259
- }
260
- getCurrentFuzzyDate() {
261
- const currentDate = moment();
262
- return {
263
- day: currentDate.date(),
264
- month: currentDate.month() + 1, // month() is 0-indexed.
265
- year: currentDate.year(),
266
- };
267
- }
268
- #getMostRecentLeapYear() {
269
- let leapYear = new Date().getFullYear();
270
- while (!this.#isLeapYear(leapYear)) {
271
- leapYear -= 1;
272
- }
273
- return leapYear;
274
- }
275
- /**
276
- * Returns the first separator found in the provided date format string.
277
- * Accepted separators: ['/', '.', '-', ' '].
278
- * @param dateFormat
279
- */
280
- #getDateSeparator(dateFormat) {
281
- let returnValue;
282
- const separators = ['/', '.', '-', ' '];
283
- separators.forEach((separator) => {
284
- if (!returnValue && dateFormat.indexOf(separator) > 0) {
285
- returnValue = separator;
286
- }
287
- });
288
- return returnValue;
289
- }
290
- #get4DigitYearFromDateString(date) {
291
- let year;
292
- const separator = this.#getDateSeparator(date);
293
- if (separator) {
294
- // Find the number value in the string that is 4 digits long.
295
- date.split(separator).forEach((dateComponent) => {
296
- if (!year && parseInt(dateComponent, 10).toString().length === 4) {
297
- year = dateComponent;
298
- }
299
- });
300
- }
301
- if (year && !isNaN(Number(year))) {
302
- return parseInt(year, 10);
303
- }
304
- return undefined;
305
- }
306
- #isLeapYear(year) {
307
- return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
308
- }
309
- #getMonthNumber(month) {
310
- let returnValue;
311
- const monthAsNumber = parseInt(month, 10);
312
- // If the month component is a string ("January"), we check to see if it is a valid month
313
- if (isNaN(monthAsNumber)) {
314
- if (!moment(month, 'MMMM').isValid()) {
315
- return;
316
- }
317
- returnValue = parseInt(moment().month(month).format('M'), 10);
318
- }
319
- else {
320
- returnValue = monthAsNumber;
321
- }
322
- // Ensure that the month is between 1 and 12
323
- if (!(1 <= returnValue && returnValue <= 12)) {
324
- return;
325
- }
326
- return returnValue;
327
- }
328
- #getDefaultYear(fuzzyDate) {
329
- // Check if we need to return a leap year or the current year.
330
- if (fuzzyDate.month === 2 && fuzzyDate.day === 29) {
331
- return this.#getMostRecentLeapYear();
332
- }
333
- else {
334
- return new Date().getFullYear();
335
- }
336
- }
337
- #getDateComponents(date) {
338
- const separator = this.#getDateSeparator(date);
339
- if (separator) {
340
- return date.split(separator);
341
- }
342
- else {
343
- return [date];
344
- }
345
- }
346
- // Returns the order of year, month, and day from the provided date format.
347
- #getDateFormatIndexes(dateFormat) {
348
- dateFormat = dateFormat.toLowerCase();
349
- return {
350
- yearIndex: dateFormat.indexOf('y'),
351
- monthIndex: dateFormat.indexOf('m'),
352
- dayIndex: dateFormat.indexOf('d'),
353
- };
354
- }
355
- // Returns the index of each of the date components in the provided string (month, day, year).
356
- #getDateValueIndexes(date, dateFormat) {
357
- const dateFormatIndexes = this.#getDateFormatIndexes(dateFormat);
358
- const dateComponentIndexes = [];
359
- if (dateFormatIndexes.yearIndex > -1) {
360
- dateComponentIndexes.push(dateFormatIndexes.yearIndex);
361
- }
362
- if (dateFormatIndexes.monthIndex > -1) {
363
- dateComponentIndexes.push(dateFormatIndexes.monthIndex);
364
- }
365
- if (dateFormatIndexes.dayIndex > -1) {
366
- dateComponentIndexes.push(dateFormatIndexes.dayIndex);
367
- }
368
- dateComponentIndexes.sort(function (a, b) {
369
- return a - b;
370
- });
371
- return {
372
- yearIndex: dateComponentIndexes.indexOf(dateFormatIndexes.yearIndex),
373
- monthIndex: dateComponentIndexes.indexOf(dateFormatIndexes.monthIndex),
374
- dayIndex: dateComponentIndexes.indexOf(dateFormatIndexes.dayIndex),
375
- };
376
- }
377
- /**
378
- * Validates the provided SkyFuzzyDate object. Valid fuzzy dates are as follows:
379
- * month, day, year
380
- * month, year
381
- * month, day
382
- * year only
383
- */
384
- #isFuzzyDateValid(fuzzyDate) {
385
- if (!fuzzyDate) {
386
- return false;
387
- }
388
- // If none of the dates part are specified, return false.
389
- if (!fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {
390
- return false;
391
- }
392
- // If only month is specified, return false.
393
- if (!fuzzyDate.day && fuzzyDate.month && !fuzzyDate.year) {
394
- return false;
395
- }
396
- // If only day is specified, return false.
397
- if (fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {
398
- return false;
399
- }
400
- return true;
401
- }
402
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyFuzzyDateService, deps: [{ token: i1.SkyAppLocaleProvider }], target: i0.ɵɵFactoryTarget.Injectable }); }
403
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyFuzzyDateService, providedIn: 'root' }); }
404
- }
405
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyFuzzyDateService, decorators: [{
406
- type: Injectable,
407
- args: [{
408
- providedIn: 'root',
409
- }]
410
- }], ctorParameters: () => [{ type: i1.SkyAppLocaleProvider }] });
411
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnV6enktZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5L2Z1enp5LWRhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBR3RELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBeUIzQzs7R0FFRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsY0FBYyxDQUFTO0lBRXZCLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXJDLFlBQVksY0FBb0M7UUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1FBQ25ELGNBQWM7YUFDWCxhQUFhLEVBQUU7YUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNwQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsMEJBQTBCO0lBQ25CLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLG9C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QUMsVUFBVSxDQUFDO1lBQ3RFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1NBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaUJBQWlCLENBQUMsU0FBdUI7UUFDdkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQseURBQXlEO1FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCwwQ0FBMEM7UUFDMUMsSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBdGRVLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUFwcExvY2FsZVByb3ZpZGVyIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreUZ1enp5RGF0ZSB9IGZyb20gJy4vZnV6enktZGF0ZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBTa3lEYXRlSW5kZXhlcyB7XG4gIHllYXJJbmRleDogbnVtYmVyO1xuICBtb250aEluZGV4OiBudW1iZXI7XG4gIGRheUluZGV4OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBTa3lGdXp6eURhdGVSYW5nZSB7XG4gIHllYXJzOiBzdHJpbmc7XG4gIG1vbnRoczogc3RyaW5nO1xuICBkYXlzOiBzdHJpbmc7XG4gIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgZW5kRGF0ZTogRGF0ZTtcbiAgdmFsaWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lGdXp6eURhdGVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgI2N1cnJlbnRMb2NhbGU6IHN0cmluZztcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IobG9jYWxlUHJvdmlkZXI6IFNreUFwcExvY2FsZVByb3ZpZGVyKSB7XG4gICAgdGhpcy4jY3VycmVudExvY2FsZSA9IGxvY2FsZVByb3ZpZGVyLmRlZmF1bHRMb2NhbGU7XG4gICAgbG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm8pID0+IHtcbiAgICAgICAgdGhpcy4jY3VycmVudExvY2FsZSA9IGxvY2FsZUluZm8ubG9jYWxlO1xuICAgICAgfSk7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJyb3dzZXIncyBjdXJyZW50IGxvY2FsZSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50TG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNob3J0IGZvcm1hdCBvZiB0aGUgcHJvdmlkZWQgbG9jYWxlLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBsb2NhbGUgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBsb2NhbGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9jYWxlU2hvcnRGb3JtYXQobG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50LmxvY2FsZURhdGEobG9jYWxlIHx8IHRoaXMuI2N1cnJlbnRMb2NhbGUpLmxvbmdEYXRlRm9ybWF0KCdMJyk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhIGZ1enp5IGRhdGUgYnkgdXNpbmcgdGhlIHByb3ZpZGVkIGZvcm1hdCBhbmQgbG9jYWxlIHN0cmluZ3MuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGxvY2FsZSB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGJyb3dzZXIncyBkZWZhdWx0IGxvY2FsZS5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXQoXG4gICAgZnV6enlEYXRlOiBTa3lGdXp6eURhdGUsXG4gICAgZm9ybWF0Pzogc3RyaW5nLFxuICAgIGxvY2FsZT86IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuI2lzRnV6enlEYXRlVmFsaWQoZnV6enlEYXRlKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICghZm9ybWF0KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy4jZ2V0RGF0ZVNlcGFyYXRvcihmb3JtYXQpO1xuICAgIGNvbnN0IGRhdGVQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBmb3JtYXRUb2tlbnM6IHN0cmluZ1tdID0gc2VwYXJhdG9yXG4gICAgICA/IGZvcm1hdC5zcGxpdChzZXBhcmF0b3IpXG4gICAgICA6IFtmb3JtYXRdO1xuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCB0aGlzLiNjdXJyZW50TG9jYWxlO1xuICAgIGNvbnN0IGZ1enp5RGF0ZU1vbWVudCA9XG4gICAgICB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoZnV6enlEYXRlKS5sb2NhbGUobG9jYWxlKTtcblxuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgZm9ybWF0VG9rZW5zKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIHN3aXRjaCAodG9rZW4uc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgIGlmIChmdXp6eURhdGUueWVhcikge1xuICAgICAgICAgICAgICBkYXRlUGFydHMucHVzaChmdXp6eURhdGVNb21lbnQuZm9ybWF0KHRva2VuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgIGlmIChmdXp6eURhdGUubW9udGgpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBpZiAoZnV6enlEYXRlLmRheSkge1xuICAgICAgICAgICAgICBkYXRlUGFydHMucHVzaChmdXp6eURhdGVNb21lbnQuZm9ybWF0KHRva2VuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlUGFydHMuam9pbihzZXBhcmF0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIG5vdCBwcm92aWRlZCwgeWVhcnMgd2lsbCBkZWZhdWx0IHRvIGN1cnJlbnQgeWVhcjsgbW9udGhzIHdpbGwgZGVmYXVsdCB0byBKYW51YXJ5O1xuICAgKiBkYXlzIHdpbGwgZGVmYXVsdCB0byAxc3Qgb2YgdGhlIG1vbnRoLlxuICAgKi9cbiAgcHVibGljIGdldE1vbWVudEZyb21GdXp6eURhdGUoZnV6enlEYXRlPzogU2t5RnV6enlEYXRlKTogYW55IHtcbiAgICBpZiAoIWZ1enp5RGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHllYXIgPSBmdXp6eURhdGUueWVhciB8fCB0aGlzLiNnZXREZWZhdWx0WWVhcihmdXp6eURhdGUpO1xuICAgIGNvbnN0IG1vbnRoID1cbiAgICAgIGZ1enp5RGF0ZS5tb250aCAmJiBmdXp6eURhdGUubW9udGggPiAwID8gZnV6enlEYXRlLm1vbnRoIC0gMSA6IDA7XG4gICAgY29uc3QgZGF5ID0gZnV6enlEYXRlLmRheSB8fCAxO1xuXG4gICAgcmV0dXJuIG1vbWVudChbeWVhciwgbW9udGgsIGRheV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBzdHJpbmcgaW5zdGFuY2Ugb2YgYSBmdXp6eSBkYXRlLlxuICAgKiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSBgZm9ybWF0YCBmdW5jdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXRTdHJpbmdGcm9tRnV6enlEYXRlKFxuICAgIGZ1enp5RGF0ZT86IFNreUZ1enp5RGF0ZSxcbiAgICBkYXRlRm9ybWF0Pzogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghZnV6enlEYXRlIHx8ICFkYXRlRm9ybWF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy4jZ2V0RGF0ZVNlcGFyYXRvcihkYXRlRm9ybWF0KTtcbiAgICBjb25zdCBkYXRlRm9ybWF0SW5kZXhlcyA9IHRoaXMuI2dldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQpO1xuICAgIGxldCBkYXRlU3RyaW5nID0gJyc7XG5cbiAgICAvLyBHZXQgdGhlIGNvbXBvbmVudHMgb2YgdGhlIGRhdGUgaW4gdGhlIG9yZGVyIGV4cGVjdGVkIG9mIHRoZSBsb2NhbCBmb3JtYXQuXG4gICAgY29uc3QgZGF0ZUNvbXBvbmVudHMgPSBbXG4gICAgICB7IHZhbHVlOiBmdXp6eURhdGUueWVhciB8fCAwLCBpbmRleDogZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4IH0sXG4gICAgICB7IHZhbHVlOiBmdXp6eURhdGUubW9udGggfHwgMCwgaW5kZXg6IGRhdGVGb3JtYXRJbmRleGVzLm1vbnRoSW5kZXggfSxcbiAgICAgIHsgdmFsdWU6IGZ1enp5RGF0ZS5kYXkgfHwgMCwgaW5kZXg6IGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4IH0sXG4gICAgXTtcbiAgICBkYXRlQ29tcG9uZW50cy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuXG4gICAgZGF0ZUNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XG4gICAgICBpZiAoY29tcG9uZW50LnZhbHVlID4gMCAmJiBjb21wb25lbnQuaW5kZXggPiAtMSkge1xuICAgICAgICBpZiAoZGF0ZVN0cmluZykge1xuICAgICAgICAgIGRhdGVTdHJpbmcgKz0gc2VwYXJhdG9yO1xuICAgICAgICB9XG4gICAgICAgIGRhdGVTdHJpbmcgKz0gY29tcG9uZW50LnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0ZVN0cmluZy50cmltKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnV6enlEYXRlRnJvbVNlbGVjdGVkRGF0ZShcbiAgICBzZWxlY3RlZERhdGU/OiBEYXRlLFxuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmcsXG4gICk6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzZWxlY3RlZERhdGUgfHwgIWRhdGVGb3JtYXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSA9IHt9O1xuICAgIGNvbnN0IGRhdGVGb3JtYXRJbmRleGVzID0gdGhpcy4jZ2V0RGF0ZUZvcm1hdEluZGV4ZXMoZGF0ZUZvcm1hdCk7XG5cbiAgICBpZiAoZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS55ZWFyID0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS5kYXkgPSBzZWxlY3RlZERhdGUuZ2V0RGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS5tb250aCA9IHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICsgMTsgLy8gZ2V0TW9udGgoKSBpcyAwLWluZGV4ZWQuXG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1enp5RGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdXp6eURhdGVGcm9tU3RyaW5nKFxuICAgIGRhdGU6IHN0cmluZyxcbiAgICBkYXRlRm9ybWF0Pzogc3RyaW5nLFxuICApOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICghZGF0ZSB8fCAhZGF0ZUZvcm1hdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBkYXk6IGFueTtcbiAgICBsZXQgbW9udGg6IGFueTtcbiAgICBsZXQgeWVhcjogYW55O1xuXG4gICAgY29uc3QgZGF0ZUNvbXBvbmVudHMgPSB0aGlzLiNnZXREYXRlQ29tcG9uZW50cyhkYXRlKTtcbiAgICBjb25zdCBpbmRleGVzID0gdGhpcy4jZ2V0RGF0ZVZhbHVlSW5kZXhlcyhkYXRlLCBkYXRlRm9ybWF0KTtcblxuICAgIC8vIExvb2sgYXQgdGhlIGRhdGUgc3RyaW5nJ3MgY29tcG9uZW50IGNvdW50OlxuICAgIC8vIDMgaW5kaWNhdGVzIGEgZnVsbCBkYXRlXG4gICAgLy8gMiBpbmRpY2F0ZXMgYSBtb250aC15ZWFyIG9yIG1vbnRoLWRheSBkYXRlXG4gICAgLy8gMSBpbmRpY2F0ZXMgYSB5ZWFyXG4gICAgLy8gT3RoZXIgaW5kaWNhdGVzIGEgcHJvYmxlbVxuICAgIHN3aXRjaCAoZGF0ZUNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHllYXIgPSBkYXRlQ29tcG9uZW50c1tpbmRleGVzLnllYXJJbmRleF07XG4gICAgICAgIG1vbnRoID0gZGF0ZUNvbXBvbmVudHNbaW5kZXhlcy5tb250aEluZGV4XTtcbiAgICAgICAgZGF5ID0gZGF0ZUNvbXBvbmVudHNbaW5kZXhlcy5kYXlJbmRleF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICAvLyBGaXJzdCwgY2hlY2sgZm9yIGEgNC1kaWdpdCB5ZWFyLiBJZiB5ZWFyIGV4aXN0cywgdGhlbiB3ZSBhc3N1bWUgdGhlIG90aGVyIGNvbXBvbmVudFxuICAgICAgICAvLyBpcyB0aGUgbW9udGguIE90aGVyd2lzZSwgd2UgY2FuIGFzc3VtZSB0aGUgaW5wdXQgaXMgbW0vZGQgb3IgbW0veXkgKDItZGlnaXQgeWVhcikuXG4gICAgICAgIHllYXIgPSB0aGlzLiNnZXQ0RGlnaXRZZWFyRnJvbURhdGVTdHJpbmcoZGF0ZSk7XG4gICAgICAgIGlmICh5ZWFyKSB7XG4gICAgICAgICAgbW9udGggPVxuICAgICAgICAgICAgZGF0ZUNvbXBvbmVudHNbMF0gPT09IHllYXIudG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/IGRhdGVDb21wb25lbnRzWzFdXG4gICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGluZGV4ZXMuZGF5SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgLy8gbW0vZGRcbiAgICAgICAgICAgIG1vbnRoID1cbiAgICAgICAgICAgICAgaW5kZXhlcy5tb250aEluZGV4IDwgaW5kZXhlcy5kYXlJbmRleFxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgZGF5ID1cbiAgICAgICAgICAgICAgbW9udGggPT09IGRhdGVDb21wb25lbnRzWzFdXG4gICAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1swXVxuICAgICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG1tL3l5XG4gICAgICAgICAgICBtb250aCA9XG4gICAgICAgICAgICAgIGluZGV4ZXMubW9udGhJbmRleCA8IGluZGV4ZXMueWVhckluZGV4XG4gICAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1swXVxuICAgICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMV07XG4gICAgICAgICAgICB5ZWFyID1cbiAgICAgICAgICAgICAgbW9udGggPT09IGRhdGVDb21wb25lbnRzWzFdXG4gICAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1swXVxuICAgICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICB5ZWFyID0gZGF0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1vbnRoKSB7XG4gICAgICAvLyBDaGVjayBpZiBtb250aCBpcyB2YWxpZC5cbiAgICAgIG1vbnRoID0gdGhpcy4jZ2V0TW9udGhOdW1iZXIobW9udGgpO1xuICAgICAgaWYgKG1vbnRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBkYXkgaXMgdmFsaWQuXG4gICAgICBpZiAoZGF5KSB7XG4gICAgICAgIGRheSA9IHBhcnNlSW50KGRheSwgMTApO1xuICAgICAgICBjb25zdCBmdXp6eU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZSh7XG4gICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgIHllYXI6IHllYXIsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaXNOYU4oZGF5KSB8fCAhZnV6enlNb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHllYXIpIHtcbiAgICAgIHllYXIgPVxuICAgICAgICB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyXG4gICAgICAgICAgPyBtb21lbnQucGFyc2VUd29EaWdpdFllYXIoeWVhcilcbiAgICAgICAgICA6IHBhcnNlSW50KHllYXIudG9TdHJpbmcoKSwgMTApO1xuICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IHllYXIudG9TdHJpbmcoKS5sZW5ndGggIT09IDQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtb250aDogbW9udGgsXG4gICAgICBkYXk6IGRheSxcbiAgICAgIHllYXI6IHllYXIsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdXp6eURhdGVSYW5nZShcbiAgICBzdGFydEZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLFxuICAgIGVuZEZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLFxuICApOiBTa3lGdXp6eURhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoc3RhcnRGdXp6eURhdGUpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShlbmRGdXp6eURhdGUpO1xuICAgIGxldCBkYXlzO1xuICAgIGxldCBtb250aHM7XG4gICAgbGV0IHllYXJzO1xuICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuXG4gICAgaWYgKFxuICAgICAgc3RhcnRGdXp6eURhdGUgJiZcbiAgICAgIHN0YXJ0RnV6enlEYXRlLnllYXIgJiZcbiAgICAgIGVuZEZ1enp5RGF0ZSAmJlxuICAgICAgZW5kRnV6enlEYXRlLnllYXJcbiAgICApIHtcbiAgICAgIHllYXJzID0gZW5kLmRpZmYoc3RhcnQsICd5ZWFycycpO1xuICAgICAgbW9udGhzID0gZW5kLmRpZmYoc3RhcnQsICdtb250aHMnKTtcbiAgICAgIGRheXMgPSBlbmQuZGlmZihzdGFydCwgJ2RheXMnKTtcbiAgICAgIHZhbGlkID0gZW5kLmRpZmYoc3RhcnQpID49IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXJzOiB5ZWFycyxcbiAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgZGF5czogZGF5cyxcbiAgICAgIHN0YXJ0RGF0ZTogc3RhcnQudG9EYXRlKCksXG4gICAgICBlbmREYXRlOiBlbmQudG9EYXRlKCksXG4gICAgICB2YWxpZDogdmFsaWQsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXJyZW50RnV6enlEYXRlKCk6IFNreUZ1enp5RGF0ZSB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBtb21lbnQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXk6IGN1cnJlbnREYXRlLmRhdGUoKSxcbiAgICAgIG1vbnRoOiBjdXJyZW50RGF0ZS5tb250aCgpICsgMSwgLy8gbW9udGgoKSBpcyAwLWluZGV4ZWQuXG4gICAgICB5ZWFyOiBjdXJyZW50RGF0ZS55ZWFyKCksXG4gICAgfTtcbiAgfVxuXG4gICNnZXRNb3N0UmVjZW50TGVhcFllYXIoKTogbnVtYmVyIHtcbiAgICBsZXQgbGVhcFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbiAgICB3aGlsZSAoIXRoaXMuI2lzTGVhcFllYXIobGVhcFllYXIpKSB7XG4gICAgICBsZWFwWWVhciAtPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFwWWVhcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBzZXBhcmF0b3IgZm91bmQgaW4gdGhlIHByb3ZpZGVkIGRhdGUgZm9ybWF0IHN0cmluZy5cbiAgICogQWNjZXB0ZWQgc2VwYXJhdG9yczogWycvJywgJy4nLCAnLScsICcgJ10uXG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0XG4gICAqL1xuICAjZ2V0RGF0ZVNlcGFyYXRvcihkYXRlRm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXR1cm5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNlcGFyYXRvcnMgPSBbJy8nLCAnLicsICctJywgJyAnXTtcblxuICAgIHNlcGFyYXRvcnMuZm9yRWFjaCgoc2VwYXJhdG9yKSA9PiB7XG4gICAgICBpZiAoIXJldHVyblZhbHVlICYmIGRhdGVGb3JtYXQuaW5kZXhPZihzZXBhcmF0b3IpID4gMCkge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IHNlcGFyYXRvcjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gICNnZXQ0RGlnaXRZZWFyRnJvbURhdGVTdHJpbmcoZGF0ZTogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgeWVhcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuI2dldERhdGVTZXBhcmF0b3IoZGF0ZSk7XG5cbiAgICBpZiAoc2VwYXJhdG9yKSB7XG4gICAgICAvLyBGaW5kIHRoZSBudW1iZXIgdmFsdWUgaW4gdGhlIHN0cmluZyB0aGF0IGlzIDQgZGlnaXRzIGxvbmcuXG4gICAgICBkYXRlLnNwbGl0KHNlcGFyYXRvcikuZm9yRWFjaCgoZGF0ZUNvbXBvbmVudCkgPT4ge1xuICAgICAgICBpZiAoIXllYXIgJiYgcGFyc2VJbnQoZGF0ZUNvbXBvbmVudCwgMTApLnRvU3RyaW5nKCkubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgeWVhciA9IGRhdGVDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh5ZWFyICYmICFpc05hTihOdW1iZXIoeWVhcikpKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQoeWVhciwgMTApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgI2lzTGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICB9XG5cbiAgI2dldE1vbnRoTnVtYmVyKG1vbnRoOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXR1cm5WYWx1ZTogbnVtYmVyO1xuICAgIGNvbnN0IG1vbnRoQXNOdW1iZXIgPSBwYXJzZUludChtb250aCwgMTApO1xuXG4gICAgLy8gSWYgdGhlIG1vbnRoIGNvbXBvbmVudCBpcyBhIHN0cmluZyAoXCJKYW51YXJ5XCIpLCB3ZSBjaGVjayB0byBzZWUgaWYgaXQgaXMgYSB2YWxpZCBtb250aFxuICAgIGlmIChpc05hTihtb250aEFzTnVtYmVyKSkge1xuICAgICAgaWYgKCFtb21lbnQobW9udGgsICdNTU1NJykuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVyblZhbHVlID0gcGFyc2VJbnQobW9tZW50KCkubW9udGgobW9udGgpLmZvcm1hdCgnTScpLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblZhbHVlID0gbW9udGhBc051bWJlcjtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbW9udGggaXMgYmV0d2VlbiAxIGFuZCAxMlxuICAgIGlmICghKDEgPD0gcmV0dXJuVmFsdWUgJiYgcmV0dXJuVmFsdWUgPD0gMTIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgI2dldERlZmF1bHRZZWFyKGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlKTogbnVtYmVyIHtcbiAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHJldHVybiBhIGxlYXAgeWVhciBvciB0aGUgY3VycmVudCB5ZWFyLlxuICAgIGlmIChmdXp6eURhdGUubW9udGggPT09IDIgJiYgZnV6enlEYXRlLmRheSA9PT0gMjkpIHtcbiAgICAgIHJldHVybiB0aGlzLiNnZXRNb3N0UmVjZW50TGVhcFllYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gIH1cblxuICAjZ2V0RGF0ZUNvbXBvbmVudHMoZGF0ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuI2dldERhdGVTZXBhcmF0b3IoZGF0ZSk7XG4gICAgaWYgKHNlcGFyYXRvcikge1xuICAgICAgcmV0dXJuIGRhdGUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtkYXRlXTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBvcmRlciBvZiB5ZWFyLCBtb250aCwgYW5kIGRheSBmcm9tIHRoZSBwcm92aWRlZCBkYXRlIGZvcm1hdC5cbiAgI2dldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQ6IHN0cmluZyk6IFNreURhdGVJbmRleGVzIHtcbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVGb3JtYXQuaW5kZXhPZigneScpLFxuICAgICAgbW9udGhJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdtJyksXG4gICAgICBkYXlJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdkJyksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIGVhY2ggb2YgdGhlIGRhdGUgY29tcG9uZW50cyBpbiB0aGUgcHJvdmlkZWQgc3RyaW5nIChtb250aCwgZGF5LCB5ZWFyKS5cbiAgI2dldERhdGVWYWx1ZUluZGV4ZXMoZGF0ZTogc3RyaW5nLCBkYXRlRm9ybWF0OiBzdHJpbmcpOiBTa3lEYXRlSW5kZXhlcyB7XG4gICAgY29uc3QgZGF0ZUZvcm1hdEluZGV4ZXMgPSB0aGlzLiNnZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0KTtcbiAgICBjb25zdCBkYXRlQ29tcG9uZW50SW5kZXhlcyA9IFtdO1xuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXggPiAtMSkge1xuICAgICAgZGF0ZUNvbXBvbmVudEluZGV4ZXMucHVzaChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMuZGF5SW5kZXgpO1xuICAgIH1cblxuICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4KSxcbiAgICAgIG1vbnRoSW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCksXG4gICAgICBkYXlJbmRleDogZGF0ZUNvbXBvbmVudEluZGV4ZXMuaW5kZXhPZihkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIFNreUZ1enp5RGF0ZSBvYmplY3QuIFZhbGlkIGZ1enp5IGRhdGVzIGFyZSBhcyBmb2xsb3dzOlxuICAgKiBtb250aCwgZGF5LCB5ZWFyXG4gICAqIG1vbnRoLCB5ZWFyXG4gICAqIG1vbnRoLCBkYXlcbiAgICogeWVhciBvbmx5XG4gICAqL1xuICAjaXNGdXp6eURhdGVWYWxpZChmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghZnV6enlEYXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgbm9uZSBvZiB0aGUgZGF0ZXMgcGFydCBhcmUgc3BlY2lmaWVkLCByZXR1cm4gZmFsc2UuXG4gICAgaWYgKCFmdXp6eURhdGUuZGF5ICYmICFmdXp6eURhdGUubW9udGggJiYgIWZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBtb250aCBpcyBzcGVjaWZpZWQsIHJldHVybiBmYWxzZS5cbiAgICBpZiAoIWZ1enp5RGF0ZS5kYXkgJiYgZnV6enlEYXRlLm1vbnRoICYmICFmdXp6eURhdGUueWVhcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgZGF5IGlzIHNwZWNpZmllZCwgcmV0dXJuIGZhbHNlLlxuICAgIGlmIChmdXp6eURhdGUuZGF5ICYmICFmdXp6eURhdGUubW9udGggJiYgIWZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -1,130 +0,0 @@
1
- /* istanbul ignore file */
2
- /**
3
- * NOTICE: DO NOT MODIFY THIS FILE!
4
- * The contents of this file were automatically generated by
5
- * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-datetime' schematic.
6
- * To update this file, simply rerun the command.
7
- */
8
- import { NgModule } from '@angular/core';
9
- import { SkyI18nModule, SkyLibResourcesService, } from '@skyux/i18n';
10
- import * as i0 from "@angular/core";
11
- const RESOURCES = {
12
- 'EN-AU': {
13
- skyux_date_range_picker_format_label_last_fiscal_year: {
14
- message: 'Last financial year',
15
- },
16
- skyux_date_range_picker_format_label_this_fiscal_year: {
17
- message: 'This financial year',
18
- },
19
- skyux_date_range_picker_format_label_next_fiscal_year: {
20
- message: 'Next financial year',
21
- },
22
- },
23
- 'EN-GB': {
24
- skyux_date_range_picker_format_label_last_fiscal_year: {
25
- message: 'Last financial year',
26
- },
27
- skyux_date_range_picker_format_label_this_fiscal_year: {
28
- message: 'This financial year',
29
- },
30
- skyux_date_range_picker_format_label_next_fiscal_year: {
31
- message: 'Next financial year',
32
- },
33
- },
34
- 'EN-NZ': {
35
- skyux_date_range_picker_format_label_last_fiscal_year: {
36
- message: 'Last financial year',
37
- },
38
- skyux_date_range_picker_format_label_this_fiscal_year: {
39
- message: 'This financial year',
40
- },
41
- skyux_date_range_picker_format_label_next_fiscal_year: {
42
- message: 'Next financial year',
43
- },
44
- },
45
- 'EN-US': {
46
- skyux_datepicker_format_hint_text: { message: 'Use the format {0}.' },
47
- skyux_datepicker_trigger_button_label: { message: 'Select date' },
48
- skyux_datepicker_trigger_button_label_context: {
49
- message: 'Open calendar for {0}',
50
- },
51
- skyux_datepicker_move_calendar_previous_day: { message: 'Previous month' },
52
- skyux_datepicker_move_calendar_next_day: { message: 'Next month' },
53
- skyux_datepicker_move_calendar_previous_month: { message: 'Previous year' },
54
- skyux_datepicker_move_calendar_next_month: { message: 'Next year' },
55
- skyux_datepicker_move_calendar_previous_year: { message: 'Previous page' },
56
- skyux_datepicker_move_calendar_next_year: { message: 'Next page' },
57
- skyux_timepicker_button_label: { message: 'Choose time' },
58
- skyux_timepicker_button_label_context: {
59
- message: 'Open time picker for {0}',
60
- },
61
- skyux_timepicker_close: { message: 'Done' },
62
- skyux_date_range_picker_default_label: { message: 'Select a date range' },
63
- skyux_date_range_picker_end_date_before_start_date_error_label_text: {
64
- message: 'Change the date range so that the end date is before the start date.',
65
- },
66
- skyux_date_range_picker_format_label_specific_range: {
67
- message: 'Specific range',
68
- },
69
- skyux_date_range_picker_format_label_before: { message: 'Before' },
70
- skyux_date_range_picker_format_label_after: { message: 'After' },
71
- skyux_date_range_picker_format_label_any_time: { message: 'At any time' },
72
- skyux_date_range_picker_format_label_yesterday: { message: 'Yesterday' },
73
- skyux_date_range_picker_format_label_today: { message: 'Today' },
74
- skyux_date_range_picker_format_label_tomorrow: { message: 'Tomorrow' },
75
- skyux_date_range_picker_format_label_last_week: { message: 'Last week' },
76
- skyux_date_range_picker_format_label_this_week: { message: 'This week' },
77
- skyux_date_range_picker_format_label_next_week: { message: 'Next week' },
78
- skyux_date_range_picker_format_label_last_month: { message: 'Last month' },
79
- skyux_date_range_picker_format_label_this_month: { message: 'This month' },
80
- skyux_date_range_picker_format_label_next_month: { message: 'Next month' },
81
- skyux_date_range_picker_format_label_last_quarter: {
82
- message: 'Last quarter',
83
- },
84
- skyux_date_range_picker_format_label_this_quarter: {
85
- message: 'This quarter',
86
- },
87
- skyux_date_range_picker_format_label_next_quarter: {
88
- message: 'Next quarter',
89
- },
90
- skyux_date_range_picker_format_label_last_calendar_year: {
91
- message: 'Last calendar year',
92
- },
93
- skyux_date_range_picker_format_label_this_calendar_year: {
94
- message: 'This calendar year',
95
- },
96
- skyux_date_range_picker_format_label_next_calendar_year: {
97
- message: 'Next calendar year',
98
- },
99
- skyux_date_range_picker_format_label_last_fiscal_year: {
100
- message: 'Last fiscal year',
101
- },
102
- skyux_date_range_picker_format_label_this_fiscal_year: {
103
- message: 'This fiscal year',
104
- },
105
- skyux_date_range_picker_format_label_next_fiscal_year: {
106
- message: 'Next fiscal year',
107
- },
108
- skyux_date_range_picker_start_date_label: { message: 'From date' },
109
- skyux_date_range_picker_end_date_label: { message: 'To date' },
110
- skyux_date_range_picker_before_date_label: { message: 'Before date' },
111
- skyux_date_range_picker_after_date_label: { message: 'After date' },
112
- skyux_date_range_picker_default_aria_label: { message: '{0} for {1}' },
113
- },
114
- };
115
- SkyLibResourcesService.addResources(RESOURCES);
116
- /**
117
- * Import into any component library module that needs to use resource strings.
118
- */
119
- export class SkyDatetimeResourcesModule {
120
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyDatetimeResourcesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
121
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SkyDatetimeResourcesModule, exports: [SkyI18nModule] }); }
122
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyDatetimeResourcesModule, imports: [SkyI18nModule] }); }
123
- }
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SkyDatetimeResourcesModule, decorators: [{
125
- type: NgModule,
126
- args: [{
127
- exports: [SkyI18nModule],
128
- }]
129
- }] });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5LWRhdGV0aW1lLXJlc291cmNlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL3NoYXJlZC9za3ktZGF0ZXRpbWUtcmVzb3VyY2VzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxhQUFhLEVBRWIsc0JBQXNCLEdBQ3ZCLE1BQU0sYUFBYSxDQUFDOztBQUVyQixNQUFNLFNBQVMsR0FBb0M7SUFDakQsT0FBTyxFQUFFO1FBQ1AscURBQXFELEVBQUU7WUFDckQsT0FBTyxFQUFFLHFCQUFxQjtTQUMvQjtRQUNELHFEQUFxRCxFQUFFO1lBQ3JELE9BQU8sRUFBRSxxQkFBcUI7U0FDL0I7UUFDRCxxREFBcUQsRUFBRTtZQUNyRCxPQUFPLEVBQUUscUJBQXFCO1NBQy9CO0tBQ0Y7SUFDRCxPQUFPLEVBQUU7UUFDUCxxREFBcUQsRUFBRTtZQUNyRCxPQUFPLEVBQUUscUJBQXFCO1NBQy9CO1FBQ0QscURBQXFELEVBQUU7WUFDckQsT0FBTyxFQUFFLHFCQUFxQjtTQUMvQjtRQUNELHFEQUFxRCxFQUFFO1lBQ3JELE9BQU8sRUFBRSxxQkFBcUI7U0FDL0I7S0FDRjtJQUNELE9BQU8sRUFBRTtRQUNQLHFEQUFxRCxFQUFFO1lBQ3JELE9BQU8sRUFBRSxxQkFBcUI7U0FDL0I7UUFDRCxxREFBcUQsRUFBRTtZQUNyRCxPQUFPLEVBQUUscUJBQXFCO1NBQy9CO1FBQ0QscURBQXFELEVBQUU7WUFDckQsT0FBTyxFQUFFLHFCQUFxQjtTQUMvQjtLQUNGO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsaUNBQWlDLEVBQUUsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUU7UUFDckUscUNB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LENBQUM7QUFFL0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8sMEJBQTBCOytHQUExQiwwQkFBMEI7Z0hBQTFCLDBCQUEwQixZQUYzQixhQUFhO2dIQUVaLDBCQUEwQixZQUYzQixhQUFhOzs0RkFFWiwwQkFBMEI7a0JBSHRDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO2lCQUN6QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIE5PVElDRTogRE8gTk9UIE1PRElGWSBUSElTIEZJTEUhXG4gKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIHdlcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnlcbiAqIHRoZSAnbmcgZ2VuZXJhdGUgQHNreXV4L2kxOG46bGliLXJlc291cmNlcy1tb2R1bGUgbGliL21vZHVsZXMvc2hhcmVkL3NreS1kYXRldGltZScgc2NoZW1hdGljLlxuICogVG8gdXBkYXRlIHRoaXMgZmlsZSwgc2ltcGx5IHJlcnVuIHRoZSBjb21tYW5kLlxuICovXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2t5STE4bk1vZHVsZSxcbiAgU2t5TGliUmVzb3VyY2VzLFxuICBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLFxufSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmNvbnN0IFJFU09VUkNFUzogUmVjb3JkPHN0cmluZywgU2t5TGliUmVzb3VyY2VzPiA9IHtcbiAgJ0VOLUFVJzoge1xuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9sYXN0X2Zpc2NhbF95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnTGFzdCBmaW5hbmNpYWwgeWVhcicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfdGhpc19maXNjYWxfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ1RoaXMgZmluYW5jaWFsIHllYXInLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX25leHRfZmlzY2FsX3llYXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdOZXh0IGZpbmFuY2lhbCB5ZWFyJyxcbiAgICB9LFxuICB9LFxuICAnRU4tR0InOiB7XG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX2xhc3RfZmlzY2FsX3llYXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdMYXN0IGZpbmFuY2lhbCB5ZWFyJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90aGlzX2Zpc2NhbF95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnVGhpcyBmaW5hbmNpYWwgeWVhcicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbmV4dF9maXNjYWxfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ05leHQgZmluYW5jaWFsIHllYXInLFxuICAgIH0sXG4gIH0sXG4gICdFTi1OWic6IHtcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9maXNjYWxfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ0xhc3QgZmluYW5jaWFsIHllYXInLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3RoaXNfZmlzY2FsX3llYXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdUaGlzIGZpbmFuY2lhbCB5ZWFyJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9uZXh0X2Zpc2NhbF95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnTmV4dCBmaW5hbmNpYWwgeWVhcicsXG4gICAgfSxcbiAgfSxcbiAgJ0VOLVVTJzoge1xuICAgIHNreXV4X2RhdGVwaWNrZXJfZm9ybWF0X2hpbnRfdGV4dDogeyBtZXNzYWdlOiAnVXNlIHRoZSBmb3JtYXQgezB9LicgfSxcbiAgICBza3l1eF9kYXRlcGlja2VyX3RyaWdnZXJfYnV0dG9uX2xhYmVsOiB7IG1lc3NhZ2U6ICdTZWxlY3QgZGF0ZScgfSxcbiAgICBza3l1eF9kYXRlcGlja2VyX3RyaWdnZXJfYnV0dG9uX2xhYmVsX2NvbnRleHQ6IHtcbiAgICAgIG1lc3NhZ2U6ICdPcGVuIGNhbGVuZGFyIGZvciB7MH0nLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZXBpY2tlcl9tb3ZlX2NhbGVuZGFyX3ByZXZpb3VzX2RheTogeyBtZXNzYWdlOiAnUHJldmlvdXMgbW9udGgnIH0sXG4gICAgc2t5dXhfZGF0ZXBpY2tlcl9tb3ZlX2NhbGVuZGFyX25leHRfZGF5OiB7IG1lc3NhZ2U6ICdOZXh0IG1vbnRoJyB9LFxuICAgIHNreXV4X2RhdGVwaWNrZXJfbW92ZV9jYWxlbmRhcl9wcmV2aW91c19tb250aDogeyBtZXNzYWdlOiAnUHJldmlvdXMgeWVhcicgfSxcbiAgICBza3l1eF9kYXRlcGlja2VyX21vdmVfY2FsZW5kYXJfbmV4dF9tb250aDogeyBtZXNzYWdlOiAnTmV4dCB5ZWFyJyB9LFxuICAgIHNreXV4X2RhdGVwaWNrZXJfbW92ZV9jYWxlbmRhcl9wcmV2aW91c195ZWFyOiB7IG1lc3NhZ2U6ICdQcmV2aW91cyBwYWdlJyB9LFxuICAgIHNreXV4X2RhdGVwaWNrZXJfbW92ZV9jYWxlbmRhcl9uZXh0X3llYXI6IHsgbWVzc2FnZTogJ05leHQgcGFnZScgfSxcbiAgICBza3l1eF90aW1lcGlja2VyX2J1dHRvbl9sYWJlbDogeyBtZXNzYWdlOiAnQ2hvb3NlIHRpbWUnIH0sXG4gICAgc2t5dXhfdGltZXBpY2tlcl9idXR0b25fbGFiZWxfY29udGV4dDoge1xuICAgICAgbWVzc2FnZTogJ09wZW4gdGltZSBwaWNrZXIgZm9yIHswfScsXG4gICAgfSxcbiAgICBza3l1eF90aW1lcGlja2VyX2Nsb3NlOiB7IG1lc3NhZ2U6ICdEb25lJyB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2RlZmF1bHRfbGFiZWw6IHsgbWVzc2FnZTogJ1NlbGVjdCBhIGRhdGUgcmFuZ2UnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZW5kX2RhdGVfYmVmb3JlX3N0YXJ0X2RhdGVfZXJyb3JfbGFiZWxfdGV4dDoge1xuICAgICAgbWVzc2FnZTpcbiAgICAgICAgJ0NoYW5nZSB0aGUgZGF0ZSByYW5nZSBzbyB0aGF0IHRoZSBlbmQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IGRhdGUuJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9zcGVjaWZpY19yYW5nZToge1xuICAgICAgbWVzc2FnZTogJ1NwZWNpZmljIHJhbmdlJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9iZWZvcmU6IHsgbWVzc2FnZTogJ0JlZm9yZScgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfYWZ0ZXI6IHsgbWVzc2FnZTogJ0FmdGVyJyB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9hbnlfdGltZTogeyBtZXNzYWdlOiAnQXQgYW55IHRpbWUnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3llc3RlcmRheTogeyBtZXNzYWdlOiAnWWVzdGVyZGF5JyB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90b2RheTogeyBtZXNzYWdlOiAnVG9kYXknIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3RvbW9ycm93OiB7IG1lc3NhZ2U6ICdUb21vcnJvdycgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF93ZWVrOiB7IG1lc3NhZ2U6ICdMYXN0IHdlZWsnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3RoaXNfd2VlazogeyBtZXNzYWdlOiAnVGhpcyB3ZWVrJyB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9uZXh0X3dlZWs6IHsgbWVzc2FnZTogJ05leHQgd2VlaycgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9tb250aDogeyBtZXNzYWdlOiAnTGFzdCBtb250aCcgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfdGhpc19tb250aDogeyBtZXNzYWdlOiAnVGhpcyBtb250aCcgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbmV4dF9tb250aDogeyBtZXNzYWdlOiAnTmV4dCBtb250aCcgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9xdWFydGVyOiB7XG4gICAgICBtZXNzYWdlOiAnTGFzdCBxdWFydGVyJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90aGlzX3F1YXJ0ZXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdUaGlzIHF1YXJ0ZXInLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX25leHRfcXVhcnRlcjoge1xuICAgICAgbWVzc2FnZTogJ05leHQgcXVhcnRlcicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9jYWxlbmRhcl95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnTGFzdCBjYWxlbmRhciB5ZWFyJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF90aGlzX2NhbGVuZGFyX3llYXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdUaGlzIGNhbGVuZGFyIHllYXInLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX25leHRfY2FsZW5kYXJfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ05leHQgY2FsZW5kYXIgeWVhcicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9mb3JtYXRfbGFiZWxfbGFzdF9maXNjYWxfeWVhcjoge1xuICAgICAgbWVzc2FnZTogJ0xhc3QgZmlzY2FsIHllYXInLFxuICAgIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZm9ybWF0X2xhYmVsX3RoaXNfZmlzY2FsX3llYXI6IHtcbiAgICAgIG1lc3NhZ2U6ICdUaGlzIGZpc2NhbCB5ZWFyJyxcbiAgICB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2Zvcm1hdF9sYWJlbF9uZXh0X2Zpc2NhbF95ZWFyOiB7XG4gICAgICBtZXNzYWdlOiAnTmV4dCBmaXNjYWwgeWVhcicsXG4gICAgfSxcbiAgICBza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9zdGFydF9kYXRlX2xhYmVsOiB7IG1lc3NhZ2U6ICdGcm9tIGRhdGUnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZW5kX2RhdGVfbGFiZWw6IHsgbWVzc2FnZTogJ1RvIGRhdGUnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfYmVmb3JlX2RhdGVfbGFiZWw6IHsgbWVzc2FnZTogJ0JlZm9yZSBkYXRlJyB9LFxuICAgIHNreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2FmdGVyX2RhdGVfbGFiZWw6IHsgbWVzc2FnZTogJ0FmdGVyIGRhdGUnIH0sXG4gICAgc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZGVmYXVsdF9hcmlhX2xhYmVsOiB7IG1lc3NhZ2U6ICd7MH0gZm9yIHsxfScgfSxcbiAgfSxcbn07XG5cblNreUxpYlJlc291cmNlc1NlcnZpY2UuYWRkUmVzb3VyY2VzKFJFU09VUkNFUyk7XG5cbi8qKlxuICogSW1wb3J0IGludG8gYW55IGNvbXBvbmVudCBsaWJyYXJ5IG1vZHVsZSB0aGF0IG5lZWRzIHRvIHVzZSByZXNvdXJjZSBzdHJpbmdzLlxuICovXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbU2t5STE4bk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNreURhdGV0aW1lUmVzb3VyY2VzTW9kdWxlIHt9XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci10aW1lLWZvcm1hdC10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy90aW1lcGlja2VyL3RpbWVwaWNrZXItdGltZS1mb3JtYXQtdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgU2t5VGltZXBpY2tlclRpbWVGb3JtYXRUeXBlID0gJ2hoJyB8ICdISCc7XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci10aW1lLW91dHB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS9zcmMvbGliL21vZHVsZXMvdGltZXBpY2tlci90aW1lcGlja2VyLXRpbWUtb3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNreVRpbWVwaWNrZXJUaW1lT3V0cHV0IHtcbiAgLyoqXG4gICAqIFRoZSBob3VyLlxuICAgKi9cbiAgaG91cjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWludXRlLlxuICAgKi9cbiAgbWludXRlOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXJpZGlhbiAoYEFNYCBvciBgUE1gKS5cbiAgICovXG4gIG1lcmlkaWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWUgem9uZS5cbiAgICovXG4gIHRpbWV6b25lOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIGluIFtpc284NjAxIGZvcm1hdF0oaHR0cHM6Ly93d3cuaXNvLm9yZy9pc28tODYwMS1kYXRlLWFuZC10aW1lLWZvcm1hdC5odG1sKS5cbiAgICovXG4gIGlzbzg2MDE6IERhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIGluIHRoZSBjdXJyZW50IGxvY2FsIHRpbWUgZm9ybWF0LlxuICAgKi9cbiAgbG9jYWw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWUgZm9ybWF0IHN0cmluZy5cbiAgICovXG4gIGN1c3RvbUZvcm1hdDogc3RyaW5nO1xufVxuIl19